@gadgetinc/ggt 2.3.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/README.md +387 -327
  2. package/dist/action-CF6zatIh.js +64 -0
  3. package/dist/action-CF6zatIh.js.map +1 -0
  4. package/dist/action-CrDCeX3F.js +8 -0
  5. package/dist/action-CrDCeX3F.js.map +1 -0
  6. package/dist/add-Basu3Gyf.js +1 -0
  7. package/dist/agent-plugin-CqgwTOk-.js +15 -0
  8. package/dist/agent-plugin-CqgwTOk-.js.map +1 -0
  9. package/dist/agent-plugin-DU9G5B1d.js +9 -0
  10. package/dist/agent-plugin-DU9G5B1d.js.map +1 -0
  11. package/dist/assert-Bu1E126Z.js +2 -0
  12. package/dist/assert-Bu1E126Z.js.map +1 -0
  13. package/dist/chunk-BjEoQXZ0.js +1 -0
  14. package/dist/collection-C2TCeYqY.js +2 -0
  15. package/dist/collection-C2TCeYqY.js.map +1 -0
  16. package/dist/collection-aM0fpch0.js +1 -0
  17. package/dist/command-2iNTc5dV.js +118 -0
  18. package/dist/command-2iNTc5dV.js.map +1 -0
  19. package/dist/completion-D96nxD5n.js +37 -0
  20. package/dist/completion-D96nxD5n.js.map +1 -0
  21. package/dist/configure-C8ge-2cK.js +15 -0
  22. package/dist/configure-C8ge-2cK.js.map +1 -0
  23. package/dist/debugger-BkYgApKn.js +22 -0
  24. package/dist/debugger-BkYgApKn.js.map +1 -0
  25. package/dist/defaults-B_eD7Pia.js +2 -0
  26. package/dist/defaults-B_eD7Pia.js.map +1 -0
  27. package/dist/deploy-Da6P2HXS.js +15 -0
  28. package/dist/deploy-Da6P2HXS.js.map +1 -0
  29. package/dist/dev-DWMSNcLl.js +32 -0
  30. package/dist/dev-DWMSNcLl.js.map +1 -0
  31. package/dist/dev-lock-BFanZSu1.js +10 -0
  32. package/dist/dev-lock-BFanZSu1.js.map +1 -0
  33. package/dist/directory-CNL03L6c.js +9 -0
  34. package/dist/directory-CNL03L6c.js.map +1 -0
  35. package/dist/env-DoWNvHzW.js +62 -0
  36. package/dist/env-DoWNvHzW.js.map +1 -0
  37. package/dist/esm-B25i6Etq.js +12 -0
  38. package/dist/esm-B25i6Etq.js.map +1 -0
  39. package/dist/esm-CJocZrdd.js +2 -0
  40. package/dist/esm-CJocZrdd.js.map +1 -0
  41. package/dist/eval-BceZMSd5.js +27 -0
  42. package/dist/eval-BceZMSd5.js.map +1 -0
  43. package/dist/execAsync-DrhcEHLd.js +2 -0
  44. package/dist/execAsync-DrhcEHLd.js.map +1 -0
  45. package/dist/filesync-De6asZeR.js +61 -0
  46. package/dist/filesync-De6asZeR.js.map +1 -0
  47. package/dist/getMachineId-bsd-Cch8Z6pV.js +2 -0
  48. package/dist/getMachineId-bsd-Cch8Z6pV.js.map +1 -0
  49. package/dist/getMachineId-darwin-kbQWK54o.js +3 -0
  50. package/dist/getMachineId-darwin-kbQWK54o.js.map +1 -0
  51. package/dist/getMachineId-linux-DdIel6zr.js +2 -0
  52. package/dist/getMachineId-linux-DdIel6zr.js.map +1 -0
  53. package/dist/getMachineId-unsupported-Bvmsh30k.js +2 -0
  54. package/dist/getMachineId-unsupported-Bvmsh30k.js.map +1 -0
  55. package/dist/getMachineId-win-BteHZe8j.js +2 -0
  56. package/dist/getMachineId-win-BteHZe8j.js.map +1 -0
  57. package/dist/ggt-B3HQjQRM.js +3 -0
  58. package/dist/ggt-B3HQjQRM.js.map +1 -0
  59. package/dist/handler-DZyG8Sel.js +4 -0
  60. package/dist/handler-DZyG8Sel.js.map +1 -0
  61. package/dist/http-CY3lPMkt.js +320 -0
  62. package/dist/http-CY3lPMkt.js.map +1 -0
  63. package/dist/indent-string-BVm-4tyL.js +2 -0
  64. package/dist/indent-string-BVm-4tyL.js.map +1 -0
  65. package/dist/list-lQKWZ6ZI.js +10 -0
  66. package/dist/list-lQKWZ6ZI.js.map +1 -0
  67. package/dist/login-Ce0tByNd.js +1 -0
  68. package/dist/logout-_sTWeaiQ.js +5 -0
  69. package/dist/logout-_sTWeaiQ.js.map +1 -0
  70. package/dist/logs-DbhJzz4M.js +9 -0
  71. package/dist/logs-DbhJzz4M.js.map +1 -0
  72. package/dist/main.js +2 -2
  73. package/dist/main.js.map +1 -7
  74. package/dist/model-CBiMKY0P.js +11 -0
  75. package/dist/model-CBiMKY0P.js.map +1 -0
  76. package/dist/ms-B7sMc0pR.js +2 -0
  77. package/dist/ms-B7sMc0pR.js.map +1 -0
  78. package/dist/open-CSsA4B-l.js +38 -0
  79. package/dist/open-CSsA4B-l.js.map +1 -0
  80. package/dist/p-map-DE0acmRv.js +2 -0
  81. package/dist/p-map-DE0acmRv.js.map +1 -0
  82. package/dist/problems-BMLsmxd4.js +11 -0
  83. package/dist/problems-BMLsmxd4.js.map +1 -0
  84. package/dist/prompt-C9nwJW0G.js +2 -0
  85. package/dist/prompt-C9nwJW0G.js.map +1 -0
  86. package/dist/pull-DpizmJGk.js +12 -0
  87. package/dist/pull-DpizmJGk.js.map +1 -0
  88. package/dist/push-67KBCw6c.js +12 -0
  89. package/dist/push-67KBCw6c.js.map +1 -0
  90. package/dist/root-D_UnUsp7.js +28 -0
  91. package/dist/root-D_UnUsp7.js.map +1 -0
  92. package/dist/select-Dey_sjjd.js +4 -0
  93. package/dist/select-Dey_sjjd.js.map +1 -0
  94. package/dist/session-BmzGF1t7.js +2 -0
  95. package/dist/session-BmzGF1t7.js.map +1 -0
  96. package/dist/spinner-BVmbgIil.js +8 -0
  97. package/dist/spinner-BVmbgIil.js.map +1 -0
  98. package/dist/src-DxCC1MV4.js +6 -0
  99. package/dist/src-DxCC1MV4.js.map +1 -0
  100. package/dist/status-P_RFQ7J0.js +13 -0
  101. package/dist/status-P_RFQ7J0.js.map +1 -0
  102. package/dist/subscribeToEnvironmentLogs-CUicaiw_.js +2 -0
  103. package/dist/subscribeToEnvironmentLogs-CUicaiw_.js.map +1 -0
  104. package/dist/sync-json-V52OzeCz.js +112 -0
  105. package/dist/sync-json-V52OzeCz.js.map +1 -0
  106. package/dist/table-MrBbxMay.js +11 -0
  107. package/dist/table-MrBbxMay.js.map +1 -0
  108. package/dist/update-CfxiL08e.js +12 -0
  109. package/dist/update-CfxiL08e.js.map +1 -0
  110. package/dist/update-iyhnL9-M.js +1 -0
  111. package/dist/var-ByWcufFt.js +59 -0
  112. package/dist/var-ByWcufFt.js.map +1 -0
  113. package/dist/version-B_9GB4u3.js +9 -0
  114. package/dist/version-B_9GB4u3.js.map +1 -0
  115. package/dist/whoami-BNcXIfz7.js +5 -0
  116. package/dist/whoami-BNcXIfz7.js.map +1 -0
  117. package/package.json +18 -22
  118. package/assets/favicon-128@4x.png +0 -0
  119. package/dist/add-7MLI3TCY.js +0 -82
  120. package/dist/add-7MLI3TCY.js.map +0 -7
  121. package/dist/agent-plugin-543K6WBH.js +0 -11
  122. package/dist/agent-plugin-543K6WBH.js.map +0 -7
  123. package/dist/chunk-2HJS3KFB.js +0 -2
  124. package/dist/chunk-2HJS3KFB.js.map +0 -7
  125. package/dist/chunk-3WKH3DJL.js +0 -2
  126. package/dist/chunk-3WKH3DJL.js.map +0 -7
  127. package/dist/chunk-577KP32Z.js +0 -8
  128. package/dist/chunk-577KP32Z.js.map +0 -7
  129. package/dist/chunk-6FVHOLT7.js +0 -28
  130. package/dist/chunk-6FVHOLT7.js.map +0 -7
  131. package/dist/chunk-72J7X5LR.js +0 -2
  132. package/dist/chunk-72J7X5LR.js.map +0 -7
  133. package/dist/chunk-7DYQUG5M.js +0 -2
  134. package/dist/chunk-7DYQUG5M.js.map +0 -7
  135. package/dist/chunk-ALSXPCRD.js +0 -118
  136. package/dist/chunk-ALSXPCRD.js.map +0 -7
  137. package/dist/chunk-CNNOPE5K.js +0 -69
  138. package/dist/chunk-CNNOPE5K.js.map +0 -7
  139. package/dist/chunk-ETKWDO4V.js +0 -2
  140. package/dist/chunk-ETKWDO4V.js.map +0 -7
  141. package/dist/chunk-F6BGQ4LG.js +0 -11
  142. package/dist/chunk-F6BGQ4LG.js.map +0 -7
  143. package/dist/chunk-FE5O5VX4.js +0 -2
  144. package/dist/chunk-FE5O5VX4.js.map +0 -7
  145. package/dist/chunk-GFQYFEEH.js +0 -2
  146. package/dist/chunk-GFQYFEEH.js.map +0 -7
  147. package/dist/chunk-GJGBTM5Y.js +0 -2
  148. package/dist/chunk-GJGBTM5Y.js.map +0 -7
  149. package/dist/chunk-GZTHIOXS.js +0 -2
  150. package/dist/chunk-GZTHIOXS.js.map +0 -7
  151. package/dist/chunk-IQSZEOYY.js +0 -283
  152. package/dist/chunk-IQSZEOYY.js.map +0 -7
  153. package/dist/chunk-J232VCIM.js +0 -2
  154. package/dist/chunk-J232VCIM.js.map +0 -7
  155. package/dist/chunk-KKIL22RY.js +0 -2
  156. package/dist/chunk-KKIL22RY.js.map +0 -7
  157. package/dist/chunk-L2XBSR7G.js +0 -2
  158. package/dist/chunk-L2XBSR7G.js.map +0 -7
  159. package/dist/chunk-N5FFICAP.js +0 -9
  160. package/dist/chunk-N5FFICAP.js.map +0 -7
  161. package/dist/chunk-TGCJ6TMW.js +0 -10
  162. package/dist/chunk-TGCJ6TMW.js.map +0 -7
  163. package/dist/chunk-ULJYEUQG.js +0 -113
  164. package/dist/chunk-ULJYEUQG.js.map +0 -7
  165. package/dist/chunk-UVVKKUYG.js +0 -10
  166. package/dist/chunk-UVVKKUYG.js.map +0 -7
  167. package/dist/chunk-WZ2PO6H2.js +0 -11
  168. package/dist/chunk-WZ2PO6H2.js.map +0 -7
  169. package/dist/chunk-X4XSYLCE.js +0 -12
  170. package/dist/chunk-X4XSYLCE.js.map +0 -7
  171. package/dist/chunk-ZYDMXS5R.js +0 -6
  172. package/dist/chunk-ZYDMXS5R.js.map +0 -7
  173. package/dist/configure-PYRXYNGZ.js +0 -12
  174. package/dist/configure-PYRXYNGZ.js.map +0 -7
  175. package/dist/debugger-VKLUEWIN.js +0 -41
  176. package/dist/debugger-VKLUEWIN.js.map +0 -7
  177. package/dist/deploy-JCREEGBA.js +0 -25
  178. package/dist/deploy-JCREEGBA.js.map +0 -7
  179. package/dist/dev-Y2GLI7EH.js +0 -59
  180. package/dist/dev-Y2GLI7EH.js.map +0 -7
  181. package/dist/env-5OPHX3MC.js +0 -135
  182. package/dist/env-5OPHX3MC.js.map +0 -7
  183. package/dist/esm-3JVXH7DT.js +0 -37
  184. package/dist/esm-3JVXH7DT.js.map +0 -7
  185. package/dist/eval-LZPZ6PBQ.js +0 -54
  186. package/dist/eval-LZPZ6PBQ.js.map +0 -7
  187. package/dist/getMachineId-bsd-QUXN4NKS.js +0 -2
  188. package/dist/getMachineId-bsd-QUXN4NKS.js.map +0 -7
  189. package/dist/getMachineId-darwin-TCXBAX22.js +0 -3
  190. package/dist/getMachineId-darwin-TCXBAX22.js.map +0 -7
  191. package/dist/getMachineId-linux-IJ3LYIOX.js +0 -2
  192. package/dist/getMachineId-linux-IJ3LYIOX.js.map +0 -7
  193. package/dist/getMachineId-unsupported-IKXBUCYY.js +0 -2
  194. package/dist/getMachineId-unsupported-IKXBUCYY.js.map +0 -7
  195. package/dist/getMachineId-win-6CX7VSFF.js +0 -2
  196. package/dist/getMachineId-win-6CX7VSFF.js.map +0 -7
  197. package/dist/ggt-KUAF6WUA.js +0 -45
  198. package/dist/ggt-KUAF6WUA.js.map +0 -7
  199. package/dist/list-IANT7SNF.js +0 -11
  200. package/dist/list-IANT7SNF.js.map +0 -7
  201. package/dist/login-TYRZLN5S.js +0 -2
  202. package/dist/login-TYRZLN5S.js.map +0 -7
  203. package/dist/logout-P75XYYZ6.js +0 -7
  204. package/dist/logout-P75XYYZ6.js.map +0 -7
  205. package/dist/logs-SBMD6JSR.js +0 -28
  206. package/dist/logs-SBMD6JSR.js.map +0 -7
  207. package/dist/open-JPAMII4K.js +0 -74
  208. package/dist/open-JPAMII4K.js.map +0 -7
  209. package/dist/problems-EZRSHLZT.js +0 -14
  210. package/dist/problems-EZRSHLZT.js.map +0 -7
  211. package/dist/pull-R3PMBVOT.js +0 -28
  212. package/dist/pull-R3PMBVOT.js.map +0 -7
  213. package/dist/push-5XEEESQQ.js +0 -2
  214. package/dist/push-5XEEESQQ.js.map +0 -7
  215. package/dist/status-RJN5ES6S.js +0 -14
  216. package/dist/status-RJN5ES6S.js.map +0 -7
  217. package/dist/update-X7YS3MNH.js +0 -2
  218. package/dist/update-X7YS3MNH.js.map +0 -7
  219. package/dist/var-PC6KQUPF.js +0 -159
  220. package/dist/var-PC6KQUPF.js.map +0 -7
  221. package/dist/version-GZJOU2CV.js +0 -11
  222. package/dist/version-GZJOU2CV.js.map +0 -7
  223. package/dist/whoami-GKPGPZ3B.js +0 -7
  224. package/dist/whoami-GKPGPZ3B.js.map +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-json-V52OzeCz.js","names":["#client","colors","colors","FOLDER","Buffer2","EventEmitter","fs","colors","colors","fs"],"sources":["../src/services/app/edit/edit.ts","../src/services/output/problems.ts","../src/services/filesync/error.ts","../node_modules/.pnpm/@kwsites+file-exists@1.1.1/node_modules/@kwsites/file-exists/dist/src/index.js","../node_modules/.pnpm/@kwsites+file-exists@1.1.1/node_modules/@kwsites/file-exists/dist/index.js","../node_modules/.pnpm/@kwsites+promise-deferred@1.1.1/node_modules/@kwsites/promise-deferred/dist/index.js","../node_modules/.pnpm/simple-git@3.33.0/node_modules/simple-git/dist/esm/index.js","../src/services/command/app-identity.ts","../src/services/filesync/sync-json.ts"],"sourcesContent":["import type { Promisable } from \"type-fest\";\n\nimport type { Context } from \"../../command/context.ts\";\nimport { type HttpOptions } from \"../../http/http.ts\";\nimport { unthunk, type Thunk } from \"../../util/function.ts\";\nimport { isStringArray } from \"../../util/is.ts\";\nimport type { RetryOptions } from \"../../util/retry.ts\";\nimport type { Environment } from \"../app.ts\";\nimport { Client, type ClientSubscription } from \"../client.ts\";\nimport { AuthenticationError, ClientError } from \"../error.ts\";\nimport { getOperationName, type GraphQLMutation, type GraphQLQuery, type GraphQLSubscription } from \"./operation.ts\";\n\nexport class Edit {\n /**\n * The {@linkcode Context} that was used to create this instance.\n */\n readonly ctx: Context;\n\n /**\n * The environment this edit is associated with.\n */\n readonly environment: Environment;\n\n /**\n * The client used to make requests to Gadget's /edit/api/graphql\n * endpoint.\n */\n #client: Client;\n\n constructor(ctx: Context, environment: Environment) {\n this.ctx = ctx.child({ name: \"edit\" });\n this.environment = environment;\n this.#client = new Client(this.ctx, environment, \"/edit/api/graphql\");\n }\n\n /**\n * Execute a GraphQL query.\n *\n * @param request - The query and variables to send to the server.\n * @param request.query - The GraphQL query to execute.\n * @param request.variables - The variables to send to the server.\n * @param request.http - {@linkcode HttpOptions} to pass to http.\n * @returns The data returned by the server.\n */\n async query<Query extends GraphQLQuery>({\n query,\n variables,\n ...options\n }: {\n query: Query;\n variables?: Thunk<Query[\"Variables\"]> | null;\n http?: HttpOptions;\n }): Promise<Query[\"Data\"]> {\n const name = getOperationName(query);\n\n const ctx = this.ctx.child({\n name: \"edit\",\n fields: { edit: { query: name } },\n devFields: { edit: { query: name, variables: unthunk(variables) } },\n });\n\n ctx.log.info(\"executing graphql query\");\n const response = await this.#client.execute(ctx, {\n operation: query,\n variables,\n ...options,\n http: {\n retry: {\n // queries _should_ be idempotent, so automatically retry them\n methods: [\"POST\"],\n },\n ...options.http,\n },\n });\n\n if (response.errors) {\n throw new ClientError(query, response.errors);\n }\n\n if (!response.data) {\n throw new ClientError(query, \"Query response did not contain data\");\n }\n\n return response.data;\n }\n\n /**\n * Execute a GraphQL mutation.\n *\n * @param request - The query and variables to send to the server.\n * @param request.mutation - The GraphQL mutation to execute.\n * @param request.variables - The variables to send to the server.\n * @param request.http - {@linkcode HttpOptions} to pass to http.\n * @returns The data returned by the server.\n */\n async mutate<Mutation extends GraphQLMutation>({\n mutation,\n variables,\n ...options\n }: {\n mutation: Mutation;\n variables?: Thunk<Mutation[\"Variables\"]> | null;\n http?: HttpOptions;\n }): Promise<Mutation[\"Data\"]> {\n const name = getOperationName(mutation);\n\n const ctx = this.ctx.child({\n name: \"edit\",\n fields: { edit: { mutation: name } },\n devFields: { edit: { mutation: name, variables: unthunk(variables) } },\n });\n\n ctx.log.info(\"executing graphql mutation\");\n const response = await this.#client.execute(ctx, { operation: mutation, variables, ...options });\n\n if (response.errors) {\n /* If it is the specific unauthenticated error, handle it differently as nothing is broken in that case */\n const errors: unknown = response.errors;\n if (isStringArray(errors) && errors[0] === \"Unauthenticated. No authenticated client.\") {\n throw new AuthenticationError(mutation);\n }\n throw new ClientError(mutation, response.errors);\n }\n\n if (!response.data) {\n throw new ClientError(mutation, \"Mutation response did not contain data\");\n }\n\n return response.data;\n }\n\n /**\n * Subscribe to a GraphQL subscription.\n *\n * @param options - The query and variables to send to the server.\n * @param options.subscription - The GraphQL subscription to subscribe to.\n * @param options.variables - The variables to send to the server.\n * @param options.onData - A callback that will be called when data is received from the server.\n * @param options.onError - A callback that will be called when an error is received from the server.\n * @param options.onComplete - A callback that will be called when the subscription ends.\n * @param options.retry - Optional retry configuration for automatic resubscription on transient errors.\n * @returns An EditSubscription object to control the subscription.\n */\n subscribe<Subscription extends GraphQLSubscription>({\n subscription,\n variables,\n onData,\n onError,\n onComplete,\n retry,\n }: {\n subscription: Subscription;\n variables?: Thunk<Subscription[\"Variables\"]> | null;\n onData: (data: Subscription[\"Data\"]) => Promisable<void>;\n onError: (error: ClientError) => Promisable<void>;\n onComplete?: () => Promisable<void>;\n retry?: RetryOptions;\n }): EditSubscription<Subscription> {\n const name = getOperationName(subscription);\n\n const ctx = this.ctx.child({\n name: \"edit\",\n fields: { edit: { subscription: name } },\n devFields: { edit: { subscription: name, variables: unthunk(variables) } },\n });\n\n ctx.log.info(\"subscribing to graphql subscription\");\n\n const clientSubscription = this.#client.subscribe(ctx, {\n subscription,\n variables,\n onData,\n onError,\n onComplete,\n retry,\n });\n\n return clientSubscription;\n }\n\n /**\n * Close the client.\n */\n async dispose(): Promise<void> {\n await this.#client.dispose();\n }\n}\n\n/**\n * An object that can be used to unsubscribe and resubscribe to an\n * ongoing Edit GraphQL subscription.\n */\nexport type EditSubscription<Subscription extends GraphQLSubscription> = ClientSubscription<Subscription>;\n","import chalk from \"chalk\";\nimport pluralize from \"pluralize\";\n\nimport type { Problem as FileSyncProblem, PublishIssue } from \"../../__generated__/graphql.ts\";\nimport { compact } from \"../util/collection.ts\";\nimport { isGellyFile, isJavaScriptFile, isTypeScriptFile } from \"../util/is.ts\";\nimport colors from \"./colors.ts\";\nimport { println } from \"./print.ts\";\nimport { sprint, sprintln, type SprintOptions } from \"./sprint.ts\";\n\nexport type Problems = Record<string, Problem[]>;\n\nexport type Problem = {\n type: string;\n severity: ProblemSeverity;\n message: string;\n labels: string[];\n};\n\nexport const ProblemSeverity = Object.freeze({\n Fatal: \"Fatal\",\n Error: \"Error\",\n Warning: \"Warning\",\n Info: \"Info\",\n});\n\nexport type ProblemSeverity = keyof typeof ProblemSeverity;\n\nexport type PrintProblemsOptions = SprintOptions & {\n /**\n * The problems to print.\n */\n problems: Problems;\n\n /**\n * Whether to show the file type in the output.\n *\n * @default problem.type === \"SourceFile\"\n */\n showFileTypes?: boolean;\n};\n\nexport const sprintProblems = ({ problems: groupedProblems, showFileTypes, ...sprintOptions }: PrintProblemsOptions): string => {\n let content = \"\";\n\n for (const [name, problems] of Object.entries(groupedProblems)) {\n content += sprintln(\"\");\n content += sprintln`• ${colors.link(name)} ${colors.error(pluralize(\"problem\", problems.length, true))}`;\n for (const problem of problems) {\n const [message, ...lines] = problem.message.split(\"\\n\") as [string, ...string[]];\n\n content += ` ${colors.error(\"✖\")} `;\n if (showFileTypes ?? problem.type === \"SourceFile\") {\n content += `${filetype(name)} `;\n }\n content += sprint(message);\n\n for (const line of lines) {\n content += sprintln(\"\");\n content += sprint` ${line}`;\n }\n\n for (const label of problem.labels) {\n content += ` ${colors.subdued(label)}`;\n }\n\n content += sprintln(\"\");\n }\n }\n\n return sprintln({ ...sprintOptions, content });\n};\n\nexport const printProblems = (options: PrintProblemsOptions): void => {\n println(sprintProblems(options));\n};\n\nexport const filetype = (filename: string): string => {\n switch (true) {\n case isJavaScriptFile(filename):\n return chalk.yellowBright(\"JavaScript\");\n case isTypeScriptFile(filename):\n return chalk.blue(\"TypeScript\");\n case isGellyFile(filename):\n return chalk.magenta(\"Gelly\");\n default:\n return chalk.gray(\"File\");\n }\n};\n\nexport const publishIssuesToProblems = (issues: PublishIssue[]): Problems => {\n const problems: Problems = {};\n for (const issue of issues) {\n const name = issue.node?.apiIdentifier ?? issue.node?.name ?? \"Other\";\n problems[name] ??= [];\n problems[name].push({\n type: issue.node?.type ?? \"Unknown\",\n severity: issue.severity as ProblemSeverity,\n message: issue.message,\n labels: compact(issue.nodeLabels?.map((label) => label?.identifier) ?? []),\n });\n }\n return problems;\n};\n\nexport const filesyncProblemsToProblems = (filesyncProblems: FileSyncProblem[]): Problems => {\n const problems: Problems = {};\n for (const filesyncProblem of filesyncProblems) {\n problems[filesyncProblem.path] ??= [];\n // oxlint-disable-next-line no-non-null-assertion\n problems[filesyncProblem.path]!.push({\n type: filesyncProblem.type,\n severity: filesyncProblem.level as ProblemSeverity,\n message: filesyncProblem.message,\n labels: [],\n });\n }\n return problems;\n};\n","import pluralize from \"pluralize\";\n\nimport { ClientError } from \"../app/error.ts\";\nimport { type Command } from \"../command/command.ts\";\nimport type { Context } from \"../command/context.ts\";\nimport colors from \"../output/colors.ts\";\nimport { sprintProblems, type Problems } from \"../output/problems.ts\";\nimport { GGTError, IsBug } from \"../output/report.ts\";\nimport { sprint, sprintln } from \"../output/sprint.ts\";\nimport { isGraphQLErrors, isGraphQLResult, isObject, isString } from \"../util/is.ts\";\nimport type { Directory } from \"./directory.ts\";\nimport type { SyncJsonFlagsResult } from \"./sync-json.ts\";\n\nexport class YarnNotFoundError extends GGTError {\n isBug = IsBug.NO;\n\n constructor() {\n super(\"Yarn not found\");\n }\n\n protected render(): string {\n return sprint`\n Yarn must be installed to sync your application. You can install it by running:\n\n $ npm install --global yarn\n\n For more information, see: https://classic.yarnpkg.com/en/docs/install\n `;\n }\n}\n\nexport class UnknownDirectoryError extends GGTError {\n isBug = IsBug.NO;\n\n readonly details: { command: Command; directory: Directory; flags: SyncJsonFlagsResult };\n\n constructor(details: { command: Command; directory: Directory; flags: SyncJsonFlagsResult }) {\n super('The \".gadget/sync.json\" file was invalid or not found');\n this.details = details;\n }\n\n protected render(): string {\n const dir = this.details.directory.path;\n\n switch (this.details.command) {\n case \"add\":\n case \"open\":\n case \"debugger\":\n case \"problems\":\n case \"status\":\n return sprint`\n A \".gadget/sync.json\" file is missing in this directory:\n\n ${dir}\n\n In order to use \"ggt ${this.details.command}\", you must run it within a directory\n that has already been initialized with \"ggt dev\".\n `;\n case \"dev\":\n return sprint`\n A \".gadget/sync.json\" file is missing in this directory:\n\n ${dir}\n\n If you're running \"ggt dev\" for the first time, we recommend\n using a gadget specific directory like this:\n\n ggt dev ~/gadget/${this.details.flags[\"--application\"] ?? \"<name>\"}\n\n To use a non-empty directory without a \".gadget/sync.json\" file,\n run \"ggt dev\" again with the \"--allow-unknown-directory\" flag:\n\n ggt dev ${dir} --allow-unknown-directory\n `;\n default:\n return sprint`\n A \".gadget/sync.json\" file is missing in this directory:\n\n ${dir}\n\n If you're certain you want to use this directory, you can run\n \"ggt ${this.details.command}\" again with the \"--allow-unknown-directory\" flag:\n\n ggt ${this.details.command} --allow-unknown-directory\n `;\n }\n }\n}\n\nexport class TooManyMergeAttemptsError extends GGTError {\n isBug = IsBug.MAYBE;\n readonly attempts: number;\n\n constructor(attempts: number) {\n super(`Failed to synchronize files after ${attempts} attempts.`);\n this.attempts = attempts;\n }\n\n protected render(): string {\n return sprint`\n We merged your local files with your environment's files ${this.attempts} times,\n but your local and environment's files still don't match.\n\n Make sure no one else is editing files on your environment, and try again.\n `;\n }\n}\n\nexport class TooManyPushAttemptsError extends GGTError {\n isBug = IsBug.MAYBE;\n\n readonly attempts: number;\n readonly command: Command;\n\n constructor(attempts: number, command: Command) {\n super(`Failed to push local changes to environment after ${pluralize(\"attempt\", attempts, true)}.`);\n this.attempts = attempts;\n this.command = command;\n }\n\n protected render(): string {\n return sprint`\n We tried to push your local changes to your environment ${pluralize(\"time\", this.attempts, true)},\n but your environment's files kept changing since we last checked.\n\n Please re-run \"ggt ${this.command}\" to see the changes and try again.\n `;\n }\n}\n\nexport class DeployDisallowedError extends GGTError {\n isBug = IsBug.MAYBE;\n\n readonly fatalErrors: Problems;\n\n constructor(fatalErrors: Problems) {\n super(\"This application is not allowed to be deployed due to fatal errors.\");\n this.fatalErrors = fatalErrors;\n }\n\n protected render(): string {\n let output = sprintln`${colors.error(\"Gadget has detected the following fatal errors with your files:\")}`;\n output += sprintProblems({ ensureEmptyLineAbove: true, problems: this.fatalErrors, showFileTypes: false });\n output += sprintln({ ensureEmptyLineAbove: true, content: colors.error(\"Please fix these errors and try again.\") });\n return output;\n }\n}\n\nexport const isFilesVersionMismatchError = (error: unknown): boolean => {\n if (error instanceof ClientError) {\n error = error.cause;\n }\n if (isGraphQLResult(error)) {\n error = error.errors;\n }\n if (isGraphQLErrors(error)) {\n error = error[0];\n }\n return isObject(error) && \"message\" in error && isString(error.message) && error.message.includes(\"Files version mismatch\");\n};\n\nexport const swallowFilesVersionMismatch = (ctx: Context, error: unknown): void => {\n if (isFilesVersionMismatchError(error)) {\n ctx.log.debug(\"swallowing files version mismatch\", { error });\n return;\n }\n throw error;\n};\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs_1 = require(\"fs\");\nconst debug_1 = __importDefault(require(\"debug\"));\nconst log = debug_1.default('@kwsites/file-exists');\nfunction check(path, isFile, isDirectory) {\n log(`checking %s`, path);\n try {\n const stat = fs_1.statSync(path);\n if (stat.isFile() && isFile) {\n log(`[OK] path represents a file`);\n return true;\n }\n if (stat.isDirectory() && isDirectory) {\n log(`[OK] path represents a directory`);\n return true;\n }\n log(`[FAIL] path represents something other than a file or directory`);\n return false;\n }\n catch (e) {\n if (e.code === 'ENOENT') {\n log(`[FAIL] path is not accessible: %o`, e);\n return false;\n }\n log(`[FATAL] %o`, e);\n throw e;\n }\n}\n/**\n * Synchronous validation of a path existing either as a file or as a directory.\n *\n * @param {string} path The path to check\n * @param {number} type One or both of the exported numeric constants\n */\nfunction exists(path, type = exports.READABLE) {\n return check(path, (type & exports.FILE) > 0, (type & exports.FOLDER) > 0);\n}\nexports.exists = exists;\n/**\n * Constant representing a file\n */\nexports.FILE = 1;\n/**\n * Constant representing a folder\n */\nexports.FOLDER = 2;\n/**\n * Constant representing either a file or a folder\n */\nexports.READABLE = exports.FILE + exports.FOLDER;\n//# sourceMappingURL=index.js.map","\"use strict\";\nfunction __export(m) {\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./src\"));\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDeferred = exports.deferred = void 0;\n/**\n * Creates a new `DeferredPromise`\n *\n * ```typescript\n import {deferred} from '@kwsites/promise-deferred`;\n ```\n */\nfunction deferred() {\n let done;\n let fail;\n let status = 'pending';\n const promise = new Promise((_done, _fail) => {\n done = _done;\n fail = _fail;\n });\n return {\n promise,\n done(result) {\n if (status === 'pending') {\n status = 'resolved';\n done(result);\n }\n },\n fail(error) {\n if (status === 'pending') {\n status = 'rejected';\n fail(error);\n }\n },\n get fulfilled() {\n return status !== 'pending';\n },\n get status() {\n return status;\n },\n };\n}\nexports.deferred = deferred;\n/**\n * Alias of the exported `deferred` function, to help consumers wanting to use `deferred` as the\n * local variable name rather than the factory import name, without needing to rename on import.\n *\n * ```typescript\n import {createDeferred} from '@kwsites/promise-deferred`;\n ```\n */\nexports.createDeferred = deferred;\n/**\n * Default export allows use as:\n *\n * ```typescript\n import deferred from '@kwsites/promise-deferred`;\n ```\n */\nexports.default = deferred;\n//# sourceMappingURL=index.js.map","var __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n};\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// src/lib/args/pathspec.ts\nfunction pathspec(...paths) {\n const key = new String(paths);\n cache.set(key, paths);\n return key;\n}\nfunction isPathSpec(path) {\n return path instanceof String && cache.has(path);\n}\nfunction toPaths(pathSpec) {\n return cache.get(pathSpec) || [];\n}\nvar cache;\nvar init_pathspec = __esm({\n \"src/lib/args/pathspec.ts\"() {\n \"use strict\";\n cache = /* @__PURE__ */ new WeakMap();\n }\n});\n\n// src/lib/errors/git-error.ts\nvar GitError;\nvar init_git_error = __esm({\n \"src/lib/errors/git-error.ts\"() {\n \"use strict\";\n GitError = class extends Error {\n constructor(task, message) {\n super(message);\n this.task = task;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n };\n }\n});\n\n// src/lib/errors/git-response-error.ts\nvar GitResponseError;\nvar init_git_response_error = __esm({\n \"src/lib/errors/git-response-error.ts\"() {\n \"use strict\";\n init_git_error();\n GitResponseError = class extends GitError {\n constructor(git, message) {\n super(void 0, message || String(git));\n this.git = git;\n }\n };\n }\n});\n\n// src/lib/errors/task-configuration-error.ts\nvar TaskConfigurationError;\nvar init_task_configuration_error = __esm({\n \"src/lib/errors/task-configuration-error.ts\"() {\n \"use strict\";\n init_git_error();\n TaskConfigurationError = class extends GitError {\n constructor(message) {\n super(void 0, message);\n }\n };\n }\n});\n\n// src/lib/utils/util.ts\nimport { Buffer as Buffer2 } from \"node:buffer\";\nimport { exists, FOLDER } from \"@kwsites/file-exists\";\nfunction asFunction(source) {\n if (typeof source !== \"function\") {\n return NOOP;\n }\n return source;\n}\nfunction isUserFunction(source) {\n return typeof source === \"function\" && source !== NOOP;\n}\nfunction splitOn(input, char) {\n const index = input.indexOf(char);\n if (index <= 0) {\n return [input, \"\"];\n }\n return [input.substr(0, index), input.substr(index + 1)];\n}\nfunction first(input, offset = 0) {\n return isArrayLike(input) && input.length > offset ? input[offset] : void 0;\n}\nfunction last(input, offset = 0) {\n if (isArrayLike(input) && input.length > offset) {\n return input[input.length - 1 - offset];\n }\n}\nfunction isArrayLike(input) {\n return filterHasLength(input);\n}\nfunction toLinesWithContent(input = \"\", trimmed2 = true, separator = \"\\n\") {\n return input.split(separator).reduce((output, line) => {\n const lineContent = trimmed2 ? line.trim() : line;\n if (lineContent) {\n output.push(lineContent);\n }\n return output;\n }, []);\n}\nfunction forEachLineWithContent(input, callback) {\n return toLinesWithContent(input, true).map((line) => callback(line));\n}\nfunction folderExists(path) {\n return exists(path, FOLDER);\n}\nfunction append(target, 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}\nfunction including(target, item) {\n if (Array.isArray(target) && !target.includes(item)) {\n target.push(item);\n }\n return target;\n}\nfunction remove(target, item) {\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}\nfunction asArray(source) {\n return Array.isArray(source) ? source : [source];\n}\nfunction asCamelCase(str) {\n return str.replace(/[\\s-]+(.)/g, (_all, chr) => {\n return chr.toUpperCase();\n });\n}\nfunction asStringArray(source) {\n return asArray(source).map((item) => {\n return item instanceof String ? item : String(item);\n });\n}\nfunction asNumber(source, onNaN = 0) {\n if (source == null) {\n return onNaN;\n }\n const num = parseInt(source, 10);\n return Number.isNaN(num) ? onNaN : num;\n}\nfunction prefixedArray(input, prefix) {\n const output = [];\n for (let i = 0, max = input.length; i < max; i++) {\n output.push(prefix, input[i]);\n }\n return output;\n}\nfunction bufferToString(input) {\n return (Array.isArray(input) ? Buffer2.concat(input) : input).toString(\"utf-8\");\n}\nfunction pick(source, properties) {\n const out = {};\n properties.forEach((key) => {\n if (source[key] !== void 0) {\n out[key] = source[key];\n }\n });\n return out;\n}\nfunction delay(duration = 0) {\n return new Promise((done) => setTimeout(done, duration));\n}\nfunction orVoid(input) {\n if (input === false) {\n return void 0;\n }\n return input;\n}\nvar NULL, NOOP, objectToString;\nvar init_util = __esm({\n \"src/lib/utils/util.ts\"() {\n \"use strict\";\n init_argument_filters();\n NULL = \"\\0\";\n NOOP = () => {\n };\n objectToString = Object.prototype.toString.call.bind(Object.prototype.toString);\n }\n});\n\n// src/lib/utils/argument-filters.ts\nfunction filterType(input, filter, def) {\n if (filter(input)) {\n return input;\n }\n return arguments.length > 2 ? def : void 0;\n}\nfunction filterPrimitives(input, omit) {\n const type = isPathSpec(input) ? \"string\" : typeof input;\n return /number|string|boolean/.test(type) && (!omit || !omit.includes(type));\n}\nfunction filterPlainObject(input) {\n return !!input && objectToString(input) === \"[object Object]\";\n}\nfunction filterFunction(input) {\n return typeof input === \"function\";\n}\nvar filterArray, filterNumber, filterString, filterStringOrStringArray, filterHasLength;\nvar init_argument_filters = __esm({\n \"src/lib/utils/argument-filters.ts\"() {\n \"use strict\";\n init_pathspec();\n init_util();\n filterArray = (input) => {\n return Array.isArray(input);\n };\n filterNumber = (input) => {\n return typeof input === \"number\";\n };\n filterString = (input) => {\n return typeof input === \"string\" || isPathSpec(input);\n };\n filterStringOrStringArray = (input) => {\n return filterString(input) || Array.isArray(input) && input.every(filterString);\n };\n filterHasLength = (input) => {\n if (input == null || \"number|boolean|function\".includes(typeof input)) {\n return false;\n }\n return typeof input.length === \"number\";\n };\n }\n});\n\n// src/lib/utils/exit-codes.ts\nvar ExitCodes;\nvar init_exit_codes = __esm({\n \"src/lib/utils/exit-codes.ts\"() {\n \"use strict\";\n ExitCodes = /* @__PURE__ */ ((ExitCodes2) => {\n ExitCodes2[ExitCodes2[\"SUCCESS\"] = 0] = \"SUCCESS\";\n ExitCodes2[ExitCodes2[\"ERROR\"] = 1] = \"ERROR\";\n ExitCodes2[ExitCodes2[\"NOT_FOUND\"] = -2] = \"NOT_FOUND\";\n ExitCodes2[ExitCodes2[\"UNCLEAN\"] = 128] = \"UNCLEAN\";\n return ExitCodes2;\n })(ExitCodes || {});\n }\n});\n\n// src/lib/utils/git-output-streams.ts\nvar GitOutputStreams;\nvar init_git_output_streams = __esm({\n \"src/lib/utils/git-output-streams.ts\"() {\n \"use strict\";\n GitOutputStreams = class _GitOutputStreams {\n constructor(stdOut, stdErr) {\n this.stdOut = stdOut;\n this.stdErr = stdErr;\n }\n asStrings() {\n return new _GitOutputStreams(this.stdOut.toString(\"utf8\"), this.stdErr.toString(\"utf8\"));\n }\n };\n }\n});\n\n// src/lib/utils/line-parser.ts\nfunction useMatchesDefault() {\n throw new Error(`LineParser:useMatches not implemented`);\n}\nvar LineParser, RemoteLineParser;\nvar init_line_parser = __esm({\n \"src/lib/utils/line-parser.ts\"() {\n \"use strict\";\n LineParser = class {\n constructor(regExp, useMatches) {\n this.matches = [];\n this.useMatches = useMatchesDefault;\n this.parse = (line, target) => {\n this.resetMatches();\n if (!this._regExp.every((reg, index) => this.addMatch(reg, index, line(index)))) {\n return false;\n }\n return this.useMatches(target, this.prepareMatches()) !== false;\n };\n this._regExp = Array.isArray(regExp) ? regExp : [regExp];\n if (useMatches) {\n this.useMatches = useMatches;\n }\n }\n resetMatches() {\n this.matches.length = 0;\n }\n prepareMatches() {\n return this.matches;\n }\n addMatch(reg, index, line) {\n const matched = line && reg.exec(line);\n if (matched) {\n this.pushMatch(index, matched);\n }\n return !!matched;\n }\n pushMatch(_index, matched) {\n this.matches.push(...matched.slice(1));\n }\n };\n RemoteLineParser = class extends LineParser {\n addMatch(reg, index, line) {\n return /^remote:\\s/.test(String(line)) && super.addMatch(reg, index, line);\n }\n pushMatch(index, matched) {\n if (index > 0 || matched.length > 1) {\n super.pushMatch(index, matched);\n }\n }\n };\n }\n});\n\n// src/lib/utils/simple-git-options.ts\nfunction createInstanceConfig(...options) {\n const baseDir = process.cwd();\n const config = Object.assign(\n { baseDir, ...defaultOptions },\n ...options.filter((o) => typeof o === \"object\" && o)\n );\n config.baseDir = config.baseDir || baseDir;\n config.trimmed = config.trimmed === true;\n return config;\n}\nvar defaultOptions;\nvar init_simple_git_options = __esm({\n \"src/lib/utils/simple-git-options.ts\"() {\n \"use strict\";\n defaultOptions = {\n binary: \"git\",\n maxConcurrentProcesses: 5,\n config: [],\n trimmed: false\n };\n }\n});\n\n// src/lib/utils/task-options.ts\nfunction appendTaskOptions(options, commands = []) {\n if (!filterPlainObject(options)) {\n return commands;\n }\n return Object.keys(options).reduce((commands2, key) => {\n const value = options[key];\n if (isPathSpec(value)) {\n commands2.push(value);\n } else if (filterPrimitives(value, [\"boolean\"])) {\n commands2.push(key + \"=\" + value);\n } else if (Array.isArray(value)) {\n for (const v of value) {\n if (!filterPrimitives(v, [\"string\", \"number\"])) {\n commands2.push(key + \"=\" + v);\n }\n }\n } else {\n commands2.push(key);\n }\n return commands2;\n }, commands);\n}\nfunction getTrailingOptions(args, initialPrimitive = 0, objectOnly = false) {\n const command = [];\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 appendTaskOptions(trailingOptionsArgument(args), command);\n if (!objectOnly) {\n command.push(...trailingArrayArgument(args));\n }\n return command;\n}\nfunction trailingArrayArgument(args) {\n const hasTrailingCallback = typeof last(args) === \"function\";\n return asStringArray(filterType(last(args, hasTrailingCallback ? 1 : 0), filterArray, []));\n}\nfunction trailingOptionsArgument(args) {\n const hasTrailingCallback = filterFunction(last(args));\n return filterType(last(args, hasTrailingCallback ? 1 : 0), filterPlainObject);\n}\nfunction trailingFunctionArgument(args, includeNoop = true) {\n const callback = asFunction(last(args));\n return includeNoop || isUserFunction(callback) ? callback : void 0;\n}\nvar init_task_options = __esm({\n \"src/lib/utils/task-options.ts\"() {\n \"use strict\";\n init_argument_filters();\n init_util();\n init_pathspec();\n }\n});\n\n// src/lib/utils/task-parser.ts\nfunction callTaskParser(parser4, streams) {\n return parser4(streams.stdOut, streams.stdErr);\n}\nfunction parseStringResponse(result, parsers12, texts, trim = true) {\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 parsers12.some(({ parse }) => parse(line, result));\n }\n });\n return result;\n}\nvar init_task_parser = __esm({\n \"src/lib/utils/task-parser.ts\"() {\n \"use strict\";\n init_util();\n }\n});\n\n// src/lib/utils/index.ts\nvar utils_exports = {};\n__export(utils_exports, {\n ExitCodes: () => ExitCodes,\n GitOutputStreams: () => GitOutputStreams,\n LineParser: () => LineParser,\n NOOP: () => NOOP,\n NULL: () => NULL,\n RemoteLineParser: () => RemoteLineParser,\n append: () => append,\n appendTaskOptions: () => appendTaskOptions,\n asArray: () => asArray,\n asCamelCase: () => asCamelCase,\n asFunction: () => asFunction,\n asNumber: () => asNumber,\n asStringArray: () => asStringArray,\n bufferToString: () => bufferToString,\n callTaskParser: () => callTaskParser,\n createInstanceConfig: () => createInstanceConfig,\n delay: () => delay,\n filterArray: () => filterArray,\n filterFunction: () => filterFunction,\n filterHasLength: () => filterHasLength,\n filterNumber: () => filterNumber,\n filterPlainObject: () => filterPlainObject,\n filterPrimitives: () => filterPrimitives,\n filterString: () => filterString,\n filterStringOrStringArray: () => filterStringOrStringArray,\n filterType: () => filterType,\n first: () => first,\n folderExists: () => folderExists,\n forEachLineWithContent: () => forEachLineWithContent,\n getTrailingOptions: () => getTrailingOptions,\n including: () => including,\n isUserFunction: () => isUserFunction,\n last: () => last,\n objectToString: () => objectToString,\n orVoid: () => orVoid,\n parseStringResponse: () => parseStringResponse,\n pick: () => pick,\n prefixedArray: () => prefixedArray,\n remove: () => remove,\n splitOn: () => splitOn,\n toLinesWithContent: () => toLinesWithContent,\n trailingFunctionArgument: () => trailingFunctionArgument,\n trailingOptionsArgument: () => trailingOptionsArgument\n});\nvar init_utils = __esm({\n \"src/lib/utils/index.ts\"() {\n \"use strict\";\n init_argument_filters();\n init_exit_codes();\n init_git_output_streams();\n init_line_parser();\n init_simple_git_options();\n init_task_options();\n init_task_parser();\n init_util();\n }\n});\n\n// src/lib/tasks/check-is-repo.ts\nvar check_is_repo_exports = {};\n__export(check_is_repo_exports, {\n CheckRepoActions: () => CheckRepoActions,\n checkIsBareRepoTask: () => checkIsBareRepoTask,\n checkIsRepoRootTask: () => checkIsRepoRootTask,\n checkIsRepoTask: () => checkIsRepoTask\n});\nfunction checkIsRepoTask(action) {\n switch (action) {\n case \"bare\" /* BARE */:\n return checkIsBareRepoTask();\n case \"root\" /* IS_REPO_ROOT */:\n return checkIsRepoRootTask();\n }\n const commands = [\"rev-parse\", \"--is-inside-work-tree\"];\n return {\n commands,\n format: \"utf-8\",\n onError,\n parser\n };\n}\nfunction checkIsRepoRootTask() {\n const commands = [\"rev-parse\", \"--git-dir\"];\n return {\n commands,\n format: \"utf-8\",\n onError,\n parser(path) {\n return /^\\.(git)?$/.test(path.trim());\n }\n };\n}\nfunction checkIsBareRepoTask() {\n const commands = [\"rev-parse\", \"--is-bare-repository\"];\n return {\n commands,\n format: \"utf-8\",\n onError,\n parser\n };\n}\nfunction isNotRepoMessage(error) {\n return /(Not a git repository|Kein Git-Repository)/i.test(String(error));\n}\nvar CheckRepoActions, onError, parser;\nvar init_check_is_repo = __esm({\n \"src/lib/tasks/check-is-repo.ts\"() {\n \"use strict\";\n init_utils();\n CheckRepoActions = /* @__PURE__ */ ((CheckRepoActions2) => {\n CheckRepoActions2[\"BARE\"] = \"bare\";\n CheckRepoActions2[\"IN_TREE\"] = \"tree\";\n CheckRepoActions2[\"IS_REPO_ROOT\"] = \"root\";\n return CheckRepoActions2;\n })(CheckRepoActions || {});\n onError = ({ exitCode }, error, done, fail) => {\n if (exitCode === 128 /* UNCLEAN */ && isNotRepoMessage(error)) {\n return done(Buffer.from(\"false\"));\n }\n fail(error);\n };\n parser = (text) => {\n return text.trim() === \"true\";\n };\n }\n});\n\n// src/lib/responses/CleanSummary.ts\nfunction cleanSummaryParser(dryRun, text) {\n const summary = new CleanResponse(dryRun);\n const regexp = dryRun ? dryRunRemovalRegexp : removalRegexp;\n toLinesWithContent(text).forEach((line) => {\n const removed = line.replace(regexp, \"\");\n summary.paths.push(removed);\n (isFolderRegexp.test(removed) ? summary.folders : summary.files).push(removed);\n });\n return summary;\n}\nvar CleanResponse, removalRegexp, dryRunRemovalRegexp, isFolderRegexp;\nvar init_CleanSummary = __esm({\n \"src/lib/responses/CleanSummary.ts\"() {\n \"use strict\";\n init_utils();\n CleanResponse = class {\n constructor(dryRun) {\n this.dryRun = dryRun;\n this.paths = [];\n this.files = [];\n this.folders = [];\n }\n };\n removalRegexp = /^[a-z]+\\s*/i;\n dryRunRemovalRegexp = /^[a-z]+\\s+[a-z]+\\s*/i;\n isFolderRegexp = /\\/$/;\n }\n});\n\n// src/lib/tasks/task.ts\nvar task_exports = {};\n__export(task_exports, {\n EMPTY_COMMANDS: () => EMPTY_COMMANDS,\n adhocExecTask: () => adhocExecTask,\n configurationErrorTask: () => configurationErrorTask,\n isBufferTask: () => isBufferTask,\n isEmptyTask: () => isEmptyTask,\n straightThroughBufferTask: () => straightThroughBufferTask,\n straightThroughStringTask: () => straightThroughStringTask\n});\nfunction adhocExecTask(parser4) {\n return {\n commands: EMPTY_COMMANDS,\n format: \"empty\",\n parser: parser4\n };\n}\nfunction configurationErrorTask(error) {\n return {\n commands: EMPTY_COMMANDS,\n format: \"empty\",\n parser() {\n throw typeof error === \"string\" ? new TaskConfigurationError(error) : error;\n }\n };\n}\nfunction straightThroughStringTask(commands, trimmed2 = false) {\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return trimmed2 ? String(text).trim() : text;\n }\n };\n}\nfunction straightThroughBufferTask(commands) {\n return {\n commands,\n format: \"buffer\",\n parser(buffer) {\n return buffer;\n }\n };\n}\nfunction isBufferTask(task) {\n return task.format === \"buffer\";\n}\nfunction isEmptyTask(task) {\n return task.format === \"empty\" || !task.commands.length;\n}\nvar EMPTY_COMMANDS;\nvar init_task = __esm({\n \"src/lib/tasks/task.ts\"() {\n \"use strict\";\n init_task_configuration_error();\n EMPTY_COMMANDS = [];\n }\n});\n\n// src/lib/tasks/clean.ts\nvar clean_exports = {};\n__export(clean_exports, {\n CONFIG_ERROR_INTERACTIVE_MODE: () => CONFIG_ERROR_INTERACTIVE_MODE,\n CONFIG_ERROR_MODE_REQUIRED: () => CONFIG_ERROR_MODE_REQUIRED,\n CONFIG_ERROR_UNKNOWN_OPTION: () => CONFIG_ERROR_UNKNOWN_OPTION,\n CleanOptions: () => CleanOptions,\n cleanTask: () => cleanTask,\n cleanWithOptionsTask: () => cleanWithOptionsTask,\n isCleanOptionsArray: () => isCleanOptionsArray\n});\nfunction cleanWithOptionsTask(mode, customArgs) {\n const { cleanMode, options, valid } = getCleanOptions(mode);\n if (!cleanMode) {\n return configurationErrorTask(CONFIG_ERROR_MODE_REQUIRED);\n }\n if (!valid.options) {\n return configurationErrorTask(CONFIG_ERROR_UNKNOWN_OPTION + JSON.stringify(mode));\n }\n options.push(...customArgs);\n if (options.some(isInteractiveMode)) {\n return configurationErrorTask(CONFIG_ERROR_INTERACTIVE_MODE);\n }\n return cleanTask(cleanMode, options);\n}\nfunction cleanTask(mode, customArgs) {\n const commands = [\"clean\", `-${mode}`, ...customArgs];\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return cleanSummaryParser(mode === \"n\" /* DRY_RUN */, text);\n }\n };\n}\nfunction isCleanOptionsArray(input) {\n return Array.isArray(input) && input.every((test) => CleanOptionValues.has(test));\n}\nfunction getCleanOptions(input) {\n let cleanMode;\n let options = [];\n let valid = { cleanMode: false, options: true };\n input.replace(/[^a-z]i/g, \"\").split(\"\").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 return {\n cleanMode,\n options,\n valid\n };\n}\nfunction isCleanMode(cleanMode) {\n return cleanMode === \"f\" /* FORCE */ || cleanMode === \"n\" /* DRY_RUN */;\n}\nfunction isKnownOption(option) {\n return /^-[a-z]$/i.test(option) && CleanOptionValues.has(option.charAt(1));\n}\nfunction isInteractiveMode(option) {\n if (/^-[^\\-]/.test(option)) {\n return option.indexOf(\"i\") > 0;\n }\n return option === \"--interactive\";\n}\nvar CONFIG_ERROR_INTERACTIVE_MODE, CONFIG_ERROR_MODE_REQUIRED, CONFIG_ERROR_UNKNOWN_OPTION, CleanOptions, CleanOptionValues;\nvar init_clean = __esm({\n \"src/lib/tasks/clean.ts\"() {\n \"use strict\";\n init_CleanSummary();\n init_utils();\n init_task();\n CONFIG_ERROR_INTERACTIVE_MODE = \"Git clean interactive mode is not supported\";\n CONFIG_ERROR_MODE_REQUIRED = 'Git clean mode parameter (\"n\" or \"f\") is required';\n CONFIG_ERROR_UNKNOWN_OPTION = \"Git clean unknown option found in: \";\n CleanOptions = /* @__PURE__ */ ((CleanOptions2) => {\n CleanOptions2[\"DRY_RUN\"] = \"n\";\n CleanOptions2[\"FORCE\"] = \"f\";\n CleanOptions2[\"IGNORED_INCLUDED\"] = \"x\";\n CleanOptions2[\"IGNORED_ONLY\"] = \"X\";\n CleanOptions2[\"EXCLUDING\"] = \"e\";\n CleanOptions2[\"QUIET\"] = \"q\";\n CleanOptions2[\"RECURSIVE\"] = \"d\";\n return CleanOptions2;\n })(CleanOptions || {});\n CleanOptionValues = /* @__PURE__ */ new Set([\n \"i\",\n ...asStringArray(Object.values(CleanOptions))\n ]);\n }\n});\n\n// src/lib/responses/ConfigList.ts\nfunction configListParser(text) {\n const config = new ConfigList();\n for (const item of configParser(text)) {\n config.addValue(item.file, String(item.key), item.value);\n }\n return config;\n}\nfunction configGetParser(text, key) {\n let value = null;\n const values = [];\n const scopes = /* @__PURE__ */ new Map();\n for (const item of configParser(text, key)) {\n if (item.key !== key) {\n continue;\n }\n values.push(value = item.value);\n if (!scopes.has(item.file)) {\n scopes.set(item.file, []);\n }\n scopes.get(item.file).push(value);\n }\n return {\n key,\n paths: Array.from(scopes.keys()),\n scopes,\n value,\n values\n };\n}\nfunction configFilePath(filePath) {\n return filePath.replace(/^(file):/, \"\");\n}\nfunction* configParser(text, requestedKey = null) {\n const lines = text.split(\"\\0\");\n for (let i = 0, max = lines.length - 1; i < max; ) {\n const file = configFilePath(lines[i++]);\n let value = lines[i++];\n let key = requestedKey;\n if (value.includes(\"\\n\")) {\n const line = splitOn(value, \"\\n\");\n key = line[0];\n value = line[1];\n }\n yield { file, key, value };\n }\n}\nvar ConfigList;\nvar init_ConfigList = __esm({\n \"src/lib/responses/ConfigList.ts\"() {\n \"use strict\";\n init_utils();\n ConfigList = class {\n constructor() {\n this.files = [];\n this.values = /* @__PURE__ */ Object.create(null);\n }\n get all() {\n if (!this._all) {\n this._all = this.files.reduce((all, file) => {\n return Object.assign(all, this.values[file]);\n }, {});\n }\n return this._all;\n }\n addFile(file) {\n if (!(file in this.values)) {\n const latest = last(this.files);\n this.values[file] = latest ? Object.create(this.values[latest]) : {};\n this.files.push(file);\n }\n return this.values[file];\n }\n addValue(file, key, value) {\n const values = this.addFile(file);\n if (!Object.hasOwn(values, key)) {\n values[key] = value;\n } else if (Array.isArray(values[key])) {\n values[key].push(value);\n } else {\n values[key] = [values[key], value];\n }\n this._all = void 0;\n }\n };\n }\n});\n\n// src/lib/tasks/config.ts\nfunction asConfigScope(scope, fallback) {\n if (typeof scope === \"string\" && Object.hasOwn(GitConfigScope, scope)) {\n return scope;\n }\n return fallback;\n}\nfunction addConfigTask(key, value, append2, scope) {\n const commands = [\"config\", `--${scope}`];\n if (append2) {\n commands.push(\"--add\");\n }\n commands.push(key, value);\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return text;\n }\n };\n}\nfunction getConfigTask(key, scope) {\n const commands = [\"config\", \"--null\", \"--show-origin\", \"--get-all\", key];\n if (scope) {\n commands.splice(1, 0, `--${scope}`);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return configGetParser(text, key);\n }\n };\n}\nfunction listConfigTask(scope) {\n const commands = [\"config\", \"--list\", \"--show-origin\", \"--null\"];\n if (scope) {\n commands.push(`--${scope}`);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return configListParser(text);\n }\n };\n}\nfunction config_default() {\n return {\n addConfig(key, value, ...rest) {\n return this._runTask(\n addConfigTask(\n key,\n value,\n rest[0] === true,\n asConfigScope(rest[1], \"local\" /* local */)\n ),\n trailingFunctionArgument(arguments)\n );\n },\n getConfig(key, scope) {\n return this._runTask(\n getConfigTask(key, asConfigScope(scope, void 0)),\n trailingFunctionArgument(arguments)\n );\n },\n listConfig(...rest) {\n return this._runTask(\n listConfigTask(asConfigScope(rest[0], void 0)),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar GitConfigScope;\nvar init_config = __esm({\n \"src/lib/tasks/config.ts\"() {\n \"use strict\";\n init_ConfigList();\n init_utils();\n GitConfigScope = /* @__PURE__ */ ((GitConfigScope2) => {\n GitConfigScope2[\"system\"] = \"system\";\n GitConfigScope2[\"global\"] = \"global\";\n GitConfigScope2[\"local\"] = \"local\";\n GitConfigScope2[\"worktree\"] = \"worktree\";\n return GitConfigScope2;\n })(GitConfigScope || {});\n }\n});\n\n// src/lib/tasks/diff-name-status.ts\nfunction isDiffNameStatus(input) {\n return diffNameStatus.has(input);\n}\nvar DiffNameStatus, diffNameStatus;\nvar init_diff_name_status = __esm({\n \"src/lib/tasks/diff-name-status.ts\"() {\n \"use strict\";\n DiffNameStatus = /* @__PURE__ */ ((DiffNameStatus2) => {\n DiffNameStatus2[\"ADDED\"] = \"A\";\n DiffNameStatus2[\"COPIED\"] = \"C\";\n DiffNameStatus2[\"DELETED\"] = \"D\";\n DiffNameStatus2[\"MODIFIED\"] = \"M\";\n DiffNameStatus2[\"RENAMED\"] = \"R\";\n DiffNameStatus2[\"CHANGED\"] = \"T\";\n DiffNameStatus2[\"UNMERGED\"] = \"U\";\n DiffNameStatus2[\"UNKNOWN\"] = \"X\";\n DiffNameStatus2[\"BROKEN\"] = \"B\";\n return DiffNameStatus2;\n })(DiffNameStatus || {});\n diffNameStatus = new Set(Object.values(DiffNameStatus));\n }\n});\n\n// src/lib/tasks/grep.ts\nfunction grepQueryBuilder(...params) {\n return new GrepQuery().param(...params);\n}\nfunction parseGrep(grep) {\n const paths = /* @__PURE__ */ new Set();\n const results = {};\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 return {\n paths,\n results\n };\n}\nfunction grep_default() {\n return {\n grep(searchTerm) {\n const then = trailingFunctionArgument(arguments);\n const options = getTrailingOptions(arguments);\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 if (typeof searchTerm === \"string\") {\n searchTerm = grepQueryBuilder().param(searchTerm);\n }\n const commands = [\"grep\", \"--null\", \"-n\", \"--full-name\", ...options, ...searchTerm];\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}\nvar disallowedOptions, Query, _a, GrepQuery;\nvar init_grep = __esm({\n \"src/lib/tasks/grep.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n disallowedOptions = [\"-h\"];\n Query = Symbol(\"grepQuery\");\n GrepQuery = class {\n constructor() {\n this[_a] = [];\n }\n *[(_a = Query, Symbol.iterator)]() {\n for (const query of this[Query]) {\n yield query;\n }\n }\n and(...and) {\n and.length && this[Query].push(\"--and\", \"(\", ...prefixedArray(and, \"-e\"), \")\");\n return this;\n }\n param(...param) {\n this[Query].push(...prefixedArray(param, \"-e\"));\n return this;\n }\n };\n }\n});\n\n// src/lib/tasks/reset.ts\nvar reset_exports = {};\n__export(reset_exports, {\n ResetMode: () => ResetMode,\n getResetMode: () => getResetMode,\n resetTask: () => resetTask\n});\nfunction resetTask(mode, customArgs) {\n const commands = [\"reset\"];\n if (isValidResetMode(mode)) {\n commands.push(`--${mode}`);\n }\n commands.push(...customArgs);\n return straightThroughStringTask(commands);\n}\nfunction getResetMode(mode) {\n if (isValidResetMode(mode)) {\n return mode;\n }\n switch (typeof mode) {\n case \"string\":\n case \"undefined\":\n return \"soft\" /* SOFT */;\n }\n return;\n}\nfunction isValidResetMode(mode) {\n return typeof mode === \"string\" && validResetModes.includes(mode);\n}\nvar ResetMode, validResetModes;\nvar init_reset = __esm({\n \"src/lib/tasks/reset.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n ResetMode = /* @__PURE__ */ ((ResetMode2) => {\n ResetMode2[\"MIXED\"] = \"mixed\";\n ResetMode2[\"SOFT\"] = \"soft\";\n ResetMode2[\"HARD\"] = \"hard\";\n ResetMode2[\"MERGE\"] = \"merge\";\n ResetMode2[\"KEEP\"] = \"keep\";\n return ResetMode2;\n })(ResetMode || {});\n validResetModes = asStringArray(Object.values(ResetMode));\n }\n});\n\n// src/lib/git-logger.ts\nimport debug from \"debug\";\nfunction createLog() {\n return debug(\"simple-git\");\n}\nfunction prefixedLogger(to, prefix, forward) {\n if (!prefix || !String(prefix).replace(/\\s*/, \"\")) {\n return !forward ? to : (message, ...args) => {\n to(message, ...args);\n forward(message, ...args);\n };\n }\n return (message, ...args) => {\n to(`%s ${message}`, prefix, ...args);\n if (forward) {\n forward(message, ...args);\n }\n };\n}\nfunction childLoggerName(name, childDebugger, { namespace: parentNamespace }) {\n if (typeof name === \"string\") {\n return name;\n }\n const childNamespace = childDebugger && childDebugger.namespace || \"\";\n if (childNamespace.startsWith(parentNamespace)) {\n return childNamespace.substr(parentNamespace.length + 1);\n }\n return childNamespace || parentNamespace;\n}\nfunction createLogger(label, verbose, initialStep, infoDebugger = createLog()) {\n const labelPrefix = label && `[${label}]` || \"\";\n const spawned = [];\n const debugDebugger = typeof verbose === \"string\" ? infoDebugger.extend(verbose) : verbose;\n const key = childLoggerName(filterType(verbose, filterString), debugDebugger, infoDebugger);\n return step(initialStep);\n function sibling(name, initial) {\n return append(\n spawned,\n createLogger(label, key.replace(/^[^:]+/, name), initial, infoDebugger)\n );\n }\n function step(phase) {\n const stepPrefix = phase && `[${phase}]` || \"\";\n const debug2 = debugDebugger && prefixedLogger(debugDebugger, stepPrefix) || NOOP;\n const info = prefixedLogger(infoDebugger, `${labelPrefix} ${stepPrefix}`, debug2);\n return Object.assign(debugDebugger ? debug2 : info, {\n label,\n sibling,\n info,\n step\n });\n }\n}\nvar init_git_logger = __esm({\n \"src/lib/git-logger.ts\"() {\n \"use strict\";\n init_utils();\n debug.formatters.L = (value) => String(filterHasLength(value) ? value.length : \"-\");\n debug.formatters.B = (value) => {\n if (Buffer.isBuffer(value)) {\n return value.toString(\"utf8\");\n }\n return objectToString(value);\n };\n }\n});\n\n// src/lib/runners/tasks-pending-queue.ts\nvar TasksPendingQueue;\nvar init_tasks_pending_queue = __esm({\n \"src/lib/runners/tasks-pending-queue.ts\"() {\n \"use strict\";\n init_git_error();\n init_git_logger();\n TasksPendingQueue = class _TasksPendingQueue {\n constructor(logLabel = \"GitExecutor\") {\n this.logLabel = logLabel;\n this._queue = /* @__PURE__ */ new Map();\n }\n withProgress(task) {\n return this._queue.get(task);\n }\n createProgress(task) {\n const name = _TasksPendingQueue.getName(task.commands[0]);\n const logger = createLogger(this.logLabel, name);\n return {\n task,\n logger,\n name\n };\n }\n push(task) {\n const progress = this.createProgress(task);\n progress.logger(\"Adding task to the queue, commands = %o\", task.commands);\n this._queue.set(task, progress);\n return progress;\n }\n fatal(err) {\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 this.complete(task);\n }\n if (this._queue.size !== 0) {\n throw new Error(`Queue size should be zero after fatal: ${this._queue.size}`);\n }\n }\n complete(task) {\n const progress = this.withProgress(task);\n if (progress) {\n this._queue.delete(task);\n }\n }\n attempt(task) {\n const progress = this.withProgress(task);\n if (!progress) {\n throw new GitError(void 0, \"TasksPendingQueue: attempt called for an unknown task\");\n }\n progress.logger(\"Starting task\");\n return progress;\n }\n static getName(name = \"empty\") {\n return `task:${name}:${++_TasksPendingQueue.counter}`;\n }\n static {\n this.counter = 0;\n }\n };\n }\n});\n\n// src/lib/runners/git-executor-chain.ts\nimport { spawn } from \"child_process\";\nfunction pluginContext(task, commands) {\n return {\n method: first(task.commands) || \"\",\n commands\n };\n}\nfunction onErrorReceived(target, logger) {\n return (err) => {\n logger(`[ERROR] child process exception %o`, err);\n target.push(Buffer.from(String(err.stack), \"ascii\"));\n };\n}\nfunction onDataReceived(target, name, logger, output) {\n return (buffer) => {\n logger(`%s received %L bytes`, name, buffer);\n output(`%B`, buffer);\n target.push(buffer);\n };\n}\nvar GitExecutorChain;\nvar init_git_executor_chain = __esm({\n \"src/lib/runners/git-executor-chain.ts\"() {\n \"use strict\";\n init_git_error();\n init_task();\n init_utils();\n init_tasks_pending_queue();\n GitExecutorChain = class {\n constructor(_executor, _scheduler, _plugins) {\n this._executor = _executor;\n this._scheduler = _scheduler;\n this._plugins = _plugins;\n this._chain = Promise.resolve();\n this._queue = new TasksPendingQueue();\n }\n get cwd() {\n return this._cwd || this._executor.cwd;\n }\n set cwd(cwd) {\n this._cwd = cwd;\n }\n get env() {\n return this._executor.env;\n }\n get outputHandler() {\n return this._executor.outputHandler;\n }\n chain() {\n return this;\n }\n push(task) {\n this._queue.push(task);\n return this._chain = this._chain.then(() => this.attemptTask(task));\n }\n async attemptTask(task) {\n const onScheduleComplete = await this._scheduler.next();\n const onQueueComplete = () => this._queue.complete(task);\n try {\n const { logger } = this._queue.attempt(task);\n return await (isEmptyTask(task) ? this.attemptEmptyTask(task, logger) : this.attemptRemoteTask(task, logger));\n } catch (e) {\n throw this.onFatalException(task, e);\n } finally {\n onQueueComplete();\n onScheduleComplete();\n }\n }\n onFatalException(task, e) {\n const gitError = e instanceof GitError ? Object.assign(e, { task }) : new GitError(task, e && String(e));\n this._chain = Promise.resolve();\n this._queue.fatal(gitError);\n return gitError;\n }\n async attemptRemoteTask(task, logger) {\n const binary = this._plugins.exec(\"spawn.binary\", \"\", pluginContext(task, task.commands));\n const args = this._plugins.exec(\n \"spawn.args\",\n [...task.commands],\n pluginContext(task, task.commands)\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 logger(`passing response to task's parser as a %s`, task.format);\n if (isBufferTask(task)) {\n return callTaskParser(task.parser, outputStreams);\n }\n return callTaskParser(task.parser, outputStreams.asStrings());\n }\n async attemptEmptyTask(task, logger) {\n logger(`empty task bypassing child process to call to task's parser`);\n return task.parser(this);\n }\n handleTaskData(task, args, result, logger) {\n const { exitCode, rejection, stdOut, stdErr } = result;\n return new Promise((done, fail) => {\n logger(`Preparing to handle process response exitCode=%d stdOut=`, exitCode);\n const { error } = this._plugins.exec(\n \"task.error\",\n { error: rejection },\n {\n ...pluginContext(task, args),\n ...result\n }\n );\n if (error && task.onError) {\n logger.info(`exitCode=%s handling with custom error handler`);\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 done(\n new GitOutputStreams(\n Array.isArray(newStdOut) ? Buffer.concat(newStdOut) : newStdOut,\n Buffer.concat(stdErr)\n )\n );\n },\n fail\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 logger.info(`retrieving task output complete`);\n done(new GitOutputStreams(Buffer.concat(stdOut), Buffer.concat(stdErr)));\n });\n }\n async gitResponse(task, command, args, outputHandler, logger) {\n const outputLogger = logger.sibling(\"output\");\n const spawnOptions = this._plugins.exec(\n \"spawn.options\",\n {\n cwd: this.cwd,\n env: this.env,\n windowsHide: true\n },\n pluginContext(task, task.commands)\n );\n return new Promise((done) => {\n const stdOut = [];\n const stdErr = [];\n logger.info(`%s %o`, command, args);\n logger(\"%O\", spawnOptions);\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 this._plugins.exec(\"spawn.before\", void 0, {\n ...pluginContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n }\n });\n const spawned = spawn(command, args, spawnOptions);\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 spawned.on(\"error\", onErrorReceived(stdErr, logger));\n if (outputHandler) {\n logger(`Passing child process stdOut/stdErr to custom outputHandler`);\n outputHandler(command, spawned.stdout, spawned.stderr, [...args]);\n }\n this._plugins.exec(\"spawn.after\", void 0, {\n ...pluginContext(task, args),\n spawned,\n close(exitCode, reason) {\n done({\n stdOut,\n stdErr,\n exitCode,\n rejection: rejection || reason\n });\n },\n kill(reason) {\n if (spawned.killed) {\n return;\n }\n rejection = reason;\n spawned.kill(\"SIGINT\");\n }\n });\n });\n }\n _beforeSpawn(task, args) {\n let rejection;\n this._plugins.exec(\"spawn.before\", void 0, {\n ...pluginContext(task, args),\n kill(reason) {\n rejection = reason || rejection;\n }\n });\n return rejection;\n }\n };\n }\n});\n\n// src/lib/runners/git-executor.ts\nvar git_executor_exports = {};\n__export(git_executor_exports, {\n GitExecutor: () => GitExecutor\n});\nvar GitExecutor;\nvar init_git_executor = __esm({\n \"src/lib/runners/git-executor.ts\"() {\n \"use strict\";\n init_git_executor_chain();\n GitExecutor = class {\n constructor(cwd, _scheduler, _plugins) {\n this.cwd = cwd;\n this._scheduler = _scheduler;\n this._plugins = _plugins;\n this._chain = new GitExecutorChain(this, this._scheduler, this._plugins);\n }\n chain() {\n return new GitExecutorChain(this, this._scheduler, this._plugins);\n }\n push(task) {\n return this._chain.push(task);\n }\n };\n }\n});\n\n// src/lib/task-callback.ts\nfunction taskCallback(task, response, callback = NOOP) {\n const onSuccess = (data) => {\n callback(null, data);\n };\n const onError2 = (err) => {\n if (err?.task === task) {\n callback(\n err instanceof GitResponseError ? addDeprecationNoticeToError(err) : err,\n void 0\n );\n }\n };\n response.then(onSuccess, onError2);\n}\nfunction addDeprecationNoticeToError(err) {\n let log = (name) => {\n console.warn(\n `simple-git deprecation notice: accessing GitResponseError.${name} should be GitResponseError.git.${name}, this will no longer be available in version 3`\n );\n log = NOOP;\n };\n return Object.create(err, Object.getOwnPropertyNames(err.git).reduce(descriptorReducer, {}));\n function descriptorReducer(all, name) {\n if (name in err) {\n return all;\n }\n all[name] = {\n enumerable: false,\n configurable: false,\n get() {\n log(name);\n return err.git[name];\n }\n };\n return all;\n }\n}\nvar init_task_callback = __esm({\n \"src/lib/task-callback.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_utils();\n }\n});\n\n// src/lib/tasks/change-working-directory.ts\nfunction changeWorkingDirectoryTask(directory, root) {\n return adhocExecTask((instance) => {\n if (!folderExists(directory)) {\n throw new Error(`Git.cwd: cannot change to non-directory \"${directory}\"`);\n }\n return (root || instance).cwd = directory;\n });\n}\nvar init_change_working_directory = __esm({\n \"src/lib/tasks/change-working-directory.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/checkout.ts\nfunction checkoutTask(args) {\n const commands = [\"checkout\", ...args];\n if (commands[1] === \"-b\" && commands.includes(\"-B\")) {\n commands[1] = remove(commands, \"-B\");\n }\n return straightThroughStringTask(commands);\n}\nfunction checkout_default() {\n return {\n checkout() {\n return this._runTask(\n checkoutTask(getTrailingOptions(arguments, 1)),\n trailingFunctionArgument(arguments)\n );\n },\n checkoutBranch(branchName, startPoint) {\n return this._runTask(\n checkoutTask([\"-b\", branchName, startPoint, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n },\n checkoutLocalBranch(branchName) {\n return this._runTask(\n checkoutTask([\"-b\", branchName, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar init_checkout = __esm({\n \"src/lib/tasks/checkout.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/count-objects.ts\nfunction countObjectsResponse() {\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}\nfunction count_objects_default() {\n return {\n countObjects() {\n return this._runTask({\n commands: [\"count-objects\", \"--verbose\"],\n format: \"utf-8\",\n parser(stdOut) {\n return parseStringResponse(countObjectsResponse(), [parser2], stdOut);\n }\n });\n }\n };\n}\nvar parser2;\nvar init_count_objects = __esm({\n \"src/lib/tasks/count-objects.ts\"() {\n \"use strict\";\n init_utils();\n parser2 = new LineParser(\n /([a-z-]+): (\\d+)$/,\n (result, [key, value]) => {\n const property = asCamelCase(key);\n if (Object.hasOwn(result, property)) {\n result[property] = asNumber(value);\n }\n }\n );\n }\n});\n\n// src/lib/parsers/parse-commit.ts\nfunction parseCommitResult(stdOut) {\n const result = {\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}\nvar parsers;\nvar init_parse_commit = __esm({\n \"src/lib/parsers/parse-commit.ts\"() {\n \"use strict\";\n init_utils();\n parsers = [\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 if (!email || !email.includes(\"@\")) {\n return;\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 }\n});\n\n// src/lib/tasks/commit.ts\nfunction commitTask(message, files, customArgs) {\n const commands = [\n \"-c\",\n \"core.abbrev=40\",\n \"commit\",\n ...prefixedArray(message, \"-m\"),\n ...files,\n ...customArgs\n ];\n return {\n commands,\n format: \"utf-8\",\n parser: parseCommitResult\n };\n}\nfunction commit_default() {\n return {\n commit(message, ...rest) {\n const next = trailingFunctionArgument(arguments);\n const task = rejectDeprecatedSignatures(message) || 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 return this._runTask(task, next);\n }\n };\n function rejectDeprecatedSignatures(message) {\n return !filterStringOrStringArray(message) && configurationErrorTask(\n `git.commit: requires the commit message to be supplied as a string/string[]`\n );\n }\n}\nvar init_commit = __esm({\n \"src/lib/tasks/commit.ts\"() {\n \"use strict\";\n init_parse_commit();\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/first-commit.ts\nfunction first_commit_default() {\n return {\n firstCommit() {\n return this._runTask(\n straightThroughStringTask([\"rev-list\", \"--max-parents=0\", \"HEAD\"], true),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar init_first_commit = __esm({\n \"src/lib/tasks/first-commit.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/tasks/hash-object.ts\nfunction hashObjectTask(filePath, write) {\n const commands = [\"hash-object\", filePath];\n if (write) {\n commands.push(\"-w\");\n }\n return straightThroughStringTask(commands, true);\n}\nvar init_hash_object = __esm({\n \"src/lib/tasks/hash-object.ts\"() {\n \"use strict\";\n init_task();\n }\n});\n\n// src/lib/responses/InitSummary.ts\nfunction parseInit(bare, path, text) {\n const response = String(text).trim();\n let result;\n if (result = initResponseRegex.exec(response)) {\n return new InitSummary(bare, path, false, result[1]);\n }\n if (result = reInitResponseRegex.exec(response)) {\n return new InitSummary(bare, path, true, result[1]);\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 return new InitSummary(bare, path, /^re/i.test(response), gitDir);\n}\nvar InitSummary, initResponseRegex, reInitResponseRegex;\nvar init_InitSummary = __esm({\n \"src/lib/responses/InitSummary.ts\"() {\n \"use strict\";\n InitSummary = class {\n constructor(bare, path, existing, gitDir) {\n this.bare = bare;\n this.path = path;\n this.existing = existing;\n this.gitDir = gitDir;\n }\n };\n initResponseRegex = /^Init.+ repository in (.+)$/;\n reInitResponseRegex = /^Rein.+ in (.+)$/;\n }\n});\n\n// src/lib/tasks/init.ts\nfunction hasBareCommand(command) {\n return command.includes(bareCommand);\n}\nfunction initTask(bare = false, path, customArgs) {\n const commands = [\"init\", ...customArgs];\n if (bare && !hasBareCommand(commands)) {\n commands.splice(1, 0, bareCommand);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(text) {\n return parseInit(commands.includes(\"--bare\"), path, text);\n }\n };\n}\nvar bareCommand;\nvar init_init = __esm({\n \"src/lib/tasks/init.ts\"() {\n \"use strict\";\n init_InitSummary();\n bareCommand = \"--bare\";\n }\n});\n\n// src/lib/args/log-format.ts\nfunction logFormatFromCommand(customArgs) {\n for (let i = 0; i < customArgs.length; i++) {\n const format = logFormatRegex.exec(customArgs[i]);\n if (format) {\n return `--${format[1]}`;\n }\n }\n return \"\" /* NONE */;\n}\nfunction isLogFormat(customArg) {\n return logFormatRegex.test(customArg);\n}\nvar logFormatRegex;\nvar init_log_format = __esm({\n \"src/lib/args/log-format.ts\"() {\n \"use strict\";\n logFormatRegex = /^--(stat|numstat|name-only|name-status)(=|$)/;\n }\n});\n\n// src/lib/responses/DiffSummary.ts\nvar DiffSummary;\nvar init_DiffSummary = __esm({\n \"src/lib/responses/DiffSummary.ts\"() {\n \"use strict\";\n DiffSummary = class {\n constructor() {\n this.changed = 0;\n this.deletions = 0;\n this.insertions = 0;\n this.files = [];\n }\n };\n }\n});\n\n// src/lib/parsers/parse-diff-summary.ts\nfunction getDiffParser(format = \"\" /* NONE */) {\n const parser4 = diffSummaryParsers[format];\n return (stdOut) => parseStringResponse(new DiffSummary(), parser4, stdOut, false);\n}\nvar statParser, numStatParser, nameOnlyParser, nameStatusParser, diffSummaryParsers;\nvar init_parse_diff_summary = __esm({\n \"src/lib/parsers/parse-diff-summary.ts\"() {\n \"use strict\";\n init_log_format();\n init_DiffSummary();\n init_diff_name_status();\n init_utils();\n statParser = [\n new LineParser(\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(\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(\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 result.changed = asNumber(changed);\n result.insertions = asNumber(inserted?.[1]);\n result.deletions = asNumber(deleted?.[1]);\n }\n )\n ];\n numStatParser = [\n new LineParser(\n /(\\d+)\\t(\\d+)\\t(.+)$/,\n (result, [changesInsert, changesDelete, file]) => {\n const insertions = asNumber(changesInsert);\n const deletions = asNumber(changesDelete);\n result.changed++;\n result.insertions += insertions;\n result.deletions += deletions;\n result.files.push({\n file,\n changes: insertions + deletions,\n insertions,\n deletions,\n binary: false\n });\n }\n ),\n new LineParser(/-\\t-\\t(.+)$/, (result, [file]) => {\n result.changed++;\n result.files.push({\n file,\n after: 0,\n before: 0,\n binary: true\n });\n })\n ];\n nameOnlyParser = [\n new LineParser(/(.+)$/, (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 nameStatusParser = [\n new LineParser(\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 diffSummaryParsers = {\n [\"\" /* NONE */]: statParser,\n [\"--stat\" /* STAT */]: statParser,\n [\"--numstat\" /* NUM_STAT */]: numStatParser,\n [\"--name-status\" /* NAME_STATUS */]: nameStatusParser,\n [\"--name-only\" /* NAME_ONLY */]: nameOnlyParser\n };\n }\n});\n\n// src/lib/parsers/parse-list-log-summary.ts\nfunction lineBuilder(tokens, fields) {\n return fields.reduce(\n (line, field, index) => {\n line[field] = tokens[index] || \"\";\n return line;\n },\n /* @__PURE__ */ Object.create({ diff: null })\n );\n}\nfunction createListLogSummaryParser(splitter = SPLITTER, fields = defaultFieldNames, logFormat = \"\" /* NONE */) {\n const parseDiffResult = getDiffParser(logFormat);\n return function(stdOut) {\n const all = toLinesWithContent(\n stdOut.trim(),\n false,\n START_BOUNDARY\n ).map(function(item) {\n const lineDetail = item.split(COMMIT_BOUNDARY);\n const listLogLine = lineBuilder(lineDetail[0].split(splitter), fields);\n if (lineDetail.length > 1 && !!lineDetail[1].trim()) {\n listLogLine.diff = parseDiffResult(lineDetail[1]);\n }\n return listLogLine;\n });\n return {\n all,\n latest: all.length && all[0] || null,\n total: all.length\n };\n };\n}\nvar START_BOUNDARY, COMMIT_BOUNDARY, SPLITTER, defaultFieldNames;\nvar init_parse_list_log_summary = __esm({\n \"src/lib/parsers/parse-list-log-summary.ts\"() {\n \"use strict\";\n init_utils();\n init_parse_diff_summary();\n init_log_format();\n START_BOUNDARY = \"\\xF2\\xF2\\xF2\\xF2\\xF2\\xF2 \";\n COMMIT_BOUNDARY = \" \\xF2\\xF2\";\n SPLITTER = \" \\xF2 \";\n defaultFieldNames = [\"hash\", \"date\", \"message\", \"refs\", \"author_name\", \"author_email\"];\n }\n});\n\n// src/lib/tasks/diff.ts\nvar diff_exports = {};\n__export(diff_exports, {\n diffSummaryTask: () => diffSummaryTask,\n validateLogFormatConfig: () => validateLogFormatConfig\n});\nfunction diffSummaryTask(customArgs) {\n let logFormat = logFormatFromCommand(customArgs);\n const commands = [\"diff\"];\n if (logFormat === \"\" /* NONE */) {\n logFormat = \"--stat\" /* STAT */;\n commands.push(\"--stat=4096\");\n }\n commands.push(...customArgs);\n return validateLogFormatConfig(commands) || {\n commands,\n format: \"utf-8\",\n parser: getDiffParser(logFormat)\n };\n}\nfunction validateLogFormatConfig(customArgs) {\n const flags = customArgs.filter(isLogFormat);\n if (flags.length > 1) {\n return configurationErrorTask(\n `Summary flags are mutually exclusive - pick one of ${flags.join(\",\")}`\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}\nvar init_diff = __esm({\n \"src/lib/tasks/diff.ts\"() {\n \"use strict\";\n init_log_format();\n init_parse_diff_summary();\n init_task();\n }\n});\n\n// src/lib/tasks/log.ts\nfunction prettyFormat(format, splitter) {\n const fields = [];\n const formatStr = [];\n Object.keys(format).forEach((field) => {\n fields.push(field);\n formatStr.push(String(format[field]));\n });\n return [fields, formatStr.join(splitter)];\n}\nfunction userOptions(input) {\n return Object.keys(input).reduce((out, key) => {\n if (!(key in excludeOptions)) {\n out[key] = input[key];\n }\n return out;\n }, {});\n}\nfunction parseLogOptions(opt = {}, customArgs = []) {\n const splitter = filterType(opt.splitter, filterString, SPLITTER);\n const format = filterPlainObject(opt.format) ? opt.format : {\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 const [fields, formatStr] = prettyFormat(format, splitter);\n const suffix = [];\n const command = [\n `--pretty=format:${START_BOUNDARY}${formatStr}${COMMIT_BOUNDARY}`,\n ...customArgs\n ];\n const maxCount = opt.n || opt[\"max-count\"] || opt.maxCount;\n if (maxCount) {\n command.push(`--max-count=${maxCount}`);\n }\n if (opt.from || opt.to) {\n const rangeOperator = opt.symmetric !== false ? \"...\" : \"..\";\n suffix.push(`${opt.from || \"\"}${rangeOperator}${opt.to || \"\"}`);\n }\n if (filterString(opt.file)) {\n command.push(\"--follow\", pathspec(opt.file));\n }\n appendTaskOptions(userOptions(opt), command);\n return {\n fields,\n splitter,\n commands: [...command, ...suffix]\n };\n}\nfunction logTask(splitter, fields, customArgs) {\n const parser4 = createListLogSummaryParser(splitter, fields, logFormatFromCommand(customArgs));\n return {\n commands: [\"log\", ...customArgs],\n format: \"utf-8\",\n parser: parser4\n };\n}\nfunction log_default() {\n return {\n log(...rest) {\n const next = trailingFunctionArgument(arguments);\n const options = parseLogOptions(\n trailingOptionsArgument(arguments),\n asStringArray(filterType(arguments[0], filterArray, []))\n );\n const task = rejectDeprecatedSignatures(...rest) || validateLogFormatConfig(options.commands) || createLogTask(options);\n return this._runTask(task, next);\n }\n };\n function createLogTask(options) {\n return logTask(options.splitter, options.fields, options.commands);\n }\n function rejectDeprecatedSignatures(from, to) {\n return filterString(from) && filterString(to) && configurationErrorTask(\n `git.log(string, string) should be replaced with git.log({ from: string, to: string })`\n );\n }\n}\nvar excludeOptions;\nvar init_log = __esm({\n \"src/lib/tasks/log.ts\"() {\n \"use strict\";\n init_log_format();\n init_pathspec();\n init_parse_list_log_summary();\n init_utils();\n init_task();\n init_diff();\n excludeOptions = /* @__PURE__ */ ((excludeOptions2) => {\n excludeOptions2[excludeOptions2[\"--pretty\"] = 0] = \"--pretty\";\n excludeOptions2[excludeOptions2[\"max-count\"] = 1] = \"max-count\";\n excludeOptions2[excludeOptions2[\"maxCount\"] = 2] = \"maxCount\";\n excludeOptions2[excludeOptions2[\"n\"] = 3] = \"n\";\n excludeOptions2[excludeOptions2[\"file\"] = 4] = \"file\";\n excludeOptions2[excludeOptions2[\"format\"] = 5] = \"format\";\n excludeOptions2[excludeOptions2[\"from\"] = 6] = \"from\";\n excludeOptions2[excludeOptions2[\"to\"] = 7] = \"to\";\n excludeOptions2[excludeOptions2[\"splitter\"] = 8] = \"splitter\";\n excludeOptions2[excludeOptions2[\"symmetric\"] = 9] = \"symmetric\";\n excludeOptions2[excludeOptions2[\"mailMap\"] = 10] = \"mailMap\";\n excludeOptions2[excludeOptions2[\"multiLine\"] = 11] = \"multiLine\";\n excludeOptions2[excludeOptions2[\"strictDate\"] = 12] = \"strictDate\";\n return excludeOptions2;\n })(excludeOptions || {});\n }\n});\n\n// src/lib/responses/MergeSummary.ts\nvar MergeSummaryConflict, MergeSummaryDetail;\nvar init_MergeSummary = __esm({\n \"src/lib/responses/MergeSummary.ts\"() {\n \"use strict\";\n MergeSummaryConflict = class {\n constructor(reason, file = null, meta) {\n this.reason = reason;\n this.file = file;\n this.meta = meta;\n }\n toString() {\n return `${this.file}:${this.reason}`;\n }\n };\n MergeSummaryDetail = class {\n constructor() {\n this.conflicts = [];\n this.merges = [];\n this.result = \"success\";\n }\n get failed() {\n return this.conflicts.length > 0;\n }\n get reason() {\n return this.result;\n }\n toString() {\n if (this.conflicts.length) {\n return `CONFLICTS: ${this.conflicts.join(\", \")}`;\n }\n return \"OK\";\n }\n };\n }\n});\n\n// src/lib/responses/PullSummary.ts\nvar PullSummary, PullFailedSummary;\nvar init_PullSummary = __esm({\n \"src/lib/responses/PullSummary.ts\"() {\n \"use strict\";\n PullSummary = class {\n constructor() {\n this.remoteMessages = {\n all: []\n };\n this.created = [];\n this.deleted = [];\n this.files = [];\n this.deletions = {};\n this.insertions = {};\n this.summary = {\n changes: 0,\n deletions: 0,\n insertions: 0\n };\n }\n };\n PullFailedSummary = class {\n constructor() {\n this.remote = \"\";\n this.hash = {\n local: \"\",\n remote: \"\"\n };\n this.branch = {\n local: \"\",\n remote: \"\"\n };\n this.message = \"\";\n }\n toString() {\n return this.message;\n }\n };\n }\n});\n\n// src/lib/parsers/parse-remote-objects.ts\nfunction objectEnumerationResult(remoteMessages) {\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}\nfunction asObjectCount(source) {\n const count = /^\\s*(\\d+)/.exec(source);\n const delta = /delta (\\d+)/i.exec(source);\n return {\n count: asNumber(count && count[1] || \"0\"),\n delta: asNumber(delta && delta[1] || \"0\")\n };\n}\nvar remoteMessagesObjectParsers;\nvar init_parse_remote_objects = __esm({\n \"src/lib/parsers/parse-remote-objects.ts\"() {\n \"use strict\";\n init_utils();\n remoteMessagesObjectParsers = [\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 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 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 }\n});\n\n// src/lib/parsers/parse-remote-messages.ts\nfunction parseRemoteMessages(_stdOut, stdErr) {\n return parseStringResponse({ remoteMessages: new RemoteMessageSummary() }, parsers2, stdErr);\n}\nvar parsers2, RemoteMessageSummary;\nvar init_parse_remote_messages = __esm({\n \"src/lib/parsers/parse-remote-messages.ts\"() {\n \"use strict\";\n init_utils();\n init_parse_remote_objects();\n parsers2 = [\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.pullRequestUrl = pullRequestUrl;\n }\n ),\n new RemoteLineParser(\n [/found (\\d+) vulnerabilities.+\\(([^)]+)\\)/i, /\\s(https?:\\/\\/\\S+)$/],\n (result, [count, summary, url]) => {\n result.remoteMessages.vulnerabilities = {\n count: asNumber(count),\n summary,\n url\n };\n }\n )\n ];\n RemoteMessageSummary = class {\n constructor() {\n this.all = [];\n }\n };\n }\n});\n\n// src/lib/parsers/parse-pull.ts\nfunction parsePullErrorResult(stdOut, stdErr) {\n const pullError = parseStringResponse(new PullFailedSummary(), errorParsers, [stdOut, stdErr]);\n return pullError.message && pullError;\n}\nvar FILE_UPDATE_REGEX, SUMMARY_REGEX, ACTION_REGEX, parsers3, errorParsers, parsePullDetail, parsePullResult;\nvar init_parse_pull = __esm({\n \"src/lib/parsers/parse-pull.ts\"() {\n \"use strict\";\n init_PullSummary();\n init_utils();\n init_parse_remote_messages();\n FILE_UPDATE_REGEX = /^\\s*(.+?)\\s+\\|\\s+\\d+\\s*(\\+*)(-*)/;\n SUMMARY_REGEX = /(\\d+)\\D+((\\d+)\\D+\\(\\+\\))?(\\D+(\\d+)\\D+\\(-\\))?/;\n ACTION_REGEX = /^(create|delete) mode \\d+ (.+)/;\n parsers3 = [\n new LineParser(FILE_UPDATE_REGEX, (result, [file, insertions, deletions]) => {\n result.files.push(file);\n if (insertions) {\n result.insertions[file] = insertions.length;\n }\n if (deletions) {\n result.deletions[file] = deletions.length;\n }\n }),\n new LineParser(SUMMARY_REGEX, (result, [changes, , insertions, , deletions]) => {\n if (insertions !== void 0 || deletions !== void 0) {\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 errorParsers = [\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 parsePullDetail = (stdOut, stdErr) => {\n return parseStringResponse(new PullSummary(), parsers3, [stdOut, stdErr]);\n };\n parsePullResult = (stdOut, stdErr) => {\n return Object.assign(\n new PullSummary(),\n parsePullDetail(stdOut, stdErr),\n parseRemoteMessages(stdOut, stdErr)\n );\n };\n }\n});\n\n// src/lib/parsers/parse-merge.ts\nvar parsers4, parseMergeResult, parseMergeDetail;\nvar init_parse_merge = __esm({\n \"src/lib/parsers/parse-merge.ts\"() {\n \"use strict\";\n init_MergeSummary();\n init_utils();\n init_parse_pull();\n parsers4 = [\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 parseMergeResult = (stdOut, stdErr) => {\n return Object.assign(parseMergeDetail(stdOut, stdErr), parsePullResult(stdOut, stdErr));\n };\n parseMergeDetail = (stdOut) => {\n return parseStringResponse(new MergeSummaryDetail(), parsers4, stdOut);\n };\n }\n});\n\n// src/lib/tasks/merge.ts\nfunction mergeTask(customArgs) {\n if (!customArgs.length) {\n return configurationErrorTask(\"Git.merge requires at least one option\");\n }\n return {\n commands: [\"merge\", ...customArgs],\n format: \"utf-8\",\n parser(stdOut, stdErr) {\n const merge = parseMergeResult(stdOut, stdErr);\n if (merge.failed) {\n throw new GitResponseError(merge);\n }\n return merge;\n }\n };\n}\nvar init_merge = __esm({\n \"src/lib/tasks/merge.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_parse_merge();\n init_task();\n }\n});\n\n// src/lib/parsers/parse-push.ts\nfunction pushResultPushedItem(local, remote, status) {\n const deleted = status.includes(\"deleted\");\n const tag = status.includes(\"tag\") || /^refs\\/tags/.test(local);\n const alreadyUpdated = !status.includes(\"new\");\n return {\n deleted,\n tag,\n branch: !tag,\n new: !alreadyUpdated,\n alreadyUpdated,\n local,\n remote\n };\n}\nvar parsers5, parsePushResult, parsePushDetail;\nvar init_parse_push = __esm({\n \"src/lib/parsers/parse-push.ts\"() {\n \"use strict\";\n init_utils();\n init_parse_remote_messages();\n parsers5 = [\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 parsePushResult = (stdOut, stdErr) => {\n const pushDetail = parsePushDetail(stdOut, stdErr);\n const responseDetail = parseRemoteMessages(stdOut, stdErr);\n return {\n ...pushDetail,\n ...responseDetail\n };\n };\n parsePushDetail = (stdOut, stdErr) => {\n return parseStringResponse({ pushed: [] }, parsers5, [stdOut, stdErr]);\n };\n }\n});\n\n// src/lib/tasks/push.ts\nvar push_exports = {};\n__export(push_exports, {\n pushTagsTask: () => pushTagsTask,\n pushTask: () => pushTask\n});\nfunction pushTagsTask(ref = {}, customArgs) {\n append(customArgs, \"--tags\");\n return pushTask(ref, customArgs);\n}\nfunction pushTask(ref = {}, customArgs) {\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 remove(commands, \"-v\");\n append(commands, \"--verbose\");\n append(commands, \"--porcelain\");\n return {\n commands,\n format: \"utf-8\",\n parser: parsePushResult\n };\n}\nvar init_push = __esm({\n \"src/lib/tasks/push.ts\"() {\n \"use strict\";\n init_parse_push();\n init_utils();\n }\n});\n\n// src/lib/tasks/show.ts\nfunction show_default() {\n return {\n showBuffer() {\n const commands = [\"show\", ...getTrailingOptions(arguments, 1)];\n if (!commands.includes(\"--binary\")) {\n commands.splice(1, 0, \"--binary\");\n }\n return this._runTask(\n straightThroughBufferTask(commands),\n trailingFunctionArgument(arguments)\n );\n },\n show() {\n const commands = [\"show\", ...getTrailingOptions(arguments, 1)];\n return this._runTask(\n straightThroughStringTask(commands),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar init_show = __esm({\n \"src/lib/tasks/show.ts\"() {\n \"use strict\";\n init_utils();\n init_task();\n }\n});\n\n// src/lib/responses/FileStatusSummary.ts\nvar fromPathRegex, FileStatusSummary;\nvar init_FileStatusSummary = __esm({\n \"src/lib/responses/FileStatusSummary.ts\"() {\n \"use strict\";\n fromPathRegex = /^(.+)\\0(.+)$/;\n FileStatusSummary = class {\n constructor(path, index, working_dir) {\n this.path = path;\n this.index = index;\n this.working_dir = working_dir;\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 }\n});\n\n// src/lib/responses/StatusSummary.ts\nfunction renamedFile(line) {\n const [to, from] = line.split(NULL);\n return {\n from: from || to,\n to\n };\n}\nfunction parser3(indexX, indexY, handler) {\n return [`${indexX}${indexY}`, handler];\n}\nfunction conflicts(indexX, ...indexY) {\n return indexY.map((y) => parser3(indexX, y, (result, file) => result.conflicted.push(file)));\n}\nfunction splitLine(result, lineStr) {\n const trimmed2 = lineStr.trim();\n switch (\" \") {\n case trimmed2.charAt(2):\n return data(trimmed2.charAt(0), trimmed2.charAt(1), trimmed2.slice(3));\n case trimmed2.charAt(1):\n return data(\" \" /* NONE */, trimmed2.charAt(0), trimmed2.slice(2));\n default:\n return;\n }\n function data(index, workingDir, path) {\n const raw = `${index}${workingDir}`;\n const handler = parsers6.get(raw);\n if (handler) {\n handler(result, path);\n }\n if (raw !== \"##\" && raw !== \"!!\") {\n result.files.push(new FileStatusSummary(path, index, workingDir));\n }\n }\n}\nvar StatusSummary, parsers6, parseStatusSummary;\nvar init_StatusSummary = __esm({\n \"src/lib/responses/StatusSummary.ts\"() {\n \"use strict\";\n init_utils();\n init_FileStatusSummary();\n StatusSummary = class {\n constructor() {\n this.not_added = [];\n this.conflicted = [];\n this.created = [];\n this.deleted = [];\n this.ignored = void 0;\n this.modified = [];\n this.renamed = [];\n this.files = [];\n this.staged = [];\n this.ahead = 0;\n this.behind = 0;\n this.current = null;\n this.tracking = null;\n this.detached = false;\n this.isClean = () => {\n return !this.files.length;\n };\n }\n };\n parsers6 = new Map([\n parser3(\n \" \" /* NONE */,\n \"A\" /* ADDED */,\n (result, file) => result.created.push(file)\n ),\n parser3(\n \" \" /* NONE */,\n \"D\" /* DELETED */,\n (result, file) => result.deleted.push(file)\n ),\n parser3(\n \" \" /* NONE */,\n \"M\" /* MODIFIED */,\n (result, file) => result.modified.push(file)\n ),\n parser3(\"A\" /* ADDED */, \" \" /* NONE */, (result, file) => {\n result.created.push(file);\n result.staged.push(file);\n }),\n parser3(\"A\" /* ADDED */, \"M\" /* MODIFIED */, (result, file) => {\n result.created.push(file);\n result.staged.push(file);\n result.modified.push(file);\n }),\n parser3(\"D\" /* DELETED */, \" \" /* NONE */, (result, file) => {\n result.deleted.push(file);\n result.staged.push(file);\n }),\n parser3(\"M\" /* MODIFIED */, \" \" /* NONE */, (result, file) => {\n result.modified.push(file);\n result.staged.push(file);\n }),\n parser3(\"M\" /* MODIFIED */, \"M\" /* MODIFIED */, (result, file) => {\n result.modified.push(file);\n result.staged.push(file);\n }),\n parser3(\"R\" /* RENAMED */, \" \" /* NONE */, (result, file) => {\n result.renamed.push(renamedFile(file));\n }),\n parser3(\"R\" /* RENAMED */, \"M\" /* MODIFIED */, (result, file) => {\n const renamed = renamedFile(file);\n result.renamed.push(renamed);\n result.modified.push(renamed.to);\n }),\n parser3(\"!\" /* IGNORED */, \"!\" /* IGNORED */, (_result, _file) => {\n (_result.ignored = _result.ignored || []).push(_file);\n }),\n parser3(\n \"?\" /* UNTRACKED */,\n \"?\" /* UNTRACKED */,\n (result, file) => result.not_added.push(file)\n ),\n ...conflicts(\"A\" /* ADDED */, \"A\" /* ADDED */, \"U\" /* UNMERGED */),\n ...conflicts(\n \"D\" /* DELETED */,\n \"D\" /* DELETED */,\n \"U\" /* UNMERGED */\n ),\n ...conflicts(\n \"U\" /* UNMERGED */,\n \"A\" /* ADDED */,\n \"D\" /* DELETED */,\n \"U\" /* UNMERGED */\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 let regexResult = aheadReg.exec(line);\n result.ahead = regexResult && +regexResult[1] || 0;\n regexResult = behindReg.exec(line);\n result.behind = regexResult && +regexResult[1] || 0;\n regexResult = currentReg.exec(line);\n result.current = filterType(regexResult?.[1], filterString, null);\n regexResult = trackingReg.exec(line);\n result.tracking = filterType(regexResult?.[1], filterString, null);\n regexResult = onEmptyBranchReg.exec(line);\n if (regexResult) {\n result.current = filterType(regexResult?.[1], filterString, result.current);\n }\n result.detached = /\\(no branch\\)/.test(line);\n }\n ]\n ]);\n parseStatusSummary = function(text) {\n const lines = text.split(NULL);\n const status = new StatusSummary();\n for (let i = 0, l = lines.length; i < l; ) {\n let line = lines[i++].trim();\n if (!line) {\n continue;\n }\n if (line.charAt(0) === \"R\" /* RENAMED */) {\n line += NULL + (lines[i++] || \"\");\n }\n splitLine(status, line);\n }\n return status;\n };\n }\n});\n\n// src/lib/tasks/status.ts\nfunction statusTask(customArgs) {\n const commands = [\n \"status\",\n \"--porcelain\",\n \"-b\",\n \"-u\",\n \"--null\",\n ...customArgs.filter((arg) => !ignoredOptions.includes(arg))\n ];\n return {\n format: \"utf-8\",\n commands,\n parser(text) {\n return parseStatusSummary(text);\n }\n };\n}\nvar ignoredOptions;\nvar init_status = __esm({\n \"src/lib/tasks/status.ts\"() {\n \"use strict\";\n init_StatusSummary();\n ignoredOptions = [\"--null\", \"-z\"];\n }\n});\n\n// src/lib/tasks/version.ts\nfunction versionResponse(major = 0, minor = 0, patch = 0, agent = \"\", installed = true) {\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}\nfunction notInstalledResponse() {\n return versionResponse(0, 0, 0, \"\", false);\n}\nfunction version_default() {\n return {\n version() {\n return this._runTask({\n commands: [\"--version\"],\n format: \"utf-8\",\n parser: versionParser,\n onError(result, error, done, fail) {\n if (result.exitCode === -2 /* NOT_FOUND */) {\n return done(Buffer.from(NOT_INSTALLED));\n }\n fail(error);\n }\n });\n }\n };\n}\nfunction versionParser(stdOut) {\n if (stdOut === NOT_INSTALLED) {\n return notInstalledResponse();\n }\n return parseStringResponse(versionResponse(0, 0, 0, stdOut), parsers7, stdOut);\n}\nvar NOT_INSTALLED, parsers7;\nvar init_version = __esm({\n \"src/lib/tasks/version.ts\"() {\n \"use strict\";\n init_utils();\n NOT_INSTALLED = \"installed=false\";\n parsers7 = [\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 }\n});\n\n// src/lib/tasks/clone.ts\nfunction createCloneTask(api, task, repoPath, ...args) {\n if (!filterString(repoPath)) {\n return configurationErrorTask(`git.${api}() requires a string 'repoPath'`);\n }\n return task(repoPath, filterType(args[0], filterString), getTrailingOptions(arguments));\n}\nfunction clone_default() {\n return {\n clone(repo, ...rest) {\n return this._runTask(\n createCloneTask(\"clone\", cloneTask, filterType(repo, filterString), ...rest),\n trailingFunctionArgument(arguments)\n );\n },\n mirror(repo, ...rest) {\n return this._runTask(\n createCloneTask(\"mirror\", cloneMirrorTask, filterType(repo, filterString), ...rest),\n trailingFunctionArgument(arguments)\n );\n }\n };\n}\nvar cloneTask, cloneMirrorTask;\nvar init_clone = __esm({\n \"src/lib/tasks/clone.ts\"() {\n \"use strict\";\n init_task();\n init_utils();\n init_pathspec();\n cloneTask = (repo, directory, customArgs) => {\n const commands = [\"clone\", ...customArgs];\n filterString(repo) && commands.push(pathspec(repo));\n filterString(directory) && commands.push(pathspec(directory));\n return straightThroughStringTask(commands);\n };\n cloneMirrorTask = (repo, directory, customArgs) => {\n append(customArgs, \"--mirror\");\n return cloneTask(repo, directory, customArgs);\n };\n }\n});\n\n// src/lib/simple-git-api.ts\nvar simple_git_api_exports = {};\n__export(simple_git_api_exports, {\n SimpleGitApi: () => SimpleGitApi\n});\nvar SimpleGitApi;\nvar init_simple_git_api = __esm({\n \"src/lib/simple-git-api.ts\"() {\n \"use strict\";\n init_task_callback();\n init_change_working_directory();\n init_checkout();\n init_count_objects();\n init_commit();\n init_config();\n init_first_commit();\n init_grep();\n init_hash_object();\n init_init();\n init_log();\n init_merge();\n init_push();\n init_show();\n init_status();\n init_task();\n init_version();\n init_utils();\n init_clone();\n SimpleGitApi = class {\n constructor(_executor) {\n this._executor = _executor;\n }\n _runTask(task, then) {\n const chain = this._executor.chain();\n const promise = chain.push(task);\n if (then) {\n taskCallback(task, promise, then);\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 add(files) {\n return this._runTask(\n straightThroughStringTask([\"add\", ...asArray(files)]),\n trailingFunctionArgument(arguments)\n );\n }\n cwd(directory) {\n const next = trailingFunctionArgument(arguments);\n if (typeof directory === \"string\") {\n return this._runTask(changeWorkingDirectoryTask(directory, this._executor), next);\n }\n if (typeof directory?.path === \"string\") {\n return this._runTask(\n changeWorkingDirectoryTask(\n directory.path,\n directory.root && this._executor || void 0\n ),\n next\n );\n }\n return this._runTask(\n configurationErrorTask(\"Git.cwd: workingDirectory must be supplied as a string\"),\n next\n );\n }\n hashObject(path, write) {\n return this._runTask(\n hashObjectTask(path, write === true),\n trailingFunctionArgument(arguments)\n );\n }\n init(bare) {\n return this._runTask(\n initTask(bare === true, this._executor.cwd, getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n merge() {\n return this._runTask(\n mergeTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n mergeFromTo(remote, branch) {\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 return this._runTask(\n mergeTask([remote, branch, ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments, false)\n );\n }\n outputHandler(handler) {\n this._executor.outputHandler = handler;\n return this;\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 return this._runTask(task, trailingFunctionArgument(arguments));\n }\n stash() {\n return this._runTask(\n straightThroughStringTask([\"stash\", ...getTrailingOptions(arguments)]),\n trailingFunctionArgument(arguments)\n );\n }\n status() {\n return this._runTask(\n statusTask(getTrailingOptions(arguments)),\n trailingFunctionArgument(arguments)\n );\n }\n };\n Object.assign(\n SimpleGitApi.prototype,\n checkout_default(),\n clone_default(),\n commit_default(),\n config_default(),\n count_objects_default(),\n first_commit_default(),\n grep_default(),\n log_default(),\n show_default(),\n version_default()\n );\n }\n});\n\n// src/lib/runners/scheduler.ts\nvar scheduler_exports = {};\n__export(scheduler_exports, {\n Scheduler: () => Scheduler\n});\nimport { createDeferred } from \"@kwsites/promise-deferred\";\nvar createScheduledTask, Scheduler;\nvar init_scheduler = __esm({\n \"src/lib/runners/scheduler.ts\"() {\n \"use strict\";\n init_utils();\n init_git_logger();\n createScheduledTask = /* @__PURE__ */ (() => {\n let id = 0;\n return () => {\n id++;\n const { promise, done } = createDeferred();\n return {\n promise,\n done,\n id\n };\n };\n })();\n Scheduler = class {\n constructor(concurrency = 2) {\n this.concurrency = concurrency;\n this.logger = createLogger(\"\", \"scheduler\");\n this.pending = [];\n this.running = [];\n this.logger(`Constructed, concurrency=%s`, concurrency);\n }\n 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 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 next() {\n const { promise, id } = append(this.pending, createScheduledTask());\n this.logger(`Scheduling id=%s`, id);\n this.schedule();\n return promise;\n }\n };\n }\n});\n\n// src/lib/tasks/apply-patch.ts\nvar apply_patch_exports = {};\n__export(apply_patch_exports, {\n applyPatchTask: () => applyPatchTask\n});\nfunction applyPatchTask(patches, customArgs) {\n return straightThroughStringTask([\"apply\", ...customArgs, ...patches]);\n}\nvar init_apply_patch = __esm({\n \"src/lib/tasks/apply-patch.ts\"() {\n \"use strict\";\n init_task();\n }\n});\n\n// src/lib/responses/BranchDeleteSummary.ts\nfunction branchDeletionSuccess(branch, hash) {\n return {\n branch,\n hash,\n success: true\n };\n}\nfunction branchDeletionFailure(branch) {\n return {\n branch,\n hash: null,\n success: false\n };\n}\nvar BranchDeletionBatch;\nvar init_BranchDeleteSummary = __esm({\n \"src/lib/responses/BranchDeleteSummary.ts\"() {\n \"use strict\";\n BranchDeletionBatch = class {\n constructor() {\n this.all = [];\n this.branches = {};\n this.errors = [];\n }\n get success() {\n return !this.errors.length;\n }\n };\n }\n});\n\n// src/lib/parsers/parse-branch-delete.ts\nfunction hasBranchDeletionError(data, processExitCode) {\n return processExitCode === 1 /* ERROR */ && deleteErrorRegex.test(data);\n}\nvar deleteSuccessRegex, deleteErrorRegex, parsers8, parseBranchDeletions;\nvar init_parse_branch_delete = __esm({\n \"src/lib/parsers/parse-branch-delete.ts\"() {\n \"use strict\";\n init_BranchDeleteSummary();\n init_utils();\n deleteSuccessRegex = /(\\S+)\\s+\\(\\S+\\s([^)]+)\\)/;\n deleteErrorRegex = /^error[^']+'([^']+)'/m;\n parsers8 = [\n new LineParser(deleteSuccessRegex, (result, [branch, hash]) => {\n const deletion = branchDeletionSuccess(branch, hash);\n result.all.push(deletion);\n result.branches[branch] = deletion;\n }),\n new LineParser(deleteErrorRegex, (result, [branch]) => {\n const deletion = branchDeletionFailure(branch);\n result.errors.push(deletion);\n result.all.push(deletion);\n result.branches[branch] = deletion;\n })\n ];\n parseBranchDeletions = (stdOut, stdErr) => {\n return parseStringResponse(new BranchDeletionBatch(), parsers8, [stdOut, stdErr]);\n };\n }\n});\n\n// src/lib/responses/BranchSummary.ts\nvar BranchSummaryResult;\nvar init_BranchSummary = __esm({\n \"src/lib/responses/BranchSummary.ts\"() {\n \"use strict\";\n BranchSummaryResult = class {\n constructor() {\n this.all = [];\n this.branches = {};\n this.current = \"\";\n this.detached = false;\n }\n push(status, detached, name, commit, label) {\n if (status === \"*\" /* CURRENT */) {\n this.detached = detached;\n this.current = name;\n }\n this.all.push(name);\n this.branches[name] = {\n current: status === \"*\" /* CURRENT */,\n linkedWorkTree: status === \"+\" /* LINKED */,\n name,\n commit,\n label\n };\n }\n };\n }\n});\n\n// src/lib/parsers/parse-branch.ts\nfunction branchStatus(input) {\n return input ? input.charAt(0) : \"\";\n}\nfunction parseBranchSummary(stdOut, currentOnly = false) {\n return parseStringResponse(\n new BranchSummaryResult(),\n currentOnly ? [currentBranchParser] : parsers9,\n stdOut\n );\n}\nvar parsers9, currentBranchParser;\nvar init_parse_branch = __esm({\n \"src/lib/parsers/parse-branch.ts\"() {\n \"use strict\";\n init_BranchSummary();\n init_utils();\n parsers9 = [\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 currentBranchParser = new LineParser(/^(\\S+)$/s, (result, [name]) => {\n result.push(\"*\" /* CURRENT */, false, name, \"\", \"\");\n });\n }\n});\n\n// src/lib/tasks/branch.ts\nvar branch_exports = {};\n__export(branch_exports, {\n branchLocalTask: () => branchLocalTask,\n branchTask: () => branchTask,\n containsDeleteBranchCommand: () => containsDeleteBranchCommand,\n deleteBranchTask: () => deleteBranchTask,\n deleteBranchesTask: () => deleteBranchesTask\n});\nfunction containsDeleteBranchCommand(commands) {\n const deleteCommands = [\"-d\", \"-D\", \"--delete\"];\n return commands.some((command) => deleteCommands.includes(command));\n}\nfunction branchTask(customArgs) {\n const isDelete = containsDeleteBranchCommand(customArgs);\n const isCurrentOnly = customArgs.includes(\"--show-current\");\n const commands = [\"branch\", ...customArgs];\n if (commands.length === 1) {\n commands.push(\"-a\");\n }\n if (!commands.includes(\"-v\")) {\n commands.splice(1, 0, \"-v\");\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 return parseBranchSummary(stdOut, isCurrentOnly);\n }\n };\n}\nfunction branchLocalTask() {\n return {\n format: \"utf-8\",\n commands: [\"branch\", \"-v\"],\n parser(stdOut) {\n return parseBranchSummary(stdOut);\n }\n };\n}\nfunction deleteBranchesTask(branches, forceDelete = false) {\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 done(stdOut);\n }\n };\n}\nfunction deleteBranchTask(branch, forceDelete = false) {\n const task = {\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 throw new GitResponseError(\n task.parser(bufferToString(stdOut), bufferToString(stdErr)),\n String(error)\n );\n }\n };\n return task;\n}\nvar init_branch = __esm({\n \"src/lib/tasks/branch.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_parse_branch_delete();\n init_parse_branch();\n init_utils();\n }\n});\n\n// src/lib/responses/CheckIgnore.ts\nimport { normalize } from \"node:path\";\nfunction toPath(input) {\n const path = input.trim().replace(/^[\"']|[\"']$/g, \"\");\n return path && normalize(path);\n}\nvar parseCheckIgnore;\nvar init_CheckIgnore = __esm({\n \"src/lib/responses/CheckIgnore.ts\"() {\n \"use strict\";\n parseCheckIgnore = (text) => {\n return text.split(/\\n/g).map(toPath).filter(Boolean);\n };\n }\n});\n\n// src/lib/tasks/check-ignore.ts\nvar check_ignore_exports = {};\n__export(check_ignore_exports, {\n checkIgnoreTask: () => checkIgnoreTask\n});\nfunction checkIgnoreTask(paths) {\n return {\n commands: [\"check-ignore\", ...paths],\n format: \"utf-8\",\n parser: parseCheckIgnore\n };\n}\nvar init_check_ignore = __esm({\n \"src/lib/tasks/check-ignore.ts\"() {\n \"use strict\";\n init_CheckIgnore();\n }\n});\n\n// src/lib/parsers/parse-fetch.ts\nfunction parseFetchResult(stdOut, stdErr) {\n const result = {\n raw: stdOut,\n remote: null,\n branches: [],\n tags: [],\n updated: [],\n deleted: []\n };\n return parseStringResponse(result, parsers10, [stdOut, stdErr]);\n}\nvar parsers10;\nvar init_parse_fetch = __esm({\n \"src/lib/parsers/parse-fetch.ts\"() {\n \"use strict\";\n init_utils();\n parsers10 = [\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 }\n});\n\n// src/lib/tasks/fetch.ts\nvar fetch_exports = {};\n__export(fetch_exports, {\n fetchTask: () => fetchTask\n});\nfunction disallowedCommand(command) {\n return /^--upload-pack(=|$)/.test(command);\n}\nfunction fetchTask(remote, branch, customArgs) {\n const commands = [\"fetch\", ...customArgs];\n if (remote && branch) {\n commands.push(remote, branch);\n }\n const banned = commands.find(disallowedCommand);\n if (banned) {\n return configurationErrorTask(`git.fetch: potential exploit argument blocked.`);\n }\n return {\n commands,\n format: \"utf-8\",\n parser: parseFetchResult\n };\n}\nvar init_fetch = __esm({\n \"src/lib/tasks/fetch.ts\"() {\n \"use strict\";\n init_parse_fetch();\n init_task();\n }\n});\n\n// src/lib/parsers/parse-move.ts\nfunction parseMoveResult(stdOut) {\n return parseStringResponse({ moves: [] }, parsers11, stdOut);\n}\nvar parsers11;\nvar init_parse_move = __esm({\n \"src/lib/parsers/parse-move.ts\"() {\n \"use strict\";\n init_utils();\n parsers11 = [\n new LineParser(/^Renaming (.+) to (.+)$/, (result, [from, to]) => {\n result.moves.push({ from, to });\n })\n ];\n }\n});\n\n// src/lib/tasks/move.ts\nvar move_exports = {};\n__export(move_exports, {\n moveTask: () => moveTask\n});\nfunction moveTask(from, to) {\n return {\n commands: [\"mv\", \"-v\", ...asArray(from), to],\n format: \"utf-8\",\n parser: parseMoveResult\n };\n}\nvar init_move = __esm({\n \"src/lib/tasks/move.ts\"() {\n \"use strict\";\n init_parse_move();\n init_utils();\n }\n});\n\n// src/lib/tasks/pull.ts\nvar pull_exports = {};\n__export(pull_exports, {\n pullTask: () => pullTask\n});\nfunction pullTask(remote, branch, customArgs) {\n const commands = [\"pull\", ...customArgs];\n if (remote && branch) {\n commands.splice(1, 0, remote, branch);\n }\n return {\n commands,\n format: \"utf-8\",\n parser(stdOut, stdErr) {\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 fail(_error);\n }\n };\n}\nvar init_pull = __esm({\n \"src/lib/tasks/pull.ts\"() {\n \"use strict\";\n init_git_response_error();\n init_parse_pull();\n init_utils();\n }\n});\n\n// src/lib/responses/GetRemoteSummary.ts\nfunction parseGetRemotes(text) {\n const remotes = {};\n forEach(text, ([name]) => remotes[name] = { name });\n return Object.values(remotes);\n}\nfunction parseGetRemotesVerbose(text) {\n const remotes = {};\n forEach(text, ([name, url, purpose]) => {\n if (!Object.hasOwn(remotes, name)) {\n remotes[name] = {\n name,\n refs: { fetch: \"\", push: \"\" }\n };\n }\n if (purpose && url) {\n remotes[name].refs[purpose.replace(/[^a-z]/g, \"\")] = url;\n }\n });\n return Object.values(remotes);\n}\nfunction forEach(text, handler) {\n forEachLineWithContent(text, (line) => handler(line.split(/\\s+/)));\n}\nvar init_GetRemoteSummary = __esm({\n \"src/lib/responses/GetRemoteSummary.ts\"() {\n \"use strict\";\n init_utils();\n }\n});\n\n// src/lib/tasks/remote.ts\nvar remote_exports = {};\n__export(remote_exports, {\n addRemoteTask: () => addRemoteTask,\n getRemotesTask: () => getRemotesTask,\n listRemotesTask: () => listRemotesTask,\n remoteTask: () => remoteTask,\n removeRemoteTask: () => removeRemoteTask\n});\nfunction addRemoteTask(remoteName, remoteRepo, customArgs) {\n return straightThroughStringTask([\"remote\", \"add\", ...customArgs, remoteName, remoteRepo]);\n}\nfunction getRemotesTask(verbose) {\n const commands = [\"remote\"];\n if (verbose) {\n commands.push(\"-v\");\n }\n return {\n commands,\n format: \"utf-8\",\n parser: verbose ? parseGetRemotesVerbose : parseGetRemotes\n };\n}\nfunction listRemotesTask(customArgs) {\n const commands = [...customArgs];\n if (commands[0] !== \"ls-remote\") {\n commands.unshift(\"ls-remote\");\n }\n return straightThroughStringTask(commands);\n}\nfunction remoteTask(customArgs) {\n const commands = [...customArgs];\n if (commands[0] !== \"remote\") {\n commands.unshift(\"remote\");\n }\n return straightThroughStringTask(commands);\n}\nfunction removeRemoteTask(remoteName) {\n return straightThroughStringTask([\"remote\", \"remove\", remoteName]);\n}\nvar init_remote = __esm({\n \"src/lib/tasks/remote.ts\"() {\n \"use strict\";\n init_GetRemoteSummary();\n init_task();\n }\n});\n\n// src/lib/tasks/stash-list.ts\nvar stash_list_exports = {};\n__export(stash_list_exports, {\n stashListTask: () => stashListTask\n});\nfunction stashListTask(opt = {}, customArgs) {\n const options = parseLogOptions(opt);\n const commands = [\"stash\", \"list\", ...options.commands, ...customArgs];\n const parser4 = createListLogSummaryParser(\n options.splitter,\n options.fields,\n logFormatFromCommand(commands)\n );\n return validateLogFormatConfig(commands) || {\n commands,\n format: \"utf-8\",\n parser: parser4\n };\n}\nvar init_stash_list = __esm({\n \"src/lib/tasks/stash-list.ts\"() {\n \"use strict\";\n init_log_format();\n init_parse_list_log_summary();\n init_diff();\n init_log();\n }\n});\n\n// src/lib/tasks/sub-module.ts\nvar sub_module_exports = {};\n__export(sub_module_exports, {\n addSubModuleTask: () => addSubModuleTask,\n initSubModuleTask: () => initSubModuleTask,\n subModuleTask: () => subModuleTask,\n updateSubModuleTask: () => updateSubModuleTask\n});\nfunction addSubModuleTask(repo, path) {\n return subModuleTask([\"add\", repo, path]);\n}\nfunction initSubModuleTask(customArgs) {\n return subModuleTask([\"init\", ...customArgs]);\n}\nfunction subModuleTask(customArgs) {\n const commands = [...customArgs];\n if (commands[0] !== \"submodule\") {\n commands.unshift(\"submodule\");\n }\n return straightThroughStringTask(commands);\n}\nfunction updateSubModuleTask(customArgs) {\n return subModuleTask([\"update\", ...customArgs]);\n}\nvar init_sub_module = __esm({\n \"src/lib/tasks/sub-module.ts\"() {\n \"use strict\";\n init_task();\n }\n});\n\n// src/lib/responses/TagList.ts\nfunction singleSorted(a, b) {\n const aIsNum = Number.isNaN(a);\n const bIsNum = Number.isNaN(b);\n if (aIsNum !== bIsNum) {\n return aIsNum ? 1 : -1;\n }\n return aIsNum ? sorted(a, b) : 0;\n}\nfunction sorted(a, b) {\n return a === b ? 0 : a > b ? 1 : -1;\n}\nfunction trimmed(input) {\n return input.trim();\n}\nfunction toNumber(input) {\n if (typeof input === \"string\") {\n return parseInt(input.replace(/^\\D+/g, \"\"), 10) || 0;\n }\n return 0;\n}\nvar TagList, parseTagList;\nvar init_TagList = __esm({\n \"src/lib/responses/TagList.ts\"() {\n \"use strict\";\n TagList = class {\n constructor(all, latest) {\n this.all = all;\n this.latest = latest;\n }\n };\n parseTagList = function(data, customSort = false) {\n const tags = data.split(\"\\n\").map(trimmed).filter(Boolean);\n if (!customSort) {\n tags.sort(function(tagA, tagB) {\n const partsA = tagA.split(\".\");\n const partsB = tagB.split(\".\");\n if (partsA.length === 1 || partsB.length === 1) {\n return singleSorted(toNumber(partsA[0]), toNumber(partsB[0]));\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 if (diff) {\n return diff;\n }\n }\n return 0;\n });\n }\n const latest = customSort ? tags[0] : [...tags].reverse().find((tag) => tag.indexOf(\".\") >= 0);\n return new TagList(tags, latest);\n };\n }\n});\n\n// src/lib/tasks/tag.ts\nvar tag_exports = {};\n__export(tag_exports, {\n addAnnotatedTagTask: () => addAnnotatedTagTask,\n addTagTask: () => addTagTask,\n tagListTask: () => tagListTask\n});\nfunction tagListTask(customArgs = []) {\n const hasCustomSort = customArgs.some((option) => /^--sort=/.test(option));\n return {\n format: \"utf-8\",\n commands: [\"tag\", \"-l\", ...customArgs],\n parser(text) {\n return parseTagList(text, hasCustomSort);\n }\n };\n}\nfunction addTagTask(name) {\n return {\n format: \"utf-8\",\n commands: [\"tag\", name],\n parser() {\n return { name };\n }\n };\n}\nfunction addAnnotatedTagTask(name, tagMessage) {\n return {\n format: \"utf-8\",\n commands: [\"tag\", \"-a\", \"-m\", tagMessage, name],\n parser() {\n return { name };\n }\n };\n}\nvar init_tag = __esm({\n \"src/lib/tasks/tag.ts\"() {\n \"use strict\";\n init_TagList();\n }\n});\n\n// src/git.js\nvar require_git = __commonJS({\n \"src/git.js\"(exports, module) {\n \"use strict\";\n var { GitExecutor: GitExecutor2 } = (init_git_executor(), __toCommonJS(git_executor_exports));\n var { SimpleGitApi: SimpleGitApi2 } = (init_simple_git_api(), __toCommonJS(simple_git_api_exports));\n var { Scheduler: Scheduler2 } = (init_scheduler(), __toCommonJS(scheduler_exports));\n var { adhocExecTask: adhocExecTask2, configurationErrorTask: configurationErrorTask2 } = (init_task(), __toCommonJS(task_exports));\n var {\n asArray: asArray2,\n filterArray: filterArray2,\n filterPrimitives: filterPrimitives2,\n filterString: filterString2,\n filterStringOrStringArray: filterStringOrStringArray2,\n filterType: filterType2,\n getTrailingOptions: getTrailingOptions2,\n trailingFunctionArgument: trailingFunctionArgument2,\n trailingOptionsArgument: trailingOptionsArgument2\n } = (init_utils(), __toCommonJS(utils_exports));\n var { applyPatchTask: applyPatchTask2 } = (init_apply_patch(), __toCommonJS(apply_patch_exports));\n var {\n branchTask: branchTask2,\n branchLocalTask: branchLocalTask2,\n deleteBranchesTask: deleteBranchesTask2,\n deleteBranchTask: deleteBranchTask2\n } = (init_branch(), __toCommonJS(branch_exports));\n var { checkIgnoreTask: checkIgnoreTask2 } = (init_check_ignore(), __toCommonJS(check_ignore_exports));\n var { checkIsRepoTask: checkIsRepoTask2 } = (init_check_is_repo(), __toCommonJS(check_is_repo_exports));\n var { cleanWithOptionsTask: cleanWithOptionsTask2, isCleanOptionsArray: isCleanOptionsArray2 } = (init_clean(), __toCommonJS(clean_exports));\n var { diffSummaryTask: diffSummaryTask2 } = (init_diff(), __toCommonJS(diff_exports));\n var { fetchTask: fetchTask2 } = (init_fetch(), __toCommonJS(fetch_exports));\n var { moveTask: moveTask2 } = (init_move(), __toCommonJS(move_exports));\n var { pullTask: pullTask2 } = (init_pull(), __toCommonJS(pull_exports));\n var { pushTagsTask: pushTagsTask2 } = (init_push(), __toCommonJS(push_exports));\n var {\n addRemoteTask: addRemoteTask2,\n getRemotesTask: getRemotesTask2,\n listRemotesTask: listRemotesTask2,\n remoteTask: remoteTask2,\n removeRemoteTask: removeRemoteTask2\n } = (init_remote(), __toCommonJS(remote_exports));\n var { getResetMode: getResetMode2, resetTask: resetTask2 } = (init_reset(), __toCommonJS(reset_exports));\n var { stashListTask: stashListTask2 } = (init_stash_list(), __toCommonJS(stash_list_exports));\n var {\n addSubModuleTask: addSubModuleTask2,\n initSubModuleTask: initSubModuleTask2,\n subModuleTask: subModuleTask2,\n updateSubModuleTask: updateSubModuleTask2\n } = (init_sub_module(), __toCommonJS(sub_module_exports));\n var { addAnnotatedTagTask: addAnnotatedTagTask2, addTagTask: addTagTask2, tagListTask: tagListTask2 } = (init_tag(), __toCommonJS(tag_exports));\n var { straightThroughBufferTask: straightThroughBufferTask2, straightThroughStringTask: straightThroughStringTask2 } = (init_task(), __toCommonJS(task_exports));\n function Git2(options, plugins) {\n this._plugins = plugins;\n this._executor = new GitExecutor2(\n options.baseDir,\n new Scheduler2(options.maxConcurrentProcesses),\n plugins\n );\n this._trimmed = options.trimmed;\n }\n (Git2.prototype = Object.create(SimpleGitApi2.prototype)).constructor = Git2;\n Git2.prototype.customBinary = function(command) {\n this._plugins.reconfigure(\"binary\", command);\n return this;\n };\n Git2.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 return this;\n };\n Git2.prototype.stashList = function(options) {\n return this._runTask(\n stashListTask2(\n trailingOptionsArgument2(arguments) || {},\n filterArray2(options) && options || []\n ),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.mv = function(from, to) {\n return this._runTask(moveTask2(from, to), trailingFunctionArgument2(arguments));\n };\n Git2.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 Git2.prototype.pull = function(remote, branch, options, then) {\n return this._runTask(\n pullTask2(\n filterType2(remote, filterString2),\n filterType2(branch, filterString2),\n getTrailingOptions2(arguments)\n ),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.fetch = function(remote, branch) {\n return this._runTask(\n fetchTask2(\n filterType2(remote, filterString2),\n filterType2(branch, filterString2),\n getTrailingOptions2(arguments)\n ),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.silent = function(silence) {\n return this._runTask(\n adhocExecTask2(\n () => console.warn(\n \"simple-git deprecation notice: git.silent: logging should be configured using the `debug` library / `DEBUG` environment variable, this method will be removed.\"\n )\n )\n );\n };\n Git2.prototype.tags = function(options, then) {\n return this._runTask(\n tagListTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.rebase = function() {\n return this._runTask(\n straightThroughStringTask2([\"rebase\", ...getTrailingOptions2(arguments)]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.reset = function(mode) {\n return this._runTask(\n resetTask2(getResetMode2(mode), getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.revert = function(commit) {\n const next = trailingFunctionArgument2(arguments);\n if (typeof commit !== \"string\") {\n return this._runTask(configurationErrorTask2(\"Commit must be a string\"), next);\n }\n return this._runTask(\n straightThroughStringTask2([\"revert\", ...getTrailingOptions2(arguments, 0, true), commit]),\n next\n );\n };\n Git2.prototype.addTag = function(name) {\n const task = typeof name === \"string\" ? addTagTask2(name) : configurationErrorTask2(\"Git.addTag requires a tag name\");\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.addAnnotatedTag = function(tagName, tagMessage) {\n return this._runTask(\n addAnnotatedTagTask2(tagName, tagMessage),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.deleteLocalBranch = function(branchName, forceDelete, then) {\n return this._runTask(\n deleteBranchTask2(branchName, typeof forceDelete === \"boolean\" ? forceDelete : false),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.deleteLocalBranches = function(branchNames, forceDelete, then) {\n return this._runTask(\n deleteBranchesTask2(branchNames, typeof forceDelete === \"boolean\" ? forceDelete : false),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.branch = function(options, then) {\n return this._runTask(\n branchTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.branchLocal = function(then) {\n return this._runTask(branchLocalTask2(), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.raw = function(commands) {\n const createRestCommands = !Array.isArray(commands);\n const command = [].slice.call(createRestCommands ? arguments : commands, 0);\n for (let i = 0; i < command.length && createRestCommands; i++) {\n if (!filterPrimitives2(command[i])) {\n command.splice(i, command.length - i);\n break;\n }\n }\n command.push(...getTrailingOptions2(arguments, 0, true));\n var next = trailingFunctionArgument2(arguments);\n if (!command.length) {\n return this._runTask(\n configurationErrorTask2(\"Raw: must supply one or more command to execute\"),\n next\n );\n }\n return this._runTask(straightThroughStringTask2(command, this._trimmed), next);\n };\n Git2.prototype.submoduleAdd = function(repo, path, then) {\n return this._runTask(addSubModuleTask2(repo, path), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.submoduleUpdate = function(args, then) {\n return this._runTask(\n updateSubModuleTask2(getTrailingOptions2(arguments, true)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.submoduleInit = function(args, then) {\n return this._runTask(\n initSubModuleTask2(getTrailingOptions2(arguments, true)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.subModule = function(options, then) {\n return this._runTask(\n subModuleTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.listRemote = function() {\n return this._runTask(\n listRemotesTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.addRemote = function(remoteName, remoteRepo, then) {\n return this._runTask(\n addRemoteTask2(remoteName, remoteRepo, getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.removeRemote = function(remoteName, then) {\n return this._runTask(removeRemoteTask2(remoteName), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.getRemotes = function(verbose, then) {\n return this._runTask(getRemotesTask2(verbose === true), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.remote = function(options, then) {\n return this._runTask(\n remoteTask2(getTrailingOptions2(arguments)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.tag = function(options, then) {\n const command = getTrailingOptions2(arguments);\n if (command[0] !== \"tag\") {\n command.unshift(\"tag\");\n }\n return this._runTask(straightThroughStringTask2(command), trailingFunctionArgument2(arguments));\n };\n Git2.prototype.updateServerInfo = function(then) {\n return this._runTask(\n straightThroughStringTask2([\"update-server-info\"]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.pushTags = function(remote, then) {\n const task = pushTagsTask2(\n { remote: filterType2(remote, filterString2) },\n getTrailingOptions2(arguments)\n );\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.rm = function(files) {\n return this._runTask(\n straightThroughStringTask2([\"rm\", \"-f\", ...asArray2(files)]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.rmKeepLocal = function(files) {\n return this._runTask(\n straightThroughStringTask2([\"rm\", \"--cached\", ...asArray2(files)]),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.catFile = function(options, then) {\n return this._catFile(\"utf-8\", arguments);\n };\n Git2.prototype.binaryCatFile = function() {\n return this._catFile(\"buffer\", arguments);\n };\n Git2.prototype._catFile = function(format, args) {\n var handler = trailingFunctionArgument2(args);\n var command = [\"cat-file\"];\n var options = args[0];\n if (typeof options === \"string\") {\n return this._runTask(\n configurationErrorTask2(\"Git.catFile: options must be supplied as an array of strings\"),\n handler\n );\n }\n if (Array.isArray(options)) {\n command.push.apply(command, options);\n }\n const task = format === \"buffer\" ? straightThroughBufferTask2(command) : straightThroughStringTask2(command);\n return this._runTask(task, handler);\n };\n Git2.prototype.diff = function(options, then) {\n const task = filterString2(options) ? configurationErrorTask2(\n \"git.diff: supplying options as a single string is no longer supported, switch to an array of strings\"\n ) : straightThroughStringTask2([\"diff\", ...getTrailingOptions2(arguments)]);\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.diffSummary = function() {\n return this._runTask(\n diffSummaryTask2(getTrailingOptions2(arguments, 1)),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.applyPatch = function(patches) {\n const task = !filterStringOrStringArray2(patches) ? configurationErrorTask2(\n `git.applyPatch requires one or more string patches as the first argument`\n ) : applyPatchTask2(asArray2(patches), getTrailingOptions2([].slice.call(arguments, 1)));\n return this._runTask(task, trailingFunctionArgument2(arguments));\n };\n Git2.prototype.revparse = function() {\n const commands = [\"rev-parse\", ...getTrailingOptions2(arguments, true)];\n return this._runTask(\n straightThroughStringTask2(commands, true),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.clean = function(mode, options, then) {\n const usingCleanOptionsArray = isCleanOptionsArray2(mode);\n const cleanMode = usingCleanOptionsArray && mode.join(\"\") || filterType2(mode, filterString2) || \"\";\n const customArgs = getTrailingOptions2([].slice.call(arguments, usingCleanOptionsArray ? 1 : 0));\n return this._runTask(\n cleanWithOptionsTask2(cleanMode, customArgs),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.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 return this._runTask(task);\n };\n Git2.prototype.clearQueue = function() {\n return this._runTask(\n adhocExecTask2(\n () => console.warn(\n \"simple-git deprecation notice: clearQueue() is deprecated and will be removed, switch to using the abortPlugin instead.\"\n )\n )\n );\n };\n Git2.prototype.checkIgnore = function(pathnames, then) {\n return this._runTask(\n checkIgnoreTask2(asArray2(filterType2(pathnames, filterStringOrStringArray2, []))),\n trailingFunctionArgument2(arguments)\n );\n };\n Git2.prototype.checkIsRepo = function(checkType, then) {\n return this._runTask(\n checkIsRepoTask2(filterType2(checkType, filterString2)),\n trailingFunctionArgument2(arguments)\n );\n };\n module.exports = Git2;\n }\n});\n\n// src/lib/api.ts\ninit_pathspec();\n\n// src/lib/errors/git-construct-error.ts\ninit_git_error();\nvar GitConstructError = class extends GitError {\n constructor(config, message) {\n super(void 0, message);\n this.config = config;\n }\n};\n\n// src/lib/api.ts\ninit_git_error();\n\n// src/lib/errors/git-plugin-error.ts\ninit_git_error();\nvar GitPluginError = class extends GitError {\n constructor(task, plugin, message) {\n super(task, message);\n this.task = task;\n this.plugin = plugin;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n};\n\n// src/lib/api.ts\ninit_git_response_error();\ninit_task_configuration_error();\ninit_check_is_repo();\ninit_clean();\ninit_config();\ninit_diff_name_status();\ninit_grep();\ninit_reset();\n\n// src/lib/plugins/abort-plugin.ts\nfunction abortPlugin(signal) {\n if (!signal) {\n return;\n }\n const onSpawnAfter = {\n type: \"spawn.after\",\n action(_data, context) {\n function kill() {\n context.kill(new GitPluginError(void 0, \"abort\", \"Abort signal received\"));\n }\n signal.addEventListener(\"abort\", kill);\n context.spawned.on(\"close\", () => signal.removeEventListener(\"abort\", kill));\n }\n };\n const onSpawnBefore = {\n type: \"spawn.before\",\n action(_data, context) {\n if (signal.aborted) {\n context.kill(new GitPluginError(void 0, \"abort\", \"Abort already signaled\"));\n }\n }\n };\n return [onSpawnBefore, onSpawnAfter];\n}\n\n// src/lib/plugins/block-unsafe-operations-plugin.ts\nfunction isConfigSwitch(arg) {\n return typeof arg === \"string\" && arg.trim().toLowerCase() === \"-c\";\n}\nfunction isCloneUploadPackSwitch(char, arg) {\n if (typeof arg !== \"string\" || !arg.includes(char)) {\n return false;\n }\n const cleaned = arg.trim().replace(/\\0/g, \"\");\n return /^(--no)?-{1,2}[\\dlsqvnobucj]+(\\s|$)/.test(cleaned);\n}\nfunction preventConfigBuilder(config, setting, message = String(config)) {\n const regex = typeof config === \"string\" ? new RegExp(`\\\\s*${config}`, \"i\") : config;\n return function preventCommand(options, arg, next) {\n if (options[setting] !== true && isConfigSwitch(arg) && regex.test(next)) {\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n `Configuring ${message} is not permitted without enabling ${setting}`\n );\n }\n };\n}\nvar preventUnsafeConfig = [\n preventConfigBuilder(\n /^\\s*protocol(.[a-z]+)?.allow/i,\n \"allowUnsafeProtocolOverride\",\n \"protocol.allow\"\n ),\n preventConfigBuilder(\"core.sshCommand\", \"allowUnsafeSshCommand\"),\n preventConfigBuilder(\"core.gitProxy\", \"allowUnsafeGitProxy\"),\n preventConfigBuilder(\"core.hooksPath\", \"allowUnsafeHooksPath\"),\n preventConfigBuilder(\"diff.external\", \"allowUnsafeDiffExternal\")\n];\nfunction preventUploadPack(arg, method) {\n if (/^\\s*--(upload|receive)-pack/.test(arg)) {\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n `Use of --upload-pack or --receive-pack is not permitted without enabling allowUnsafePack`\n );\n }\n if (method === \"clone\" && isCloneUploadPackSwitch(\"u\", arg)) {\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n `Use of clone with option -u is not permitted without enabling allowUnsafePack`\n );\n }\n if (method === \"push\" && /^\\s*--exec\\b/.test(arg)) {\n throw new GitPluginError(\n void 0,\n \"unsafe\",\n `Use of push with option --exec is not permitted without enabling allowUnsafePack`\n );\n }\n}\nfunction blockUnsafeOperationsPlugin({\n allowUnsafePack = false,\n ...options\n} = {}) {\n return {\n type: \"spawn.args\",\n action(args, context) {\n args.forEach((current, index) => {\n const next = index < args.length ? args[index + 1] : \"\";\n allowUnsafePack || preventUploadPack(current, context.method);\n preventUnsafeConfig.forEach((helper) => helper(options, current, next));\n });\n return args;\n }\n };\n}\n\n// src/lib/plugins/command-config-prefixing-plugin.ts\ninit_utils();\nfunction commandConfigPrefixingPlugin(configuration) {\n const prefix = prefixedArray(configuration, \"-c\");\n return {\n type: \"spawn.args\",\n action(data) {\n return [...prefix, ...data];\n }\n };\n}\n\n// src/lib/plugins/completion-detection.plugin.ts\ninit_utils();\nimport { deferred } from \"@kwsites/promise-deferred\";\nvar never = deferred().promise;\nfunction completionDetectionPlugin({\n onClose = true,\n onExit = 50\n} = {}) {\n function createEvents() {\n let exitCode = -1;\n const events = {\n close: deferred(),\n closeTimeout: deferred(),\n exit: deferred(),\n exitTimeout: deferred()\n };\n const result = Promise.race([\n onClose === false ? never : events.closeTimeout.promise,\n onExit === false ? never : events.exitTimeout.promise\n ]);\n configureTimeout(onClose, events.close, events.closeTimeout);\n configureTimeout(onExit, events.exit, events.exitTimeout);\n return {\n close(code) {\n exitCode = code;\n events.close.done();\n },\n exit(code) {\n exitCode = code;\n events.exit.done();\n },\n get exitCode() {\n return exitCode;\n },\n result\n };\n }\n function configureTimeout(flag, event, timeout) {\n if (flag === false) {\n return;\n }\n (flag === true ? event.promise : event.promise.then(() => delay(flag))).then(timeout.done);\n }\n return {\n type: \"spawn.after\",\n async action(_data, { spawned, close }) {\n const events = createEvents();\n let deferClose = true;\n let quickClose = () => void (deferClose = false);\n spawned.stdout?.on(\"data\", quickClose);\n spawned.stderr?.on(\"data\", quickClose);\n spawned.on(\"error\", quickClose);\n spawned.on(\"close\", (code) => events.close(code));\n spawned.on(\"exit\", (code) => events.exit(code));\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);\n }\n }\n };\n}\n\n// src/lib/plugins/custom-binary.plugin.ts\ninit_utils();\nvar WRONG_NUMBER_ERR = `Invalid value supplied for custom binary, requires a single string or an array containing either one or two strings`;\nvar WRONG_CHARS_ERR = `Invalid value supplied for custom binary, restricted characters must be removed or supply the unsafe.allowUnsafeCustomBinary option`;\nfunction isBadArgument(arg) {\n return !arg || !/^([a-z]:)?([a-z0-9/.\\\\_~-]+)$/i.test(arg);\n}\nfunction toBinaryConfig(input, allowUnsafe) {\n if (input.length < 1 || input.length > 2) {\n throw new GitPluginError(void 0, \"binary\", WRONG_NUMBER_ERR);\n }\n const isBad = input.some(isBadArgument);\n if (isBad) {\n if (allowUnsafe) {\n console.warn(WRONG_CHARS_ERR);\n } else {\n throw new GitPluginError(void 0, \"binary\", WRONG_CHARS_ERR);\n }\n }\n const [binary, prefix] = input;\n return {\n binary,\n prefix\n };\n}\nfunction customBinaryPlugin(plugins, input = [\"git\"], allowUnsafe = false) {\n let config = toBinaryConfig(asArray(input), allowUnsafe);\n plugins.on(\"binary\", (input2) => {\n config = toBinaryConfig(asArray(input2), allowUnsafe);\n });\n plugins.append(\"spawn.binary\", () => {\n return config.binary;\n });\n plugins.append(\"spawn.args\", (data) => {\n return config.prefix ? [config.prefix, ...data] : data;\n });\n}\n\n// src/lib/plugins/error-detection.plugin.ts\ninit_git_error();\nfunction isTaskError(result) {\n return !!(result.exitCode && result.stdErr.length);\n}\nfunction getErrorMessage(result) {\n return Buffer.concat([...result.stdOut, ...result.stdErr]);\n}\nfunction errorDetectionHandler(overwrite = false, isError = isTaskError, errorMessage = getErrorMessage) {\n return (error, result) => {\n if (!overwrite && error || !isError(result)) {\n return error;\n }\n return errorMessage(result);\n };\n}\nfunction errorDetectionPlugin(config) {\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 if (Buffer.isBuffer(error)) {\n return { error: new GitError(void 0, error.toString(\"utf-8\")) };\n }\n return {\n error\n };\n }\n };\n}\n\n// src/lib/plugins/plugin-store.ts\ninit_utils();\nimport { EventEmitter } from \"node:events\";\nvar PluginStore = class {\n constructor() {\n this.plugins = /* @__PURE__ */ new Set();\n this.events = new EventEmitter();\n }\n on(type, listener) {\n this.events.on(type, listener);\n }\n reconfigure(type, data) {\n this.events.emit(type, data);\n }\n append(type, action) {\n const plugin = append(this.plugins, { type, action });\n return () => this.plugins.delete(plugin);\n }\n add(plugin) {\n const plugins = [];\n asArray(plugin).forEach((plugin2) => plugin2 && this.plugins.add(append(plugins, plugin2)));\n return () => {\n plugins.forEach((plugin2) => this.plugins.delete(plugin2));\n };\n }\n exec(type, data, context) {\n let output = data;\n const contextual = Object.freeze(Object.create(context));\n for (const plugin of this.plugins) {\n if (plugin.type === type) {\n output = plugin.action(output, contextual);\n }\n }\n return output;\n }\n};\n\n// src/lib/plugins/progress-monitor-plugin.ts\ninit_utils();\nfunction progressMonitorPlugin(progress) {\n const progressCommand = \"--progress\";\n const progressMethods = [\"checkout\", \"clone\", \"fetch\", \"pull\", \"push\"];\n const onProgress = {\n type: \"spawn.after\",\n action(_data, context) {\n if (!context.commands.includes(progressCommand)) {\n return;\n }\n context.spawned.stderr?.on(\"data\", (chunk) => {\n const message = /^([\\s\\S]+?):\\s*(\\d+)% \\((\\d+)\\/(\\d+)\\)/.exec(chunk.toString(\"utf8\"));\n if (!message) {\n return;\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 const onArgs = {\n type: \"spawn.args\",\n action(args, context) {\n if (!progressMethods.includes(context.method)) {\n return args;\n }\n return including(args, progressCommand);\n }\n };\n return [onArgs, onProgress];\n}\nfunction progressEventStage(input) {\n return String(input.toLowerCase().split(\" \", 1)) || \"unknown\";\n}\n\n// src/lib/plugins/spawn-options-plugin.ts\ninit_utils();\nfunction spawnOptionsPlugin(spawnOptions) {\n const options = pick(spawnOptions, [\"uid\", \"gid\"]);\n return {\n type: \"spawn.options\",\n action(data) {\n return { ...options, ...data };\n }\n };\n}\n\n// src/lib/plugins/timout-plugin.ts\nfunction timeoutPlugin({\n block,\n stdErr = true,\n stdOut = true\n}) {\n if (block > 0) {\n return {\n type: \"spawn.after\",\n action(_data, context) {\n let timeout;\n function wait() {\n timeout && clearTimeout(timeout);\n timeout = setTimeout(kill, block);\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 function kill() {\n stop();\n context.kill(new GitPluginError(void 0, \"timeout\", `block timeout reached`));\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 wait();\n }\n };\n }\n}\n\n// src/lib/plugins/suffix-paths.plugin.ts\ninit_pathspec();\nfunction suffixPathsPlugin() {\n return {\n type: \"spawn.args\",\n action(data) {\n const prefix = [];\n let suffix;\n function append2(args) {\n (suffix = suffix || []).push(...args);\n }\n for (let i = 0; i < data.length; i++) {\n const param = data[i];\n if (isPathSpec(param)) {\n append2(toPaths(param));\n continue;\n }\n if (param === \"--\") {\n append2(\n data.slice(i + 1).flatMap((item) => isPathSpec(item) && toPaths(item) || item)\n );\n break;\n }\n prefix.push(param);\n }\n return !suffix ? prefix : [...prefix, \"--\", ...suffix.map(String)];\n }\n };\n}\n\n// src/lib/git-factory.ts\ninit_utils();\nvar Git = require_git();\nfunction gitInstanceFactory(baseDir, options) {\n const plugins = new PluginStore();\n const config = createInstanceConfig(\n baseDir && (typeof baseDir === \"string\" ? { baseDir } : baseDir) || {},\n options\n );\n if (!folderExists(config.baseDir)) {\n throw new GitConstructError(\n config,\n `Cannot use simple-git on a directory that does not exist`\n );\n }\n if (Array.isArray(config.config)) {\n plugins.add(commandConfigPrefixingPlugin(config.config));\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 plugins.add(errorDetectionPlugin(errorDetectionHandler(true)));\n config.errors && plugins.add(errorDetectionPlugin(config.errors));\n customBinaryPlugin(plugins, config.binary, config.unsafe?.allowUnsafeCustomBinary);\n return new Git(config, plugins);\n}\n\n// src/lib/runners/promise-wrapped.ts\ninit_git_response_error();\nvar functionNamesBuilderApi = [\"customBinary\", \"env\", \"outputHandler\", \"silent\"];\nvar functionNamesPromiseApi = [\n \"add\",\n \"addAnnotatedTag\",\n \"addConfig\",\n \"addRemote\",\n \"addTag\",\n \"applyPatch\",\n \"binaryCatFile\",\n \"branch\",\n \"branchLocal\",\n \"catFile\",\n \"checkIgnore\",\n \"checkIsRepo\",\n \"checkout\",\n \"checkoutBranch\",\n \"checkoutLatestTag\",\n \"checkoutLocalBranch\",\n \"clean\",\n \"clone\",\n \"commit\",\n \"cwd\",\n \"deleteLocalBranch\",\n \"deleteLocalBranches\",\n \"diff\",\n \"diffSummary\",\n \"exec\",\n \"fetch\",\n \"getRemotes\",\n \"init\",\n \"listConfig\",\n \"listRemote\",\n \"log\",\n \"merge\",\n \"mergeFromTo\",\n \"mirror\",\n \"mv\",\n \"pull\",\n \"push\",\n \"pushTags\",\n \"raw\",\n \"rebase\",\n \"remote\",\n \"removeRemote\",\n \"reset\",\n \"revert\",\n \"revparse\",\n \"rm\",\n \"rmKeepLocal\",\n \"show\",\n \"stash\",\n \"stashList\",\n \"status\",\n \"subModule\",\n \"submoduleAdd\",\n \"submoduleInit\",\n \"submoduleUpdate\",\n \"tag\",\n \"tags\",\n \"updateServerInfo\"\n];\nfunction gitP(...args) {\n let git;\n let chain = Promise.resolve();\n try {\n git = gitInstanceFactory(...args);\n } catch (e) {\n chain = Promise.reject(e);\n }\n function builderReturn() {\n return promiseApi;\n }\n function chainReturn() {\n return chain;\n }\n const promiseApi = [...functionNamesBuilderApi, ...functionNamesPromiseApi].reduce(\n (api, name) => {\n const isAsync = functionNamesPromiseApi.includes(name);\n const valid = isAsync ? asyncWrapper(name, git) : syncWrapper(name, git, api);\n const alternative = isAsync ? chainReturn : builderReturn;\n Object.defineProperty(api, name, {\n enumerable: false,\n configurable: false,\n value: git ? valid : alternative\n });\n return api;\n },\n {}\n );\n return promiseApi;\n function asyncWrapper(fn, git2) {\n return function(...args2) {\n if (typeof args2[args2.length] === \"function\") {\n throw new TypeError(\n \"Promise interface requires that handlers are not supplied inline, trailing function not allowed in call to \" + fn\n );\n }\n return chain.then(function() {\n return new Promise(function(resolve, reject) {\n const callback = (err, result) => {\n if (err) {\n return reject(toError(err));\n }\n resolve(result);\n };\n args2.push(callback);\n git2[fn].apply(git2, args2);\n });\n });\n };\n }\n function syncWrapper(fn, git2, api) {\n return (...args2) => {\n git2[fn](...args2);\n return api;\n };\n }\n}\nfunction toError(error) {\n if (error instanceof Error) {\n return error;\n }\n if (typeof error === \"string\") {\n return new Error(error);\n }\n return new GitResponseError(error);\n}\n\n// src/esm.mjs\nvar simpleGit = gitInstanceFactory;\nvar esm_default = gitInstanceFactory;\nexport {\n CheckRepoActions,\n CleanOptions,\n DiffNameStatus,\n GitConfigScope,\n GitConstructError,\n GitError,\n GitPluginError,\n GitResponseError,\n ResetMode,\n TaskConfigurationError,\n esm_default as default,\n gitP,\n grepQueryBuilder,\n pathspec,\n simpleGit\n};\n//# sourceMappingURL=index.js.map\n","import fs from \"fs-extra\";\n\nimport { AppArg, Application, EnvArg, EnvironmentType, getApplications, groupByTeam, type Environment } from \"../app/app.ts\";\nimport { Edit } from \"../app/edit/edit.ts\";\nimport type { Directory } from \"../filesync/directory.ts\";\nimport { SyncJsonState } from \"../filesync/sync-json-state.ts\";\nimport colors from \"../output/colors.ts\";\nimport { select } from \"../output/select.ts\";\nimport { setSentryTags } from \"../output/sentry.ts\";\nimport { sprint } from \"../output/sprint.ts\";\nimport { getUserOrLogin } from \"../user/user.ts\";\nimport { sortBySimilar } from \"../util/collection.ts\";\nimport type { Command } from \"./command.ts\";\nimport type { Context } from \"./context.ts\";\nimport { FlagError, type FlagsDefinition, type FlagsResult } from \"./flag.ts\";\n\nexport { AppArg, EnvArg } from \"../app/app.ts\";\n\n/**\n * Combined flags definition for --app and --env flags used by commands\n * that need to identify a Gadget application and environment.\n */\nexport const AppIdentityFlags = {\n \"--application\": AppArg,\n \"--environment\": EnvArg,\n} satisfies FlagsDefinition;\n\nexport type AppIdentityFlags = typeof AppIdentityFlags;\nexport type AppIdentityFlagsResult = FlagsResult<AppIdentityFlags>;\n\n/**\n * An object that knows what app and environment we are working with.\n */\nexport class AppIdentity {\n /**\n * The {@linkcode Edit} client that can be used to send Gadget API\n * requests to the environment that the directory is synced to.\n */\n readonly edit: Edit;\n\n /**\n * The {@linkcode Context} that was used to initialize this\n * {@linkcode AppIdentity} instance.\n */\n readonly ctx: Context;\n\n /**\n * The parsed {@linkcode AppIdentityFlags} that the user passed to ggt.\n */\n readonly flags: AppIdentityFlagsResult;\n\n /**\n * The {@linkcode Environment} we are working with.\n */\n readonly environment: Environment;\n\n /**\n * The state of the `.gadget/sync.json` file on the local\n * filesystem, if found.\n */\n readonly syncJsonState?: SyncJsonState;\n\n private constructor(ctx: Context, flags: AppIdentityFlagsResult, environment: Environment, syncJsonState?: SyncJsonState) {\n this.ctx = ctx.child({ name: \"app-identity\" });\n this.flags = flags;\n this.environment = environment;\n this.syncJsonState = syncJsonState;\n\n this.edit = new Edit(this.ctx, this.environment);\n }\n\n /**\n * Loads a {@linkcode AppIdentity} from the specified directory, or using the command line flags. Always returns an identity by using the given input, or by asking the user if not enough information is provided.\n *\n * - Ensures a user is logged in.\n * - Ensures the user has at least one application.\n * - Uses the app/env from the local .gadget/sync.json file if it exists\n * - Uses the app/env from the command line flags if provided\n * - Asks the user to select an app/env if not enough information is provided\n */\n static async load(\n ctx: Context,\n { command, flags, directory }: { command: Command; flags: AppIdentityFlagsResult; directory: Directory },\n ): Promise<AppIdentity> {\n ctx = ctx.child({ name: \"app-identity\" });\n\n const user = await getUserOrLogin(ctx, command);\n const availableApps = await getApplications(ctx);\n if (availableApps.length === 0) {\n throw new FlagError(\n sprint`\n You (${user.email}) don't have have any Gadget applications.\n\n Visit https://gadget.new to create one!\n `,\n { usageHint: false },\n );\n }\n\n // try to load the .gadget/sync.json file\n const syncJsonFile = await fs\n .readFile(directory.absolute(\".gadget/sync.json\"), \"utf8\")\n .catch((error: unknown) => ctx.log.warn(\"failed to read .gadget/sync.json\", { error }));\n let state: SyncJsonState | undefined;\n\n if (syncJsonFile) {\n // the .gadget/sync.json file exists, try to parse it\n try {\n state = SyncJsonState.parse(JSON.parse(syncJsonFile));\n } catch (error) {\n // the .gadget/sync.json file exists, but it's invalid\n ctx.log.warn(\"failed to parse .gadget/sync.json\", { error, syncJsonFile });\n }\n }\n\n const application = await loadApplication({ flags, availableApps, state });\n const environment = await loadEnvironment({ command, flags, application, state });\n\n setSentryTags({\n application_id: application.id,\n environment_id: environment.id,\n });\n\n return new AppIdentity(ctx, flags, environment, state);\n }\n\n get application(): Application {\n return this.environment.application;\n }\n}\n\nconst AllowedProdCommands: Command[] = [\"pull\", \"logs\", \"eval\", \"var\"] satisfies Command[];\n\n/**\n * Resolves the application from flags, sync.json state, or interactive prompt.\n */\nexport const loadApplication = async ({\n flags,\n availableApps,\n state,\n selectPrompt = \"Which application do you want to develop?\",\n}: {\n flags: { \"--application\"?: string };\n availableApps: Application[];\n state?: SyncJsonState;\n selectPrompt?: string;\n}): Promise<Application> => {\n let appSlug = flags[\"--application\"] || state?.application;\n if (!appSlug) {\n // the user didn't specify an app, ask them to select one\n const groupedChoices: [string, string[]][] = Array.from(groupByTeam(availableApps)).map(([teamName, apps]) => [\n teamName,\n apps.map((app) => app.slug),\n ]);\n\n appSlug = await select({\n groupedChoices,\n searchable: true,\n content: selectPrompt,\n });\n }\n\n const application = availableApps.find((app) => app.slug === appSlug);\n if (application) {\n // the user specified an app or we loaded it from the state,\n // and it exists in their list of applications, so return it\n return application;\n }\n\n // the specified appSlug doesn't exist in their list of apps,\n // either they misspelled it or they don't have access to it\n // anymore, suggest some apps that are similar to the one they\n // specified\n const similarAppSlugs = sortBySimilar(\n appSlug,\n availableApps.map((app) => app.slug),\n ).slice(0, 5);\n\n // TODO: differentiate between incorrect --app vs state.application?\n throw new FlagError(\n sprint`\n Unknown application:\n\n ${appSlug}\n\n Did you mean one of these?\n\n ${similarAppSlugs.map((s) => `• ${s}`).join(\"\\n\")}\n `,\n { usageHint: false },\n );\n};\n\nconst loadEnvironment = async ({\n command,\n flags,\n application,\n state,\n}: {\n command: Command;\n flags: AppIdentityFlagsResult;\n application: Application;\n state?: SyncJsonState;\n}): Promise<Environment> => {\n const selectableEnvironments = application.environments.filter((env) => env.type === EnvironmentType.Development);\n if (AllowedProdCommands.includes(command)) {\n // allow pulling from production environments\n selectableEnvironments.push(...application.environments.filter((env) => env.type === EnvironmentType.Production));\n }\n\n let selectedEnvironment = flags[\"--environment\"] || state?.environment;\n if (!selectedEnvironment) {\n // user didn't specify an environment, ask them to select one\n selectedEnvironment = await select({\n choices: selectableEnvironments.map((env) => env.name),\n content: \"Which environment do you want to develop on?\",\n });\n }\n\n if (selectedEnvironment.toLowerCase() === \"production\" && !AllowedProdCommands.includes(command)) {\n // specifically call out that they can't dev, push, etc. to prod\n throw new FlagError(\n sprint`\n You cannot \"ggt ${command}\" your ${colors.identifier(\"production\")} environment.\n `,\n { usageHint: false },\n );\n }\n\n const environment = selectableEnvironments.find((env) => env.name === selectedEnvironment.toLowerCase());\n if (environment) {\n // the user specified an environment or we loaded it from the state,\n // and it exists in the app's list of environments, so return it\n return { ...environment, application };\n }\n\n // the specified env doesn't exist in their list of environments,\n // either they misspelled it or they don't have access to it\n // anymore, suggest some envs that are similar to the one they\n // specified\n const similarEnvironments = sortBySimilar(\n selectedEnvironment,\n selectableEnvironments.map((env) => env.name),\n ).slice(0, 5);\n\n throw new FlagError(\n sprint`\n Unknown environment:\n\n ${selectedEnvironment}\n\n Did you mean one of these?\n\n ${similarEnvironments.map((s) => `• ${s}`).join(\"\\n\")}\n `,\n { usageHint: false },\n );\n};\n","import assert from \"node:assert\";\nimport path from \"node:path\";\n\nimport { findUp } from \"find-up\";\nimport fs from \"fs-extra\";\nimport indentString from \"indent-string\";\nimport { simpleGit } from \"simple-git\";\nimport terminalLink from \"terminal-link\";\n\nimport { EnvironmentType, type Application, type Environment } from \"../app/app.ts\";\nimport { Edit } from \"../app/edit/edit.ts\";\nimport { AppIdentity, AppIdentityFlags } from \"../command/app-identity.ts\";\nimport type { Command } from \"../command/command.ts\";\nimport type { Context } from \"../command/context.ts\";\nimport { FlagError, type FlagsDefinition, type FlagsResult } from \"../command/flag.ts\";\nimport { config, homePath } from \"../config/config.ts\";\nimport colors from \"../output/colors.ts\";\nimport { println } from \"../output/print.ts\";\nimport { sprint, sprintln, type SprintOptions } from \"../output/sprint.ts\";\nimport { defaults } from \"../util/object.ts\";\nimport { Directory } from \"./directory.ts\";\nimport { UnknownDirectoryError } from \"./error.ts\";\nimport { type SyncJsonState } from \"./sync-json-state.ts\";\n\nexport const SyncJsonFlags = {\n ...AppIdentityFlags,\n \"--allow-different-app\": {\n type: Boolean,\n description: \"Allow syncing with a different app\",\n details: sprint`\n Overrides the app recorded in .gadget/sync.json with the one specified by\n --app. Use this when you want to reuse an existing directory for a\n different app.\n `,\n brief: false,\n },\n \"--allow-unknown-directory\": {\n type: Boolean,\n description: \"Allow syncing to an existing directory\",\n details: sprint`\n Normally, a directory must be empty or already contain\n .gadget/sync.json. Use this when you want to initialize sync in a\n directory with existing content.\n `,\n brief: false,\n },\n} satisfies FlagsDefinition;\n\nexport type SyncJsonFlags = typeof SyncJsonFlags;\nexport type SyncJsonFlagsResult = FlagsResult<SyncJsonFlags>;\n\n/**\n * Tracks the state of the filesystem sync with the Gadget backend.\n *\n * This is persisted to `.gadget/sync.json` within the {@linkcode directory}.\n *\n * @see {@linkcode AppIdentity} for a lighter-weight object that tracks which app and environment we are working with.\n */\nexport class SyncJson {\n /**\n * The last git branch that was checked out in the directory.\n */\n gitBranch: string | undefined;\n\n /**\n * The {@linkcode Context} that was used to initialize this\n * {@linkcode SyncJson} instance.\n */\n readonly ctx: Context;\n\n /**\n * The parsed {@linkcode SyncJsonFlags} that the user passed to ggt.\n */\n readonly flags: SyncJsonFlagsResult;\n\n /**\n * The root directory of the local filesystem, or in other words,\n * the directory that contains the `.gadget/sync.json` file.\n */\n readonly directory: Directory;\n\n /**\n * The {@linkcode AppIdentity} of the directory.\n */\n readonly appIdentity: AppIdentity;\n\n /**\n * The name of the environment the directory was synced to before\n * it was synced to the current environment.\n *\n * This is undefined if the environment didn't change.\n */\n readonly previousEnvironment: string | undefined;\n\n /**\n * The state of the `.gadget/sync.json` file on the local\n * filesystem.\n */\n readonly state: SyncJsonState;\n\n private constructor(\n ctx: Context,\n flags: SyncJsonFlagsResult,\n directory: Directory,\n appIdentity: AppIdentity,\n previousEnvironment: string | undefined,\n state: SyncJsonState,\n ) {\n this.flags = flags;\n this.directory = directory;\n this.appIdentity = appIdentity;\n this.previousEnvironment = previousEnvironment;\n this.state = state;\n this.ctx = ctx.child({\n name: \"sync-json\",\n fields: () => ({\n syncJson: {\n directory: this.directory.path,\n branch: this.gitBranch,\n ...this.state,\n },\n }),\n });\n }\n\n get edit(): Edit {\n return this.appIdentity.edit;\n }\n\n get application(): Application {\n return this.appIdentity.application;\n }\n\n get environment(): Environment {\n return this.appIdentity.environment;\n }\n\n /**\n * The last filesVersion that was written to the filesystem.\n *\n * This determines if the filesystem in Gadget is ahead of the\n * filesystem on the local machine.\n */\n get filesVersion(): bigint {\n const environment = this.state.environments[this.state.environment];\n assert(environment, \"environment must exist in environments\");\n return BigInt(environment.filesVersion);\n }\n\n /**\n * Loads a {@linkcode SyncJson} from the specified directory.\n *\n * Returns undefined if the directory doesn't exist, is empty, or\n * doesn't contain a `.gadget/sync.json` file.\n *\n * @param appIdentity - Pre-loaded {@linkcode AppIdentity} to use\n * instead of calling {@linkcode AppIdentity.load} internally.\n * Used by {@linkcode loadOrAskAndInit} to avoid duplicate API\n * calls when it needs the identity for initialization.\n */\n static async load(\n ctx: Context,\n {\n command,\n flags,\n directory,\n appIdentity,\n }: { command: Command; flags: SyncJsonFlagsResult; directory: Directory; appIdentity?: AppIdentity },\n ): Promise<SyncJson | undefined> {\n ctx = ctx.child({ name: \"sync-json\" });\n\n appIdentity ??= await AppIdentity.load(ctx, { command, flags, directory });\n const state = appIdentity.syncJsonState;\n\n if (!state) {\n // the .gadget/sync.json file doesn't exist in the directory\n // or any of its parents, or is invalid, so return undefined\n return undefined;\n }\n\n if (state.application !== appIdentity.application.slug) {\n // .gadget/sync.json is associated with a different app\n if (flags[\"--allow-different-app\"]) {\n // the user passed --allow-different-app, so use the application\n // and environment they specified and clobber everything\n const state = {\n application: appIdentity.application.slug,\n environment: appIdentity.environment.name,\n environments: {\n [appIdentity.environment.name]: { filesVersion: \"0\" },\n },\n };\n\n const syncJson =\n appIdentity.environment.type === EnvironmentType.Production\n ? new EphemeralSyncJson(ctx, flags, directory, appIdentity, undefined, state)\n : new SyncJson(ctx, flags, directory, appIdentity, undefined, state);\n\n await syncJson.loadGitBranch();\n return syncJson;\n }\n\n // the user didn't pass --allow-different-app, so throw an error\n throw new FlagError(\n sprint`\n You were about to sync the following app to the following directory:\n\n ${appIdentity.application.slug} (${appIdentity.environment.name}) → ${directory.path}\n\n However, that directory has already been synced with this app:\n\n ${state.application} (${state.environment})\n\n If you're sure that you want to sync:\n\n ${appIdentity.application.slug} (${appIdentity.environment.name}) → ${directory.path}\n\n Run \"ggt dev\" with the ${colors.identifier(\"--allow-different-app\")} flag.\n `,\n { usageHint: false },\n );\n }\n\n let previousEnvironment: string | undefined;\n if (state.environment !== appIdentity.environment.name) {\n // the user specified a different environment\n\n if (appIdentity.environment.type !== EnvironmentType.Production) {\n // the new environment isn't a production environment, so let\n // the user know that we're changing environments (we're not\n // using the EphemeralSyncJson class)\n println({\n ensureEmptyLineAbove: true,\n content: sprint`\n Changing environment.\n\n ${state.environment} → ${appIdentity.environment.name}\n `,\n });\n }\n\n // update the state to the new environment\n previousEnvironment = state.environment;\n state.environment = appIdentity.environment.name;\n if (!state.environments[appIdentity.environment.name]) {\n // the user has never synced to this environment before\n state.environments[appIdentity.environment.name] = { filesVersion: \"0\" };\n }\n }\n\n const syncJson =\n appIdentity.environment.type === EnvironmentType.Production\n ? new EphemeralSyncJson(ctx, flags, directory, appIdentity, previousEnvironment, state)\n : new SyncJson(ctx, flags, directory, appIdentity, previousEnvironment, state);\n\n await syncJson.save(syncJson.filesVersion);\n await syncJson.loadGitBranch();\n return syncJson;\n }\n\n /**\n * Loads a {@linkcode SyncJson} from the specified directory or\n * initializes a new one.\n *\n * - Ensures a user is logged in.\n * - Ensures the user has at least one application.\n * - Ensures the directory exists.\n * - Ensures the directory is empty or contains a `.gadget/sync.json` file, unless --allow-unknown-directory was passed\n * - Ensures the specified app matches the app the directory previously synced to, unless --allow-different-app was passed\n */\n static async loadOrAskAndInit(\n ctx: Context,\n { command, flags, directory }: { command: Command; flags: SyncJsonFlagsResult; directory: Directory },\n ): Promise<SyncJson> {\n ctx = ctx.child({ name: \"sync-json\" });\n\n const appIdentity = await AppIdentity.load(ctx, { command, flags, directory });\n\n let syncJson = await SyncJson.load(ctx, { command, flags, directory, appIdentity });\n if (syncJson) {\n // the .gadget/sync.json file already exists and is valid\n return syncJson;\n }\n\n if ((await directory.hasFiles()) && !flags[\"--allow-unknown-directory\"]) {\n // the directory isn't empty and the user didn't pass --allow-unknown-directory\n throw new UnknownDirectoryError({ command, flags, directory });\n }\n\n // the directory is empty or the user passed\n // --allow-unknown-directory, either way ensure the directory exists\n // and create a fresh .gadget/sync.json file\n await fs.ensureDir(directory.path);\n\n const state = {\n application: appIdentity.application.slug,\n environment: appIdentity.environment.name,\n environments: {\n [appIdentity.environment.name]: { filesVersion: \"0\" },\n },\n };\n\n syncJson =\n appIdentity.environment.type === EnvironmentType.Production\n ? new EphemeralSyncJson(ctx, flags, directory, appIdentity, undefined, state)\n : new SyncJson(ctx, flags, directory, appIdentity, undefined, state);\n\n await syncJson.save(syncJson.filesVersion);\n await syncJson.loadGitBranch();\n\n return syncJson;\n }\n\n /**\n * Updates {@linkcode state} and saves it to `.gadget/sync.json`.\n */\n async save(filesVersion: string | bigint): Promise<void> {\n const environment = this.state.environments[this.state.environment];\n assert(environment, \"environment must exist in environments\");\n environment.filesVersion = String(filesVersion);\n\n this.ctx.log.debug(\"saving .gadget/sync.json\");\n await fs.outputJSON(this.directory.absolute(\".gadget/sync.json\"), this.state, { spaces: 2 });\n }\n\n async loadGitBranch(): Promise<void> {\n this.gitBranch = await loadBranch(this.ctx, { directory: this.directory });\n }\n\n sprint(options: SprintOptions = {}): string {\n let content = sprintln`\n Application ${this.environment.application.slug}\n Environment ${this.environment.name}\n `;\n\n if (this.gitBranch) {\n content += sprintln(indentString(`Branch ${this.gitBranch}`, 5));\n }\n\n const domain = config.domains.app;\n\n if (terminalLink.isSupported) {\n content += sprintln({\n ensureEmptyLineAbove: true,\n content: `${terminalLink(colors.link(\"Preview\"), `https://${this.environment.application.slug}--${this.environment.name}.${domain}`)} ${terminalLink(colors.link(\"Editor\"), `https://${this.environment.application.primaryDomain}/edit/${this.environment.name}`)} ${terminalLink(colors.link(\"Playground\"), `https://${this.environment.application.primaryDomain}/api/playground/javascript?environment=${this.environment.name}`)} ${terminalLink(colors.link(\"Docs\"), `https://docs.gadget.dev/api/${this.environment.application.slug}`)}`,\n });\n } else {\n content += sprintln`\n ------------------------\n Preview https://${this.environment.application.slug}--${this.environment.name}.${domain}\n Editor https://${this.environment.application.primaryDomain}/edit/${this.environment.name}\n Playground https://${this.environment.application.primaryDomain}/api/playground/javascript?environment=${this.environment.name}\n Docs https://docs.gadget.dev/api/${this.environment.application.slug}\n `;\n }\n\n return sprintln({ ...options, content });\n }\n\n print(options?: SprintOptions): void {\n options = defaults(options, { ensureEmptyLineAbove: true });\n println(this.sprint(options));\n }\n}\n\n/**\n * A {@linkcode SyncJson} that doesn't save its state to the filesystem.\n *\n * This is used when the user runs ggt pull --env=production so that we\n * don't change the .gadget/sync.json file to point to the production\n * environment, causing failures when they try to dev, push, etc.\n */\n// @ts-expect-error SyncJson's constructor is private\nexport class EphemeralSyncJson extends SyncJson {\n override async save(filesVersion: string | bigint): Promise<void> {\n const environment = this.state.environments[this.state.environment];\n assert(environment, \"environment must exist in environments\");\n environment.filesVersion = String(filesVersion);\n\n // don't save the state to the filesystem\n return Promise.resolve();\n }\n}\n\nexport const loadSyncJsonDirectory = async (dir: string): Promise<Directory> => {\n if (config.windows && dir.startsWith(\"~/\")) {\n // \"~\" doesn't expand to the home directory on Windows\n dir = homePath(dir.slice(2));\n }\n\n // TODO: rename to .gadget/ggt.json\n const syncJsonPath = await findUp(\".gadget/sync.json\", { cwd: dir });\n if (syncJsonPath) {\n // we found a .gadget/sync.json file, use its parent directory\n dir = path.join(syncJsonPath, \"../..\");\n }\n\n // ensure the directory path is absolute\n dir = path.resolve(dir);\n\n return await Directory.init(dir);\n};\n\n/**\n * Returns the current git branch of the directory or undefined if\n * the directory isn't a git repository.\n */\nconst loadBranch = async (ctx: Context, { directory }: { directory: Directory }): Promise<string | undefined> => {\n try {\n const branch = await simpleGit(directory.path).revparse([\"--abbrev-ref\", \"HEAD\"]);\n return branch;\n } catch (error) {\n ctx.log.warn(\"failed to read git branch\", { error });\n return undefined;\n }\n};\n\nexport { AnySyncJsonState, SyncJsonState, SyncJsonStateV1 } from \"./sync-json-state.ts\";\n"],"x_google_ignoreList":[3,4,5,6],"mappings":"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"}