| 'use strict' | 
|   | 
| const { GIT_ERROR, TASK_ERROR } = require('./messages') | 
| const { | 
|   ApplyEmptyCommitError, | 
|   TaskError, | 
|   RestoreOriginalStateError, | 
|   GitError, | 
|   RestoreUnstagedChangesError, | 
| } = require('./symbols') | 
|   | 
| const getInitialState = ({ quiet = false } = {}) => ({ | 
|   hasPartiallyStagedFiles: null, | 
|   shouldBackup: null, | 
|   errors: new Set([]), | 
|   output: [], | 
|   quiet, | 
| }) | 
|   | 
| const hasPartiallyStagedFiles = (ctx) => ctx.hasPartiallyStagedFiles | 
|   | 
| const applyModificationsSkipped = (ctx) => { | 
|   // Always apply back unstaged modifications when skipping backup | 
|   if (!ctx.shouldBackup) return false | 
|   // Should be skipped in case of git errors | 
|   if (ctx.errors.has(GitError)) { | 
|     return GIT_ERROR | 
|   } | 
|   // Should be skipped when tasks fail | 
|   if (ctx.errors.has(TaskError)) { | 
|     return TASK_ERROR | 
|   } | 
| } | 
|   | 
| const restoreUnstagedChangesSkipped = (ctx) => { | 
|   // Should be skipped in case of git errors | 
|   if (ctx.errors.has(GitError)) { | 
|     return GIT_ERROR | 
|   } | 
|   // Should be skipped when tasks fail | 
|   if (ctx.errors.has(TaskError)) { | 
|     return TASK_ERROR | 
|   } | 
| } | 
|   | 
| const restoreOriginalStateEnabled = (ctx) => | 
|   ctx.shouldBackup && | 
|   (ctx.errors.has(TaskError) || | 
|     ctx.errors.has(ApplyEmptyCommitError) || | 
|     ctx.errors.has(RestoreUnstagedChangesError)) | 
|   | 
| const restoreOriginalStateSkipped = (ctx) => { | 
|   // Should be skipped in case of unknown git errors | 
|   if ( | 
|     ctx.errors.has(GitError) && | 
|     !ctx.errors.has(ApplyEmptyCommitError) && | 
|     !ctx.errors.has(RestoreUnstagedChangesError) | 
|   ) { | 
|     return GIT_ERROR | 
|   } | 
| } | 
|   | 
| const cleanupEnabled = (ctx) => ctx.shouldBackup | 
|   | 
| const cleanupSkipped = (ctx) => { | 
|   // Should be skipped in case of unknown git errors | 
|   if ( | 
|     ctx.errors.has(GitError) && | 
|     !ctx.errors.has(ApplyEmptyCommitError) && | 
|     !ctx.errors.has(RestoreUnstagedChangesError) | 
|   ) { | 
|     return GIT_ERROR | 
|   } | 
|   // Should be skipped when reverting to original state fails | 
|   if (ctx.errors.has(RestoreOriginalStateError)) { | 
|     return GIT_ERROR | 
|   } | 
| } | 
|   | 
| module.exports = { | 
|   getInitialState, | 
|   hasPartiallyStagedFiles, | 
|   applyModificationsSkipped, | 
|   restoreUnstagedChangesSkipped, | 
|   restoreOriginalStateEnabled, | 
|   restoreOriginalStateSkipped, | 
|   cleanupEnabled, | 
|   cleanupSkipped, | 
| } |