{"version":3,"file":"index.cjs","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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"}