{"version":3,"file":"index.mjs","sources":["../src/lib/errors/git-error.ts","../src/lib/errors/git-construct-error.ts","../src/lib/errors/git-plugin-error.ts","../src/lib/errors/git-response-error.ts","../src/lib/errors/task-configuration-error.ts","../src/lib/utils/util.ts","../src/lib/utils/argument-filters.ts","../src/lib/utils/exit-codes.ts","../src/lib/utils/git-output-streams.ts","../src/lib/utils/line-parser.ts","../src/lib/utils/simple-git-options.ts","../src/lib/utils/task-options.ts","../src/lib/utils/task-parser.ts","../src/lib/tasks/check-is-repo.ts","../src/lib/parsers/parse-clean.ts","../src/lib/tasks/task.ts","../src/lib/tasks/clean.ts","../src/lib/responses/ConfigList.ts","../src/lib/tasks/config.ts","../src/lib/tasks/diff-name-status.ts","../src/lib/tasks/grep.ts","../src/lib/tasks/reset.ts","../src/lib/git-logger.ts","../src/lib/runners/tasks-pending-queue.ts","../src/lib/runners/git-executor-chain.ts","../src/lib/runners/git-executor.ts","../src/lib/task-callback.ts","../src/lib/tasks/change-working-directory.ts","../src/lib/tasks/checkout.ts","../src/lib/tasks/clone.ts","../src/lib/parsers/parse-commit.ts","../src/lib/tasks/commit.ts","../src/lib/tasks/count-objects.ts","../src/lib/tasks/first-commit.ts","../src/lib/tasks/hash-object.ts","../src/lib/responses/InitSummary.ts","../src/lib/tasks/init.ts","../src/lib/tasks/interpret-trailers.ts","../src/lib/args/log-format.ts","../src/lib/responses/DiffSummary.ts","../src/lib/parsers/parse-diff-summary.ts","../src/lib/parsers/parse-list-log-summary.ts","../src/lib/tasks/diff.ts","../src/lib/tasks/log.ts","../src/lib/responses/MergeSummary.ts","../src/lib/responses/PullSummary.ts","../src/lib/parsers/parse-remote-objects.ts","../src/lib/parsers/parse-remote-messages.ts","../src/lib/parsers/parse-pull.ts","../src/lib/parsers/parse-merge.ts","../src/lib/tasks/merge.ts","../src/lib/parsers/parse-push.ts","../src/lib/tasks/push.ts","../src/lib/tasks/show.ts","../src/lib/responses/FileStatusSummary.ts","../src/lib/responses/StatusSummary.ts","../src/lib/tasks/status.ts","../src/lib/tasks/version.ts","../src/lib/simple-git-api.ts","../src/lib/runners/scheduler.ts","../src/lib/tasks/apply-patch.ts","../src/lib/responses/BranchSummary.ts","../src/lib/parsers/parse-branch.ts","../src/lib/responses/BranchDeleteSummary.ts","../src/lib/parsers/parse-branch-delete.ts","../src/lib/tasks/branch.ts","../src/lib/tasks/check-ignore.ts","../src/lib/parsers/parse-fetch.ts","../src/lib/tasks/fetch.ts","../src/lib/parsers/parse-move.ts","../src/lib/tasks/move.ts","../src/lib/tasks/pull.ts","../src/lib/responses/GetRemoteSummary.ts","../src/lib/tasks/remote.ts","../src/lib/tasks/stash-list.ts","../src/lib/tasks/sub-module.ts","../src/lib/responses/TagList.ts","../src/lib/tasks/tag.ts","../src/git.mjs","../src/lib/plugins/abort-plugin.ts","../src/lib/plugins/allow-environment.plugin.ts","../src/lib/plugins/block-unsafe-operations-plugin.ts","../src/lib/plugins/command-config-prefixing-plugin.ts","../src/lib/plugins/completion-detection.plugin.ts","../src/lib/plugins/custom-binary.plugin.ts","../src/lib/errors/git-configuration-error.ts","../src/lib/plugins/error-detection.plugin.ts","../src/lib/plugins/input.plugin.ts","../src/lib/plugins/plugin-store.ts","../src/lib/plugins/progress-monitor-plugin.ts","../src/lib/plugins/spawn-options-plugin.ts","../src/lib/plugins/suffix-paths.plugin.ts","../src/lib/plugins/timeout-plugin.ts","../src/lib/git-factory.ts"],"sourcesContent":["import type { SimpleGitTask } from '../types';\n\n/**\n * The `GitError` is thrown when the underlying `git` process throws a\n * fatal exception (eg an `ENOENT` exception when attempting to use a\n * non-writable directory as the root for your repo), and acts as the\n * base class for more specific errors thrown by the parsing of the\n * git response or errors in the configuration of the task about to\n * be run.\n *\n * When an exception is thrown, pending tasks in the same instance will\n * not be executed. The recommended way to run a series of tasks that\n * can independently fail without needing to prevent future tasks from\n * running is to catch them individually:\n *\n * ```typescript\n import { simpleGit, SimpleGit, GitError, PullResult } from 'simple-git';\n\n function catchTask (e: GitError) {\n   return e.\n }\n\n const git = simpleGit(repoWorkingDir);\n const pulled: PullResult | GitError = await git.pull().catch(catchTask);\n const pushed: string | GitError = await git.pushTags().catch(catchTask);\n ```\n */\nexport class GitError extends Error {\n   constructor(\n      public task?: SimpleGitTask<any>,\n      message?: string\n   ) {\n      super(message);\n      Object.setPrototypeOf(this, new.target.prototype);\n   }\n}\n","import type { SimpleGitOptions } from '../types';\nimport { GitError } from './git-error';\n\n/**\n * The `GitConstructError` is thrown when an error occurs in the constructor\n * of the `simple-git` instance itself. Most commonly as a result of using\n * a `baseDir` option that points to a folder that either does not exist,\n * or cannot be read by the user the node script is running as.\n *\n * Check the `.message` property for more detail including the properties\n * passed to the constructor.\n */\nexport class GitConstructError extends GitError {\n   constructor(\n      public readonly config: SimpleGitOptions,\n      message: string\n   ) {\n      super(undefined, message);\n   }\n}\n","import type { SimpleGitOptions, SimpleGitTask } from '../types';\nimport { GitError } from './git-error';\n\nexport class GitPluginError extends GitError {\n   constructor(\n      public task?: SimpleGitTask<any>,\n      public readonly plugin?: keyof SimpleGitOptions,\n      message?: string\n   ) {\n      super(task, message);\n      Object.setPrototypeOf(this, new.target.prototype);\n   }\n}\n","import { GitError } from './git-error';\n\n/**\n * The `GitResponseError` is the wrapper for a parsed response that is treated as\n * a fatal error, for example attempting a `merge` can leave the repo in a corrupted\n * state when there are conflicts so the task will reject rather than resolve.\n *\n * For example, catching the merge conflict exception:\n *\n * ```typescript\n import { simpleGit, SimpleGit, GitResponseError, MergeSummary } from 'simple-git';\n\n const git = simpleGit(repoRoot);\n const mergeOptions: string[] = ['--no-ff', 'other-branch'];\n const mergeSummary: MergeSummary = await git.merge(mergeOptions)\n      .catch((e: GitResponseError<MergeSummary>) => e.git);\n\n if (mergeSummary.failed) {\n   // deal with the error\n }\n ```\n */\nexport class GitResponseError<T = any> extends GitError {\n   constructor(\n      /**\n       * `.git` access the parsed response that is treated as being an error\n       */\n      public readonly git: T,\n      message?: string\n   ) {\n      super(undefined, message || String(git));\n   }\n}\n","import { GitError } from './git-error';\n\n/**\n * The `TaskConfigurationError` is thrown when a command was incorrectly\n * configured. An error of this kind means that no attempt was made to\n * run your command through the underlying `git` binary.\n *\n * Check the `.message` property for more detail on why your configuration\n * resulted in an error.\n */\nexport class TaskConfigurationError extends GitError {\n   constructor(message?: string) {\n      super(undefined, message);\n   }\n}\n","import { exists, FOLDER } from '@kwsites/file-exists';\n\nimport type { Maybe } from '../types';\nimport { filterHasLength } from './argument-filters';\n\ntype Callable = (...args: unknown[]) => unknown;\n\nexport const NULL = '\\0';\n\nexport const NOOP: Callable = () => {};\n\n/**\n * Returns either the source argument when it is a `Function`, or the default\n * `NOOP` function constant\n */\nexport function asFunction<T>(source: T | unknown): Callable {\n   if (typeof source !== 'function') {\n      return NOOP;\n   }\n   return source as Callable;\n}\n\n/**\n * Determines whether the supplied argument is both a function, and is not\n * the `NOOP` function.\n */\nexport function isUserFunction<T extends Function>(source: T | unknown): source is T {\n   return typeof source === 'function' && source !== NOOP;\n}\n\nexport function splitOn(input: string, char: string): [string, string] {\n   const index = input.indexOf(char);\n   if (index <= 0) {\n      return [input, ''];\n   }\n\n   return [input.substr(0, index), input.substr(index + 1)];\n}\n\nexport function first<T extends unknown[]>(input: T, offset?: number): Maybe<T[number]>;\nexport function first<T extends IArguments>(input: T, offset?: number): Maybe<unknown>;\nexport function first(input: unknown[] | IArguments, offset = 0): Maybe<unknown> {\n   return isArrayLike(input) && input.length > offset ? input[offset] : undefined;\n}\n\nexport function last<T extends unknown[]>(input: T, offset?: number): Maybe<T[number]>;\nexport function last<T extends IArguments>(input: T, offset?: number): Maybe<unknown>;\nexport function last<T>(input: T, offset?: number): Maybe<unknown>;\nexport function last(input: unknown, offset = 0) {\n   if (isArrayLike(input) && input.length > offset) {\n      return input[input.length - 1 - offset];\n   }\n}\n\ntype ArrayLike<T> = T[] | IArguments | { [index: number]: T; length: number };\n\nfunction isArrayLike(input: unknown): input is ArrayLike<unknown> {\n   return filterHasLength(input);\n}\n\nexport function toLinesWithContent(input = '', trimmed = true, separator = '\\n'): string[] {\n   return input.split(separator).reduce((output, line) => {\n      const lineContent = trimmed ? line.trim() : line;\n      if (lineContent) {\n         output.push(lineContent);\n      }\n      return output;\n   }, [] as string[]);\n}\n\ntype LineWithContentCallback<T = void> = (line: string) => T;\n\nexport function forEachLineWithContent<T>(\n   input: string,\n   callback: LineWithContentCallback<T>\n): T[] {\n   return toLinesWithContent(input, true).map((line) => callback(line));\n}\n\nexport function folderExists(path: string): boolean {\n   return exists(path, FOLDER);\n}\n\n/**\n * Adds `item` into the `target` `Array` or `Set` when it is not already present and returns the `item`.\n */\nexport function append<T>(target: T[] | Set<T>, item: T): typeof item {\n   if (Array.isArray(target)) {\n      if (!target.includes(item)) {\n         target.push(item);\n      }\n   } else {\n      target.add(item);\n   }\n   return item;\n}\n\n/**\n * Adds `item` into the `target` `Array` when it is not already present and returns the `target`.\n */\nexport function including<T>(target: T[], item: T): typeof target {\n   if (Array.isArray(target) && !target.includes(item)) {\n      target.push(item);\n   }\n\n   return target;\n}\n\nexport function remove<T>(target: Set<T> | T[], item: T): T {\n   if (Array.isArray(target)) {\n      const index = target.indexOf(item);\n      if (index >= 0) {\n         target.splice(index, 1);\n      }\n   } else {\n      target.delete(item);\n   }\n   return item;\n}\n\nexport const objectToString = Object.prototype.toString.call.bind(Object.prototype.toString) as (\n   input: unknown\n) => string;\n\nexport function asArray<T>(source: T | T[]): T[] {\n   return Array.isArray(source) ? source : [source];\n}\n\nexport function asCamelCase(str: string) {\n   return str.replace(/[\\s-]+(.)/g, (_all, chr) => {\n      return chr.toUpperCase();\n   });\n}\n\nexport function asStringArray<T>(source: T | T[]): string[] {\n   return asArray(source).map((item) => {\n      return item instanceof String ? (item as string) : String(item);\n   });\n}\n\nexport function asNumber(source: string | null | undefined, onNaN = 0) {\n   if (source == null) {\n      return onNaN;\n   }\n\n   const num = parseInt(source, 10);\n   return Number.isNaN(num) ? onNaN : num;\n}\n\nexport function prefixedArray<T>(input: T[], prefix: T): T[] {\n   const output: T[] = [];\n   for (let i = 0, max = input.length; i < max; i++) {\n      output.push(prefix, input[i]);\n   }\n   return output;\n}\n\nexport function bufferToString(input: Buffer | Buffer[]): string {\n   return (Array.isArray(input) ? Buffer.concat(input) : input).toString('utf-8');\n}\n\nexport function byteLength(input?: string | Buffer) {\n   if (!input) {\n      return 0;\n   }\n\n   return Buffer.isBuffer(input) ? input.length : Buffer.byteLength(input);\n}\n\n/**\n * Get a new object from a source object with only the listed properties.\n */\nexport function pick<T, K extends keyof T>(source: T, properties: readonly K[]) {\n   const out: Partial<Pick<T, K>> = {};\n\n   properties.forEach((key) => {\n      if (source[key] !== undefined) {\n         out[key] = source[key];\n      }\n   });\n\n   return out;\n}\n\nexport function delay(duration = 0): Promise<void> {\n   return new Promise((done) => setTimeout(done, duration));\n}\n\nexport function orVoid<T>(input: T | false) {\n   if (input === false) {\n      return undefined;\n   }\n   return input;\n}\n","import { isPathSpec } from '@simple-git/args-pathspec';\n\nimport type { Maybe, Options, Primitives } from '../types';\nimport { objectToString } from './util';\n\nexport type ArgumentFilterPredicate<T> = (input: T | unknown) => input is T;\n\nexport function filterType<T, K>(\n   input: K,\n   filter: ArgumentFilterPredicate<T>\n): K extends T ? T : undefined;\nexport function filterType<T, K>(input: K, filter: ArgumentFilterPredicate<T>, def: T): T;\nexport function filterType<T, K>(input: K, filter: ArgumentFilterPredicate<T>, def?: T): Maybe<T> {\n   if (filter(input)) {\n      return input;\n   }\n   return arguments.length > 2 ? def : undefined;\n}\n\nexport const filterArray: ArgumentFilterPredicate<Array<unknown>> = (\n   input\n): input is Array<unknown> => {\n   return Array.isArray(input);\n};\n\nexport function filterPrimitives(\n   input: unknown,\n   omit?: Array<'boolean' | 'string' | 'number'>\n): input is Primitives {\n   const type = isPathSpec(input) ? 'string' : typeof input;\n\n   return (\n      /number|string|boolean/.test(type) &&\n      (!omit || !omit.includes(type as 'boolean' | 'string' | 'number'))\n   );\n}\n\nexport const filterNumber: ArgumentFilterPredicate<number> = (input: unknown): input is number => {\n   return typeof input === 'number';\n};\n\nexport const filterString: ArgumentFilterPredicate<string> = (input: unknown): input is string => {\n   return typeof input === 'string' || isPathSpec(input);\n};\n\nexport const filterStringOrBuffer: ArgumentFilterPredicate<string | Buffer> = (\n   input: unknown\n): input is string | Buffer => {\n   return filterString(input) || Buffer.isBuffer(input);\n};\n\nexport const filterStringOrStringArray: ArgumentFilterPredicate<string | string[]> = (\n   input\n): input is string | string[] => {\n   return filterString(input) || (Array.isArray(input) && input.every(filterString));\n};\n\nexport function filterPlainObject<T extends Options>(input: T | unknown): input is T;\nexport function filterPlainObject<T extends Record<string, unknown>>(\n   input: T | unknown\n): input is T {\n   return !!input && objectToString(input) === '[object Object]';\n}\n\nexport function filterFunction(input: unknown): input is (...args: unknown[]) => unknown {\n   return typeof input === 'function';\n}\n\nexport const filterHasLength: ArgumentFilterPredicate<{ length: number }> = (\n   input\n): input is { length: number } => {\n   if (input == null || 'number|boolean|function'.includes(typeof input)) {\n      return false;\n   }\n\n   return typeof (input as { length?: number }).length === 'number';\n};\n","/**\n * Known process exit codes used by the task parsers to determine whether an error\n * was one they can automatically handle\n */\nexport enum ExitCodes {\n   SUCCESS,\n   ERROR,\n   NOT_FOUND = -2,\n   UNCLEAN = 128,\n}\n","import type { TaskResponseFormat } from '../types';\n\nexport class GitOutputStreams<T extends TaskResponseFormat = Buffer> {\n   constructor(\n      public readonly stdOut: T,\n      public readonly stdErr: T\n   ) {}\n\n   asStrings(): GitOutputStreams<string> {\n      return new GitOutputStreams(this.stdOut.toString('utf8'), this.stdErr.toString('utf8'));\n   }\n}\n","function useMatchesDefault() {\n   throw new Error(`LineParser:useMatches not implemented`);\n}\n\nexport class LineParser<T> {\n   protected matches: string[] = [];\n   protected useMatches: (target: T, match: string[]) => boolean | void = useMatchesDefault;\n\n   private _regExp: RegExp[];\n\n   constructor(\n      regExp: RegExp | RegExp[],\n      useMatches?: (target: T, match: string[]) => boolean | void\n   ) {\n      this._regExp = Array.isArray(regExp) ? regExp : [regExp];\n      if (useMatches) {\n         this.useMatches = useMatches;\n      }\n   }\n\n   parse = (line: (offset: number) => string | undefined, target: T): boolean => {\n      this.resetMatches();\n\n      if (!this._regExp.every((reg, index) => this.addMatch(reg, index, line(index)))) {\n         return false;\n      }\n\n      return this.useMatches(target, this.prepareMatches()) !== false;\n   };\n\n   protected resetMatches() {\n      this.matches.length = 0;\n   }\n\n   protected prepareMatches() {\n      return this.matches;\n   }\n\n   protected addMatch(reg: RegExp, index: number, line?: string) {\n      const matched = line && reg.exec(line);\n      if (matched) {\n         this.pushMatch(index, matched);\n      }\n\n      return !!matched;\n   }\n\n   protected pushMatch(_index: number, matched: string[]) {\n      this.matches.push(...matched.slice(1));\n   }\n}\n\nexport class RemoteLineParser<T> extends LineParser<T> {\n   protected addMatch(reg: RegExp, index: number, line?: string): boolean {\n      return /^remote:\\s/.test(String(line)) && super.addMatch(reg, index, line);\n   }\n\n   protected pushMatch(index: number, matched: string[]) {\n      if (index > 0 || matched.length > 1) {\n         super.pushMatch(index, matched);\n      }\n   }\n}\n","import type { SimpleGitOptions } from '../types';\n\nconst defaultOptions: Omit<SimpleGitOptions, 'baseDir'> = {\n   binary: 'git',\n   maxConcurrentProcesses: 5,\n   config: [],\n   trimmed: false,\n};\n\nexport function createInstanceConfig(\n   ...options: Array<Partial<SimpleGitOptions> | undefined>\n): SimpleGitOptions {\n   const baseDir = process.cwd();\n   const config: SimpleGitOptions = Object.assign(\n      { baseDir, ...defaultOptions },\n      ...options.filter((o) => typeof o === 'object' && o)\n   );\n\n   config.baseDir = config.baseDir || baseDir;\n   config.trimmed = config.trimmed === true;\n\n   return config;\n}\n","import { isPathSpec } from '@simple-git/args-pathspec';\n\nimport type { Maybe, Options } from '../types';\nimport {\n   filterArray,\n   filterFunction,\n   filterPlainObject,\n   filterPrimitives,\n   filterType,\n} from './argument-filters';\nimport { asFunction, asStringArray, isUserFunction, last } from './util';\n\nexport function appendTaskOptions<T extends Options = Options>(\n   options: Maybe<T>,\n   commands: string[] = []\n): string[] {\n   if (!filterPlainObject<Options>(options)) {\n      return commands;\n   }\n\n   return Object.keys(options).reduce((commands: string[], key: string) => {\n      const value = options[key];\n\n      if (isPathSpec(value)) {\n         commands.push(value);\n      } else if (filterPrimitives(value, ['boolean'])) {\n         commands.push(key + '=' + value);\n      } else if (Array.isArray(value)) {\n         for (const v of value) {\n            if (!filterPrimitives(v, ['string', 'number'])) {\n               commands.push(key + '=' + v);\n            }\n         }\n      } else {\n         commands.push(key);\n      }\n\n      return commands;\n   }, commands);\n}\n\nexport function getTrailingOptions(\n   args: IArguments,\n   initialPrimitive = 0,\n   objectOnly = false\n): string[] {\n   const command: string[] = [];\n\n   for (let i = 0, max = initialPrimitive < 0 ? args.length : initialPrimitive; i < max; i++) {\n      if ('string|number'.includes(typeof args[i])) {\n         command.push(String(args[i]));\n      }\n   }\n\n   appendTaskOptions(trailingOptionsArgument(args), command);\n   if (!objectOnly) {\n      command.push(...trailingArrayArgument(args));\n   }\n\n   return command;\n}\n\nfunction trailingArrayArgument(args: IArguments) {\n   const hasTrailingCallback = typeof last(args) === 'function';\n   return asStringArray(filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []));\n}\n\n/**\n * Given any number of arguments, returns the trailing options argument, ignoring a trailing function argument\n * if there is one. When not found, the return value is null.\n */\nexport function trailingOptionsArgument(args: IArguments): Maybe<Options> {\n   const hasTrailingCallback = filterFunction(last(args));\n   return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject);\n}\n\n/**\n * Returns either the source argument when it is a `Function`, or the default\n * `NOOP` function constant\n */\nexport function trailingFunctionArgument(\n   args: unknown[] | IArguments | unknown,\n   includeNoop = true\n): Maybe<(...args: unknown[]) => unknown> {\n   const callback = asFunction(last(args));\n   return includeNoop || isUserFunction(callback) ? callback : undefined;\n}\n","import type { MaybeArray, TaskParser, TaskResponseFormat } from '../types';\nimport type { GitOutputStreams } from './git-output-streams';\nimport type { LineParser } from './line-parser';\nimport { asArray, toLinesWithContent } from './util';\n\nexport function callTaskParser<INPUT extends TaskResponseFormat, RESPONSE>(\n   parser: TaskParser<INPUT, RESPONSE>,\n   streams: GitOutputStreams<INPUT>\n) {\n   return parser(streams.stdOut, streams.stdErr);\n}\n\nexport function parseStringResponse<T>(\n   result: T,\n   parsers: LineParser<T>[],\n   texts: MaybeArray<string>,\n   trim = true\n): T {\n   asArray(texts).forEach((text) => {\n      for (let lines = toLinesWithContent(text, trim), i = 0, max = lines.length; i < max; i++) {\n         const line = (offset = 0) => {\n            if (i + offset >= max) {\n               return;\n            }\n            return lines[i + offset];\n         };\n\n         parsers.some(({ parse }) => parse(line, result));\n      }\n   });\n\n   return result;\n}\n","import type { Maybe, StringTask } from '../types';\nimport { ExitCodes } from '../utils';\n\nexport enum CheckRepoActions {\n   BARE = 'bare',\n   IN_TREE = 'tree',\n   IS_REPO_ROOT = 'root',\n}\n\nconst onError: StringTask<boolean>['onError'] = ({ exitCode }, error, done, fail) => {\n   if (exitCode === ExitCodes.UNCLEAN && isNotRepoMessage(error)) {\n      return done(Buffer.from('false'));\n   }\n\n   fail(error);\n};\n\nconst parser: StringTask<boolean>['parser'] = (text) => {\n   return text.trim() === 'true';\n};\n\nexport function checkIsRepoTask(action: Maybe<CheckRepoActions>): StringTask<boolean> {\n   switch (action) {\n      case CheckRepoActions.BARE:\n         return checkIsBareRepoTask();\n      case CheckRepoActions.IS_REPO_ROOT:\n         return checkIsRepoRootTask();\n   }\n\n   const commands = ['rev-parse', '--is-inside-work-tree'];\n\n   return {\n      commands,\n      format: 'utf-8',\n      onError,\n      parser,\n   };\n}\n\nexport function checkIsRepoRootTask(): StringTask<boolean> {\n   const commands = ['rev-parse', '--git-dir'];\n\n   return {\n      commands,\n      format: 'utf-8',\n      onError,\n      parser(path) {\n         return /^\\.(git)?$/.test(path.trim());\n      },\n   };\n}\n\nexport function checkIsBareRepoTask(): StringTask<boolean> {\n   const commands = ['rev-parse', '--is-bare-repository'];\n\n   return {\n      commands,\n      format: 'utf-8',\n      onError,\n      parser,\n   };\n}\n\nfunction isNotRepoMessage(error: Error): boolean {\n   return /(Not a git repository|Kein Git-Repository)/i.test(String(error));\n}\n","import type { CleanSummary } from '../../typings';\nimport { toLinesWithContent } from '../utils';\n\nexport class CleanResponse implements CleanSummary {\n   public readonly paths: string[];\n   public readonly files: string[];\n   public readonly folders: string[];\n   public readonly dryRun: boolean;\n\n   constructor(dryRun: boolean) {\n      this.paths = [];\n      this.files = [];\n      this.folders = [];\n      this.dryRun = dryRun;\n   }\n}\n\nconst removalRegexp = /^[a-z]+\\s*/i;\nconst dryRunRemovalRegexp = /^[a-z]+\\s+[a-z]+\\s*/i;\nconst isFolderRegexp = /\\/$/;\n\nexport function cleanSummaryParser(dryRun: boolean, text: string): CleanSummary {\n   const summary = new CleanResponse(dryRun);\n   const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp;\n\n   toLinesWithContent(text).forEach((line) => {\n      const removed = line.replace(regexp, '');\n\n      summary.paths.push(removed);\n      (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed);\n   });\n\n   return summary;\n}\n","import { TaskConfigurationError } from '../errors/task-configuration-error';\nimport type { BufferTask, EmptyTaskParser, SimpleGitTask, StringTask } from '../types';\n\nexport const EMPTY_COMMANDS: [] = [];\n\nexport type EmptyTask = {\n   commands: typeof EMPTY_COMMANDS;\n   format: 'empty';\n   parser: EmptyTaskParser;\n   onError?: undefined;\n};\n\nexport function adhocExecTask(parser: EmptyTaskParser): EmptyTask {\n   return {\n      commands: EMPTY_COMMANDS,\n      format: 'empty',\n      parser,\n   };\n}\n\nexport function configurationErrorTask(error: Error | string): EmptyTask {\n   return {\n      commands: EMPTY_COMMANDS,\n      format: 'empty',\n      parser() {\n         throw typeof error === 'string' ? new TaskConfigurationError(error) : error;\n      },\n   };\n}\n\nexport function straightThroughStringTask(commands: string[], trimmed = false): StringTask<string> {\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text) {\n         return trimmed ? String(text).trim() : text;\n      },\n   };\n}\n\nexport function straightThroughBufferTask(commands: string[]): BufferTask<Buffer> {\n   return {\n      commands,\n      format: 'buffer',\n      parser(buffer) {\n         return buffer;\n      },\n   };\n}\n\nexport function isBufferTask<R>(task: SimpleGitTask<R>): task is BufferTask<R> {\n   return task.format === 'buffer';\n}\n\nexport function isEmptyTask<R>(task: SimpleGitTask<R>): task is EmptyTask {\n   return task.format === 'empty' || !task.commands.length;\n}\n","import type { CleanSummary } from '../../typings';\nimport { cleanSummaryParser } from '../parsers/parse-clean';\nimport type { Maybe, StringTask } from '../types';\nimport { asStringArray } from '../utils';\nimport { configurationErrorTask } from './task';\n\nexport const CONFIG_ERROR_INTERACTIVE_MODE = 'Git clean interactive mode is not supported';\nexport const CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter (\"n\" or \"f\") is required';\nexport const CONFIG_ERROR_UNKNOWN_OPTION = 'Git clean unknown option found in: ';\n\n/**\n * All supported option switches available for use in a `git.clean` operation\n */\nexport enum CleanOptions {\n   DRY_RUN = 'n',\n   FORCE = 'f',\n   IGNORED_INCLUDED = 'x',\n   IGNORED_ONLY = 'X',\n   EXCLUDING = 'e',\n   QUIET = 'q',\n   RECURSIVE = 'd',\n}\n\n/**\n * The two modes `git.clean` can run in - one of these must be supplied in order\n * for the command to not throw a `TaskConfigurationError`\n */\nexport type CleanMode = CleanOptions.FORCE | CleanOptions.DRY_RUN;\n\nconst CleanOptionValues: Set<string> = new Set([\n   'i',\n   ...asStringArray(Object.values(CleanOptions as any)),\n]);\n\nexport function cleanWithOptionsTask(mode: CleanMode | string, customArgs: string[]) {\n   const { cleanMode, options, valid } = getCleanOptions(mode);\n\n   if (!cleanMode) {\n      return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED);\n   }\n\n   if (!valid.options) {\n      return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode));\n   }\n\n   options.push(...customArgs);\n\n   if (options.some(isInteractiveMode)) {\n      return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE);\n   }\n\n   return cleanTask(cleanMode, options);\n}\n\nexport function cleanTask(mode: CleanMode, customArgs: string[]): StringTask<CleanSummary> {\n   const commands: string[] = ['clean', `-${mode}`, ...customArgs];\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text: string): CleanSummary {\n         return cleanSummaryParser(mode === CleanOptions.DRY_RUN, text);\n      },\n   };\n}\n\nexport function isCleanOptionsArray(input: string[]): input is CleanOptions[] {\n   return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test));\n}\n\nfunction getCleanOptions(input: string) {\n   let cleanMode: Maybe<CleanMode>;\n   let options: string[] = [];\n   let valid = { cleanMode: false, options: true };\n\n   input\n      .replace(/[^a-z]i/g, '')\n      .split('')\n      .forEach((char) => {\n         if (isCleanMode(char)) {\n            cleanMode = char;\n            valid.cleanMode = true;\n         } else {\n            valid.options = valid.options && isKnownOption((options[options.length] = `-${char}`));\n         }\n      });\n\n   return {\n      cleanMode,\n      options,\n      valid,\n   };\n}\n\nfunction isCleanMode(cleanMode?: string): cleanMode is CleanMode {\n   return cleanMode === CleanOptions.FORCE || cleanMode === CleanOptions.DRY_RUN;\n}\n\nfunction isKnownOption(option: string): boolean {\n   return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1));\n}\n\nfunction isInteractiveMode(option: string): boolean {\n   if (/^-[^\\-]/.test(option)) {\n      return option.indexOf('i') > 0;\n   }\n\n   return option === '--interactive';\n}\n","import type { ConfigGetResult, ConfigListSummary, ConfigValues } from '../../typings';\nimport { last, splitOn } from '../utils';\n\nexport class ConfigList implements ConfigListSummary {\n   public files: string[] = [];\n   public values: { [fileName: string]: ConfigValues } = Object.create(null);\n\n   private _all: ConfigValues | undefined;\n\n   public get all(): ConfigValues {\n      if (!this._all) {\n         this._all = this.files.reduce((all: ConfigValues, file: string) => {\n            return Object.assign(all, this.values[file]);\n         }, {});\n      }\n\n      return this._all;\n   }\n\n   public addFile(file: string): ConfigValues {\n      if (!(file in this.values)) {\n         const latest = last(this.files);\n         this.values[file] = latest ? Object.create(this.values[latest]) : {};\n\n         this.files.push(file);\n      }\n\n      return this.values[file];\n   }\n\n   public addValue(file: string, key: string, value: string) {\n      const values = this.addFile(file);\n\n      if (!Object.hasOwn(values, key)) {\n         values[key] = value;\n      } else if (Array.isArray(values[key])) {\n         (values[key] as string[]).push(value);\n      } else {\n         values[key] = [values[key] as string, value];\n      }\n\n      this._all = undefined;\n   }\n}\n\nexport function configListParser(text: string): ConfigList {\n   const config = new ConfigList();\n\n   for (const item of configParser(text)) {\n      config.addValue(item.file, String(item.key), item.value);\n   }\n\n   return config;\n}\n\nexport function configGetParser(text: string, key: string): ConfigGetResult {\n   let value: string | null = null;\n   const values: string[] = [];\n   const scopes: Map<string, string[]> = new Map();\n\n   for (const item of configParser(text, key)) {\n      if (item.key !== key) {\n         continue;\n      }\n\n      values.push((value = item.value));\n\n      if (!scopes.has(item.file)) {\n         scopes.set(item.file, []);\n      }\n\n      scopes.get(item.file)!.push(value);\n   }\n\n   return {\n      key,\n      paths: Array.from(scopes.keys()),\n      scopes,\n      value,\n      values,\n   };\n}\n\nfunction configFilePath(filePath: string): string {\n   return filePath.replace(/^(file):/, '');\n}\n\nfunction* configParser(text: string, requestedKey: string | null = null) {\n   const lines = text.split('\\0');\n\n   for (let i = 0, max = lines.length - 1; i < max; ) {\n      const file = configFilePath(lines[i++]);\n\n      let value = lines[i++];\n      let key = requestedKey;\n\n      if (value.includes('\\n')) {\n         const line = splitOn(value, '\\n');\n         key = line[0];\n         value = line[1];\n      }\n\n      yield { file, key, value };\n   }\n}\n","import type { ConfigGetResult, ConfigListSummary, SimpleGit } from '../../typings';\nimport { configGetParser, configListParser } from '../responses/ConfigList';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport { trailingFunctionArgument } from '../utils';\n\nexport enum GitConfigScope {\n   system = 'system',\n   global = 'global',\n   local = 'local',\n   worktree = 'worktree',\n}\n\nfunction asConfigScope<T extends GitConfigScope | undefined>(\n   scope: GitConfigScope | unknown,\n   fallback: T\n): GitConfigScope | T {\n   if (typeof scope === 'string' && Object.hasOwn(GitConfigScope, scope)) {\n      return scope as GitConfigScope;\n   }\n   return fallback;\n}\n\nfunction addConfigTask(\n   key: string,\n   value: string,\n   append: boolean,\n   scope: GitConfigScope\n): StringTask<string> {\n   const commands: string[] = ['config', `--${scope}`];\n\n   if (append) {\n      commands.push('--add');\n   }\n\n   commands.push(key, value);\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text: string): string {\n         return text;\n      },\n   };\n}\n\nfunction getConfigTask(key: string, scope?: GitConfigScope): StringTask<ConfigGetResult> {\n   const commands: string[] = ['config', '--null', '--show-origin', '--get-all', key];\n\n   if (scope) {\n      commands.splice(1, 0, `--${scope}`);\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text) {\n         return configGetParser(text, key);\n      },\n   };\n}\n\nfunction listConfigTask(scope?: GitConfigScope): StringTask<ConfigListSummary> {\n   const commands = ['config', '--list', '--show-origin', '--null'];\n\n   if (scope) {\n      commands.push(`--${scope}`);\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text: string) {\n         return configListParser(text);\n      },\n   };\n}\n\nexport default function (): Pick<SimpleGit, 'addConfig' | 'getConfig' | 'listConfig'> {\n   return {\n      addConfig(this: SimpleGitApi, key: string, value: string, ...rest: unknown[]) {\n         return this._runTask(\n            addConfigTask(\n               key,\n               value,\n               rest[0] === true,\n               asConfigScope(rest[1], GitConfigScope.local)\n            ),\n            trailingFunctionArgument(arguments)\n         );\n      },\n\n      getConfig(this: SimpleGitApi, key: string, scope?: GitConfigScope) {\n         return this._runTask(\n            getConfigTask(key, asConfigScope(scope, undefined)),\n            trailingFunctionArgument(arguments)\n         );\n      },\n\n      listConfig(this: SimpleGitApi, ...rest: unknown[]) {\n         return this._runTask(\n            listConfigTask(asConfigScope(rest[0], undefined)),\n            trailingFunctionArgument(arguments)\n         );\n      },\n   };\n}\n","export enum DiffNameStatus {\n   ADDED = 'A',\n   COPIED = 'C',\n   DELETED = 'D',\n   MODIFIED = 'M',\n   RENAMED = 'R',\n   CHANGED = 'T',\n   UNMERGED = 'U',\n   UNKNOWN = 'X',\n   BROKEN = 'B',\n}\n\nconst diffNameStatus = new Set(Object.values(DiffNameStatus));\n\nexport function isDiffNameStatus(input: string): input is DiffNameStatus {\n   return diffNameStatus.has(input as DiffNameStatus);\n}\n","import type { GrepResult, SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport {\n   asNumber,\n   forEachLineWithContent,\n   getTrailingOptions,\n   NULL,\n   prefixedArray,\n   trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask } from './task';\n\nconst disallowedOptions = ['-h'];\n\nconst Query = Symbol('grepQuery');\n\nexport interface GitGrepQuery extends Iterable<string> {\n   /** Adds one or more terms to be grouped as an \"and\" to any other terms */\n   and(...and: string[]): this;\n\n   /** Adds one or more search terms - git.grep will \"or\" this to other terms */\n   param(...param: string[]): this;\n}\n\nclass GrepQuery implements GitGrepQuery {\n   private [Query]: string[] = [];\n\n   *[Symbol.iterator]() {\n      for (const query of this[Query]) {\n         yield query;\n      }\n   }\n\n   and(...and: string[]) {\n      and.length && this[Query].push('--and', '(', ...prefixedArray(and, '-e'), ')');\n      return this;\n   }\n\n   param(...param: string[]) {\n      this[Query].push(...prefixedArray(param, '-e'));\n      return this;\n   }\n}\n\n/**\n * Creates a new builder for a `git.grep` query with optional params\n */\nexport function grepQueryBuilder(...params: string[]): GitGrepQuery {\n   return new GrepQuery().param(...params);\n}\n\nfunction parseGrep(grep: string): GrepResult {\n   const paths: GrepResult['paths'] = new Set<string>();\n   const results: GrepResult['results'] = {};\n\n   forEachLineWithContent(grep, (input) => {\n      const [path, line, preview] = input.split(NULL);\n      paths.add(path);\n      (results[path] = results[path] || []).push({\n         line: asNumber(line),\n         path,\n         preview,\n      });\n   });\n\n   return {\n      paths,\n      results,\n   };\n}\n\nexport default function (): Pick<SimpleGit, 'grep'> {\n   return {\n      grep(this: SimpleGitApi, searchTerm: string | GitGrepQuery) {\n         const then = trailingFunctionArgument(arguments);\n         const options = getTrailingOptions(arguments);\n\n         for (const option of disallowedOptions) {\n            if (options.includes(option)) {\n               return this._runTask(\n                  configurationErrorTask(`git.grep: use of \"${option}\" is not supported.`),\n                  then\n               );\n            }\n         }\n\n         if (typeof searchTerm === 'string') {\n            searchTerm = grepQueryBuilder().param(searchTerm);\n         }\n\n         const commands = ['grep', '--null', '-n', '--full-name', ...options, ...searchTerm];\n\n         return this._runTask(\n            {\n               commands,\n               format: 'utf-8',\n               parser(stdOut) {\n                  return parseGrep(stdOut);\n               },\n            },\n            then\n         );\n      },\n   };\n}\n","import type { Maybe, OptionFlags, Options } from '../types';\nimport { asStringArray } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nexport enum ResetMode {\n   MIXED = 'mixed',\n   SOFT = 'soft',\n   HARD = 'hard',\n   MERGE = 'merge',\n   KEEP = 'keep',\n}\n\nconst validResetModes = asStringArray(Object.values(ResetMode));\n\nexport type ResetOptions = Options &\n   OptionFlags<'-q' | '--quiet' | '--no-quiet' | '--pathspec-from-nul'> &\n   OptionFlags<'--pathspec-from-file', string>;\n\nexport function resetTask(mode: Maybe<ResetMode>, customArgs: string[]) {\n   const commands: string[] = ['reset'];\n   if (isValidResetMode(mode)) {\n      commands.push(`--${mode}`);\n   }\n   commands.push(...customArgs);\n\n   return straightThroughStringTask(commands);\n}\n\nexport function getResetMode(mode: ResetMode | unknown): Maybe<ResetMode> {\n   if (isValidResetMode(mode)) {\n      return mode;\n   }\n\n   switch (typeof mode) {\n      case 'string':\n      case 'undefined':\n         return ResetMode.SOFT;\n   }\n\n   return;\n}\n\nfunction isValidResetMode(mode: ResetMode | unknown): mode is ResetMode {\n   return typeof mode === 'string' && validResetModes.includes(mode);\n}\n","import debug, { type Debugger } from 'debug';\n\nimport type { Maybe } from './types';\nimport {\n   append,\n   filterHasLength,\n   filterString,\n   filterType,\n   NOOP,\n   objectToString,\n   remove,\n} from './utils';\n\ndebug.formatters.L = (value: any) => String(filterHasLength(value) ? value.length : '-');\ndebug.formatters.B = (value: Buffer) => {\n   if (Buffer.isBuffer(value)) {\n      return value.toString('utf8');\n   }\n   return objectToString(value);\n};\n\ntype OutputLoggingHandler = (message: string, ...args: any[]) => void;\n\nfunction createLog() {\n   return debug('simple-git');\n}\n\nexport interface OutputLogger extends OutputLoggingHandler {\n   readonly label: string;\n\n   info: OutputLoggingHandler;\n   step(nextStep?: string): OutputLogger;\n   sibling(name: string): OutputLogger;\n}\n\nfunction prefixedLogger(\n   to: Debugger,\n   prefix: string,\n   forward?: OutputLoggingHandler\n): OutputLoggingHandler {\n   if (!prefix || !String(prefix).replace(/\\s*/, '')) {\n      return !forward\n         ? to\n         : (message, ...args) => {\n              to(message, ...args);\n              forward(message, ...args);\n           };\n   }\n\n   return (message, ...args) => {\n      to(`%s ${message}`, prefix, ...args);\n      if (forward) {\n         forward(message, ...args);\n      }\n   };\n}\n\nfunction childLoggerName(\n   name: Maybe<string>,\n   childDebugger: Maybe<Debugger>,\n   { namespace: parentNamespace }: Debugger\n): string {\n   if (typeof name === 'string') {\n      return name;\n   }\n   const childNamespace = (childDebugger && childDebugger.namespace) || '';\n\n   if (childNamespace.startsWith(parentNamespace)) {\n      return childNamespace.substr(parentNamespace.length + 1);\n   }\n\n   return childNamespace || parentNamespace;\n}\n\nexport function createLogger(\n   label: string,\n   verbose?: string | Debugger,\n   initialStep?: string,\n   infoDebugger = createLog()\n): OutputLogger {\n   const labelPrefix = (label && `[${label}]`) || '';\n\n   const spawned: OutputLogger[] = [];\n   const debugDebugger: Maybe<Debugger> =\n      typeof verbose === 'string' ? infoDebugger.extend(verbose) : verbose;\n   const key = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger);\n\n   return step(initialStep);\n\n   function sibling(name: string, initial?: string) {\n      return append(\n         spawned,\n         createLogger(label, key.replace(/^[^:]+/, name), initial, infoDebugger)\n      );\n   }\n\n   function step(phase?: string) {\n      const stepPrefix = (phase && `[${phase}]`) || '';\n      const debug = (debugDebugger && prefixedLogger(debugDebugger, stepPrefix)) || NOOP;\n      const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug);\n\n      return Object.assign(debugDebugger ? debug : info, {\n         label,\n         sibling,\n         info,\n         step,\n      });\n   }\n}\n\n/**\n * The `GitLogger` is used by the main `SimpleGit` runner to handle logging\n * any warnings or errors.\n */\nexport class GitLogger {\n   public error: OutputLoggingHandler;\n\n   public warn: OutputLoggingHandler;\n\n   constructor(private _out: Debugger = createLog()) {\n      this.error = prefixedLogger(_out, '[ERROR]');\n      this.warn = prefixedLogger(_out, '[WARN]');\n   }\n\n   silent(silence = false) {\n      if (silence !== this._out.enabled) {\n         return;\n      }\n\n      const { namespace } = this._out;\n      const env = (process.env.DEBUG || '').split(',').filter((s) => !!s);\n      const hasOn = env.includes(namespace);\n      const hasOff = env.includes(`-${namespace}`);\n\n      // enabling the log\n      if (!silence) {\n         if (hasOff) {\n            remove(env, `-${namespace}`);\n         } else {\n            env.push(namespace);\n         }\n      } else {\n         if (hasOn) {\n            remove(env, namespace);\n         } else {\n            env.push(`-${namespace}`);\n         }\n      }\n\n      debug.enable(env.join(','));\n   }\n}\n","import { GitError } from '../errors/git-error';\nimport { createLogger, type OutputLogger } from '../git-logger';\nimport type { SimpleGitTask } from '../types';\n\ntype AnySimpleGitTask = SimpleGitTask<any>;\n\ntype TaskInProgress = {\n   name: string;\n   logger: OutputLogger;\n   task: AnySimpleGitTask;\n};\n\nexport class TasksPendingQueue {\n   private _queue: Map<AnySimpleGitTask, TaskInProgress> = new Map();\n\n   constructor(private logLabel = 'GitExecutor') {}\n\n   private withProgress(task: AnySimpleGitTask) {\n      return this._queue.get(task);\n   }\n\n   private createProgress(task: AnySimpleGitTask): TaskInProgress {\n      const name = TasksPendingQueue.getName(task.commands[0]);\n      const logger = createLogger(this.logLabel, name);\n\n      return {\n         task,\n         logger,\n         name,\n      };\n   }\n\n   push(task: AnySimpleGitTask): TaskInProgress {\n      const progress = this.createProgress(task);\n      progress.logger('Adding task to the queue, commands = %o', task.commands);\n\n      this._queue.set(task, progress);\n\n      return progress;\n   }\n\n   fatal(err: GitError) {\n      for (const [task, { logger }] of Array.from(this._queue.entries())) {\n         if (task === err.task) {\n            logger.info(`Failed %o`, err);\n            logger(\n               `Fatal exception, any as-yet un-started tasks run through this executor will not be attempted`\n            );\n         } else {\n            logger.info(\n               `A fatal exception occurred in a previous task, the queue has been purged: %o`,\n               err.message\n            );\n         }\n\n         this.complete(task);\n      }\n\n      if (this._queue.size !== 0) {\n         throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`);\n      }\n   }\n\n   complete(task: AnySimpleGitTask) {\n      const progress = this.withProgress(task);\n      if (progress) {\n         this._queue.delete(task);\n      }\n   }\n\n   attempt(task: AnySimpleGitTask): TaskInProgress {\n      const progress = this.withProgress(task);\n      if (!progress) {\n         throw new GitError(undefined, 'TasksPendingQueue: attempt called for an unknown task');\n      }\n      progress.logger('Starting task');\n\n      return progress;\n   }\n\n   static getName(name = 'empty') {\n      return `task:${name}:${++TasksPendingQueue.counter}`;\n   }\n\n   private static counter = 0;\n}\n","import { type SpawnOptions, spawn } from 'node:child_process';\n\nimport { GitError } from '../errors/git-error';\nimport type { OutputLogger } from '../git-logger';\nimport type { PluginStore, SimpleGitTaskPluginContext } from '../plugins';\nimport { type EmptyTask, isBufferTask, isEmptyTask } from '../tasks/task';\nimport type {\n   GitExecutorResult,\n   Maybe,\n   outputHandler,\n   RunnableTask,\n   SimpleGitExecutor,\n   SimpleGitTask,\n} from '../types';\nimport { callTaskParser, first, GitOutputStreams, objectToString } from '../utils';\nimport type { Scheduler } from './scheduler';\nimport { TasksPendingQueue } from './tasks-pending-queue';\n\nexport class GitExecutorChain implements SimpleGitExecutor {\n   private _chain: Promise<any> = Promise.resolve();\n   private _queue = new TasksPendingQueue();\n   private _cwd: string | undefined;\n\n   public get cwd() {\n      return this._cwd || this._executor.cwd;\n   }\n\n   public set cwd(cwd: string) {\n      this._cwd = cwd;\n   }\n\n   public get env() {\n      return this._executor.env;\n   }\n\n   public get outputHandler() {\n      return this._executor.outputHandler;\n   }\n\n   constructor(\n      private _executor: SimpleGitExecutor,\n      private _scheduler: Scheduler,\n      private _plugins: PluginStore\n   ) {}\n\n   public chain() {\n      return this;\n   }\n\n   public push<R>(task: SimpleGitTask<R>): Promise<R> {\n      this._queue.push(task);\n\n      return (this._chain = this._chain.then(() => this.attemptTask(task)));\n   }\n\n   private async attemptTask<R>(task: SimpleGitTask<R>): Promise<void | R> {\n      const onScheduleComplete = await this._scheduler.next();\n      const onQueueComplete = () => this._queue.complete(task);\n\n      try {\n         const { logger } = this._queue.attempt(task);\n         return (await (isEmptyTask(task)\n            ? this.attemptEmptyTask(task, logger)\n            : this.attemptRemoteTask(task, logger))) as R;\n      } catch (e) {\n         throw this.onFatalException(task, e as Error);\n      } finally {\n         onQueueComplete();\n         onScheduleComplete();\n      }\n   }\n\n   private onFatalException<R>(task: SimpleGitTask<R>, e: Error) {\n      const gitError =\n         e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e));\n\n      this._chain = Promise.resolve();\n      this._queue.fatal(gitError);\n\n      return gitError;\n   }\n\n   private async attemptRemoteTask<R>(task: RunnableTask<R>, logger: OutputLogger) {\n      const binary = this._plugins.exec('spawn.binary', '', this.taskContext(task, task.commands));\n      const args = this._plugins.exec(\n         'spawn.args',\n         [...task.commands],\n         this.taskContext(task, task.commands)\n      );\n\n      const raw = await this.gitResponse(\n         task,\n         binary,\n         args,\n         this.outputHandler,\n         logger.step('SPAWN')\n      );\n      const outputStreams = await this.handleTaskData(task, args, raw, logger.step('HANDLE'));\n\n      logger(`passing response to task's parser as a %s`, task.format);\n\n      if (isBufferTask(task)) {\n         return callTaskParser(task.parser, outputStreams);\n      }\n\n      return callTaskParser(task.parser, outputStreams.asStrings());\n   }\n\n   private async attemptEmptyTask(task: EmptyTask, logger: OutputLogger) {\n      logger(`empty task bypassing child process to call to task's parser`);\n      return task.parser(this);\n   }\n\n   private handleTaskData<R>(\n      task: SimpleGitTask<R>,\n      args: string[],\n      result: GitExecutorResult,\n      logger: OutputLogger\n   ): Promise<GitOutputStreams> {\n      const { exitCode, rejection, stdOut, stdErr } = result;\n\n      return new Promise((done, fail) => {\n         logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode);\n\n         const { error } = this._plugins.exec(\n            'task.error',\n            { error: rejection },\n            {\n               ...this.taskContext(task, args),\n               ...result,\n            }\n         );\n\n         if (error && task.onError) {\n            logger.info(`exitCode=%s handling with custom error handler`);\n\n            return task.onError(\n               result,\n               error,\n               (newStdOut) => {\n                  logger.info(`custom error handler treated as success`);\n                  logger(`custom error returned a %s`, objectToString(newStdOut));\n\n                  done(\n                     new GitOutputStreams(\n                        Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut,\n                        Buffer.concat(stdErr)\n                     )\n                  );\n               },\n               fail\n            );\n         }\n\n         if (error) {\n            logger.info(\n               `handling as error: exitCode=%s stdErr=%s rejection=%o`,\n               exitCode,\n               stdErr.length,\n               rejection\n            );\n            return fail(error);\n         }\n\n         logger.info(`retrieving task output complete`);\n         done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr)));\n      });\n   }\n\n   private async gitResponse<R>(\n      task: SimpleGitTask<R>,\n      command: string,\n      args: string[],\n      outputHandler: Maybe<outputHandler>,\n      logger: OutputLogger\n   ): Promise<GitExecutorResult> {\n      const outputLogger = logger.sibling('output');\n      const spawnOptions: SpawnOptions = this._plugins.exec(\n         'spawn.options',\n         {\n            cwd: this.cwd,\n            env: this.env,\n            windowsHide: true,\n         },\n         this.taskContext(task, task.commands)\n      );\n\n      return new Promise((done) => {\n         const stdOut: Buffer[] = [];\n         const stdErr: Buffer[] = [];\n\n         logger.info(`%s %o`, command, args);\n         logger('%O', spawnOptions);\n\n         let rejection = this._beforeSpawn(task, args);\n         if (rejection) {\n            return done({\n               stdOut,\n               stdErr,\n               exitCode: 9901,\n               rejection,\n            });\n         }\n\n         this._plugins.exec('spawn.before', undefined, {\n            ...this.taskContext(task, args),\n            kill(reason) {\n               rejection = reason || rejection;\n            },\n         });\n\n         const spawned = spawn(command, args, spawnOptions);\n\n         spawned.stdout!.on(\n            'data',\n            onDataReceived(stdOut, 'stdOut', logger, outputLogger.step('stdOut'))\n         );\n         spawned.stderr!.on(\n            'data',\n            onDataReceived(stdErr, 'stdErr', logger, outputLogger.step('stdErr'))\n         );\n\n         spawned.on('error', onErrorReceived(stdErr, logger));\n\n         if (outputHandler) {\n            logger(`Passing child process stdOut/stdErr to custom outputHandler`);\n            outputHandler(command, spawned.stdout!, spawned.stderr!, [...args]);\n         }\n\n         this._plugins.exec('spawn.after', undefined, {\n            ...this.taskContext(task, args),\n            spawned,\n            close(exitCode: number, reason?: Error) {\n               done({\n                  stdOut,\n                  stdErr,\n                  exitCode,\n                  rejection: rejection || reason,\n               });\n            },\n            kill(reason: Error) {\n               if (spawned.killed) {\n                  return;\n               }\n\n               rejection = reason;\n               spawned.kill('SIGINT');\n            },\n         });\n      });\n   }\n\n   private _beforeSpawn<R>(task: SimpleGitTask<R>, args: string[]) {\n      let rejection: Maybe<Error>;\n      this._plugins.exec('spawn.before', undefined, {\n         ...this.taskContext(task, args),\n         kill(reason) {\n            rejection = reason || rejection;\n         },\n      });\n\n      return rejection;\n   }\n\n   private taskContext<R>(task: SimpleGitTask<R>, commands: string[]): SimpleGitTaskPluginContext {\n      return {\n         method: String(first(task.commands) || ''),\n         commands,\n         env: { ...this.env },\n         input: isEmptyTask(task) ? undefined : task.input,\n      };\n   }\n}\n\nfunction onErrorReceived(target: Buffer[], logger: OutputLogger) {\n   return (err: Error) => {\n      logger(`[ERROR] child process exception %o`, err);\n      target.push(Buffer.from(String(err.stack), 'ascii'));\n   };\n}\n\nfunction onDataReceived(\n   target: Buffer[],\n   name: string,\n   logger: OutputLogger,\n   output: OutputLogger\n) {\n   return (buffer: Buffer) => {\n      logger(`%s received %L bytes`, name, buffer);\n      output(`%B`, buffer);\n      target.push(buffer);\n   };\n}\n","import type { PluginStore } from '../plugins';\nimport type { GitExecutorEnv, outputHandler, SimpleGitExecutor, SimpleGitTask } from '../types';\nimport { GitExecutorChain } from './git-executor-chain';\nimport type { Scheduler } from './scheduler';\n\nexport class GitExecutor implements SimpleGitExecutor {\n   private _chain: SimpleGitExecutor;\n\n   public env: GitExecutorEnv;\n   public outputHandler?: outputHandler;\n\n   constructor(\n      public cwd: string,\n      private _scheduler: Scheduler,\n      private _plugins: PluginStore\n   ) {\n      this._chain = this.chain();\n   }\n\n   chain(): SimpleGitExecutor {\n      return new GitExecutorChain(this, this._scheduler, this._plugins);\n   }\n\n   push<R>(task: SimpleGitTask<R>): Promise<R> {\n      return this._chain.push(task);\n   }\n}\n","import type { GitError } from './errors/git-error';\nimport type { GitResponseError } from './errors/git-response-error';\nimport type { SimpleGitTask, SimpleGitTaskCallback } from './types';\nimport { NOOP } from './utils';\n\nexport function taskCallback<R>(\n   task: SimpleGitTask<R>,\n   response: Promise<R>,\n   callback: SimpleGitTaskCallback<R> = NOOP\n) {\n   const onSuccess = (data: R) => {\n      callback(null, data);\n   };\n\n   const onError = (err: GitError | GitResponseError) => {\n      if (err?.task === task) {\n         callback(err, undefined as any);\n      }\n   };\n\n   response.then(onSuccess, onError);\n}\n","import type { SimpleGitExecutor } from '../types';\nimport { folderExists } from '../utils';\nimport { adhocExecTask } from './task';\n\nexport function changeWorkingDirectoryTask(directory: string, root?: SimpleGitExecutor) {\n   return adhocExecTask((instance: SimpleGitExecutor) => {\n      if (!folderExists(directory)) {\n         throw new Error(`Git.cwd: cannot change to non-directory \"${directory}\"`);\n      }\n\n      return ((root || instance).cwd = directory);\n   });\n}\n","import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { getTrailingOptions, remove, trailingFunctionArgument } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nfunction checkoutTask(args: string[]) {\n   const commands = ['checkout', ...args];\n   if (commands[1] === '-b' && commands.includes('-B')) {\n      commands[1] = remove(commands, '-B');\n   }\n\n   return straightThroughStringTask(commands);\n}\n\nexport default function (): Pick<SimpleGit, 'checkout' | 'checkoutBranch' | 'checkoutLocalBranch'> {\n   return {\n      checkout(this: SimpleGitApi) {\n         return this._runTask(\n            checkoutTask(getTrailingOptions(arguments, 1)),\n            trailingFunctionArgument(arguments)\n         );\n      },\n\n      checkoutBranch(this: SimpleGitApi, branchName, startPoint) {\n         return this._runTask(\n            checkoutTask(['-b', branchName, startPoint, ...getTrailingOptions(arguments)]),\n            trailingFunctionArgument(arguments)\n         );\n      },\n\n      checkoutLocalBranch(this: SimpleGitApi, branchName) {\n         return this._runTask(\n            checkoutTask(['-b', branchName, ...getTrailingOptions(arguments)]),\n            trailingFunctionArgument(arguments)\n         );\n      },\n   };\n}\n","import { pathspec } from '@simple-git/args-pathspec';\n\nimport type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { OptionFlags, Options, StringTask } from '../types';\nimport {\n   append,\n   filterString,\n   filterType,\n   getTrailingOptions,\n   trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask, type EmptyTask, straightThroughStringTask } from './task';\n\nexport type CloneOptions = Options &\n   OptionFlags<\n      | '--bare'\n      | '--dissociate'\n      | '--mirror'\n      | '--no-checkout'\n      | '--no-remote-submodules'\n      | '--no-shallow-submodules'\n      | '--no-single-branch'\n      | '--no-tags'\n      | '--remote-submodules'\n      | '--single-branch'\n      | '--shallow-submodules'\n      | '--verbose'\n   > &\n   OptionFlags<'--depth' | '-j' | '--jobs', number> &\n   OptionFlags<\n      | '--branch'\n      | '--origin'\n      | '--recurse-submodules'\n      | '--separate-git-dir'\n      | '--shallow-exclude'\n      | '--shallow-since'\n      | '--template',\n      string\n   >;\n\ntype CloneTaskBuilder = (\n   repo: string | undefined,\n   directory: string | undefined,\n   customArgs: string[]\n) => StringTask<string> | EmptyTask;\n\nexport const cloneTask: CloneTaskBuilder = (repo, directory, customArgs) => {\n   const commands = ['clone', ...customArgs];\n\n   filterString(repo) && commands.push(pathspec(repo));\n   filterString(directory) && commands.push(pathspec(directory));\n\n   return straightThroughStringTask(commands);\n};\n\nexport const cloneMirrorTask: CloneTaskBuilder = (repo, directory, customArgs) => {\n   append(customArgs, '--mirror');\n\n   return cloneTask(repo, directory, customArgs);\n};\n\nfunction createCloneTask(\n   api: 'clone' | 'mirror',\n   task: CloneTaskBuilder,\n   repoPath: string | undefined,\n   ...args: unknown[]\n) {\n   if (!filterString(repoPath)) {\n      return configurationErrorTask(`git.${api}() requires a string 'repoPath'`);\n   }\n\n   return task(repoPath, filterType(args[0], filterString), getTrailingOptions(arguments));\n}\n\nexport default function (): Pick<SimpleGit, 'clone' | 'mirror'> {\n   return {\n      clone(this: SimpleGitApi, repo: string | unknown, ...rest: unknown[]) {\n         return this._runTask(\n            createCloneTask('clone', cloneTask, filterType(repo, filterString), ...rest),\n            trailingFunctionArgument(arguments)\n         );\n      },\n      mirror(this: SimpleGitApi, repo: string | unknown, ...rest: unknown[]) {\n         return this._runTask(\n            createCloneTask('mirror', cloneMirrorTask, filterType(repo, filterString), ...rest),\n            trailingFunctionArgument(arguments)\n         );\n      },\n   };\n}\n","import type { CommitResult } from '../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<CommitResult>[] = [\n   new LineParser(/^\\[([^\\s]+)( \\([^)]+\\))? ([^\\]]+)/, (result, [branch, root, commit]) => {\n      result.branch = branch;\n      result.commit = commit;\n      result.root = !!root;\n   }),\n   new LineParser(/\\s*Author:\\s(.+)/i, (result, [author]) => {\n      const parts = author.split('<');\n      const email = parts.pop();\n\n      if (!email || !email.includes('@')) {\n         return;\n      }\n\n      result.author = {\n         email: email.substr(0, email.length - 1),\n         name: parts.join('<').trim(),\n      };\n   }),\n   new LineParser(\n      /(\\d+)[^,]*(?:,\\s*(\\d+)[^,]*)(?:,\\s*(\\d+))/g,\n      (result, [changes, insertions, deletions]) => {\n         result.summary.changes = parseInt(changes, 10) || 0;\n         result.summary.insertions = parseInt(insertions, 10) || 0;\n         result.summary.deletions = parseInt(deletions, 10) || 0;\n      }\n   ),\n   new LineParser(\n      /^(\\d+)[^,]*(?:,\\s*(\\d+)[^(]+\\(([+-]))?/,\n      (result, [changes, lines, direction]) => {\n         result.summary.changes = parseInt(changes, 10) || 0;\n         const count = parseInt(lines, 10) || 0;\n         if (direction === '-') {\n            result.summary.deletions = count;\n         } else if (direction === '+') {\n            result.summary.insertions = count;\n         }\n      }\n   ),\n];\n\nexport function parseCommitResult(stdOut: string): CommitResult {\n   const result: CommitResult = {\n      author: null,\n      branch: '',\n      commit: '',\n      root: false,\n      summary: {\n         changes: 0,\n         insertions: 0,\n         deletions: 0,\n      },\n   };\n   return parseStringResponse(result, parsers, stdOut);\n}\n","import type { CommitResult, SimpleGit } from '../../typings';\nimport { parseCommitResult } from '../parsers/parse-commit';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport {\n   asArray,\n   asStringArray,\n   filterArray,\n   filterStringOrStringArray,\n   filterType,\n   getTrailingOptions,\n   prefixedArray,\n   trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask } from './task';\n\nexport function commitTask(\n   message: string[],\n   files: string[],\n   customArgs: string[]\n): StringTask<CommitResult> {\n   const commands: string[] = [\n      '-c',\n      'core.abbrev=40',\n      'commit',\n      ...prefixedArray(message, '-m'),\n      ...files,\n      ...customArgs,\n   ];\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser: parseCommitResult,\n   };\n}\n\nexport default function (): Pick<SimpleGit, 'commit'> {\n   return {\n      commit(this: SimpleGitApi, message: string | string[], ...rest: unknown[]) {\n         const next = trailingFunctionArgument(arguments);\n         const task =\n            rejectDeprecatedSignatures(message) ||\n            commitTask(\n               asArray(message),\n               asArray(filterType(rest[0], filterStringOrStringArray, [])),\n               [\n                  ...asStringArray(filterType(rest[1], filterArray, [])),\n                  ...getTrailingOptions(arguments, 0, true),\n               ]\n            );\n\n         return this._runTask(task, next);\n      },\n   };\n\n   function rejectDeprecatedSignatures(message?: unknown) {\n      return (\n         !filterStringOrStringArray(message) &&\n         configurationErrorTask(\n            `git.commit: requires the commit message to be supplied as a string/string[]`\n         )\n      );\n   }\n}\n","import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { asCamelCase, asNumber, LineParser, parseStringResponse } from '../utils';\n\nexport interface CountObjectsResult {\n   count: number;\n   size: number;\n   inPack: number;\n   packs: number;\n   sizePack: number;\n   prunePackable: number;\n   garbage: number;\n   sizeGarbage: number;\n}\n\nfunction countObjectsResponse(): CountObjectsResult {\n   return {\n      count: 0,\n      garbage: 0,\n      inPack: 0,\n      packs: 0,\n      prunePackable: 0,\n      size: 0,\n      sizeGarbage: 0,\n      sizePack: 0,\n   };\n}\n\nconst parser: LineParser<CountObjectsResult> = new LineParser(\n   /([a-z-]+): (\\d+)$/,\n   (result, [key, value]) => {\n      const property = asCamelCase(key);\n      if (Object.hasOwn(result, property)) {\n         result[property as keyof typeof result] = asNumber(value);\n      }\n   }\n);\n\nexport default function (): Pick<SimpleGit, 'countObjects'> {\n   return {\n      countObjects(this: SimpleGitApi) {\n         return this._runTask({\n            commands: ['count-objects', '--verbose'],\n            format: 'utf-8',\n            parser(stdOut: string) {\n               return parseStringResponse(countObjectsResponse(), [parser], stdOut);\n            },\n         });\n      },\n   };\n}\n","import type { Response, SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { trailingFunctionArgument } from '../utils';\nimport { straightThroughStringTask } from './task';\n\nexport default function (): Pick<SimpleGit, 'firstCommit'> {\n   return {\n      firstCommit(this: SimpleGitApi): Response<string> {\n         return this._runTask(\n            straightThroughStringTask(['rev-list', '--max-parents=0', 'HEAD'], true),\n            trailingFunctionArgument(arguments)\n         );\n      },\n   };\n}\n","import type { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\n/**\n * Task used by `git.hashObject`\n */\nexport function hashObjectTask(filePath: string, write: boolean): StringTask<string> {\n   const commands = ['hash-object', filePath];\n   if (write) {\n      commands.push('-w');\n   }\n\n   return straightThroughStringTask(commands, true);\n}\n","import type { InitResult } from '../../typings';\n\nexport class InitSummary implements InitResult {\n   constructor(\n      public readonly bare: boolean,\n      public readonly path: string,\n      public readonly existing: boolean,\n      public readonly gitDir: string\n   ) {}\n}\n\nconst initResponseRegex = /^Init.+ repository in (.+)$/;\nconst reInitResponseRegex = /^Rein.+ in (.+)$/;\n\nexport function parseInit(bare: boolean, path: string, text: string) {\n   const response = String(text).trim();\n   let result;\n\n   if ((result = initResponseRegex.exec(response))) {\n      return new InitSummary(bare, path, false, result[1]);\n   }\n\n   if ((result = reInitResponseRegex.exec(response))) {\n      return new InitSummary(bare, path, true, result[1]);\n   }\n\n   let gitDir = '';\n   const tokens = response.split(' ');\n   while (tokens.length) {\n      const token = tokens.shift();\n      if (token === 'in') {\n         gitDir = tokens.join(' ');\n         break;\n      }\n   }\n\n   return new InitSummary(bare, path, /^re/i.test(response), gitDir);\n}\n","import type { InitResult } from '../../typings';\nimport { parseInit } from '../responses/InitSummary';\nimport type { StringTask } from '../types';\n\nconst bareCommand = '--bare';\n\nfunction hasBareCommand(command: string[]) {\n   return command.includes(bareCommand);\n}\n\nexport function initTask(bare = false, path: string, customArgs: string[]): StringTask<InitResult> {\n   const commands = ['init', ...customArgs];\n   if (bare && !hasBareCommand(commands)) {\n      commands.splice(1, 0, bareCommand);\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(text: string): InitResult {\n         return parseInit(commands.includes('--bare'), path, text);\n      },\n   };\n}\n","import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport {\n   asCamelCase,\n   filterStringOrBuffer,\n   filterType,\n   forEachLineWithContent,\n   trailingFunctionArgument,\n} from '../utils';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nfunction interpretTrailersTask(\n   input?: string | Buffer\n): StringTask<Record<string, string>> | EmptyTask {\n   if (input === undefined) {\n      return configurationErrorTask(`interpretTrailers called without input content`);\n   }\n\n   return {\n      format: 'utf-8',\n      parser(stdOut) {\n         return Object.fromEntries(\n            forEachLineWithContent(stdOut, (line) => {\n               const index = line.indexOf(':');\n               return [\n                  asCamelCase(line.substring(0, index).toLowerCase()),\n                  line.substring(index + 2).trim(),\n               ];\n            })\n         );\n      },\n      commands: ['interpret-trailers', '--parse'],\n      input,\n   };\n}\n\nexport default function (): Pick<SimpleGit, 'interpretTrailers'> {\n   return {\n      interpretTrailers(this: SimpleGitApi, input) {\n         return this._runTask(\n            interpretTrailersTask(filterType(input, filterStringOrBuffer)),\n            trailingFunctionArgument(arguments)\n         );\n      },\n   };\n}\n","export enum LogFormat {\n   NONE = '',\n   STAT = '--stat',\n   NUM_STAT = '--numstat',\n   NAME_ONLY = '--name-only',\n   NAME_STATUS = '--name-status',\n}\n\nconst logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/;\n\nexport function logFormatFromCommand(customArgs: string[]) {\n   for (let i = 0; i < customArgs.length; i++) {\n      const format = logFormatRegex.exec(customArgs[i]);\n      if (format) {\n         return `--${format[1]}` as LogFormat;\n      }\n   }\n\n   return LogFormat.NONE;\n}\n\nexport function isLogFormat(customArg: string | unknown) {\n   return logFormatRegex.test(customArg as string);\n}\n","import type { DiffResult, DiffResultBinaryFile, DiffResultTextFile } from '../../typings';\n\n/***\n * The DiffSummary is returned as a response to getting `git().status()`\n */\nexport class DiffSummary implements DiffResult {\n   changed = 0;\n   deletions = 0;\n   insertions = 0;\n\n   files: Array<DiffResultTextFile | DiffResultBinaryFile> = [];\n}\n","import type { DiffResult } from '../../typings';\nimport { LogFormat } from '../args/log-format';\nimport { DiffSummary } from '../responses/DiffSummary';\nimport { isDiffNameStatus } from '../tasks/diff-name-status';\nimport { asNumber, LineParser, orVoid, parseStringResponse } from '../utils';\n\nconst statParser = [\n   new LineParser<DiffResult>(\n      /^(.+)\\s+\\|\\s+(\\d+)(\\s+[+\\-]+)?$/,\n      (result, [file, changes, alterations = '']) => {\n         result.files.push({\n            file: file.trim(),\n            changes: asNumber(changes),\n            insertions: alterations.replace(/[^+]/g, '').length,\n            deletions: alterations.replace(/[^-]/g, '').length,\n            binary: false,\n         });\n      }\n   ),\n   new LineParser<DiffResult>(\n      /^(.+) \\|\\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)/,\n      (result, [file, before, after]) => {\n         result.files.push({\n            file: file.trim(),\n            before: asNumber(before),\n            after: asNumber(after),\n            binary: true,\n         });\n      }\n   ),\n   new LineParser<DiffResult>(/^(.+)\\s+\\|\\s+Bin\\s*$/, (result, [file]) => {\n      result.files.push({\n         file: file.trim(),\n         before: 0,\n         after: 0,\n         binary: true,\n      });\n   }),\n   new LineParser<DiffResult>(\n      /(\\d+) files? changed\\s*((?:, \\d+ [^,]+){0,2})/,\n      (result, [changed, summary]) => {\n         const inserted = /(\\d+) i/.exec(summary);\n         const deleted = /(\\d+) d/.exec(summary);\n\n         result.changed = asNumber(changed);\n         result.insertions = asNumber(inserted?.[1]);\n         result.deletions = asNumber(deleted?.[1]);\n      }\n   ),\n];\n\nconst numStatParser = [\n   new LineParser<DiffResult>(\n      /(\\d+)\\t(\\d+)\\t(.+)$/,\n      (result, [changesInsert, changesDelete, file]) => {\n         const insertions = asNumber(changesInsert);\n         const deletions = asNumber(changesDelete);\n\n         result.changed++;\n         result.insertions += insertions;\n         result.deletions += deletions;\n\n         result.files.push({\n            file,\n            changes: insertions + deletions,\n            insertions,\n            deletions,\n            binary: false,\n         });\n      }\n   ),\n   new LineParser<DiffResult>(/-\\t-\\t(.+)$/, (result, [file]) => {\n      result.changed++;\n\n      result.files.push({\n         file,\n         after: 0,\n         before: 0,\n         binary: true,\n      });\n   }),\n];\n\nconst nameOnlyParser = [\n   new LineParser<DiffResult>(/(.+)$/, (result, [file]) => {\n      result.changed++;\n      result.files.push({\n         file,\n         changes: 0,\n         insertions: 0,\n         deletions: 0,\n         binary: false,\n      });\n   }),\n];\n\nconst nameStatusParser = [\n   new LineParser<DiffResult>(\n      /([ACDMRTUXB])([0-9]{0,3})\\t(.[^\\t]*)(\\t(.[^\\t]*))?$/,\n      (result, [status, similarity, from, _to, to]) => {\n         result.changed++;\n         result.files.push({\n            file: to ?? from,\n            changes: 0,\n            insertions: 0,\n            deletions: 0,\n            binary: false,\n            status: orVoid(isDiffNameStatus(status) && status),\n            from: orVoid(!!to && from !== to && from),\n            similarity: asNumber(similarity),\n         });\n      }\n   ),\n];\n\nconst diffSummaryParsers: Record<LogFormat, LineParser<DiffResult>[]> = {\n   [LogFormat.NONE]: statParser,\n   [LogFormat.STAT]: statParser,\n   [LogFormat.NUM_STAT]: numStatParser,\n   [LogFormat.NAME_STATUS]: nameStatusParser,\n   [LogFormat.NAME_ONLY]: nameOnlyParser,\n};\n\nexport function getDiffParser(format = LogFormat.NONE) {\n   const parser = diffSummaryParsers[format];\n\n   return (stdOut: string) => parseStringResponse(new DiffSummary(), parser, stdOut, false);\n}\n","import type { ListLogLine, LogResult } from '../../typings';\nimport { LogFormat } from '../args/log-format';\nimport { toLinesWithContent } from '../utils';\nimport { getDiffParser } from './parse-diff-summary';\n\nexport const START_BOUNDARY = 'òòòòòò ';\n\nexport const COMMIT_BOUNDARY = ' òò';\n\nexport const SPLITTER = ' ò ';\n\nconst defaultFieldNames = ['hash', 'date', 'message', 'refs', 'author_name', 'author_email'];\n\nfunction lineBuilder(tokens: string[], fields: string[]): any {\n   return fields.reduce(\n      (line, field, index) => {\n         line[field] = tokens[index] || '';\n         return line;\n      },\n      Object.create({ diff: null }) as any\n   );\n}\n\nexport function createListLogSummaryParser<T = any>(\n   splitter = SPLITTER,\n   fields = defaultFieldNames,\n   logFormat = LogFormat.NONE\n) {\n   const parseDiffResult = getDiffParser(logFormat);\n\n   return function (stdOut: string): LogResult<T> {\n      const all: ReadonlyArray<T & ListLogLine> = toLinesWithContent(\n         stdOut.trim(),\n         false,\n         START_BOUNDARY\n      ).map(function (item) {\n         const lineDetail = item.split(COMMIT_BOUNDARY);\n         const listLogLine: T & ListLogLine = lineBuilder(lineDetail[0].split(splitter), fields);\n\n         if (lineDetail.length > 1 && lineDetail[1].trim()) {\n            listLogLine.diff = parseDiffResult(lineDetail[1]);\n         }\n\n         return listLogLine;\n      });\n\n      return {\n         all,\n         latest: (all.length && all[0]) || null,\n         total: all.length,\n      };\n   };\n}\n","import type { DiffResult } from '../../typings';\nimport { isLogFormat, LogFormat, logFormatFromCommand } from '../args/log-format';\nimport { getDiffParser } from '../parsers/parse-diff-summary';\nimport type { StringTask } from '../types';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nexport function diffSummaryTask(customArgs: string[]): StringTask<DiffResult> | EmptyTask {\n   let logFormat = logFormatFromCommand(customArgs);\n\n   const commands = ['diff'];\n\n   if (logFormat === LogFormat.NONE) {\n      logFormat = LogFormat.STAT;\n      commands.push('--stat=4096');\n   }\n\n   commands.push(...customArgs);\n\n   return (\n      validateLogFormatConfig(commands) || {\n         commands,\n         format: 'utf-8',\n         parser: getDiffParser(logFormat),\n      }\n   );\n}\n\nexport function validateLogFormatConfig(customArgs: unknown[]): EmptyTask | void {\n   const flags = customArgs.filter(isLogFormat);\n\n   if (flags.length > 1) {\n      return configurationErrorTask(\n         `Summary flags are mutually exclusive - pick one of ${flags.join(',')}`\n      );\n   }\n\n   if (flags.length && customArgs.includes('-z')) {\n      return configurationErrorTask(\n         `Summary flag ${flags} parsing is not compatible with null termination option '-z'`\n      );\n   }\n}\n","import { pathspec } from '@simple-git/args-pathspec';\n\nimport type { LogResult, Options, SimpleGit } from '../../typings';\nimport { logFormatFromCommand } from '../args/log-format';\nimport {\n   COMMIT_BOUNDARY,\n   createListLogSummaryParser,\n   SPLITTER,\n   START_BOUNDARY,\n} from '../parsers/parse-list-log-summary';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport type { StringTask } from '../types';\nimport {\n   appendTaskOptions,\n   asStringArray,\n   filterArray,\n   filterPlainObject,\n   filterString,\n   filterType,\n   trailingFunctionArgument,\n   trailingOptionsArgument,\n} from '../utils';\nimport { validateLogFormatConfig } from './diff';\nimport { configurationErrorTask } from './task';\n\nenum excludeOptions {\n   '--pretty',\n   'max-count',\n   'maxCount',\n   'n',\n   'file',\n   'format',\n   'from',\n   'to',\n   'splitter',\n   'symmetric',\n   'mailMap',\n   'multiLine',\n   'strictDate',\n}\n\nexport interface DefaultLogFields {\n   hash: string;\n   date: string;\n   message: string;\n   refs: string;\n   body: string;\n   author_name: string;\n   author_email: string;\n}\n\nexport type LogOptions<T = DefaultLogFields> = {\n   file?: string;\n   format?: T;\n   from?: string;\n   mailMap?: boolean;\n   maxCount?: number;\n   multiLine?: boolean;\n   splitter?: string;\n   strictDate?: boolean;\n   symmetric?: boolean;\n   to?: string;\n};\n\ninterface ParsedLogOptions {\n   fields: string[];\n   splitter: string;\n   commands: string[];\n}\n\nfunction prettyFormat(\n   format: Record<string, string | unknown>,\n   splitter: string\n): [string[], string] {\n   const fields: string[] = [];\n   const formatStr: string[] = [];\n\n   Object.keys(format).forEach((field) => {\n      fields.push(field);\n      formatStr.push(String(format[field]));\n   });\n\n   return [fields, formatStr.join(splitter)];\n}\n\nfunction userOptions<T extends Options>(input: T): Options {\n   return Object.keys(input).reduce((out, key) => {\n      if (!(key in excludeOptions)) {\n         out[key] = input[key];\n      }\n      return out;\n   }, {} as Options);\n}\n\nexport function parseLogOptions<T extends Options>(\n   opt: Options | LogOptions<T> = {},\n   customArgs: string[] = []\n): ParsedLogOptions {\n   const splitter = filterType(opt.splitter, filterString, SPLITTER);\n   const format = filterPlainObject(opt.format)\n      ? opt.format\n      : {\n           hash: '%H',\n           date: opt.strictDate === false ? '%ai' : '%aI',\n           message: '%s',\n           refs: '%D',\n           body: opt.multiLine ? '%B' : '%b',\n           author_name: opt.mailMap !== false ? '%aN' : '%an',\n           author_email: opt.mailMap !== false ? '%aE' : '%ae',\n        };\n\n   const [fields, formatStr] = prettyFormat(format, splitter);\n\n   const suffix: string[] = [];\n   const command: string[] = [\n      `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`,\n      ...customArgs,\n   ];\n\n   const maxCount: number | undefined = (opt as any).n || (opt as any)['max-count'] || opt.maxCount;\n   if (maxCount) {\n      command.push(`--max-count=${maxCount}`);\n   }\n\n   if (opt.from || opt.to) {\n      const rangeOperator = opt.symmetric !== false ? '...' : '..';\n      suffix.push(`${opt.from || ''}${rangeOperator}${opt.to || ''}`);\n   }\n\n   if (filterString(opt.file)) {\n      command.push('--follow', pathspec(opt.file));\n   }\n\n   appendTaskOptions(userOptions(opt as Options), command);\n\n   return {\n      fields,\n      splitter,\n      commands: [...command, ...suffix],\n   };\n}\n\nexport function logTask<T>(\n   splitter: string,\n   fields: string[],\n   customArgs: string[]\n): StringTask<LogResult<T>> {\n   const parser = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs));\n\n   return {\n      commands: ['log', ...customArgs],\n      format: 'utf-8',\n      parser,\n   };\n}\n\nexport default function (): Pick<SimpleGit, 'log'> {\n   return {\n      log<T extends Options>(this: SimpleGitApi, ...rest: unknown[]) {\n         const next = trailingFunctionArgument(arguments);\n         const options = parseLogOptions<T>(\n            trailingOptionsArgument(arguments),\n            asStringArray(filterType(arguments[0], filterArray, []))\n         );\n         const task =\n            rejectDeprecatedSignatures(...rest) ||\n            validateLogFormatConfig(options.commands) ||\n            createLogTask(options);\n\n         return this._runTask(task, next);\n      },\n   };\n\n   function createLogTask(options: ParsedLogOptions) {\n      return logTask(options.splitter, options.fields, options.commands);\n   }\n\n   function rejectDeprecatedSignatures(from?: unknown, to?: unknown) {\n      return (\n         filterString(from) &&\n         filterString(to) &&\n         configurationErrorTask(\n            `git.log(string, string) should be replaced with git.log({ from: string, to: string })`\n         )\n      );\n   }\n}\n","import type {\n   MergeConflict,\n   MergeConflictDeletion,\n   MergeDetail,\n   MergeResultStatus,\n} from '../../typings';\n\nexport class MergeSummaryConflict implements MergeConflict {\n   constructor(\n      public readonly reason: string,\n      public readonly file: string | null = null,\n      public readonly meta?: MergeConflictDeletion\n   ) {}\n\n   toString() {\n      return `${this.file}:${this.reason}`;\n   }\n}\n\nexport class MergeSummaryDetail implements MergeDetail {\n   public conflicts: MergeConflict[] = [];\n   public merges: string[] = [];\n   public result: MergeResultStatus = 'success';\n\n   get failed() {\n      return this.conflicts.length > 0;\n   }\n\n   get reason() {\n      return this.result;\n   }\n\n   toString() {\n      if (this.conflicts.length) {\n         return `CONFLICTS: ${this.conflicts.join(', ')}`;\n      }\n\n      return 'OK';\n   }\n}\n","import type {\n   PullDetailFileChanges,\n   PullDetailSummary,\n   PullFailedResult,\n   PullResult,\n} from '../../typings';\n\nexport class PullSummary implements PullResult {\n   public remoteMessages = {\n      all: [],\n   };\n   public created = [];\n   public deleted: string[] = [];\n   public files: string[] = [];\n   public deletions: PullDetailFileChanges = {};\n   public insertions: PullDetailFileChanges = {};\n   public summary: PullDetailSummary = {\n      changes: 0,\n      deletions: 0,\n      insertions: 0,\n   };\n}\n\nexport class PullFailedSummary implements PullFailedResult {\n   remote = '';\n   hash = {\n      local: '',\n      remote: '',\n   };\n   branch = {\n      local: '',\n      remote: '',\n   };\n   message = '';\n\n   toString() {\n      return this.message;\n   }\n}\n","import type {\n   RemoteMessageResult,\n   RemoteMessages,\n   RemoteMessagesObjectEnumeration,\n} from '../../typings';\nimport { asNumber, RemoteLineParser } from '../utils';\n\nfunction objectEnumerationResult<T extends RemoteMessages = RemoteMessages>(\n   remoteMessages: T\n): RemoteMessagesObjectEnumeration {\n   return (remoteMessages.objects = remoteMessages.objects || {\n      compressing: 0,\n      counting: 0,\n      enumerating: 0,\n      packReused: 0,\n      reused: { count: 0, delta: 0 },\n      total: { count: 0, delta: 0 },\n   });\n}\n\nfunction asObjectCount(source: string) {\n   const count = /^\\s*(\\d+)/.exec(source);\n   const delta = /delta (\\d+)/i.exec(source);\n\n   return {\n      count: asNumber((count && count[1]) || '0'),\n      delta: asNumber((delta && delta[1]) || '0'),\n   };\n}\n\nexport const remoteMessagesObjectParsers: RemoteLineParser<RemoteMessageResult<RemoteMessages>>[] =\n   [\n      new RemoteLineParser(\n         /^remote:\\s*(enumerating|counting|compressing) objects: (\\d+),/i,\n         (result, [action, count]) => {\n            const key = action.toLowerCase();\n            const enumeration = objectEnumerationResult(result.remoteMessages);\n\n            Object.assign(enumeration, { [key]: asNumber(count) });\n         }\n      ),\n      new RemoteLineParser(\n         /^remote:\\s*(enumerating|counting|compressing) objects: \\d+% \\(\\d+\\/(\\d+)\\),/i,\n         (result, [action, count]) => {\n            const key = action.toLowerCase();\n            const enumeration = objectEnumerationResult(result.remoteMessages);\n\n            Object.assign(enumeration, { [key]: asNumber(count) });\n         }\n      ),\n      new RemoteLineParser(\n         /total ([^,]+), reused ([^,]+), pack-reused (\\d+)/i,\n         (result, [total, reused, packReused]) => {\n            const objects = objectEnumerationResult(result.remoteMessages);\n            objects.total = asObjectCount(total);\n            objects.reused = asObjectCount(reused);\n            objects.packReused = asNumber(packReused);\n         }\n      ),\n   ];\n","import type { PushResultRemoteMessages, RemoteMessageResult, RemoteMessages } from '../../typings';\nimport { asNumber, parseStringResponse, RemoteLineParser } from '../utils';\nimport { remoteMessagesObjectParsers } from './parse-remote-objects';\n\nconst parsers: RemoteLineParser<RemoteMessageResult<PushResultRemoteMessages | RemoteMessages>>[] =\n   [\n      new RemoteLineParser(/^remote:\\s*(.+)$/, (result, [text]) => {\n         result.remoteMessages.all.push(text.trim());\n         return false;\n      }),\n      ...remoteMessagesObjectParsers,\n      new RemoteLineParser(\n         [/create a (?:pull|merge) request/i, /\\s(https?:\\/\\/\\S+)$/],\n         (result, [pullRequestUrl]) => {\n            (result.remoteMessages as PushResultRemoteMessages).pullRequestUrl = pullRequestUrl;\n         }\n      ),\n      new RemoteLineParser(\n         [/found (\\d+) vulnerabilities.+\\(([^)]+)\\)/i, /\\s(https?:\\/\\/\\S+)$/],\n         (result, [count, summary, url]) => {\n            (result.remoteMessages as PushResultRemoteMessages).vulnerabilities = {\n               count: asNumber(count),\n               summary,\n               url,\n            };\n         }\n      ),\n   ];\n\nexport function parseRemoteMessages<T extends RemoteMessages = RemoteMessages>(\n   _stdOut: string,\n   stdErr: string\n): RemoteMessageResult {\n   return parseStringResponse({ remoteMessages: new RemoteMessageSummary() as T }, parsers, stdErr);\n}\n\nexport class RemoteMessageSummary implements RemoteMessages {\n   public readonly all: string[] = [];\n}\n","import type { PullDetail, PullFailedResult, PullResult, RemoteMessages } from '../../typings';\nimport { PullFailedSummary, PullSummary } from '../responses/PullSummary';\nimport type { TaskParser } from '../types';\nimport { append, LineParser, parseStringResponse } from '../utils';\nimport { parseRemoteMessages } from './parse-remote-messages';\n\nconst FILE_UPDATE_REGEX = /^\\s*(.+?)\\s+\\|\\s+\\d+\\s*(\\+*)(-*)/;\nconst SUMMARY_REGEX = /(\\d+)\\D+((\\d+)\\D+\\(\\+\\))?(\\D+(\\d+)\\D+\\(-\\))?/;\nconst ACTION_REGEX = /^(create|delete) mode \\d+ (.+)/;\n\nconst parsers: LineParser<PullResult>[] = [\n   new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => {\n      result.files.push(file);\n\n      if (insertions) {\n         result.insertions[file] = insertions.length;\n      }\n\n      if (deletions) {\n         result.deletions[file] = deletions.length;\n      }\n   }),\n   new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => {\n      if (insertions !== undefined || deletions !== undefined) {\n         result.summary.changes = +changes || 0;\n         result.summary.insertions = +insertions || 0;\n         result.summary.deletions = +deletions || 0;\n         return true;\n      }\n      return false;\n   }),\n   new LineParser(ACTION_REGEX, (result, [action, file]) => {\n      append(result.files, file);\n      append(action === 'create' ? result.created : result.deleted, file);\n   }),\n];\n\nconst errorParsers: LineParser<PullFailedResult>[] = [\n   new LineParser(/^from\\s(.+)$/i, (result, [remote]) => void (result.remote = remote)),\n   new LineParser(/^fatal:\\s(.+)$/, (result, [message]) => void (result.message = message)),\n   new LineParser(\n      /([a-z0-9]+)\\.\\.([a-z0-9]+)\\s+(\\S+)\\s+->\\s+(\\S+)$/,\n      (result, [hashLocal, hashRemote, branchLocal, branchRemote]) => {\n         result.branch.local = branchLocal;\n         result.hash.local = hashLocal;\n         result.branch.remote = branchRemote;\n         result.hash.remote = hashRemote;\n      }\n   ),\n];\n\nexport const parsePullDetail: TaskParser<string, PullDetail> = (stdOut, stdErr) => {\n   return parseStringResponse(new PullSummary(), parsers, [stdOut, stdErr]);\n};\n\nexport const parsePullResult: TaskParser<string, PullResult> = (stdOut, stdErr) => {\n   return Object.assign(\n      new PullSummary(),\n      parsePullDetail(stdOut, stdErr),\n      parseRemoteMessages<RemoteMessages>(stdOut, stdErr)\n   );\n};\n\nexport function parsePullErrorResult(stdOut: string, stdErr: string) {\n   const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]);\n\n   return pullError.message && pullError;\n}\n","import type { MergeDetail, MergeResult } from '../../typings';\nimport { MergeSummaryConflict, MergeSummaryDetail } from '../responses/MergeSummary';\nimport type { TaskParser } from '../types';\nimport { LineParser, parseStringResponse } from '../utils';\nimport { parsePullResult } from './parse-pull';\n\nconst parsers: LineParser<MergeDetail>[] = [\n   new LineParser(/^Auto-merging\\s+(.+)$/, (summary, [autoMerge]) => {\n      summary.merges.push(autoMerge);\n   }),\n   new LineParser(/^CONFLICT\\s+\\((.+)\\): Merge conflict in (.+)$/, (summary, [reason, file]) => {\n      summary.conflicts.push(new MergeSummaryConflict(reason, file));\n   }),\n   new LineParser(\n      /^CONFLICT\\s+\\((.+\\/delete)\\): (.+) deleted in (.+) and/,\n      (summary, [reason, file, deleteRef]) => {\n         summary.conflicts.push(new MergeSummaryConflict(reason, file, { deleteRef }));\n      }\n   ),\n   new LineParser(/^CONFLICT\\s+\\((.+)\\):/, (summary, [reason]) => {\n      summary.conflicts.push(new MergeSummaryConflict(reason, null));\n   }),\n   new LineParser(/^Automatic merge failed;\\s+(.+)$/, (summary, [result]) => {\n      summary.result = result;\n   }),\n];\n\n/**\n * Parse the complete response from `git.merge`\n */\nexport const parseMergeResult: TaskParser<string, MergeResult> = (stdOut, stdErr) => {\n   return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr));\n};\n\n/**\n * Parse the merge specific detail (ie: not the content also available in the pull detail) from `git.mnerge`\n * @param stdOut\n */\nexport const parseMergeDetail: TaskParser<string, MergeDetail> = (stdOut) => {\n   return parseStringResponse(new MergeSummaryDetail(), parsers, stdOut);\n};\n","import type { MergeResult } from '../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parseMergeResult } from '../parsers/parse-merge';\nimport type { StringTask } from '../types';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nexport function mergeTask(customArgs: string[]): EmptyTask | StringTask<MergeResult> {\n   if (!customArgs.length) {\n      return configurationErrorTask('Git.merge requires at least one option');\n   }\n\n   return {\n      commands: ['merge', ...customArgs],\n      format: 'utf-8',\n      parser(stdOut, stdErr): MergeResult {\n         const merge = parseMergeResult(stdOut, stdErr);\n         if (merge.failed) {\n            throw new GitResponseError(merge);\n         }\n\n         return merge;\n      },\n   };\n}\n","import type {\n   PushDetail,\n   PushResult,\n   PushResultPushedItem,\n   PushResultRemoteMessages,\n} from '../../typings';\nimport type { TaskParser } from '../types';\nimport { LineParser, parseStringResponse } from '../utils';\nimport { parseRemoteMessages } from './parse-remote-messages';\n\nfunction pushResultPushedItem(local: string, remote: string, status: string): PushResultPushedItem {\n   const deleted = status.includes('deleted');\n   const tag = status.includes('tag') || /^refs\\/tags/.test(local);\n   const alreadyUpdated = !status.includes('new');\n\n   return {\n      deleted,\n      tag,\n      branch: !tag,\n      new: !alreadyUpdated,\n      alreadyUpdated,\n      local,\n      remote,\n   };\n}\n\nconst parsers: LineParser<PushDetail>[] = [\n   new LineParser(/^Pushing to (.+)$/, (result, [repo]) => {\n      result.repo = repo;\n   }),\n   new LineParser(/^updating local tracking ref '(.+)'/, (result, [local]) => {\n      result.ref = {\n         ...(result.ref || {}),\n         local,\n      };\n   }),\n   new LineParser(/^[=*-]\\s+([^:]+):(\\S+)\\s+\\[(.+)]$/, (result, [local, remote, type]) => {\n      result.pushed.push(pushResultPushedItem(local, remote, type));\n   }),\n   new LineParser(\n      /^Branch '([^']+)' set up to track remote branch '([^']+)' from '([^']+)'/,\n      (result, [local, remote, remoteName]) => {\n         result.branch = {\n            ...(result.branch || {}),\n            local,\n            remote,\n            remoteName,\n         };\n      }\n   ),\n   new LineParser(\n      /^([^:]+):(\\S+)\\s+([a-z0-9]+)\\.\\.([a-z0-9]+)$/,\n      (result, [local, remote, from, to]) => {\n         result.update = {\n            head: {\n               local,\n               remote,\n            },\n            hash: {\n               from,\n               to,\n            },\n         };\n      }\n   ),\n];\n\nexport const parsePushResult: TaskParser<string, PushResult> = (stdOut, stdErr) => {\n   const pushDetail = parsePushDetail(stdOut, stdErr);\n   const responseDetail = parseRemoteMessages<PushResultRemoteMessages>(stdOut, stdErr);\n\n   return {\n      ...pushDetail,\n      ...responseDetail,\n   };\n};\n\nexport const parsePushDetail: TaskParser<string, PushDetail> = (stdOut, stdErr) => {\n   return parseStringResponse({ pushed: [] }, parsers, [stdOut, stdErr]);\n};\n","import type { PushResult } from '../../typings';\nimport { parsePushResult as parser } from '../parsers/parse-push';\nimport type { StringTask } from '../types';\nimport { append, remove } from '../utils';\n\ntype PushRef = { remote?: string; branch?: string };\n\nexport function pushTagsTask(ref: PushRef = {}, customArgs: string[]): StringTask<PushResult> {\n   append(customArgs, '--tags');\n   return pushTask(ref, customArgs);\n}\n\nexport function pushTask(ref: PushRef = {}, customArgs: string[]): StringTask<PushResult> {\n   const commands = ['push', ...customArgs];\n   if (ref.branch) {\n      commands.splice(1, 0, ref.branch);\n   }\n   if (ref.remote) {\n      commands.splice(1, 0, ref.remote);\n   }\n\n   remove(commands, '-v');\n   append(commands, '--verbose');\n   append(commands, '--porcelain');\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser,\n   };\n}\n","import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { getTrailingOptions, trailingFunctionArgument } from '../utils';\nimport { straightThroughBufferTask, straightThroughStringTask } from './task';\n\nexport default function (): Pick<SimpleGit, 'showBuffer' | 'show'> {\n   return {\n      showBuffer(this: SimpleGitApi) {\n         const commands = ['show', ...getTrailingOptions(arguments, 1)];\n         if (!commands.includes('--binary')) {\n            commands.splice(1, 0, '--binary');\n         }\n\n         return this._runTask(\n            straightThroughBufferTask(commands),\n            trailingFunctionArgument(arguments)\n         );\n      },\n\n      show(this: SimpleGitApi) {\n         const commands = ['show', ...getTrailingOptions(arguments, 1)];\n         return this._runTask(\n            straightThroughStringTask(commands),\n            trailingFunctionArgument(arguments)\n         );\n      },\n   };\n}\n","import type { FileStatusResult } from '../../typings';\n\nexport const fromPathRegex = /^(.+)\\0(.+)$/;\n\nexport class FileStatusSummary implements FileStatusResult {\n   public readonly from: string | undefined;\n\n   constructor(\n      public path: string,\n      public index: string,\n      public working_dir: string\n   ) {\n      if (index === 'R' || working_dir === 'R') {\n         const detail = fromPathRegex.exec(path) || [null, path, path];\n         this.from = detail[2] || '';\n         this.path = detail[1] || '';\n      }\n   }\n}\n","import type { StatusResult } from '../../typings';\nimport { filterString, filterType, NULL } from '../utils';\nimport { FileStatusSummary } from './FileStatusSummary';\n\ntype StatusLineParser = (result: StatusResult, file: string) => void;\n\nexport class StatusSummary implements StatusResult {\n   public not_added = [];\n   public conflicted = [];\n   public created = [];\n   public deleted = [];\n   public ignored = undefined;\n   public modified = [];\n   public renamed = [];\n   public files = [];\n   public staged = [];\n   public ahead = 0;\n   public behind = 0;\n   public current = null;\n   public tracking = null;\n   public detached = false;\n\n   public isClean = () => {\n      return !this.files.length;\n   };\n}\n\nenum PorcelainFileStatus {\n   ADDED = 'A',\n   DELETED = 'D',\n   MODIFIED = 'M',\n   RENAMED = 'R',\n   COPIED = 'C',\n   UNMERGED = 'U',\n   UNTRACKED = '?',\n   IGNORED = '!',\n   NONE = ' ',\n}\n\nfunction renamedFile(line: string) {\n   const [to, from] = line.split(NULL);\n\n   return {\n      from: from || to,\n      to,\n   };\n}\n\nfunction parser(\n   indexX: PorcelainFileStatus,\n   indexY: PorcelainFileStatus,\n   handler: StatusLineParser\n): [string, StatusLineParser] {\n   return [`${indexX}${indexY}`, handler];\n}\n\nfunction conflicts(indexX: PorcelainFileStatus, ...indexY: PorcelainFileStatus[]) {\n   return indexY.map((y) => parser(indexX, y, (result, file) => result.conflicted.push(file)));\n}\n\nconst parsers: Map<string, StatusLineParser> = new Map([\n   parser(PorcelainFileStatus.NONE, PorcelainFileStatus.ADDED, (result, file) =>\n      result.created.push(file)\n   ),\n   parser(PorcelainFileStatus.NONE, PorcelainFileStatus.DELETED, (result, file) =>\n      result.deleted.push(file)\n   ),\n   parser(PorcelainFileStatus.NONE, PorcelainFileStatus.MODIFIED, (result, file) =>\n      result.modified.push(file)\n   ),\n\n   parser(PorcelainFileStatus.ADDED, PorcelainFileStatus.NONE, (result, file) => {\n      result.created.push(file);\n      result.staged.push(file);\n   }),\n   parser(PorcelainFileStatus.ADDED, PorcelainFileStatus.MODIFIED, (result, file) => {\n      result.created.push(file);\n      result.staged.push(file);\n      result.modified.push(file);\n   }),\n\n   parser(PorcelainFileStatus.DELETED, PorcelainFileStatus.NONE, (result, file) => {\n      result.deleted.push(file);\n      result.staged.push(file);\n   }),\n\n   parser(PorcelainFileStatus.MODIFIED, PorcelainFileStatus.NONE, (result, file) => {\n      result.modified.push(file);\n      result.staged.push(file);\n   }),\n   parser(PorcelainFileStatus.MODIFIED, PorcelainFileStatus.MODIFIED, (result, file) => {\n      result.modified.push(file);\n      result.staged.push(file);\n   }),\n\n   parser(PorcelainFileStatus.RENAMED, PorcelainFileStatus.NONE, (result, file) => {\n      result.renamed.push(renamedFile(file));\n   }),\n   parser(PorcelainFileStatus.RENAMED, PorcelainFileStatus.MODIFIED, (result, file) => {\n      const renamed = renamedFile(file);\n      result.renamed.push(renamed);\n      result.modified.push(renamed.to);\n   }),\n   parser(PorcelainFileStatus.IGNORED, PorcelainFileStatus.IGNORED, (_result, _file) => {\n      (_result.ignored = _result.ignored || []).push(_file);\n   }),\n\n   parser(PorcelainFileStatus.UNTRACKED, PorcelainFileStatus.UNTRACKED, (result, file) =>\n      result.not_added.push(file)\n   ),\n\n   ...conflicts(PorcelainFileStatus.ADDED, PorcelainFileStatus.ADDED, PorcelainFileStatus.UNMERGED),\n   ...conflicts(\n      PorcelainFileStatus.DELETED,\n      PorcelainFileStatus.DELETED,\n      PorcelainFileStatus.UNMERGED\n   ),\n   ...conflicts(\n      PorcelainFileStatus.UNMERGED,\n      PorcelainFileStatus.ADDED,\n      PorcelainFileStatus.DELETED,\n      PorcelainFileStatus.UNMERGED\n   ),\n\n   [\n      '##',\n      (result, line) => {\n         const aheadReg = /ahead (\\d+)/;\n         const behindReg = /behind (\\d+)/;\n         const currentReg = /^(.+?(?=(?:\\.{3}|\\s|$)))/;\n         const trackingReg = /\\.{3}(\\S*)/;\n         const onEmptyBranchReg = /\\son\\s(\\S+?)(?=\\.{3}|$)/;\n\n         let regexResult = aheadReg.exec(line);\n         result.ahead = (regexResult && +regexResult[1]) || 0;\n\n         regexResult = behindReg.exec(line);\n         result.behind = (regexResult && +regexResult[1]) || 0;\n\n         regexResult = currentReg.exec(line);\n         result.current = filterType(regexResult?.[1], filterString, null);\n\n         regexResult = trackingReg.exec(line);\n         result.tracking = filterType(regexResult?.[1], filterString, null);\n\n         regexResult = onEmptyBranchReg.exec(line);\n         if (regexResult) {\n            result.current = filterType(regexResult?.[1], filterString, result.current);\n         }\n\n         result.detached = /\\(no branch\\)/.test(line);\n      },\n   ],\n]);\n\nexport const parseStatusSummary = function (text: string): StatusResult {\n   const lines = text.split(NULL);\n   const status = new StatusSummary();\n\n   for (let i = 0, l = lines.length; i < l; ) {\n      let line = lines[i++].trim();\n\n      if (!line) {\n         continue;\n      }\n\n      if (line.charAt(0) === PorcelainFileStatus.RENAMED) {\n         line += NULL + (lines[i++] || '');\n      }\n\n      splitLine(status, line);\n   }\n\n   return status;\n};\n\nfunction splitLine(result: StatusResult, lineStr: string) {\n   const trimmed = lineStr.trim();\n   switch (' ') {\n      case trimmed.charAt(2):\n         return data(trimmed.charAt(0), trimmed.charAt(1), trimmed.slice(3));\n      case trimmed.charAt(1):\n         return data(PorcelainFileStatus.NONE, trimmed.charAt(0), trimmed.slice(2));\n      default:\n         return;\n   }\n\n   function data(index: string, workingDir: string, path: string) {\n      const raw = `${index}${workingDir}`;\n      const handler = parsers.get(raw);\n\n      if (handler) {\n         handler(result, path);\n      }\n\n      if (raw !== '##' && raw !== '!!') {\n         result.files.push(new FileStatusSummary(path, index, workingDir));\n      }\n   }\n}\n","import type { StatusResult } from '../../typings';\nimport { parseStatusSummary } from '../responses/StatusSummary';\nimport type { StringTask } from '../types';\n\nconst ignoredOptions = ['--null', '-z'];\n\nexport function statusTask(customArgs: string[]): StringTask<StatusResult> {\n   const commands = [\n      'status',\n      '--porcelain',\n      '-b',\n      '-u',\n      '--null',\n      ...customArgs.filter((arg) => !ignoredOptions.includes(arg)),\n   ];\n\n   return {\n      format: 'utf-8',\n      commands,\n      parser(text: string) {\n         return parseStatusSummary(text);\n      },\n   };\n}\n","import type { SimpleGit } from '../../typings';\nimport type { SimpleGitApi } from '../simple-git-api';\nimport { asNumber, ExitCodes, LineParser, parseStringResponse } from '../utils';\n\nexport interface VersionResult {\n   major: number;\n   minor: number;\n   patch: number | string;\n   agent: string;\n   installed: boolean;\n}\n\nconst NOT_INSTALLED = 'installed=false';\n\nfunction versionResponse(\n   major = 0,\n   minor = 0,\n   patch: string | number = 0,\n   agent = '',\n   installed = true\n): VersionResult {\n   return Object.defineProperty(\n      {\n         major,\n         minor,\n         patch,\n         agent,\n         installed,\n      },\n      'toString',\n      {\n         value() {\n            return `${this.major}.${this.minor}.${this.patch}`;\n         },\n         configurable: false,\n         enumerable: false,\n      }\n   );\n}\n\nfunction notInstalledResponse() {\n   return versionResponse(0, 0, 0, '', false);\n}\n\nexport default function (): Pick<SimpleGit, 'version'> {\n   return {\n      version(this: SimpleGitApi) {\n         return this._runTask({\n            commands: ['--version'],\n            format: 'utf-8',\n            parser: versionParser,\n            onError(result, error, done, fail) {\n               if (result.exitCode === ExitCodes.NOT_FOUND) {\n                  return done(Buffer.from(NOT_INSTALLED));\n               }\n\n               fail(error);\n            },\n         });\n      },\n   };\n}\n\nconst parsers: LineParser<VersionResult>[] = [\n   new LineParser(\n      /version (\\d+)\\.(\\d+)\\.(\\d+)(?:\\s*\\((.+)\\))?/,\n      (result, [major, minor, patch, agent = '']) => {\n         Object.assign(\n            result,\n            versionResponse(asNumber(major), asNumber(minor), asNumber(patch), agent)\n         );\n      }\n   ),\n   new LineParser(\n      /version (\\d+)\\.(\\d+)\\.(\\D+)(.+)?$/,\n      (result, [major, minor, patch, agent = '']) => {\n         Object.assign(result, versionResponse(asNumber(major), asNumber(minor), patch, agent));\n      }\n   ),\n];\n\nfunction versionParser(stdOut: string) {\n   if (stdOut === NOT_INSTALLED) {\n      return notInstalledResponse();\n   }\n\n   return parseStringResponse(versionResponse(0, 0, 0, stdOut), parsers, stdOut);\n}\n","import type { SimpleGitBase } from '../typings';\nimport { taskCallback } from './task-callback';\nimport { changeWorkingDirectoryTask } from './tasks/change-working-directory';\nimport checkout from './tasks/checkout';\nimport clone from './tasks/clone';\nimport commit from './tasks/commit';\nimport config from './tasks/config';\nimport countObjects from './tasks/count-objects';\nimport firstCommit from './tasks/first-commit';\nimport grep from './tasks/grep';\nimport { hashObjectTask } from './tasks/hash-object';\nimport { initTask } from './tasks/init';\nimport interpretTrailers from './tasks/interpret-trailers';\nimport log from './tasks/log';\nimport { mergeTask } from './tasks/merge';\nimport { pushTask } from './tasks/push';\nimport show from './tasks/show';\nimport { statusTask } from './tasks/status';\nimport { configurationErrorTask, straightThroughStringTask } from './tasks/task';\nimport version from './tasks/version';\nimport type {\n   outputHandler,\n   SimpleGitExecutor,\n   SimpleGitTask,\n   SimpleGitTaskCallback,\n} from './types';\nimport {\n   asArray,\n   filterString,\n   filterType,\n   getTrailingOptions,\n   trailingFunctionArgument,\n} from './utils';\n\nexport class SimpleGitApi implements SimpleGitBase {\n   constructor(private _executor: SimpleGitExecutor) {}\n\n   protected _runTask<T>(task: SimpleGitTask<T>, then?: SimpleGitTaskCallback<T>) {\n      const chain = this._executor.chain();\n      const promise = chain.push(task);\n\n      if (then) {\n         taskCallback(task, promise, then);\n      }\n\n      return Object.create(this, {\n         then: { value: promise.then.bind(promise) },\n         catch: { value: promise.catch.bind(promise) },\n         _executor: { value: chain },\n      });\n   }\n\n   add(files: string | string[]) {\n      return this._runTask(\n         straightThroughStringTask(['add', ...asArray(files)]),\n         trailingFunctionArgument(arguments)\n      );\n   }\n\n   cwd(directory: string | { path: string; root?: boolean }) {\n      const next = trailingFunctionArgument(arguments);\n\n      if (typeof directory === 'string') {\n         return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next);\n      }\n\n      if (typeof directory?.path === 'string') {\n         return this._runTask(\n            changeWorkingDirectoryTask(\n               directory.path,\n               (directory.root && this._executor) || undefined\n            ),\n            next\n         );\n      }\n\n      return this._runTask(\n         configurationErrorTask('Git.cwd: workingDirectory must be supplied as a string'),\n         next\n      );\n   }\n\n   hashObject(path: string, write: boolean | unknown) {\n      return this._runTask(\n         hashObjectTask(path, write === true),\n         trailingFunctionArgument(arguments)\n      );\n   }\n\n   init(bare?: boolean | unknown) {\n      return this._runTask(\n         initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)),\n         trailingFunctionArgument(arguments)\n      );\n   }\n\n   merge() {\n      return this._runTask(\n         mergeTask(getTrailingOptions(arguments)),\n         trailingFunctionArgument(arguments)\n      );\n   }\n\n   mergeFromTo(remote: string, branch: string) {\n      if (!(filterString(remote) && filterString(branch))) {\n         return this._runTask(\n            configurationErrorTask(\n               `Git.mergeFromTo requires that the 'remote' and 'branch' arguments are supplied as strings`\n            )\n         );\n      }\n\n      return this._runTask(\n         mergeTask([remote, branch, ...getTrailingOptions(arguments)]),\n         trailingFunctionArgument(arguments, false)\n      );\n   }\n\n   outputHandler(handler: outputHandler) {\n      this._executor.outputHandler = handler;\n      return this;\n   }\n\n   push() {\n      const task = pushTask(\n         {\n            remote: filterType(arguments[0], filterString),\n            branch: filterType(arguments[1], filterString),\n         },\n         getTrailingOptions(arguments)\n      );\n\n      return this._runTask(task, trailingFunctionArgument(arguments));\n   }\n\n   stash() {\n      return this._runTask(\n         straightThroughStringTask(['stash', ...getTrailingOptions(arguments)]),\n         trailingFunctionArgument(arguments)\n      );\n   }\n\n   status() {\n      return this._runTask(\n         statusTask(getTrailingOptions(arguments)),\n         trailingFunctionArgument(arguments)\n      );\n   }\n}\n\nObject.assign(\n   SimpleGitApi.prototype,\n   checkout(),\n   clone(),\n   commit(),\n   config(),\n   countObjects(),\n   firstCommit(),\n   grep(),\n   interpretTrailers(),\n   log(),\n   show(),\n   version()\n);\n","import { createDeferred, type DeferredPromise } from '@kwsites/promise-deferred';\n\nimport { createLogger } from '../git-logger';\nimport { append, remove } from '../utils';\n\ntype ScheduleCompleteCallback = () => void;\ntype ScheduledTask = Pick<DeferredPromise<ScheduleCompleteCallback>, 'promise' | 'done'> & {\n   id: number;\n};\n\nconst createScheduledTask: () => ScheduledTask = (() => {\n   let id = 0;\n   return () => {\n      id++;\n      const { promise, done } = createDeferred<ScheduleCompleteCallback>();\n\n      return {\n         promise,\n         done,\n         id,\n      };\n   };\n})();\n\nexport class Scheduler {\n   private logger = createLogger('', 'scheduler');\n   private pending: ScheduledTask[] = [];\n   private running: ScheduledTask[] = [];\n\n   constructor(private concurrency = 2) {\n      this.logger(`Constructed, concurrency=%s`, concurrency);\n   }\n\n   private schedule() {\n      if (!this.pending.length || this.running.length >= this.concurrency) {\n         this.logger(\n            `Schedule attempt ignored, pending=%s running=%s concurrency=%s`,\n            this.pending.length,\n            this.running.length,\n            this.concurrency\n         );\n         return;\n      }\n\n      const task = append(this.running, this.pending.shift()!);\n      this.logger(`Attempting id=%s`, task.id);\n      task.done(() => {\n         this.logger(`Completing id=`, task.id);\n         remove(this.running, task);\n         this.schedule();\n      });\n   }\n\n   next(): Promise<ScheduleCompleteCallback> {\n      const { promise, id } = append(this.pending, createScheduledTask());\n      this.logger(`Scheduling id=%s`, id);\n\n      this.schedule();\n\n      return promise;\n   }\n}\n","import type { OptionFlags, Options, StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport type ApplyOptions = Options &\n   OptionFlags<\n      | '--stat'\n      | '--numstat'\n      | '--summary'\n      | '--check'\n      | '--index'\n      | '--intent-to-add'\n      | '--3way'\n      | '--apply'\n      | '--no-add'\n      | '-R'\n      | '--reverse'\n      | '--allow-binary-replacement'\n      | '--binary'\n      | '--reject'\n      | '-z'\n      | '--inaccurate-eof'\n      | '--recount'\n      | '--cached'\n      | '--ignore-space-change'\n      | '--ignore-whitespace'\n      | '--verbose'\n      | '--unsafe-paths'\n   > &\n   OptionFlags<'--whitespace', 'nowarn' | 'warn' | 'fix' | 'error' | 'error-all'> &\n   OptionFlags<'--build-fake-ancestor' | '--exclude' | '--include' | '--directory', string> &\n   OptionFlags<'-p' | '-C', number>;\n\nexport function applyPatchTask(patches: string[], customArgs: string[]): StringTask<string> {\n   return straightThroughStringTask(['apply', ...customArgs, ...patches]);\n}\n","import type { BranchSummary, BranchSummaryBranch } from '../../typings';\n\nexport enum BranchStatusIdentifier {\n   CURRENT = '*',\n   LINKED = '+',\n}\n\nexport class BranchSummaryResult implements BranchSummary {\n   public all: string[] = [];\n   public branches: { [p: string]: BranchSummaryBranch } = {};\n   public current: string = '';\n   public detached: boolean = false;\n\n   push(\n      status: BranchStatusIdentifier | unknown,\n      detached: boolean,\n      name: string,\n      commit: string,\n      label: string\n   ) {\n      if (status === BranchStatusIdentifier.CURRENT) {\n         this.detached = detached;\n         this.current = name;\n      }\n\n      this.all.push(name);\n      this.branches[name] = {\n         current: status === BranchStatusIdentifier.CURRENT,\n         linkedWorkTree: status === BranchStatusIdentifier.LINKED,\n         name,\n         commit,\n         label,\n      };\n   }\n}\n","import type { BranchSummary } from '../../typings';\nimport { BranchStatusIdentifier, BranchSummaryResult } from '../responses/BranchSummary';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<BranchSummaryResult>[] = [\n   new LineParser(\n      /^([*+]\\s)?\\((?:HEAD )?detached (?:from|at) (\\S+)\\)\\s+([a-z0-9]+)\\s(.*)$/,\n      (result, [current, name, commit, label]) => {\n         result.push(branchStatus(current), true, name, commit, label);\n      }\n   ),\n   new LineParser(\n      /^([*+]\\s)?(\\S+)\\s+([a-z0-9]+)\\s?(.*)$/s,\n      (result, [current, name, commit, label]) => {\n         result.push(branchStatus(current), false, name, commit, label);\n      }\n   ),\n];\n\nconst currentBranchParser = new LineParser<BranchSummaryResult>(/^(\\S+)$/s, (result, [name]) => {\n   result.push(BranchStatusIdentifier.CURRENT, false, name, '', '');\n});\n\nfunction branchStatus(input?: string) {\n   return input ? input.charAt(0) : '';\n}\n\nexport function parseBranchSummary(stdOut: string, currentOnly = false): BranchSummary {\n   return parseStringResponse(\n      new BranchSummaryResult(),\n      currentOnly ? [currentBranchParser] : parsers,\n      stdOut\n   );\n}\n","import type {\n   BranchMultiDeleteResult,\n   BranchSingleDeleteFailure,\n   BranchSingleDeleteResult,\n   BranchSingleDeleteSuccess,\n} from '../../typings';\n\nexport class BranchDeletionBatch implements BranchMultiDeleteResult {\n   all: BranchSingleDeleteResult[] = [];\n   branches: { [branchName: string]: BranchSingleDeleteResult } = {};\n   errors: BranchSingleDeleteResult[] = [];\n\n   get success(): boolean {\n      return !this.errors.length;\n   }\n}\n\nexport function branchDeletionSuccess(branch: string, hash: string): BranchSingleDeleteSuccess {\n   return {\n      branch,\n      hash,\n      success: true,\n   };\n}\n\nexport function branchDeletionFailure(branch: string): BranchSingleDeleteFailure {\n   return {\n      branch,\n      hash: null,\n      success: false,\n   };\n}\n\nexport function isSingleBranchDeleteFailure(\n   test: BranchSingleDeleteResult\n): test is BranchSingleDeleteSuccess {\n   return test.success;\n}\n","import type { BranchMultiDeleteResult } from '../../typings';\nimport {\n   BranchDeletionBatch,\n   branchDeletionFailure,\n   branchDeletionSuccess,\n} from '../responses/BranchDeleteSummary';\nimport type { TaskParser } from '../types';\nimport { ExitCodes, LineParser, parseStringResponse } from '../utils';\n\nconst deleteSuccessRegex = /(\\S+)\\s+\\(\\S+\\s([^)]+)\\)/;\nconst deleteErrorRegex = /^error[^']+'([^']+)'/m;\n\nconst parsers: LineParser<BranchMultiDeleteResult>[] = [\n   new LineParser(deleteSuccessRegex, (result, [branch, hash]) => {\n      const deletion = branchDeletionSuccess(branch, hash);\n\n      result.all.push(deletion);\n      result.branches[branch] = deletion;\n   }),\n   new LineParser(deleteErrorRegex, (result, [branch]) => {\n      const deletion = branchDeletionFailure(branch);\n\n      result.errors.push(deletion);\n      result.all.push(deletion);\n      result.branches[branch] = deletion;\n   }),\n];\n\nexport const parseBranchDeletions: TaskParser<string, BranchMultiDeleteResult> = (\n   stdOut,\n   stdErr\n) => {\n   return parseStringResponse(new BranchDeletionBatch(), parsers, [stdOut, stdErr]);\n};\n\nexport function hasBranchDeletionError(data: string, processExitCode: ExitCodes): boolean {\n   return processExitCode === ExitCodes.ERROR && deleteErrorRegex.test(data);\n}\n","import type {\n   BranchMultiDeleteResult,\n   BranchSingleDeleteResult,\n   BranchSummary,\n} from '../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parseBranchSummary } from '../parsers/parse-branch';\nimport { hasBranchDeletionError, parseBranchDeletions } from '../parsers/parse-branch-delete';\nimport type { StringTask } from '../types';\nimport { bufferToString } from '../utils';\n\nexport function containsDeleteBranchCommand(commands: string[]) {\n   const deleteCommands = ['-d', '-D', '--delete'];\n   return commands.some((command) => deleteCommands.includes(command));\n}\n\nexport function branchTask(\n   customArgs: string[]\n): StringTask<BranchSummary | BranchSingleDeleteResult> {\n   const isDelete = containsDeleteBranchCommand(customArgs);\n   const isCurrentOnly = customArgs.includes('--show-current');\n\n   const commands = ['branch', ...customArgs];\n\n   if (commands.length === 1) {\n      commands.push('-a');\n   }\n\n   if (!commands.includes('-v')) {\n      commands.splice(1, 0, '-v');\n   }\n\n   return {\n      format: 'utf-8',\n      commands,\n      parser(stdOut, stdErr) {\n         if (isDelete) {\n            return parseBranchDeletions(stdOut, stdErr).all[0];\n         }\n\n         return parseBranchSummary(stdOut, isCurrentOnly);\n      },\n   };\n}\n\nexport function branchLocalTask(): StringTask<BranchSummary> {\n   return {\n      format: 'utf-8',\n      commands: ['branch', '-v'],\n      parser(stdOut) {\n         return parseBranchSummary(stdOut);\n      },\n   };\n}\n\nexport function deleteBranchesTask(\n   branches: string[],\n   forceDelete = false\n): StringTask<BranchMultiDeleteResult> {\n   return {\n      format: 'utf-8',\n      commands: ['branch', '-v', forceDelete ? '-D' : '-d', ...branches],\n      parser(stdOut, stdErr) {\n         return parseBranchDeletions(stdOut, stdErr);\n      },\n      onError({ exitCode, stdOut }, error, done, fail) {\n         if (!hasBranchDeletionError(String(error), exitCode)) {\n            return fail(error);\n         }\n\n         done(stdOut);\n      },\n   };\n}\n\nexport function deleteBranchTask(\n   branch: string,\n   forceDelete = false\n): StringTask<BranchSingleDeleteResult> {\n   const task: StringTask<BranchSingleDeleteResult> = {\n      format: 'utf-8',\n      commands: ['branch', '-v', forceDelete ? '-D' : '-d', branch],\n      parser(stdOut, stdErr) {\n         return parseBranchDeletions(stdOut, stdErr).branches[branch]!;\n      },\n      onError({ exitCode, stdErr, stdOut }, error, _, fail) {\n         if (!hasBranchDeletionError(String(error), exitCode)) {\n            return fail(error);\n         }\n\n         throw new GitResponseError(\n            task.parser(bufferToString(stdOut), bufferToString(stdErr)),\n            String(error)\n         );\n      },\n   };\n\n   return task;\n}\n","import { normalize } from 'node:path';\n\nimport type { StringTask } from '../types';\n\nexport function checkIgnoreTask(paths: string[]): StringTask<string[]> {\n   return {\n      commands: ['check-ignore', ...paths],\n      format: 'utf-8',\n      parser: parseCheckIgnore,\n   };\n}\n\n/**\n * Parser for the `check-ignore` command - returns each file as a string array\n */\nfunction parseCheckIgnore(text: string): string[] {\n   return text.split(/\\n/g).map(toPath).filter(Boolean);\n}\n\nfunction toPath(input: string) {\n   const path = input.trim().replace(/^[\"']|[\"']$/g, '');\n   return path && normalize(path);\n}\n","import type { FetchResult } from '../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<FetchResult>[] = [\n   new LineParser(/From (.+)$/, (result, [remote]) => {\n      result.remote = remote;\n   }),\n   new LineParser(/\\* \\[new branch]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n      result.branches.push({\n         name,\n         tracking,\n      });\n   }),\n   new LineParser(/\\* \\[new tag]\\s+(\\S+)\\s*-> (.+)$/, (result, [name, tracking]) => {\n      result.tags.push({\n         name,\n         tracking,\n      });\n   }),\n   new LineParser(/- \\[deleted]\\s+\\S+\\s*-> (.+)$/, (result, [tracking]) => {\n      result.deleted.push({\n         tracking,\n      });\n   }),\n   new LineParser(\n      /\\s*([^.]+)\\.\\.(\\S+)\\s+(\\S+)\\s*-> (.+)$/,\n      (result, [from, to, name, tracking]) => {\n         result.updated.push({\n            name,\n            tracking,\n            to,\n            from,\n         });\n      }\n   ),\n];\n\nexport function parseFetchResult(stdOut: string, stdErr: string): FetchResult {\n   const result: FetchResult = {\n      raw: stdOut,\n      remote: null,\n      branches: [],\n      tags: [],\n      updated: [],\n      deleted: [],\n   };\n   return parseStringResponse(result, parsers, [stdOut, stdErr]);\n}\n","import type { FetchResult } from '../../typings';\nimport { parseFetchResult } from '../parsers/parse-fetch';\nimport type { StringTask } from '../types';\nimport { configurationErrorTask, type EmptyTask } from './task';\n\nfunction disallowedCommand(command: string) {\n   return /^--upload-pack(=|$)/.test(command);\n}\n\nexport function fetchTask(\n   remote: string,\n   branch: string,\n   customArgs: string[]\n): StringTask<FetchResult> | EmptyTask {\n   const commands = ['fetch', ...customArgs];\n   if (remote && branch) {\n      commands.push(remote, branch);\n   }\n\n   const banned = commands.find(disallowedCommand);\n   if (banned) {\n      return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser: parseFetchResult,\n   };\n}\n","import type { MoveResult } from '../../typings';\nimport { LineParser, parseStringResponse } from '../utils';\n\nconst parsers: LineParser<MoveResult>[] = [\n   new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => {\n      result.moves.push({ from, to });\n   }),\n];\n\nexport function parseMoveResult(stdOut: string): MoveResult {\n   return parseStringResponse({ moves: [] }, parsers, stdOut);\n}\n","import type { MoveResult } from '../../typings';\nimport { parseMoveResult } from '../parsers/parse-move';\nimport type { StringTask } from '../types';\nimport { asArray } from '../utils';\n\nexport function moveTask(from: string | string[], to: string): StringTask<MoveResult> {\n   return {\n      commands: ['mv', '-v', ...asArray(from), to],\n      format: 'utf-8',\n      parser: parseMoveResult,\n   };\n}\n","import type { PullResult } from '../../typings';\nimport { GitResponseError } from '../errors/git-response-error';\nimport { parsePullErrorResult, parsePullResult } from '../parsers/parse-pull';\nimport type { Maybe, StringTask } from '../types';\nimport { bufferToString } from '../utils';\n\nexport function pullTask(\n   remote: Maybe<string>,\n   branch: Maybe<string>,\n   customArgs: string[]\n): StringTask<PullResult> {\n   const commands: string[] = ['pull', ...customArgs];\n   if (remote && branch) {\n      commands.splice(1, 0, remote, branch);\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser(stdOut, stdErr): PullResult {\n         return parsePullResult(stdOut, stdErr);\n      },\n      onError(result, _error, _done, fail) {\n         const pullError = parsePullErrorResult(\n            bufferToString(result.stdOut),\n            bufferToString(result.stdErr)\n         );\n         if (pullError) {\n            return fail(new GitResponseError(pullError));\n         }\n\n         fail(_error);\n      },\n   };\n}\n","import { forEachLineWithContent } from '../utils';\n\nexport interface RemoteWithoutRefs {\n   name: string;\n}\n\nexport interface RemoteWithRefs extends RemoteWithoutRefs {\n   refs: {\n      fetch: string;\n      push: string;\n   };\n}\n\nexport function parseGetRemotes(text: string): RemoteWithoutRefs[] {\n   const remotes: { [name: string]: RemoteWithoutRefs } = {};\n\n   forEach(text, ([name]) => (remotes[name] = { name }));\n\n   return Object.values(remotes);\n}\n\nexport function parseGetRemotesVerbose(text: string): RemoteWithRefs[] {\n   const remotes: { [name: string]: RemoteWithRefs } = {};\n\n   forEach(text, ([name, url, purpose]) => {\n      if (!Object.hasOwn(remotes, name)) {\n         remotes[name] = {\n            name: name,\n            refs: { fetch: '', push: '' },\n         };\n      }\n\n      if (purpose && url) {\n         remotes[name].refs[purpose.replace(/[^a-z]/g, '') as keyof RemoteWithRefs['refs']] = url;\n      }\n   });\n\n   return Object.values(remotes);\n}\n\nfunction forEach(text: string, handler: (line: string[]) => void) {\n   forEachLineWithContent(text, (line) => handler(line.split(/\\s+/)));\n}\n","import {\n   parseGetRemotes,\n   parseGetRemotesVerbose,\n   type RemoteWithoutRefs,\n   type RemoteWithRefs,\n} from '../responses/GetRemoteSummary';\nimport type { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport function addRemoteTask(\n   remoteName: string,\n   remoteRepo: string,\n   customArgs: string[]\n): StringTask<string> {\n   return straightThroughStringTask(['remote', 'add', ...customArgs, remoteName, remoteRepo]);\n}\n\nexport function getRemotesTask(verbose: true): StringTask<RemoteWithRefs[]>;\nexport function getRemotesTask(verbose: false): StringTask<RemoteWithoutRefs[]>;\nexport function getRemotesTask(\n   verbose: boolean\n): StringTask<RemoteWithRefs[] | RemoteWithoutRefs[]> {\n   const commands = ['remote'];\n   if (verbose) {\n      commands.push('-v');\n   }\n\n   return {\n      commands,\n      format: 'utf-8',\n      parser: verbose ? parseGetRemotesVerbose : parseGetRemotes,\n   };\n}\n\nexport function listRemotesTask(customArgs: string[]): StringTask<string> {\n   const commands = [...customArgs];\n   if (commands[0] !== 'ls-remote') {\n      commands.unshift('ls-remote');\n   }\n\n   return straightThroughStringTask(commands);\n}\n\nexport function remoteTask(customArgs: string[]): StringTask<string> {\n   const commands = [...customArgs];\n   if (commands[0] !== 'remote') {\n      commands.unshift('remote');\n   }\n\n   return straightThroughStringTask(commands);\n}\n\nexport function removeRemoteTask(remoteName: string) {\n   return straightThroughStringTask(['remote', 'remove', remoteName]);\n}\n","import type { LogOptions, LogResult } from '../../typings';\nimport { logFormatFromCommand } from '../args/log-format';\nimport { createListLogSummaryParser } from '../parsers/parse-list-log-summary';\nimport type { StringTask } from '../types';\nimport { validateLogFormatConfig } from './diff';\nimport { parseLogOptions } from './log';\nimport type { EmptyTask } from './task';\n\nexport function stashListTask(\n   opt: LogOptions = {},\n   customArgs: string[]\n): EmptyTask | StringTask<LogResult> {\n   const options = parseLogOptions<any>(opt);\n   const commands = ['stash', 'list', ...options.commands, ...customArgs];\n   const parser = createListLogSummaryParser(\n      options.splitter,\n      options.fields,\n      logFormatFromCommand(commands)\n   );\n\n   return (\n      validateLogFormatConfig(commands) || {\n         commands,\n         format: 'utf-8',\n         parser,\n      }\n   );\n}\n","import type { StringTask } from '../types';\nimport { straightThroughStringTask } from './task';\n\nexport function addSubModuleTask(repo: string, path: string): StringTask<string> {\n   return subModuleTask(['add', repo, path]);\n}\n\nexport function initSubModuleTask(customArgs: string[]): StringTask<string> {\n   return subModuleTask(['init', ...customArgs]);\n}\n\nexport function subModuleTask(customArgs: string[]): StringTask<string> {\n   const commands = [...customArgs];\n   if (commands[0] !== 'submodule') {\n      commands.unshift('submodule');\n   }\n\n   return straightThroughStringTask(commands);\n}\n\nexport function updateSubModuleTask(customArgs: string[]): StringTask<string> {\n   return subModuleTask(['update', ...customArgs]);\n}\n","import type { TagResult } from '../../typings';\n\nexport class TagList implements TagResult {\n   constructor(\n      public readonly all: string[],\n      public readonly latest: string | undefined\n   ) {}\n}\n\nexport const parseTagList = function (data: string, customSort = false) {\n   const tags = data.split('\\n').map(trimmed).filter(Boolean);\n\n   if (!customSort) {\n      tags.sort(function (tagA, tagB) {\n         const partsA = tagA.split('.');\n         const partsB = tagB.split('.');\n\n         if (partsA.length === 1 || partsB.length === 1) {\n            return singleSorted(toNumber(partsA[0]), toNumber(partsB[0]));\n         }\n\n         for (let i = 0, l = Math.max(partsA.length, partsB.length); i < l; i++) {\n            const diff = sorted(toNumber(partsA[i]), toNumber(partsB[i]));\n\n            if (diff) {\n               return diff;\n            }\n         }\n\n         return 0;\n      });\n   }\n\n   const latest = customSort ? tags[0] : [...tags].reverse().find((tag) => tag.indexOf('.') >= 0);\n\n   return new TagList(tags, latest);\n};\n\nfunction singleSorted(a: number, b: number): number {\n   const aIsNum = Number.isNaN(a);\n   const bIsNum = Number.isNaN(b);\n\n   if (aIsNum !== bIsNum) {\n      return aIsNum ? 1 : -1;\n   }\n\n   return aIsNum ? sorted(a, b) : 0;\n}\n\nfunction sorted(a: number, b: number) {\n   return a === b ? 0 : a > b ? 1 : -1;\n}\n\nfunction trimmed(input: string) {\n   return input.trim();\n}\n\nfunction toNumber(input: string | undefined) {\n   if (typeof input === 'string') {\n      return parseInt(input.replace(/^\\D+/g, ''), 10) || 0;\n   }\n\n   return 0;\n}\n","import type { TagResult } from '../../typings';\nimport { parseTagList } from '../responses/TagList';\nimport type { StringTask } from '../types';\n\n/**\n * Task used by `git.tags`\n */\nexport function tagListTask(customArgs: string[] = []): StringTask<TagResult> {\n   const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option));\n\n   return {\n      format: 'utf-8',\n      commands: ['tag', '-l', ...customArgs],\n      parser(text: string) {\n         return parseTagList(text, hasCustomSort);\n      },\n   };\n}\n\n/**\n * Task used by `git.addTag`\n */\nexport function addTagTask(name: string): StringTask<{ name: string }> {\n   return {\n      format: 'utf-8',\n      commands: ['tag', name],\n      parser() {\n         return { name };\n      },\n   };\n}\n\n/**\n * Task used by `git.addTag`\n */\nexport function addAnnotatedTagTask(\n   name: string,\n   tagMessage: string\n): StringTask<{ name: string }> {\n   return {\n      format: 'utf-8',\n      commands: ['tag', '-a', '-m', tagMessage, name],\n      parser() {\n         return { name };\n      },\n   };\n}\n","import {GitExecutor} from \"./lib/runners/git-executor\";\n\nimport {SimpleGitApi} from \"./lib/simple-git-api\";\n\nimport {Scheduler} from \"./lib/runners/scheduler\";\n\nimport {\n   configurationErrorTask,\n   straightThroughBufferTask,\n   straightThroughStringTask\n} from \"./lib/tasks/task\";\n\nimport {\n   asArray,\n   filterArray,\n   filterPrimitives,\n   filterString,\n   filterStringOrStringArray,\n   filterType,\n   getTrailingOptions,\n   trailingFunctionArgument,\n   trailingOptionsArgument\n} from \"./lib/utils\";\n\nimport {applyPatchTask} from \"./lib/tasks/apply-patch\";\n\nimport {branchLocalTask, branchTask, deleteBranchesTask, deleteBranchTask} from \"./lib/tasks/branch\";\n\nimport {checkIgnoreTask} from \"./lib/tasks/check-ignore\";\n\nimport {checkIsRepoTask} from \"./lib/tasks/check-is-repo\";\n\nimport {cleanWithOptionsTask, isCleanOptionsArray} from \"./lib/tasks/clean\";\n\nimport {diffSummaryTask} from \"./lib/tasks/diff\";\n\nimport {fetchTask} from \"./lib/tasks/fetch\";\n\nimport {moveTask} from \"./lib/tasks/move\";\n\nimport {pullTask} from \"./lib/tasks/pull\";\n\nimport {pushTagsTask} from \"./lib/tasks/push\";\n\nimport {addRemoteTask, getRemotesTask, listRemotesTask, remoteTask, removeRemoteTask} from \"./lib/tasks/remote\";\n\nimport {getResetMode, resetTask} from \"./lib/tasks/reset\";\n\nimport {stashListTask} from \"./lib/tasks/stash-list\";\n\nimport {addSubModuleTask, initSubModuleTask, subModuleTask, updateSubModuleTask} from \"./lib/tasks/sub-module\";\n\nimport {addAnnotatedTagTask, addTagTask, tagListTask} from \"./lib/tasks/tag\";\n\nfunction Git(options, plugins) {\n   this._plugins = plugins;\n   this._executor = new GitExecutor(\n      options.baseDir,\n      new Scheduler(options.maxConcurrentProcesses),\n      plugins\n   );\n\n   this._trimmed = options.trimmed;\n}\n\n(Git.prototype = Object.create(SimpleGitApi.prototype)).constructor = Git;\n\n/**\n * Sets the path to a custom git binary, should either be `git` when there is an installation of git available on\n * the system path, or a fully qualified path to the executable.\n */\nGit.prototype.customBinary = function (command) {\n   this._plugins.reconfigure('binary', command);\n   return this;\n};\n\n/**\n * Sets an environment variable for the spawned child process, either supply both a name and value as strings or\n * a single object to entirely replace the current environment variables.\n *\n * @param {string|Object} name\n * @param {string} [value]\n * @returns {Git}\n */\nGit.prototype.env = function (name, value) {\n   if (arguments.length === 1 && typeof name === 'object') {\n      this._executor.env = name;\n   } else {\n      (this._executor.env = this._executor.env || {})[name] = value;\n   }\n\n   return this;\n};\n\n/**\n * List the stash(s) of the local repo\n */\nGit.prototype.stashList = function (options) {\n   return this._runTask(\n      stashListTask(\n         trailingOptionsArgument(arguments) || {},\n         (filterArray(options) && options) || []\n      ),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Moves one or more files to a new destination.\n *\n * @see https://git-scm.com/docs/git-mv\n *\n * @param {string|string[]} from\n * @param {string} to\n */\nGit.prototype.mv = function (from, to) {\n   return this._runTask(moveTask(from, to), trailingFunctionArgument(arguments));\n};\n\n/**\n * Internally uses pull and tags to get the list of tags then checks out the latest tag.\n *\n * @param {Function} [then]\n */\nGit.prototype.checkoutLatestTag = function (then) {\n   var git = this;\n   return this.pull(function () {\n      git.tags(function (err, tags) {\n         git.checkout(tags.latest, then);\n      });\n   });\n};\n\n/**\n * Pull the updated contents of the current repo\n */\nGit.prototype.pull = function (remote, branch, options, then) {\n   return this._runTask(\n      pullTask(\n         filterType(remote, filterString),\n         filterType(branch, filterString),\n         getTrailingOptions(arguments)\n      ),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Fetch the updated contents of the current repo.\n *\n * @example\n *   .fetch('upstream', 'master') // fetches from master on remote named upstream\n *   .fetch(function () {}) // runs fetch against default remote and branch and calls function\n *\n * @param {string} [remote]\n * @param {string} [branch]\n */\nGit.prototype.fetch = function (remote, branch) {\n   return this._runTask(\n      fetchTask(\n         filterType(remote, filterString),\n         filterType(branch, filterString),\n         getTrailingOptions(arguments)\n      ),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * List all tags. When using git 2.7.0 or above, include an options object with `\"--sort\": \"property-name\"` to\n * sort the tags by that property instead of using the default semantic versioning sort.\n *\n * Note, supplying this option when it is not supported by your Git version will cause the operation to fail.\n *\n * @param {Object} [options]\n * @param {Function} [then]\n */\nGit.prototype.tags = function (options, then) {\n   return this._runTask(\n      tagListTask(getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Rebases the current working copy. Options can be supplied either as an array of string parameters\n * to be sent to the `git rebase` command, or a standard options object.\n */\nGit.prototype.rebase = function () {\n   return this._runTask(\n      straightThroughStringTask(['rebase', ...getTrailingOptions(arguments)]),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Reset a repo\n */\nGit.prototype.reset = function (mode) {\n   return this._runTask(\n      resetTask(getResetMode(mode), getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Revert one or more commits in the local working copy\n */\nGit.prototype.revert = function (commit) {\n   const next = trailingFunctionArgument(arguments);\n\n   if (typeof commit !== 'string') {\n      return this._runTask(configurationErrorTask('Commit must be a string'), next);\n   }\n\n   return this._runTask(\n      straightThroughStringTask(['revert', ...getTrailingOptions(arguments, 0, true), commit]),\n      next\n   );\n};\n\n/**\n * Add a lightweight tag to the head of the current branch\n */\nGit.prototype.addTag = function (name) {\n   const task =\n      typeof name === 'string'\n         ? addTagTask(name)\n         : configurationErrorTask('Git.addTag requires a tag name');\n\n   return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\n/**\n * Add an annotated tag to the head of the current branch\n */\nGit.prototype.addAnnotatedTag = function (tagName, tagMessage) {\n   return this._runTask(\n      addAnnotatedTagTask(tagName, tagMessage),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Delete a local branch\n */\nGit.prototype.deleteLocalBranch = function (branchName, forceDelete, then) {\n   return this._runTask(\n      deleteBranchTask(branchName, typeof forceDelete === 'boolean' ? forceDelete : false),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Delete one or more local branches\n */\nGit.prototype.deleteLocalBranches = function (branchNames, forceDelete, then) {\n   return this._runTask(\n      deleteBranchesTask(branchNames, typeof forceDelete === 'boolean' ? forceDelete : false),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * List all branches\n *\n * @param {Object | string[]} [options]\n * @param {Function} [then]\n */\nGit.prototype.branch = function (options, then) {\n   return this._runTask(\n      branchTask(getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Return list of local branches\n *\n * @param {Function} [then]\n */\nGit.prototype.branchLocal = function (then) {\n   return this._runTask(branchLocalTask(), trailingFunctionArgument(arguments));\n};\n\n/**\n * Executes any command against the git binary.\n */\nGit.prototype.raw = function (commands) {\n   const createRestCommands = !Array.isArray(commands);\n   const command = [].slice.call(createRestCommands ? arguments : commands, 0);\n\n   for (let i = 0; i < command.length && createRestCommands; i++) {\n      if (!filterPrimitives(command[i])) {\n         command.splice(i, command.length - i);\n         break;\n      }\n   }\n\n   command.push(...getTrailingOptions(arguments, 0, true));\n\n   var next = trailingFunctionArgument(arguments);\n\n   if (!command.length) {\n      return this._runTask(\n         configurationErrorTask('Raw: must supply one or more command to execute'),\n         next\n      );\n   }\n\n   return this._runTask(straightThroughStringTask(command, this._trimmed), next);\n};\n\nGit.prototype.submoduleAdd = function (repo, path, then) {\n   return this._runTask(addSubModuleTask(repo, path), trailingFunctionArgument(arguments));\n};\n\nGit.prototype.submoduleUpdate = function (args, then) {\n   return this._runTask(\n      updateSubModuleTask(getTrailingOptions(arguments, true)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.submoduleInit = function (args, then) {\n   return this._runTask(\n      initSubModuleTask(getTrailingOptions(arguments, true)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.subModule = function (options, then) {\n   return this._runTask(\n      subModuleTask(getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.listRemote = function () {\n   return this._runTask(\n      listRemotesTask(getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Adds a remote to the list of remotes.\n */\nGit.prototype.addRemote = function (remoteName, remoteRepo, then) {\n   return this._runTask(\n      addRemoteTask(remoteName, remoteRepo, getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Removes an entry by name from the list of remotes.\n */\nGit.prototype.removeRemote = function (remoteName, then) {\n   return this._runTask(removeRemoteTask(remoteName), trailingFunctionArgument(arguments));\n};\n\n/**\n * Gets the currently available remotes, setting the optional verbose argument to true includes additional\n * detail on the remotes themselves.\n */\nGit.prototype.getRemotes = function (verbose, then) {\n   return this._runTask(getRemotesTask(verbose === true), trailingFunctionArgument(arguments));\n};\n\n/**\n * Call any `git remote` function with arguments passed as an array of strings.\n *\n * @param {string[]} options\n * @param {Function} [then]\n */\nGit.prototype.remote = function (options, then) {\n   return this._runTask(\n      remoteTask(getTrailingOptions(arguments)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Call any `git tag` function with arguments passed as an array of strings.\n *\n * @param {string[]} options\n * @param {Function} [then]\n */\nGit.prototype.tag = function (options, then) {\n   const command = getTrailingOptions(arguments);\n\n   if (command[0] !== 'tag') {\n      command.unshift('tag');\n   }\n\n   return this._runTask(straightThroughStringTask(command), trailingFunctionArgument(arguments));\n};\n\n/**\n * Updates repository server info\n *\n * @param {Function} [then]\n */\nGit.prototype.updateServerInfo = function (then) {\n   return this._runTask(\n      straightThroughStringTask(['update-server-info']),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Pushes the current tag changes to a remote which can be either a URL or named remote. When not specified uses the\n * default configured remote spec.\n *\n * @param {string} [remote]\n * @param {Function} [then]\n */\nGit.prototype.pushTags = function (remote, then) {\n   const task = pushTagsTask(\n      { remote: filterType(remote, filterString) },\n      getTrailingOptions(arguments)\n   );\n\n   return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\n/**\n * Removes the named files from source control.\n */\nGit.prototype.rm = function (files) {\n   return this._runTask(\n      straightThroughStringTask(['rm', '-f', ...asArray(files)]),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Removes the named files from source control but keeps them on disk rather than deleting them entirely. To\n * completely remove the files, use `rm`.\n *\n * @param {string|string[]} files\n */\nGit.prototype.rmKeepLocal = function (files) {\n   return this._runTask(\n      straightThroughStringTask(['rm', '--cached', ...asArray(files)]),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n * Returns a list of objects in a tree based on commit hash. Passing in an object hash returns the object's content,\n * size, and type.\n *\n * Passing \"-p\" will instruct cat-file to determine the object type, and display its formatted contents.\n *\n * @param {string[]} [options]\n * @param {Function} [then]\n */\nGit.prototype.catFile = function (options, then) {\n   return this._catFile('utf-8', arguments);\n};\n\nGit.prototype.binaryCatFile = function () {\n   return this._catFile('buffer', arguments);\n};\n\nGit.prototype._catFile = function (format, args) {\n   var handler = trailingFunctionArgument(args);\n   var command = ['cat-file'];\n   var options = args[0];\n\n   if (typeof options === 'string') {\n      return this._runTask(\n         configurationErrorTask('Git.catFile: options must be supplied as an array of strings'),\n         handler\n      );\n   }\n\n   if (Array.isArray(options)) {\n      command.push.apply(command, options);\n   }\n\n   const task =\n      format === 'buffer' ? straightThroughBufferTask(command) : straightThroughStringTask(command);\n\n   return this._runTask(task, handler);\n};\n\nGit.prototype.diff = function (options, then) {\n   const task = filterString(options)\n      ? configurationErrorTask(\n           'git.diff: supplying options as a single string is no longer supported, switch to an array of strings'\n        )\n      : straightThroughStringTask(['diff', ...getTrailingOptions(arguments)]);\n\n   return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\nGit.prototype.diffSummary = function () {\n   return this._runTask(\n      diffSummaryTask(getTrailingOptions(arguments, 1)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.applyPatch = function (patches) {\n   const task = !filterStringOrStringArray(patches)\n      ? configurationErrorTask(\n           `git.applyPatch requires one or more string patches as the first argument`\n        )\n      : applyPatchTask(asArray(patches), getTrailingOptions([].slice.call(arguments, 1)));\n\n   return this._runTask(task, trailingFunctionArgument(arguments));\n};\n\nGit.prototype.revparse = function () {\n   const commands = ['rev-parse', ...getTrailingOptions(arguments, true)];\n   return this._runTask(\n      straightThroughStringTask(commands, true),\n      trailingFunctionArgument(arguments)\n   );\n};\n\n/**\n */\nGit.prototype.clean = function (mode, options, then) {\n   const usingCleanOptionsArray = isCleanOptionsArray(mode);\n   const cleanMode =\n      (usingCleanOptionsArray && mode.join('')) || filterType(mode, filterString) || '';\n   const customArgs = getTrailingOptions([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0));\n\n   return this._runTask(\n      cleanWithOptionsTask(cleanMode, customArgs),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.exec = function (then) {\n   const task = {\n      commands: [],\n      format: 'utf-8',\n      parser() {\n         if (typeof then === 'function') {\n            then();\n         }\n      },\n   };\n\n   return this._runTask(task);\n};\n\n/**\n * Check if a pathname or pathnames are excluded by .gitignore\n *\n * @param {string|string[]} pathnames\n * @param {Function} [then]\n */\nGit.prototype.checkIgnore = function (pathnames, then) {\n   return this._runTask(\n      checkIgnoreTask(asArray(filterType(pathnames, filterStringOrStringArray, []))),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nGit.prototype.checkIsRepo = function (checkType, then) {\n   return this._runTask(\n      checkIsRepoTask(filterType(checkType, filterString)),\n      trailingFunctionArgument(arguments)\n   );\n};\n\nexport default Git;\n","import { GitPluginError } from '../errors/git-plugin-error';\nimport type { SimpleGitOptions } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function abortPlugin(signal: SimpleGitOptions['abort']) {\n   if (!signal) {\n      return;\n   }\n\n   const onSpawnAfter: SimpleGitPlugin<'spawn.after'> = {\n      type: 'spawn.after',\n      action(_data, context) {\n         function kill() {\n            context.kill(new GitPluginError(undefined, 'abort', 'Abort signal received'));\n         }\n\n         signal.addEventListener('abort', kill);\n\n         context.spawned.on('close', () => signal.removeEventListener('abort', kill));\n      },\n   };\n\n   const onSpawnBefore: SimpleGitPlugin<'spawn.before'> = {\n      type: 'spawn.before',\n      action(_data, context) {\n         if (signal.aborted) {\n            context.kill(new GitPluginError(undefined, 'abort', 'Abort already signaled'));\n         }\n      },\n   };\n\n   return [onSpawnBefore, onSpawnAfter];\n}\n","import { isGitEnvKey } from '@simple-git/argv-parser';\n\nimport { GitPluginError } from '../errors/git-plugin-error';\nimport { createLogger } from '../git-logger';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nconst logger = createLogger('', 'plugin:allowEnvironment');\n\nexport function allowEnvironmentPlugin(\n   allowEnvironment: readonly string[],\n   allowAbbreviatedOptions = false\n): SimpleGitPlugin<'spawn.options'> {\n   const allowed = new Set(allowEnvironment.map((key) => key.toLowerCase().trim()));\n\n   return {\n      type: 'spawn.options',\n      action(spawnOptions, context) {\n         const env = { ...(spawnOptions.env ?? process.env) };\n         const suppliedKeys = new Set(\n            Object.keys(context.env).map((key) => key.toLowerCase().trim())\n         );\n\n         for (const key of Object.keys(env)) {\n            const normalised = key.toLowerCase().trim();\n\n            // not a GIT_ key, or explicitly permitted\n            if (!isGuardedEnvKey(normalised) || allowed.has(normalised)) {\n               continue;\n            }\n\n            // explicitly throw when simpleGit.env() was called with a guarded key\n            if (suppliedKeys.has(normalised)) {\n               throw new GitPluginError(\n                  undefined,\n                  'allowEnvironment',\n                  `Use of \"${key}\" is blocked by the environment guard - add it to the allowEnvironment option to permit it`\n               );\n            }\n\n            // log and remove guarded keys inherited from the outer environment\n            logger(`removing ambient guarded environment variable %s`, key);\n            delete env[key];\n         }\n\n         return {\n            ...spawnOptions,\n            env: {\n               ...env,\n               GIT_TEST_DISALLOW_ABBREVIATED_OPTIONS: String(!allowAbbreviatedOptions),\n            },\n         };\n      },\n   };\n}\n\nfunction isGuardedEnvKey(key: string) {\n   const normalised = key.toLowerCase().trim();\n   return normalised.startsWith('git_') || isGitEnvKey(normalised);\n}\n","import { vulnerabilityCheck } from '@simple-git/argv-parser';\n\nimport { GitPluginError } from '../errors/git-plugin-error';\nimport type { SimpleGitPluginConfig } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function blockUnsafeOperationsPlugin(\n   options: SimpleGitPluginConfig['unsafe'] = {}\n): SimpleGitPlugin<'spawn.args'> {\n   return {\n      type: 'spawn.args',\n      action(args, { env }) {\n         for (const vulnerability of vulnerabilityCheck(args, env)) {\n            if (options[vulnerability.category] !== true) {\n               throw new GitPluginError(undefined, 'unsafe', vulnerability.message);\n            }\n         }\n\n         return args;\n      },\n   };\n}\n","import { prefixedArray } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function commandConfigPrefixingPlugin(\n   configuration: string[]\n): SimpleGitPlugin<'spawn.args'> {\n   const prefix = prefixedArray(configuration, '-c');\n\n   return {\n      type: 'spawn.args',\n      action(data) {\n         return [...prefix, ...data];\n      },\n   };\n}\n","import { type DeferredPromise, deferred } from '@kwsites/promise-deferred';\n\nimport type { SimpleGitPluginConfig } from '../types';\nimport { delay } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nconst never = deferred().promise;\n\nexport function completionDetectionPlugin({\n   onClose = true,\n   onExit = 50,\n}: SimpleGitPluginConfig['completion'] = {}): SimpleGitPlugin<'spawn.after'> {\n   function createEvents() {\n      let exitCode = -1;\n      const events = {\n         close: deferred(),\n         closeTimeout: deferred(),\n         exit: deferred(),\n         exitTimeout: deferred(),\n      };\n\n      const result = Promise.race([\n         onClose === false ? never : events.closeTimeout.promise,\n         onExit === false ? never : events.exitTimeout.promise,\n      ]);\n\n      configureTimeout(onClose, events.close, events.closeTimeout);\n      configureTimeout(onExit, events.exit, events.exitTimeout);\n\n      return {\n         close(code: number) {\n            exitCode = code;\n            events.close.done();\n         },\n         exit(code: number) {\n            exitCode = code;\n            events.exit.done();\n         },\n         get exitCode() {\n            return exitCode;\n         },\n         result,\n      };\n   }\n\n   function configureTimeout(\n      flag: boolean | number,\n      event: DeferredPromise<void>,\n      timeout: DeferredPromise<void>\n   ) {\n      if (flag === false) {\n         return;\n      }\n\n      (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done);\n   }\n\n   return {\n      type: 'spawn.after',\n      async action(_data, { spawned, close }) {\n         const events = createEvents();\n\n         let deferClose = true;\n         let quickClose = () => void (deferClose = false);\n\n         spawned.stdout?.on('data', quickClose);\n         spawned.stderr?.on('data', quickClose);\n         spawned.on('error', quickClose);\n\n         spawned.on('close', (code: number) => events.close(code));\n         spawned.on('exit', (code: number) => events.exit(code));\n\n         try {\n            await events.result;\n            if (deferClose) {\n               await delay(50);\n            }\n            close(events.exitCode);\n         } catch (err) {\n            close(events.exitCode, err as Error);\n         }\n      },\n   };\n}\n","import { GitPluginError } from '../errors/git-plugin-error';\nimport { createLogger } from '../git-logger';\nimport type { SimpleGitOptions } from '../types';\nimport { asArray } from '../utils';\nimport type { PluginStore } from './plugin-store';\n\nconst logger = createLogger('', 'plugin:binary');\n\nconst WRONG_NUMBER_ERR = `Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings`;\nconst WRONG_CHARS_ERR = `Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option`;\n\nfunction isBadArgument(arg: string) {\n   return !arg || !/^([a-z]:)?([a-z0-9/.\\\\_~-]+)$/i.test(arg);\n}\n\nfunction toBinaryConfig(\n   input: string[],\n   allowUnsafe: boolean\n): { binary: string; prefix?: string } {\n   if (input.length < 1 || input.length > 2) {\n      throw new GitPluginError(undefined, 'binary', WRONG_NUMBER_ERR);\n   }\n\n   const isBad = input.some(isBadArgument);\n   if (isBad) {\n      if (allowUnsafe) {\n         logger('permitted unsafe binary %o', input);\n      } else {\n         throw new GitPluginError(undefined, 'binary', WRONG_CHARS_ERR);\n      }\n   }\n\n   const [binary, prefix] = input;\n   return {\n      binary,\n      prefix,\n   };\n}\n\nexport function customBinaryPlugin(\n   plugins: PluginStore,\n   input: SimpleGitOptions['binary'] = ['git'],\n   allowUnsafe = false\n) {\n   let config = toBinaryConfig(asArray(input), allowUnsafe);\n\n   plugins.on('binary', (input) => {\n      config = toBinaryConfig(asArray(input), allowUnsafe);\n      logger.info('reconfiguring %o', config);\n   });\n\n   plugins.append('spawn.binary', () => {\n      return config.binary;\n   });\n\n   plugins.append('spawn.args', (data) => {\n      return config.prefix ? [config.prefix, ...data] : data;\n   });\n}\n","import { GitError } from './git-error';\n\nconst REASONS = {\n   DISALLOWED_ABBREVIATED: {\n      text: 'disallowed abbreviated or ambiguous option',\n      solution:\n         'Unambiguous abbreviated options blocked with unsafe.allowAbbreviatedOptions setting: {message}',\n   },\n   UNKNOWN: {\n      text: '~ unknown ~',\n      solution: undefined,\n   },\n} as const;\n\nexport type GitConfigurationErrorReason = keyof typeof REASONS;\n\nfunction getReason(message?: string): GitConfigurationErrorReason {\n   if (!message) {\n      return 'UNKNOWN';\n   }\n   for (const [reason, { text }] of Object.entries(REASONS)) {\n      if (message.startsWith(`fatal: ${text}`)) {\n         return reason as GitConfigurationErrorReason;\n      }\n   }\n   return 'UNKNOWN';\n}\n\n/**\n * The `GitConfigurationError` is thrown when the `git` process rejects\n * the supplied configuration arguments or environment variables.\n *\n * Check the `.message` property for more detail on why your configuration\n * resulted in an error.\n */\nexport class GitConfigurationError extends GitError {\n   public readonly reason: GitConfigurationErrorReason;\n\n   constructor(message = '') {\n      const reason = getReason(message);\n\n      super(undefined, REASONS[reason].solution?.replace('{message}', message) ?? message);\n      this.reason = reason;\n   }\n}\n","import { GitConfigurationError } from '../errors/git-configuration-error';\nimport { GitError } from '../errors/git-error';\nimport type { GitExecutorResult, SimpleGitPluginConfig } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\ntype TaskResult = Omit<GitExecutorResult, 'rejection'>;\n\nfunction isTaskError(result: TaskResult) {\n   return !!(result.exitCode && result.stdErr.length);\n}\n\nfunction getErrorMessage(result: TaskResult) {\n   return Buffer.concat([...result.stdOut, ...result.stdErr]);\n}\n\nexport function errorDetectionHandler(\n   overwrite = false,\n   isError = isTaskError,\n   errorMessage: (result: TaskResult) => Buffer | Error = getErrorMessage\n) {\n   return (error: Buffer | Error | undefined, result: TaskResult) => {\n      if ((!overwrite && error) || !isError(result)) {\n         return error;\n      }\n\n      return errorMessage(result);\n   };\n}\n\nfunction createGitError(exitCode: number, message: string) {\n   if (exitCode === 128 && message.startsWith('fatal:')) {\n      return new GitConfigurationError(message);\n   }\n\n   return new GitError(undefined, message);\n}\n\nexport function errorDetectionPlugin(\n   config: SimpleGitPluginConfig['errors']\n): SimpleGitPlugin<'task.error'> {\n   return {\n      type: 'task.error',\n      action(data, context) {\n         const error = config(data.error, {\n            stdErr: context.stdErr,\n            stdOut: context.stdOut,\n            exitCode: context.exitCode,\n         });\n\n         if (Buffer.isBuffer(error)) {\n            return {\n               error: createGitError(context.exitCode, error.toString('utf-8')),\n            };\n         }\n\n         return {\n            error,\n         };\n      },\n   };\n}\n","import { createLogger } from '../git-logger';\nimport type { SimpleGitOptions } from '../types';\nimport { byteLength } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nconst logger = createLogger('', 'plugin:input');\n\nexport function inputPlugin(\n   input: SimpleGitOptions['input']\n): SimpleGitPlugin<'spawn.after'> | void {\n   return {\n      type: 'spawn.after',\n      action(_data, { commands, input: taskInput, spawned: { stdin } }) {\n         if (!stdin) {\n            return;\n         }\n\n         const content = input?.([...commands]) ?? taskInput;\n         if (!content) {\n            return logger(`generated zero length content, not writing to stdin`);\n         }\n\n         logger(`writing %s bytes to stdin`, byteLength(content));\n\n         stdin.on('error', (err: NodeJS.ErrnoException) => {\n            // EPIPE is expected when git exits before consuming all input\n            if (err.code !== 'EPIPE') {\n               logger('[ERROR] stdin error %o', err);\n            }\n         });\n\n         stdin.end(content);\n      },\n   };\n}\n","import { EventEmitter } from 'node:events';\n\nimport type { SimpleGitPluginConfig } from '../types';\nimport { append, asArray } from '../utils';\nimport type {\n   SimpleGitPlugin,\n   SimpleGitPluginType,\n   SimpleGitPluginTypes,\n} from './simple-git-plugin';\n\nexport class PluginStore {\n   private plugins: Set<SimpleGitPlugin<SimpleGitPluginType>> = new Set();\n   private events = new EventEmitter();\n\n   on<K extends keyof SimpleGitPluginConfig>(\n      type: K,\n      listener: (data: SimpleGitPluginConfig[K]) => void\n   ) {\n      this.events.on(type, listener);\n   }\n\n   reconfigure<K extends keyof SimpleGitPluginConfig>(type: K, data: SimpleGitPluginConfig[K]) {\n      this.events.emit(type, data);\n   }\n\n   public append<T extends SimpleGitPluginType>(type: T, action: SimpleGitPlugin<T>['action']) {\n      const plugin = append(this.plugins, { type, action });\n\n      return () => this.plugins.delete(plugin);\n   }\n\n   public add<T extends SimpleGitPluginType>(\n      plugin: void | SimpleGitPlugin<T> | SimpleGitPlugin<T>[]\n   ) {\n      const plugins: SimpleGitPlugin<T>[] = [];\n\n      asArray(plugin).forEach(\n         (plugin) => void (plugin && this.plugins.add(append(plugins, plugin)))\n      );\n\n      return () => {\n         plugins.forEach((plugin) => void this.plugins.delete(plugin));\n      };\n   }\n\n   public exec<T extends SimpleGitPluginType>(\n      type: T,\n      data: SimpleGitPluginTypes[T]['data'],\n      context: SimpleGitPluginTypes[T]['context']\n   ): typeof data {\n      let output = data;\n      const contextual = Object.freeze(Object.create(context));\n\n      for (const plugin of this.plugins) {\n         if (plugin.type === type) {\n            output = plugin.action(output, contextual);\n         }\n      }\n\n      return output;\n   }\n}\n","import type { SimpleGitOptions } from '../types';\nimport { asNumber, including } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function progressMonitorPlugin(progress: Exclude<SimpleGitOptions['progress'], void>) {\n   const progressCommand = '--progress';\n   const progressMethods = ['checkout', 'clone', 'fetch', 'pull', 'push'];\n\n   const onProgress: SimpleGitPlugin<'spawn.after'> = {\n      type: 'spawn.after',\n      action(_data, context) {\n         if (!context.commands.includes(progressCommand)) {\n            return;\n         }\n\n         context.spawned.stderr?.on('data', (chunk: Buffer) => {\n            const message = /^([\\s\\S]+?):\\s*(\\d+)% \\((\\d+)\\/(\\d+)\\)/.exec(chunk.toString('utf8'));\n            if (!message) {\n               return;\n            }\n\n            progress({\n               method: context.method,\n               stage: progressEventStage(message[1]),\n               progress: asNumber(message[2]),\n               processed: asNumber(message[3]),\n               total: asNumber(message[4]),\n            });\n         });\n      },\n   };\n\n   const onArgs: SimpleGitPlugin<'spawn.args'> = {\n      type: 'spawn.args',\n      action(args, context) {\n         if (!progressMethods.includes(context.method)) {\n            return args;\n         }\n\n         return including(args, progressCommand);\n      },\n   };\n\n   return [onArgs, onProgress];\n}\n\nfunction progressEventStage(input: string) {\n   return String(input.toLowerCase().split(' ', 1)) || 'unknown';\n}\n","import type { SpawnOptions } from 'child_process';\n\nimport { pick } from '../utils';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function spawnOptionsPlugin(\n   spawnOptions: Partial<SpawnOptions>\n): SimpleGitPlugin<'spawn.options'> {\n   const options = pick(spawnOptions, ['uid', 'gid']);\n\n   return {\n      type: 'spawn.options',\n      action(data) {\n         return { ...options, ...data };\n      },\n   };\n}\n","import { isPathSpec, toPaths } from '@simple-git/args-pathspec';\n\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function suffixPathsPlugin(): SimpleGitPlugin<'spawn.args'> {\n   return {\n      type: 'spawn.args',\n      action(data) {\n         const prefix: string[] = [];\n         let suffix: undefined | string[];\n         function append(args: string[]) {\n            (suffix = suffix || []).push(...args);\n         }\n\n         for (let i = 0; i < data.length; i++) {\n            const param = data[i];\n\n            if (isPathSpec(param)) {\n               append(toPaths(param));\n               continue;\n            }\n\n            if (param === '--') {\n               append(\n                  data.slice(i + 1).flatMap((item) => (isPathSpec(item) && toPaths(item)) || item)\n               );\n               break;\n            }\n\n            prefix.push(param);\n         }\n\n         return !suffix ? prefix : [...prefix, '--', ...suffix.map(String)];\n      },\n   };\n}\n","import { GitPluginError } from '../errors/git-plugin-error';\nimport type { SimpleGitOptions } from '../types';\nimport type { SimpleGitPlugin } from './simple-git-plugin';\n\nexport function timeoutPlugin({\n   block,\n   stdErr = true,\n   stdOut = true,\n}: Exclude<SimpleGitOptions['timeout'], undefined>): SimpleGitPlugin<'spawn.after'> | void {\n   if (block > 0) {\n      return {\n         type: 'spawn.after',\n         action(_data, context) {\n            let timeout: NodeJS.Timeout;\n\n            function wait() {\n               timeout && clearTimeout(timeout);\n               timeout = setTimeout(kill, block);\n            }\n\n            function stop() {\n               context.spawned.stdout?.off('data', wait);\n               context.spawned.stderr?.off('data', wait);\n               context.spawned.off('exit', stop);\n               context.spawned.off('close', stop);\n               timeout && clearTimeout(timeout);\n            }\n\n            function kill() {\n               stop();\n               context.kill(new GitPluginError(undefined, 'timeout', `block timeout reached`));\n            }\n\n            stdOut && context.spawned.stdout?.on('data', wait);\n            stdErr && context.spawned.stderr?.on('data', wait);\n            context.spawned.on('exit', stop);\n            context.spawned.on('close', stop);\n\n            wait();\n         },\n      };\n   }\n}\n","// @ts-expect-error\nimport Git from '../git';\nimport type { SimpleGitFactory } from '../typings';\nimport * as api from './api';\nimport {\n   abortPlugin,\n   allowEnvironmentPlugin,\n   blockUnsafeOperationsPlugin,\n   commandConfigPrefixingPlugin,\n   completionDetectionPlugin,\n   customBinaryPlugin,\n   errorDetectionHandler,\n   errorDetectionPlugin,\n   inputPlugin,\n   PluginStore,\n   progressMonitorPlugin,\n   spawnOptionsPlugin,\n   suffixPathsPlugin,\n   timeoutPlugin,\n} from './plugins';\nimport type { SimpleGitOptions } from './types';\nimport { createInstanceConfig, folderExists } from './utils';\n\nexport const simpleGit: SimpleGitFactory = (\n   baseDir?: string | Partial<SimpleGitOptions>,\n   options?: Partial<SimpleGitOptions>\n) => {\n   const plugins = new PluginStore();\n   const config = createInstanceConfig(\n      (baseDir && (typeof baseDir === 'string' ? { baseDir } : baseDir)) || {},\n      options\n   );\n\n   if (!folderExists(config.baseDir)) {\n      throw new api.GitConstructError(\n         config,\n         `Cannot use simple-git on a directory that does not exist`\n      );\n   }\n\n   if (Array.isArray(config.config)) {\n      plugins.add(commandConfigPrefixingPlugin(config.config));\n   }\n\n   plugins.add(blockUnsafeOperationsPlugin(config.unsafe));\n   plugins.add(completionDetectionPlugin(config.completion));\n   config.abort && plugins.add(abortPlugin(config.abort));\n   config.progress && plugins.add(progressMonitorPlugin(config.progress));\n   config.timeout && plugins.add(timeoutPlugin(config.timeout));\n   config.spawnOptions && plugins.add(spawnOptionsPlugin(config.spawnOptions));\n   plugins.add(suffixPathsPlugin());\n\n   plugins.add(inputPlugin(config.input));\n   plugins.add(errorDetectionPlugin(errorDetectionHandler(true)));\n   config.errors && plugins.add(errorDetectionPlugin(config.errors));\n\n   customBinaryPlugin(plugins, config.binary, config.unsafe?.allowUnsafeCustomBinary);\n\n   plugins.add(\n      allowEnvironmentPlugin(config.allowEnvironment ?? [], config.unsafe?.allowAbbreviatedOptions)\n   );\n\n   return new Git(config, plugins);\n};\n"],"names":["GitError","task","message","GitConstructError","config","GitPluginError","plugin","GitResponseError","git","TaskConfigurationError","NULL","NOOP","asFunction","source","isUserFunction","splitOn","input","char","index","first","offset","isArrayLike","last","filterHasLength","toLinesWithContent","trimmed","separator","output","line","lineContent","forEachLineWithContent","callback","folderExists","path","exists","FOLDER","append","target","item","including","remove","objectToString","asArray","asCamelCase","str","_all","chr","asStringArray","asNumber","onNaN","num","prefixedArray","prefix","i","max","bufferToString","byteLength","pick","properties","out","key","delay","duration","done","orVoid","filterType","filter","def","filterArray","filterPrimitives","omit","type","isPathSpec","filterString","filterStringOrBuffer","filterStringOrStringArray","filterPlainObject","filterFunction","ExitCodes","GitOutputStreams","stdOut","stdErr","useMatchesDefault","LineParser","regExp","useMatches","reg","matched","_index","RemoteLineParser","defaultOptions","createInstanceConfig","options","baseDir","o","appendTaskOptions","commands","value","v","getTrailingOptions","args","initialPrimitive","objectOnly","command","trailingOptionsArgument","trailingArrayArgument","hasTrailingCallback","trailingFunctionArgument","includeNoop","callTaskParser","parser","streams","parseStringResponse","result","parsers","texts","trim","text","lines","parse","CheckRepoActions","onError","exitCode","error","fail","isNotRepoMessage","checkIsRepoTask","action","checkIsBareRepoTask","checkIsRepoRootTask","CleanResponse","dryRun","removalRegexp","dryRunRemovalRegexp","isFolderRegexp","cleanSummaryParser","summary","regexp","removed","EMPTY_COMMANDS","adhocExecTask","configurationErrorTask","straightThroughStringTask","straightThroughBufferTask","buffer","isBufferTask","isEmptyTask","CONFIG_ERROR_INTERACTIVE_MODE","CONFIG_ERROR_MODE_REQUIRED","CONFIG_ERROR_UNKNOWN_OPTION","CleanOptions","CleanOptionValues","cleanWithOptionsTask","mode","customArgs","cleanMode","valid","getCleanOptions","isInteractiveMode","cleanTask","isCleanOptionsArray","test","isCleanMode","isKnownOption","option","ConfigList","all","file","latest","values","configListParser","configParser","configGetParser","scopes","configFilePath","filePath","requestedKey","GitConfigScope","asConfigScope","scope","fallback","addConfigTask","getConfigTask","listConfigTask","rest","DiffNameStatus","diffNameStatus","isDiffNameStatus","_a","disallowedOptions","Query","GrepQuery","query","and","param","grepQueryBuilder","params","parseGrep","grep","paths","results","preview","searchTerm","then","ResetMode","validResetModes","resetTask","isValidResetMode","getResetMode","debug","createLog","prefixedLogger","to","forward","childLoggerName","name","childDebugger","parentNamespace","childNamespace","createLogger","label","verbose","initialStep","infoDebugger","labelPrefix","spawned","debugDebugger","step","sibling","initial","phase","stepPrefix","info","_TasksPendingQueue","logLabel","logger","progress","err","TasksPendingQueue","GitExecutorChain","_executor","_scheduler","_plugins","cwd","onScheduleComplete","onQueueComplete","e","gitError","binary","raw","outputStreams","rejection","newStdOut","outputHandler","outputLogger","spawnOptions","reason","spawn","onDataReceived","onErrorReceived","GitExecutor","taskCallback","response","onSuccess","data","changeWorkingDirectoryTask","directory","root","instance","checkoutTask","checkout","branchName","startPoint","cloneTask","repo","pathspec","cloneMirrorTask","createCloneTask","api","repoPath","clone","branch","commit","author","parts","email","changes","insertions","deletions","direction","count","parseCommitResult","commitTask","files","next","rejectDeprecatedSignatures","countObjectsResponse","property","countObjects","firstCommit","hashObjectTask","write","InitSummary","bare","existing","gitDir","initResponseRegex","reInitResponseRegex","parseInit","tokens","bareCommand","hasBareCommand","initTask","interpretTrailersTask","interpretTrailers","LogFormat","logFormatRegex","logFormatFromCommand","format","isLogFormat","customArg","DiffSummary","statParser","alterations","before","after","changed","inserted","deleted","numStatParser","changesInsert","changesDelete","nameOnlyParser","nameStatusParser","status","similarity","from","_to","diffSummaryParsers","getDiffParser","START_BOUNDARY","COMMIT_BOUNDARY","SPLITTER","defaultFieldNames","lineBuilder","fields","field","createListLogSummaryParser","splitter","logFormat","parseDiffResult","lineDetail","listLogLine","diffSummaryTask","validateLogFormatConfig","flags","excludeOptions","prettyFormat","formatStr","userOptions","parseLogOptions","opt","suffix","maxCount","rangeOperator","logTask","log","createLogTask","MergeSummaryConflict","meta","MergeSummaryDetail","PullSummary","PullFailedSummary","objectEnumerationResult","remoteMessages","asObjectCount","delta","remoteMessagesObjectParsers","enumeration","total","reused","packReused","objects","pullRequestUrl","url","parseRemoteMessages","_stdOut","RemoteMessageSummary","FILE_UPDATE_REGEX","SUMMARY_REGEX","ACTION_REGEX","errorParsers","remote","hashLocal","hashRemote","branchLocal","branchRemote","parsePullDetail","parsePullResult","parsePullErrorResult","pullError","autoMerge","deleteRef","parseMergeResult","parseMergeDetail","mergeTask","merge","pushResultPushedItem","local","tag","alreadyUpdated","remoteName","parsePushResult","pushDetail","parsePushDetail","responseDetail","pushTagsTask","ref","pushTask","show","fromPathRegex","FileStatusSummary","working_dir","detail","StatusSummary","renamedFile","indexX","indexY","handler","conflicts","y","renamed","_result","_file","aheadReg","behindReg","currentReg","trackingReg","onEmptyBranchReg","regexResult","parseStatusSummary","l","splitLine","lineStr","workingDir","ignoredOptions","statusTask","arg","NOT_INSTALLED","versionResponse","major","minor","patch","agent","installed","notInstalledResponse","version","versionParser","SimpleGitApi","chain","promise","createScheduledTask","id","createDeferred","Scheduler","concurrency","applyPatchTask","patches","BranchStatusIdentifier","BranchSummaryResult","detached","current","branchStatus","currentBranchParser","parseBranchSummary","currentOnly","BranchDeletionBatch","branchDeletionSuccess","hash","branchDeletionFailure","deleteSuccessRegex","deleteErrorRegex","deletion","parseBranchDeletions","hasBranchDeletionError","processExitCode","containsDeleteBranchCommand","deleteCommands","branchTask","isDelete","isCurrentOnly","branchLocalTask","deleteBranchesTask","branches","forceDelete","deleteBranchTask","_","checkIgnoreTask","parseCheckIgnore","toPath","normalize","tracking","parseFetchResult","disallowedCommand","fetchTask","parseMoveResult","moveTask","pullTask","_error","_done","parseGetRemotes","remotes","forEach","parseGetRemotesVerbose","purpose","addRemoteTask","remoteRepo","getRemotesTask","listRemotesTask","remoteTask","removeRemoteTask","stashListTask","addSubModuleTask","subModuleTask","initSubModuleTask","updateSubModuleTask","TagList","parseTagList","customSort","tags","tagA","tagB","partsA","partsB","singleSorted","toNumber","diff","sorted","a","b","aIsNum","bIsNum","tagListTask","hasCustomSort","addTagTask","addAnnotatedTagTask","tagMessage","Git","plugins","tagName","branchNames","createRestCommands","usingCleanOptionsArray","pathnames","checkType","abortPlugin","signal","_data","context","kill","allowEnvironmentPlugin","allowEnvironment","allowAbbreviatedOptions","allowed","env","suppliedKeys","normalised","isGuardedEnvKey","isGitEnvKey","blockUnsafeOperationsPlugin","vulnerability","vulnerabilityCheck","commandConfigPrefixingPlugin","configuration","never","deferred","completionDetectionPlugin","onClose","onExit","createEvents","events","configureTimeout","code","flag","event","timeout","close","deferClose","quickClose","WRONG_NUMBER_ERR","WRONG_CHARS_ERR","isBadArgument","toBinaryConfig","allowUnsafe","customBinaryPlugin","REASONS","getReason","GitConfigurationError","isTaskError","getErrorMessage","errorDetectionHandler","overwrite","isError","errorMessage","createGitError","errorDetectionPlugin","inputPlugin","taskInput","stdin","content","PluginStore","EventEmitter","listener","contextual","progressMonitorPlugin","progressCommand","progressMethods","chunk","progressEventStage","spawnOptionsPlugin","suffixPathsPlugin","toPaths","timeoutPlugin","block","wait","stop","simpleGit","api.GitConstructError"],"mappings":"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"}