@gfdelarue/testkit 0.6.6 → 0.6.7

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 (133) hide show
  1. package/README.md +134 -0
  2. package/dist/app/bugs/ci-report.js +2 -2
  3. package/dist/app/campaigns/brief.js +1 -1
  4. package/dist/app/cleanup/index.js +1 -1
  5. package/dist/app/doctor/index.js +1 -1
  6. package/dist/app/environments/static-values.js +1 -1
  7. package/dist/app/environments/supplied.js +1 -1
  8. package/dist/app/environments/task-databases.js +2 -2
  9. package/dist/app/evidence/ci-status.js +1 -0
  10. package/dist/app/evidence/ci.js +1 -0
  11. package/dist/app/evidence/index.js +1 -0
  12. package/dist/app/evidence/inputs.js +1 -0
  13. package/dist/app/evidence/report.js +1 -0
  14. package/dist/app/lint/index.js +1 -1
  15. package/dist/app/run/engine-evidence-persistence.js +1 -1
  16. package/dist/app/run/engine-execution-failures.js +1 -1
  17. package/dist/app/run/engine-execution.js +1 -1
  18. package/dist/app/run/operation-progress.js +1 -1
  19. package/dist/app/run/orchestrator.js +1 -1
  20. package/dist/app/run/results.js +1 -1
  21. package/dist/app/run/run-events.js +1 -1
  22. package/dist/app/run/run-finalization.js +1 -1
  23. package/dist/app/run/run-guards.js +3 -3
  24. package/dist/app/run/scheduler/estimates.js +1 -1
  25. package/dist/app/run/scheduler/index.js +1 -1
  26. package/dist/app/run/task-batches.js +1 -1
  27. package/dist/app/run/worker-loop.js +1 -1
  28. package/dist/app/status/runs.js +1 -1
  29. package/dist/app/typecheck/index.js +4 -4
  30. package/dist/cli/command-catalog.js +1 -1
  31. package/dist/cli/command-registry.js +1 -1
  32. package/dist/cli/commands/evidence.js +2 -0
  33. package/dist/cli/renderers/destroy/text.js +1 -1
  34. package/dist/cli/renderers/evidence/text.js +1 -0
  35. package/dist/cli/renderers/run/failure.js +1 -1
  36. package/dist/cli/renderers/run/status.js +1 -1
  37. package/dist/cli/renderers/run/text-reporter.js +23 -23
  38. package/dist/config/loader/decode-discovery.js +1 -1
  39. package/dist/config/loader/discover-tests.js +1 -1
  40. package/dist/config/loader/discovery-result.js +1 -1
  41. package/dist/config/loader/discovery.js +2 -2
  42. package/dist/config/loader/env.js +1 -1
  43. package/dist/config/loader/file-metadata.js +1 -1
  44. package/dist/config/loader/groups.js +2 -2
  45. package/dist/config/loader/index.js +1 -1
  46. package/dist/config/loader/load.js +1 -1
  47. package/dist/config/loader/path-policy.js +1 -1
  48. package/dist/config/loader/runtime-isolation.js +1 -1
  49. package/dist/config/loader/runtime.js +1 -1
  50. package/dist/config/loader/test-selection.js +1 -1
  51. package/dist/config/loader/validation.js +1 -1
  52. package/dist/database/admin.js +4 -4
  53. package/dist/database/cleanup.js +1 -1
  54. package/dist/database/configured-steps.js +1 -1
  55. package/dist/database/docker.js +3 -5
  56. package/dist/database/index.js +2 -2
  57. package/dist/database/local-postgres.js +3 -4
  58. package/dist/database/postgres/index.js +2 -2
  59. package/dist/database/progress.js +1 -1
  60. package/dist/database/roles.js +2 -2
  61. package/dist/database/runtime-config.js +1 -1
  62. package/dist/database/schema-source.js +3 -3
  63. package/dist/database/source-url.js +1 -1
  64. package/dist/database/template-steps.js +3 -3
  65. package/dist/domain/operation-reason.js +1 -1
  66. package/dist/domain/suite-selection.js +1 -1
  67. package/dist/engines/adapters/evidence-files.js +1 -1
  68. package/dist/engines/adapters/evidence-identity.js +1 -1
  69. package/dist/engines/adapters/execution.js +1 -1
  70. package/dist/engines/adapters/node-startup-cache.js +1 -1
  71. package/dist/engines/adapters/workspace.js +1 -1
  72. package/dist/engines/contracts/fixture-manifest.js +1 -1
  73. package/dist/engines/installations/package-resolution.js +1 -1
  74. package/dist/engines/managed-module-resolution.js +2 -2
  75. package/dist/engines/node-vitest/adapter/adapter.js +1 -1
  76. package/dist/engines/node-vitest/runtime/data/report.js +3 -3
  77. package/dist/engines/node-vitest/runtime/data/scenario.js +2 -2
  78. package/dist/engines/node-vitest/selection.js +1 -1
  79. package/dist/engines/playwright/adapter/adapter.js +1 -1
  80. package/dist/engines/playwright/adapter/config.js +3 -3
  81. package/dist/engines/playwright/adapter/index.js +1 -1
  82. package/dist/environment/lifecycle-controller.js +1 -1
  83. package/dist/environment/template.js +1 -1
  84. package/dist/evidence/artifacts.js +3 -3
  85. package/dist/evidence/bundles.js +2 -2
  86. package/dist/evidence/environment-record.js +1 -1
  87. package/dist/evidence/index.js +1 -1
  88. package/dist/evidence/logs.js +2 -2
  89. package/dist/evidence/operation-timings.js +1 -1
  90. package/dist/evidence/reading.js +1 -1
  91. package/dist/evidence/reporting.js +1 -1
  92. package/dist/evidence/run-evidence.js +1 -1
  93. package/dist/evidence/run-inputs.js +1 -0
  94. package/dist/evidence/run-model.js +1 -1
  95. package/dist/evidence/setup-progress.js +1 -1
  96. package/dist/evidence/storage-inventory.js +1 -1
  97. package/dist/evidence/storage.js +2 -2
  98. package/dist/process/capture-output.js +1 -1
  99. package/dist/process/execa-bundle.json +3 -3
  100. package/dist/process/host/platform.js +1 -1
  101. package/dist/process/locks.js +4 -4
  102. package/dist/process/process-group.js +1 -1
  103. package/dist/process/process.js +1 -1
  104. package/dist/process/ready-deadline.js +1 -1
  105. package/dist/process/runs/manifest.js +1 -1
  106. package/dist/process/runs/stop.js +1 -1
  107. package/dist/process/windows-native.js +1 -1
  108. package/dist/repo/content.js +4 -0
  109. package/dist/repo/fingerprint-policy.js +1 -1
  110. package/dist/repo/managed-git.js +1 -1
  111. package/dist/repo/metadata.js +1 -1
  112. package/dist/repo/state.js +4 -4
  113. package/dist/steps/configured-step-testkit-modules.js +1 -1
  114. package/dist/steps/configured-steps.js +1 -1
  115. package/dist/steps/environment.js +1 -1
  116. package/dist/steps/index.js +1 -1
  117. package/dist/steps/run.js +2 -2
  118. package/dist/toolchains/esbuild.js +1 -1
  119. package/dist/toolchains/index.js +3 -3
  120. package/dist/toolchains/node-integrity.js +1 -1
  121. package/dist/toolchains/node-provisioning.js +2 -2
  122. package/dist/toolchains/semver.js +1 -1
  123. package/dist/tracker/gitea.js +1 -1
  124. package/dist/tracker/github.js +1 -1
  125. package/dist/tracker/requests.js +1 -1
  126. package/dist/tracker/responses.js +1 -1
  127. package/docs/bug-records.md +18 -2
  128. package/docs/release-notes.md +27 -0
  129. package/package.json +1 -1
  130. package/dist/app/run/planning-types.js +0 -1
  131. package/dist/app/run/selection.js +0 -1
  132. package/dist/config/authoring/http-methods.js +0 -1
  133. package/dist/evidence/artifact-validation.js +0 -1
@@ -43,4 +43,4 @@ For example, you can use the \`pathToFileURL()\` method of the \`url\` core modu
43
43
  `,LF:`
44
44
  `,concatBytes:tr},Pp=r((e,t)=>{let n=new Uint8Array(e.length+t.length);return n.set(e,0),n.set(t,e.length),n},"concatUint8Array"),Lp={windowsNewline:new Uint8Array([13,10]),unixNewline:new Uint8Array([10]),LF:10,concatBytes:Pp};import{Buffer as Bp}from"node:buffer";var zs=r((e,t)=>e?void 0:Fp.bind(void 0,t),"getValidateTransformInput"),Fp=r(function*(e,t){if(typeof t!="string"&&!O(t)&&!Bp.isBuffer(t))throw new TypeError(`The \`${e}\` option's transform must use "objectMode: true" to receive as input: ${typeof t}.`);yield t},"validateStringTransformInput"),Vs=r((e,t)=>e?_p.bind(void 0,t):Up.bind(void 0,t),"getValidateTransformReturn"),_p=r(function*(e,t){Ws(e,t),yield t},"validateObjectTransformReturn"),Up=r(function*(e,t){if(Ws(e,t),typeof t!="string"&&!O(t))throw new TypeError(`The \`${e}\` option's function must yield a string or an Uint8Array, not ${typeof t}.`);yield t},"validateStringTransformReturn"),Ws=r((e,t)=>{if(t==null)throw new TypeError(`The \`${e}\` option's function must not call \`yield ${t}\`.
45
45
  Instead, \`yield\` should either be called with a value, or not be called at all. For example:
46
- if (condition) { yield value; }`)},"validateEmptyReturn");import{Buffer as $p}from"node:buffer";import{StringDecoder as vp}from"node:string_decoder";var Ht=r((e,t,n)=>{if(n)return;if(e)return{transform:Np.bind(void 0,new TextEncoder)};let o=new vp(t);return{transform:jp.bind(void 0,o),final:kp.bind(void 0,o)}},"getEncodingTransformGenerator"),Np=r(function*(e,t){$p.isBuffer(t)?yield Y(t):typeof t=="string"?yield e.encode(t):yield t},"encodingUint8ArrayGenerator"),jp=r(function*(e,t){yield O(t)?e.write(t):t},"encodingStringGenerator"),kp=r(function*(e){let t=e.end();t!==""&&(yield t)},"encodingStringFinal");import{callbackify as Ys}from"node:util";var rr=Ys(async(e,t,n,o)=>{t.currentIterable=e(...n);try{for await(let i of t.currentIterable)o.push(i)}finally{delete t.currentIterable}}),Kt=r(async function*(e,t,n){if(n===t.length){yield e;return}let{transform:o=Wp}=t[n];for await(let i of o(e))yield*Kt(i,t,n+1)},"transformChunk"),Hs=r(async function*(e){for(let[t,{final:n}]of Object.entries(e))yield*Gp(n,Number(t),e)},"finalChunks"),Gp=r(async function*(e,t,n){if(e!==void 0)for await(let o of e())yield*Kt(o,n,t+1)},"generatorFinalChunks"),Ks=Ys(async({currentIterable:e},t)=>{if(e!==void 0){await(t?e.throw(t):e.return());return}if(t)throw t}),Wp=r(function*(e){yield e},"identityGenerator");var or=r((e,t,n,o)=>{try{for(let i of e(...t))n.push(i);o()}catch(i){o(i)}},"pushChunksSync"),Xs=r((e,t)=>[...t.flatMap(n=>[...ie(n,e,0)]),...ze(e)],"runTransformSync"),ie=r(function*(e,t,n){if(n===t.length){yield e;return}let{transform:o=Vp}=t[n];for(let i of o(e))yield*ie(i,t,n+1)},"transformChunkSync"),ze=r(function*(e){for(let[t,{final:n}]of Object.entries(e))yield*zp(n,Number(t),e)},"finalChunksSync"),zp=r(function*(e,t,n){if(e!==void 0)for(let o of e())yield*ie(o,n,t+1)},"generatorFinalChunksSync"),Vp=r(function*(e){yield e},"identityGenerator");import{Transform as Yp,getDefaultHighWaterMark as Js}from"node:stream";var ir=r(({value:e,value:{transform:t,final:n,writableObjectMode:o,readableObjectMode:i},optionName:s},{encoding:a})=>{let c={},l=Qs(e,a,s),d=oe(t),f=oe(n),u=d?rr.bind(void 0,Kt,c):or.bind(void 0,ie),p=d||f?rr.bind(void 0,Hs,c):or.bind(void 0,ze),m=d||f?Ks.bind(void 0,c):void 0;return{stream:new Yp({writableObjectMode:o,writableHighWaterMark:Js(o),readableObjectMode:i,readableHighWaterMark:Js(i),transform(S,w,b){u([S,l,0],this,b)},flush(S){p([l],this,S)},destroy:m})}},"generatorToStream"),Xt=r((e,t,n,o)=>{let i=t.filter(({type:a})=>a==="generator"),s=o?i.reverse():i;for(let{value:a,optionName:c}of s){let l=Qs(a,n,c);e=Xs(l,e)}return e},"runGeneratorsSync"),Qs=r(({transform:e,final:t,binary:n,writableObjectMode:o,readableObjectMode:i,preserveNewlines:s},a,c)=>{let l={};return[{transform:zs(o,c)},Ht(n,a,o),Yt(n,s,o,l),{transform:e,final:t},{transform:Vs(i,c)},Gs({binary:n,preserveNewlines:s,readableObjectMode:i,state:l})].filter(Boolean)},"addInternalGenerators");var Zs=r((e,t)=>{for(let n of Hp(e))Kp(e,n,t)},"addInputOptionsSync"),Hp=r(e=>new Set(Object.entries(e).filter(([,{direction:t}])=>t==="input").map(([t])=>Number(t))),"getInputFdNumbers"),Kp=r((e,t,n)=>{let{stdioItems:o}=e[t],i=o.filter(({contents:c})=>c!==void 0);if(i.length===0)return;if(t!==0){let[{type:c,optionName:l}]=i;throw new TypeError(`Only the \`stdin\` option, not \`${l}\`, can be ${q[c]} with synchronous methods.`)}let a=i.map(({contents:c})=>c).map(c=>Xp(c,o));n.input=Me(a)},"addInputOptionSync"),Xp=r((e,t)=>{let n=Xt(e,t,"utf8",!0);return Jp(n),Me(n)},"applySingleInputGeneratorsSync"),Jp=r(e=>{let t=e.find(n=>typeof n!="string"&&!O(n));if(t!==void 0)throw new TypeError(`The \`stdin\` option is invalid: when passing objects as input, a transform must be used to serialize them to strings or Uint8Arrays: ${t}.`)},"validateSerializable");var Jt=r(({stdioItems:e,encoding:t,verboseInfo:n,fdNumber:o})=>o!=="all"&&le(n,o)&&!M.has(t)&&Qp(o)&&(e.some(({type:i,value:s})=>i==="native"&&Zp.has(s))||e.every(({type:i})=>B.has(i))),"shouldLogOutput"),Qp=r(e=>e===1||e===2,"isFdVerbose"),Zp=new Set(["pipe","overlapped"]),ea=r(async(e,t,n,o)=>{for await(let i of e)qp(t)||qs(i,n,o)},"logLines"),ta=r((e,t,n)=>{for(let o of e)qs(o,t,n)},"logLinesSync"),qp=r(e=>e._readableState.pipes.length>0,"isPipingStream"),qs=r((e,t,n)=>{let o=st(e);j({type:"output",verboseMessage:o,fdNumber:t,verboseInfo:n})},"logLine");import{writeFileSync as em,appendFileSync as tm}from"node:fs";var na=r(({fileDescriptors:e,syncResult:{output:t},options:n,isMaxBuffer:o,verboseInfo:i})=>{if(t===null)return{output:Array.from({length:3})};let s={},a=new Set;return{output:t.map((l,d)=>nm({result:l,fileDescriptors:e,fdNumber:d,state:s,outputFiles:a,isMaxBuffer:o,verboseInfo:i},n)),...s}},"transformOutputSync"),nm=r(({result:e,fileDescriptors:t,fdNumber:n,state:o,outputFiles:i,isMaxBuffer:s,verboseInfo:a},{buffer:c,encoding:l,lines:d,stripFinalNewline:f,maxBuffer:u})=>{if(e===null)return;let p=Zi(e,s,u),m=Y(p),{stdioItems:g,objectMode:S}=t[n],w=rm([m],g,l,o),{serializedResult:b,finalResult:E=b}=om({chunks:w,objectMode:S,encoding:l,lines:d,stripFinalNewline:f,fdNumber:n});im({serializedResult:b,fdNumber:n,state:o,verboseInfo:a,encoding:l,stdioItems:g,objectMode:S});let x=c[n]?E:void 0;try{return o.error===void 0&&sm(b,g,i),x}catch(D){return o.error=D,x}},"transformOutputResultSync"),rm=r((e,t,n,o)=>{try{return Xt(e,t,n,!1)}catch(i){return o.error=i,e}},"runOutputGeneratorsSync"),om=r(({chunks:e,objectMode:t,encoding:n,lines:o,stripFinalNewline:i,fdNumber:s})=>{if(t)return{serializedResult:e};if(n==="buffer")return{serializedResult:Me(e)};let a=Hr(e,n);return o[s]?{serializedResult:a,finalResult:nr(a,!i[s],t)}:{serializedResult:a}},"serializeChunks"),im=r(({serializedResult:e,fdNumber:t,state:n,verboseInfo:o,encoding:i,stdioItems:s,objectMode:a})=>{if(!Jt({stdioItems:s,encoding:i,verboseInfo:o,fdNumber:t}))return;let c=nr(e,!1,a);try{ta(c,t,o)}catch(l){n.error??=l}},"logOutputSync"),sm=r((e,t,n)=>{let o=t.filter(({type:i})=>Gt.has(i));for(let{path:i,append:s}of o){let a=typeof i=="string"?i:i.toString();s||n.has(a)?tm(i,e):(n.add(a),em(i,e))}},"writeToFiles");var ra=r(([,e,t],n)=>{if(n.all)return e===void 0?t:t===void 0?e:Array.isArray(e)?Array.isArray(t)?[...e,...t]:[...e,J(t,n,"all")]:Array.isArray(t)?[J(e,n,"all"),...t]:O(e)&&O(t)?yn([e,t]):`${e}${t}`},"getAllSync");import{once as sr}from"node:events";var ia=r(async(e,t)=>{let[n,o]=await am(e);return t.isForcefullyTerminated??=!1,[n,o]},"waitForExit"),am=r(async e=>{let[t,n]=await Promise.allSettled([sr(e,"spawn"),sr(e,"exit")]);return t.status==="rejected"?[]:n.status==="rejected"?oa(e):n.value},"waitForExitOrError"),oa=r(async e=>{try{return await sr(e,"exit")}catch{return oa(e)}},"waitForSubprocessExit"),sa=r(async e=>{let[t,n]=await e;if(!cm(t,n)&&ar(t,n))throw new U;return[t,n]},"waitForSuccessfulExit"),cm=r((e,t)=>e===void 0&&t===void 0,"isSubprocessErrorExit"),ar=r((e,t)=>e!==0||t!==null,"isFailedExit");var aa=r(({error:e,status:t,signal:n,output:o},{maxBuffer:i})=>{let s=lm(e,t,n),a=s?.code==="ETIMEDOUT",c=Qi(s,o,i);return{resultError:s,exitCode:t,signal:n,timedOut:a,isMaxBuffer:c}},"getExitResultSync"),lm=r((e,t,n)=>e!==void 0?e:ar(t,n)?new U:void 0,"getResultError");import{spawnSync as dm}from"node:child_process";var ca=r((e,t,n)=>{let{file:o,commandArguments:i,command:s,escapedCommand:a,startTime:c,verboseInfo:l,options:d,fileDescriptors:f}=fm(e,t,n),u=mm({file:o,commandArguments:i,options:d,command:s,escapedCommand:a,verboseInfo:l,fileDescriptors:f,startTime:c});return we(u,l,d)},"execaCoreSync"),fm=r((e,t,n)=>{let{command:o,escapedCommand:i,startTime:s,verboseInfo:a}=ct(e,t,n),c=um(n),{file:l,commandArguments:d,options:f}=Rt(e,t,c);pm(f);let u=Ns(f,a);return{file:l,commandArguments:d,command:o,escapedCommand:i,startTime:s,verboseInfo:a,options:f,fileDescriptors:u}},"handleSyncArguments"),um=r(e=>e.node&&!e.ipc?{...e,ipc:!1}:e,"normalizeSyncOptions"),pm=r(({ipc:e,ipcInput:t,detached:n,cancelSignal:o,killDescendants:i})=>{t&&Ve("ipcInput"),e&&Ve("ipc: true"),n&&Ve("detached: true"),i&&Ve("killDescendants: true"),o&&Ve("cancelSignal")},"validateSyncOptions"),Ve=r(e=>{throw new TypeError(`The "${e}" option cannot be used with synchronous methods.`)},"throwInvalidSyncOption"),mm=r(({file:e,commandArguments:t,options:n,command:o,escapedCommand:i,verboseInfo:s,fileDescriptors:a,startTime:c})=>{let l=hm({file:e,commandArguments:t,options:n,command:o,escapedCommand:i,fileDescriptors:a,startTime:c});if(l.failed)return l;let{resultError:d,exitCode:f,signal:u,timedOut:p,isMaxBuffer:m}=aa(l,n),{output:g,error:S=d}=na({fileDescriptors:a,syncResult:l,options:n,isMaxBuffer:m,verboseInfo:s}),w=g.map((E,x)=>J(E,n,x)),b=J(ra(g,n),n,"all");return Sm({error:S,exitCode:f,signal:u,timedOut:p,isMaxBuffer:m,stdio:w,all:b,options:n,command:o,escapedCommand:i,startTime:c})},"spawnSubprocessSync"),hm=r(({file:e,commandArguments:t,options:n,command:o,escapedCommand:i,fileDescriptors:s,startTime:a})=>{try{Zs(s,n);let c=gm(n);return dm(...Mt(e,t,c))}catch(c){return be({error:c,command:o,escapedCommand:i,fileDescriptors:s,options:n,startTime:a,isSync:!0})}},"runSubprocessSync"),gm=r(({encoding:e,maxBuffer:t,...n})=>({...n,encoding:"buffer",maxBuffer:vt(t)}),"normalizeSpawnSyncOptions"),Sm=r(({error:e,exitCode:t,signal:n,timedOut:o,isMaxBuffer:i,stdio:s,all:a,options:c,command:l,escapedCommand:d,startTime:f})=>e===void 0?Nt({command:l,escapedCommand:d,stdio:s,all:a,ipcOutput:[],options:c,startTime:f}):je({error:e,command:l,escapedCommand:d,timedOut:o,isCanceled:!1,isGracefullyCanceled:!1,isMaxBuffer:i,isForcefullyTerminated:!1,exitCode:t,signal:n,stdio:s,all:a,ipcOutput:[],options:c,startTime:f,isSync:!0}),"getSyncResult");import{once as cr,on as ym}from"node:events";var lr=Symbol("internalGetOneMessageOptions"),la=r(({anyProcess:e,channel:t,isSubprocess:n,ipc:o},i={})=>{let{reference:s=!0,filter:a}=i,{signal:c}=i[lr]??{};return ue({methodName:"getOneMessage",isSubprocess:n,ipc:o,isConnected:bt(e)}),bm({anyProcess:e,channel:t,isSubprocess:n,filter:a,reference:s,signal:c})},"getOneMessage"),bm=r(async({anyProcess:e,channel:t,isSubprocess:n,filter:o,reference:i,signal:s})=>{ht(t,i);let a=Z(e,t,n),c=new AbortController;wm(s,c);try{return await Promise.race([xm(a,o,c),Em(a,n,c),Tm(a,n,c)])}catch(l){throw pe(e),l}finally{c.abort(),gt(t,i)}},"getOneMessageAsync"),wm=r((e,t)=>{if(e!==void 0){if(e.aborted){t.abort();return}e.addEventListener("abort",()=>{t.abort()},{once:!0,signal:t.signal})}},"stopOnAbort"),xm=r(async(e,t,{signal:n})=>{if(t===void 0){let[o]=await cr(e,"message",{signal:n});return o}for await(let[o]of ym(e,"message",{signal:n}))if(t(o))return o},"getMessage"),Em=r(async(e,t,{signal:n})=>{await cr(e,"disconnect",{signal:n}),No(t)},"throwOnDisconnect"),Tm=r(async(e,t,{signal:n})=>{let[o]=await cr(e,"strict:error",{signal:n});throw mt(o,t)},"throwOnStrictError");import{once as da,on as Om}from"node:events";var dr=Symbol("internalGetEachMessageOptions"),ua=r((e,t={})=>{let{reference:n=!0}=t,{signal:o,shouldAwait:i=!e.isSubprocess}=t[dr]??{};return fr({...e,shouldAwait:i,reference:n,signal:o})},"getEachMessage"),fr=r(({anyProcess:e,waitProcess:t=e,channel:n,isSubprocess:o,ipc:i,shouldAwait:s,reference:a,signal:c})=>{ue({methodName:"getEachMessage",isSubprocess:o,ipc:i,isConnected:bt(e)}),ht(n,a);let l=Z(e,n,o),d=new AbortController,f={};return Am(c,d),Im(e,l,d),Dm({ipcEmitter:l,isSubprocess:o,controller:d,state:f}),Rm({anyProcess:e,waitProcess:t,channel:n,ipcEmitter:l,isSubprocess:o,shouldAwait:s,controller:d,state:f,reference:a})},"loopOnMessages"),Am=r((e,t)=>{if(e!==void 0){if(e.aborted){t.abort();return}e.addEventListener("abort",()=>{t.abort()},{once:!0,signal:t.signal})}},"stopOnAbort"),Im=r(async(e,t,n)=>{try{await da(t,"disconnect",{signal:n.signal}),n.abort()}catch{}},"stopOnDisconnect"),Dm=r(async({ipcEmitter:e,isSubprocess:t,controller:n,state:o})=>{try{let[i]=await da(e,"strict:error",{signal:n.signal});o.error=mt(i,t),n.abort()}catch{}},"abortOnStrictError"),Rm=r(async function*({anyProcess:e,waitProcess:t,channel:n,ipcEmitter:o,isSubprocess:i,shouldAwait:s,controller:a,state:c,reference:l}){try{for await(let[d]of Om(o,"message",{signal:a.signal}))fa(c),yield d}catch{fa(c)}finally{a.abort(),gt(n,l),i||pe(e),s&&await t}},"iterateOnMessages"),fa=r(({error:e})=>{if(e)throw e},"throwIfStrictError");import pa from"node:process";var ha=r((e,t,{ipc:n})=>{Object.assign(e,ma(t,!1,n,e))},"addIpcMethods"),ga=r(()=>{let e=pa,t=!0,n=pa.channel!==void 0;return{...ma(e,t,n),getCancelSignal:pi.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:n})}},"getIpcExport"),ma=r((e,t,n,o=e)=>({sendMessage:me.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:n}),getOneMessage:la.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:n}),getEachMessage:ua.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:n,waitProcess:o})}),"getIpcMethods");import{ChildProcess as Mm}from"node:child_process";import{PassThrough as Cm,Readable as Sa,Writable as ya,Duplex as ba}from"node:stream";var Oa=r(({error:e,command:t,escapedCommand:n,fileDescriptors:o,options:i,startTime:s,verboseInfo:a})=>{qn(o);let c=new Mm,l=Pm(c,o),d=be({error:e,command:t,escapedCommand:n,fileDescriptors:o,options:i,startTime:s,isSync:!1}),f=_m(d,a,i);return{subprocess:c,promise:f,all:i.all?l:void 0,convertedStreams:{readable:wa,writable:xa,duplex:Ea,readableStream:Lm,writableStream:Bm,transformStream:Fm,iterable:Ta,[Symbol.asyncIterator]:Ta}}},"handleEarlyError"),Pm=r((e,t)=>{let n=Ye(),o=Ye(),i=Ye(),s=Array.from({length:t.length-3},Ye),a=Ye(),c=[n,o,i,...s];return Object.assign(e,{stdin:n,stdout:o,stderr:i,stdio:c}),a},"createDummyStreams"),Ye=r(()=>{let e=new Cm;return e.end(),e},"createDummyStream"),wa=r(()=>new Sa({read(){}}),"readable"),xa=r(()=>new ya({write(){}}),"writable"),Ea=r(()=>new ba({read(){},write(){}}),"duplex"),Lm=r(()=>Sa.toWeb(wa()),"readableStream"),Bm=r(()=>ya.toWeb(xa()),"writableStream"),Fm=r(()=>ba.toWeb(Ea()),"transformStream"),Ta=r(async function*(){},"iterable"),_m=r(async(e,t,n)=>we(e,t,n),"handleDummyPromise");import{createReadStream as Aa,createWriteStream as Ia}from"node:fs";import{Buffer as Um}from"node:buffer";import{Readable as He,Writable as $m,Duplex as vm}from"node:stream";var Ra=r((e,t)=>Vt(Nm,e,t,!1),"handleStdioAsync"),Ke=r(({type:e,optionName:t})=>{throw new TypeError(`The \`${t}\` option cannot be ${q[e]}.`)},"forbiddenIfAsync"),Da={fileNumber:Ke,generator:ir,asyncGenerator:ir,nodeStream:r(({value:e})=>({stream:e}),"nodeStream"),webTransform({value:{transform:e,writableObjectMode:t,readableObjectMode:n}}){let o=t||n;return{stream:vm.fromWeb(e,{objectMode:o})}},duplex:r(({value:{transform:e}})=>({stream:e}),"duplex"),native(){}},Nm={input:{...Da,fileUrl:r(({value:e})=>({stream:Aa(e)}),"fileUrl"),filePath:r(({value:{file:e}})=>({stream:Aa(e)}),"filePath"),webStream:r(({value:e})=>({stream:He.fromWeb(e)}),"webStream"),iterable:r(({value:e})=>({stream:He.from(e)}),"iterable"),asyncIterable:r(({value:e})=>({stream:He.from(e)}),"asyncIterable"),string:r(({value:e})=>({stream:He.from(e)}),"string"),uint8Array:r(({value:e})=>({stream:He.from(Um.from(e))}),"uint8Array")},output:{...Da,fileUrl:r(({value:e})=>({stream:Ia(e)}),"fileUrl"),filePath:r(({value:{file:e,append:t}})=>({stream:Ia(e,t?{flags:"a"}:{})}),"filePath"),webStream:r(({value:e})=>({stream:$m.fromWeb(e)}),"webStream"),iterable:Ke,asyncIterable:Ke,string:Ke,uint8Array:Ke}};import{on as jm,once as Ma}from"node:events";import{PassThrough as km,getDefaultHighWaterMark as Gm}from"node:stream";import{finished as Ca}from"node:stream/promises";function se(e){if(!Array.isArray(e))throw new TypeError(`Expected an array, got \`${typeof e}\`.`);for(let i of e)pr(i);let t=e.some(({readableObjectMode:i})=>i),n=Wm(e,t),o=new ur({objectMode:t,writableHighWaterMark:n,readableHighWaterMark:n});for(let i of e)o.add(i);return o}r(se,"mergeStreams");var Wm=r((e,t)=>{if(e.length===0)return Gm(t);let n=e.filter(({readableObjectMode:o})=>o===t).map(({readableHighWaterMark:o})=>o);return Math.max(...n)},"getHighWaterMark"),ur=class extends km{static{r(this,"MergedStream")}#t=new Set([]);#n=new Set([]);#e=new Set([]);#r;#i=Symbol("unpipe");#o=new WeakMap;add(t){if(pr(t),this.#t.has(t))return;this.#t.add(t),this.#r??=zm(this,this.#t,this.#i);let n=Hm({passThroughStream:this,stream:t,streams:this.#t,ended:this.#n,aborted:this.#e,onFinished:this.#r,unpipeEvent:this.#i});this.#o.set(t,n),t.pipe(this,{end:!1})}async remove(t){if(pr(t),!this.#t.has(t))return!1;let n=this.#o.get(t);return n===void 0?!1:(this.#o.delete(t),t.unpipe(this),await n,!0)}},zm=r(async(e,t,n)=>{Qt(e,Fa);let o=new AbortController;try{await Promise.race([Vm(e,o),Ym(e,t,n,o)])}finally{o.abort(),Qt(e,-Fa)}},"onMergedStreamFinished"),Vm=r(async(e,{signal:t})=>{try{await Ca(e,{signal:t,cleanup:!0})}catch(n){throw Pa(e,n),n}},"onMergedStreamEnd"),Ym=r(async(e,t,n,{signal:o})=>{for await(let[i]of jm(e,"unpipe",{signal:o}))t.has(i)&&i.emit(n)},"onInputStreamsUnpipe"),pr=r(e=>{if(typeof e?.pipe!="function")throw new TypeError(`Expected a readable stream, got: \`${typeof e}\`.`)},"validateStream"),Hm=r(async({passThroughStream:e,stream:t,streams:n,ended:o,aborted:i,onFinished:s,unpipeEvent:a})=>{Qt(e,_a);let c=new AbortController;try{await Promise.race([Km(s,t,c),Xm({passThroughStream:e,stream:t,streams:n,ended:o,aborted:i,controller:c}),Jm({stream:t,streams:n,ended:o,aborted:i,unpipeEvent:a,controller:c})])}finally{c.abort(),Qt(e,-_a)}n.size>0&&n.size===o.size+i.size&&(o.size===0&&i.size>0?mr(e):Qm(e))},"endWhenStreamsDone"),Km=r(async(e,t,{signal:n})=>{try{await e,n.aborted||mr(t)}catch(o){n.aborted||Pa(t,o)}},"afterMergedStreamFinished"),Xm=r(async({passThroughStream:e,stream:t,streams:n,ended:o,aborted:i,controller:{signal:s}})=>{try{await Ca(t,{signal:s,cleanup:!0,readable:!0,writable:!1}),n.has(t)&&o.add(t)}catch(a){if(s.aborted||!n.has(t))return;La(a)?i.add(t):Ba(e,a)}},"onInputStreamEnd"),Jm=r(async({stream:e,streams:t,ended:n,aborted:o,unpipeEvent:i,controller:{signal:s}})=>{if(await Ma(e,i,{signal:s}),!e.readable)return Ma(s,"abort",{signal:s});t.delete(e),n.delete(e),o.delete(e)},"onInputStreamUnpipe"),Qm=r(e=>{e.writable&&e.end()},"endStream"),Pa=r((e,t)=>{La(t)?mr(e):Ba(e,t)},"errorOrAbortStream"),La=r(e=>e?.code==="ERR_STREAM_PREMATURE_CLOSE","isAbortError"),mr=r(e=>{(e.readable||e.writable)&&e.destroy()},"abortStream"),Ba=r((e,t)=>{e.destroyed||(e.once("error",Zm),e.destroy(t))},"errorStream"),Zm=r(()=>{},"noop"),Qt=r((e,t)=>{let n=e.getMaxListeners();n!==0&&n!==Number.POSITIVE_INFINITY&&e.setMaxListeners(n+t)},"updateMaxListeners"),Fa=2,_a=1;import{finished as Ua}from"node:stream/promises";var Te=r((e,t)=>{e.pipe(t),qm(e,t),eh(e,t)},"pipeStreams"),qm=r(async(e,t)=>{if(!(_(e)||_(t))){try{await Ua(e,{cleanup:!0,readable:!0,writable:!1})}catch{}hr(t)}},"onSourceFinish"),hr=r(e=>{e.writable&&e.end()},"endDestinationStream"),eh=r(async(e,t)=>{if(!(_(e)||_(t))){try{await Ua(t,{cleanup:!0,readable:!1,writable:!0})}catch{}gr(e)}},"onDestinationFinish"),gr=r(e=>{e.readable&&e.destroy()},"abortSourceStream");var $a=r((e,t,n)=>{let o=new Map;for(let[i,{stdioItems:s,direction:a}]of Object.entries(t)){let c=s.filter(({type:d})=>B.has(d));for(let{stream:d}of c)th(e,d,a,i);let l=s.filter(({type:d})=>!B.has(d));for(let{stream:d}of l)rh({subprocess:e,stream:d,direction:a,fdNumber:i,pipeGroups:o,controller:n})}for(let[i,s]of o){let a=s.length===1?s[0]:se(s);Te(a,i)}},"pipeOutputAsync"),th=r((e,t,n,o)=>{n==="output"?Te(e.stdio[o],t):Te(t,e.stdio[o]);let i=nh[o];i!==void 0&&(e[i]=t),e.stdio[o]=t},"pipeTransform"),nh=["stdin","stdout","stderr"],rh=r(({subprocess:e,stream:t,direction:n,fdNumber:o,pipeGroups:i,controller:s})=>{if(t===void 0)return;oh(t,s);let[a,c]=n==="output"?[t,e.stdio[o]]:[e.stdio[o],t],l=i.get(a)??[];i.set(a,[...l,c])},"pipeStdioItem"),oh=r((e,{signal:t})=>{_(e)&&ne(e,ih,t)},"setStandardStreamMaxListeners"),ih=2;import Zt from"node:process";import{execFile as sh}from"node:child_process";import va from"node:path/win32";var Na=Zt.platform==="win32",ja=r(e=>e.killDescendants&&!Na?{...e,detached:!0}:e,"getSpawnOptions"),ka=r((e,{killDescendants:t})=>t?(Na?ch:ah).bind(void 0,e):e.kill.bind(e),"getKillFunction"),ah=r((e,t)=>{if(e.pid===void 0)return!1;try{return Zt.kill(-e.pid,t)}catch{return e.kill(t)}},"killDescendantsUnix"),ch=r((e,t)=>{if(e.pid===void 0)return!1;let n=lh();return n===void 0?e.kill(t):(sh(n,["/pid",`${e.pid}`,"/T","/F"],o=>{o&&e.kill(t)}),!0)},"killDescendantsWindows"),lh=r(()=>{let e=[Zt.env.SystemRoot,Zt.env.windir].find(t=>t&&dh(t));return e===void 0?void 0:va.join(e,"System32","taskkill.exe")},"getTaskkillFile"),dh=r(e=>{let{root:t}=va.parse(e);return/^[a-z]:[/\\]/i.test(t)},"isWindowsDriveAbsolutePath");var ee=[];ee.push("SIGHUP","SIGINT","SIGTERM"),process.platform!=="win32"&&ee.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT"),process.platform==="linux"&&ee.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var qt=r(e=>!!e&&typeof e=="object"&&typeof e.removeListener=="function"&&typeof e.emit=="function"&&typeof e.reallyExit=="function"&&typeof e.listeners=="function"&&typeof e.kill=="function"&&typeof e.pid=="number"&&typeof e.on=="function","processOk"),Sr=Symbol.for("signal-exit emitter"),yr=globalThis,fh=Object.defineProperty.bind(Object),br=class{static{r(this,"Emitter")}emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(yr[Sr])return yr[Sr];fh(yr,Sr,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(t,n){this.listeners[t].push(n)}removeListener(t,n){let o=this.listeners[t],i=o.indexOf(n);i!==-1&&(i===0&&o.length===1?o.length=0:o.splice(i,1))}emit(t,n,o){if(this.emitted[t])return!1;this.emitted[t]=!0;let i=!1;for(let s of this.listeners[t])i=s(n,o)===!0||i;return t==="exit"&&(i=this.emit("afterExit",n,o)||i),i}},en=class{static{r(this,"SignalExitBase")}},uh=r(e=>({onExit(t,n){return e.onExit(t,n)},load(){return e.load()},unload(){return e.unload()}}),"signalExitWrap"),wr=class extends en{static{r(this,"SignalExitFallback")}onExit(){return()=>{}}load(){}unload(){}},xr=class extends en{static{r(this,"SignalExit")}#t=Er.platform==="win32"?"SIGINT":"SIGHUP";#n=new br;#e;#r;#i;#o={};#s=!1;constructor(t){super(),this.#e=t,this.#o={};for(let n of ee)this.#o[n]=()=>{let o=this.#e.listeners(n),{count:i}=this.#n,s=t;if(typeof s.__signal_exit_emitter__=="object"&&typeof s.__signal_exit_emitter__.count=="number"&&(i+=s.__signal_exit_emitter__.count),o.length===i){this.unload();let a=this.#n.emit("exit",null,n),c=n==="SIGHUP"?this.#t:n;a||t.kill(t.pid,c)}};this.#i=t.reallyExit,this.#r=t.emit}onExit(t,n){if(!qt(this.#e))return()=>{};this.#s===!1&&this.load();let o=n?.alwaysLast?"afterExit":"exit";return this.#n.on(o,t),()=>{this.#n.removeListener(o,t),this.#n.listeners.exit.length===0&&this.#n.listeners.afterExit.length===0&&this.unload()}}load(){if(!this.#s){this.#s=!0,this.#n.count+=1;for(let t of ee)try{let n=this.#o[t];n&&this.#e.on(t,n)}catch{}this.#e.emit=(t,...n)=>this.#c(t,...n),this.#e.reallyExit=t=>this.#a(t)}}unload(){this.#s&&(this.#s=!1,ee.forEach(t=>{let n=this.#o[t];if(!n)throw new Error("Listener not defined for signal: "+t);try{this.#e.removeListener(t,n)}catch{}}),this.#e.emit=this.#r,this.#e.reallyExit=this.#i,this.#n.count-=1)}#a(t){return qt(this.#e)?(this.#e.exitCode=t||0,this.#n.emit("exit",this.#e.exitCode,null),this.#i.call(this.#e,this.#e.exitCode)):0}#c(t,...n){let o=this.#r;if(t==="exit"&&qt(this.#e)){typeof n[0]=="number"&&(this.#e.exitCode=n[0]);let i=o.call(this.#e,t,...n);return this.#n.emit("exit",this.#e.exitCode,null),i}else return o.call(this.#e,t,...n)}},Er=globalThis.process,{onExit:Ga,load:FD,unload:_D}=uh(qt(Er)?new xr(Er):new wr);import{addAbortListener as ph}from"node:events";var Wa=r((e,{cleanup:t,detached:n},{signal:o})=>{if(!t||n)return;let i=Ga(()=>{e()});ph(o,()=>{i()})},"cleanupOnExit");var tn=r(()=>({readableDestroy:new WeakMap,writableFinal:new WeakMap,writableDestroy:new WeakMap}),"initializeConcurrentStreams"),Xe=r((e,t,n)=>{let o=e[n];o.has(t)||o.set(t,[]);let i=o.get(t),s=k();return i.push(s),{resolve:s.resolve.bind(s),promises:i}},"addConcurrentStream"),Oe=r(async({resolve:e,promises:t},n)=>{e();let[o]=await Promise.race([Promise.allSettled([!0,n]),Promise.all([!1,...t])]);return!o},"waitForConcurrentStreams");import{on as mh}from"node:events";import{getDefaultHighWaterMark as hh}from"node:stream";var nn=r(({subprocessStdout:e,subprocess:t,binary:n,shouldEncode:o,encoding:i,preserveNewlines:s})=>{let a=new AbortController;return gh(t,a),za({stream:e,controller:a,binary:n,shouldEncode:!e.readableObjectMode&&o,encoding:i,shouldSplit:!e.readableObjectMode,preserveNewlines:s})},"iterateOnSubprocessStream"),gh=r(async(e,t)=>{try{await e}catch{}finally{t.abort()}},"stopReadingOnExit"),Tr=r(({stream:e,onStreamEnd:t,lines:n,encoding:o,stripFinalNewline:i,allMixed:s})=>{let a=new AbortController;Sh(t,a,e);let c=e.readableObjectMode&&!s;return za({stream:e,controller:a,binary:o==="buffer",shouldEncode:!c,encoding:o,shouldSplit:!c&&n,preserveNewlines:!i})},"iterateForResult"),Sh=r(async(e,t,n)=>{try{await e}catch{n.destroy()}finally{t.abort()}},"stopReadingOnStreamEnd"),za=r(({stream:e,controller:t,binary:n,shouldEncode:o,encoding:i,shouldSplit:s,preserveNewlines:a})=>{let c=mh(e,"data",{signal:t.signal,highWaterMark:Va,highWatermark:Va});return yh({onStdoutChunk:c,controller:t,binary:n,shouldEncode:o,encoding:i,shouldSplit:s,preserveNewlines:a})},"iterateOnStream"),Or=hh(!0),Va=Or,yh=r(async function*({onStdoutChunk:e,controller:t,binary:n,shouldEncode:o,encoding:i,shouldSplit:s,preserveNewlines:a}){let c=bh({binary:n,shouldEncode:o,encoding:i,shouldSplit:s,preserveNewlines:a});try{for await(let[l]of e)yield*ie(l,c,0)}catch(l){if(!t.signal.aborted)throw l}finally{yield*ze(c)}},"iterateOnData"),bh=r(({binary:e,shouldEncode:t,encoding:n,shouldSplit:o,preserveNewlines:i})=>[Ht(e,n,!t),Yt(e,i,!o,{})].filter(Boolean),"getGenerators");var Ae=r((e,t,{from:n,binary:o=!1,preserveNewlines:i=!1}={})=>{let s=o||M.has(t),a=Ee(e,n),c=nn({subprocessStdout:a,subprocess:e,binary:s,shouldEncode:!0,encoding:t,preserveNewlines:i});return wh(c,a,e)},"createIterable"),wh=r(async function*(e,t,n){try{yield*e}finally{t.readable&&t.destroy(),await n}},"iterateOnStdoutData");import{finished as xh}from"node:stream/promises";var Je=r(async(e,t,n,{isSameDirection:o,stopOnExit:i=!1}={})=>{let s=Eh(e,n),a=new AbortController;try{await Promise.race([...i?[n.exitPromise]:[],xh(e,{cleanup:!0,signal:a.signal})])}catch(c){s.stdinCleanedUp||Ah(c,t,n,o)}finally{a.abort()}},"waitForStream"),Eh=r((e,{originalStreams:t,subprocess:n})=>{let[o]=t,i={stdinCleanedUp:!1};return e===o&&Th(e,n,i),i},"handleStdinDestroy"),Th=r((e,t,n)=>{let{_destroy:o}=e;e._destroy=(...i)=>{Oh(t,n),o.call(e,...i)}},"spyOnStdinDestroy"),Oh=r(({exitCode:e,signalCode:t},n)=>{(e!==null||t!==null)&&(n.stdinCleanedUp=!0)},"setStdinCleanedUp"),Ah=r((e,t,n,o)=>{if(!Ih(e,t,n,o))throw e},"handleStreamError"),Ih=r((e,t,n,o=!0)=>n.propagating?Ya(e)||Ie(e):(n.propagating=!0,Ar(n,t)===o?Ya(e):Ie(e)),"shouldIgnoreStreamError"),Ar=r(({fileDescriptors:e},t)=>t!=="all"&&e[t].direction==="input","isInputFileDescriptor"),Ie=r(e=>e?.code==="ERR_STREAM_PREMATURE_CLOSE","isStreamAbort"),Ya=r(e=>e?.code==="EPIPE","isStreamEpipe");import{finished as Ha}from"node:stream/promises";var Ir=r(async e=>{if(e!==void 0)try{await Dr(e)}catch{}},"safeWaitForSubprocessStdin"),Ka=r(async e=>{if(e!==void 0)try{await Rr(e)}catch{}},"safeWaitForSubprocessStdout"),Dr=r(async e=>{await Ha(e,{cleanup:!0,readable:!1,writable:!0})},"waitForSubprocessStdin"),Rr=r(async e=>{await Ha(e,{cleanup:!0,readable:!0,writable:!1})},"waitForSubprocessStdout"),rn=r(async(e,t)=>{if(await e,t)throw t},"waitForSubprocess"),on=r((e,t,n)=>{n&&!Ie(n)?e.destroy(n):t&&e.destroy()},"destroyOtherStream");import{Readable as Dh}from"node:stream";import{callbackify as Rh}from"node:util";var sn=r(({subprocess:e,concurrentStreams:t,encoding:n},{from:o,binary:i=!0,preserveNewlines:s=!0}={})=>{let a=i||M.has(n),{subprocessStdout:c,waitReadableDestroy:l}=Mr(e,o,t),{readableEncoding:d,readableObjectMode:f,readableHighWaterMark:u}=Cr(c,a),{read:p,onStdoutDataDone:m}=Pr({subprocessStdout:c,subprocess:e,binary:a,encoding:n,preserveNewlines:s}),g=new Dh({read:p,destroy:Rh(Br.bind(void 0,{subprocessStdout:c,subprocess:e,waitReadableDestroy:l})),highWaterMark:u,objectMode:f,encoding:d});return Lr({subprocessStdout:c,onStdoutDataDone:m,readable:g,subprocess:e}),g},"createReadable"),Mr=r((e,t,n)=>{let o=Ee(e,t),i=Xe(n,o,"readableDestroy");return{subprocessStdout:o,waitReadableDestroy:i}},"getSubprocessStdout"),Cr=r(({readableEncoding:e,readableObjectMode:t,readableHighWaterMark:n},o)=>o?{readableEncoding:e,readableObjectMode:t,readableHighWaterMark:n}:{readableEncoding:e,readableObjectMode:!0,readableHighWaterMark:Or},"getReadableOptions"),Pr=r(({subprocessStdout:e,subprocess:t,binary:n,encoding:o,preserveNewlines:i})=>{let s=k(),a=nn({subprocessStdout:e,subprocess:t,binary:n,shouldEncode:!n,encoding:o,preserveNewlines:i});return{read(){Mh(this,a,s)},onStdoutDataDone:s}},"getReadableMethods"),Mh=r(async(e,t,n)=>{try{let{value:o,done:i}=await t.next();i?n.resolve():e.push(o)}catch{}},"onRead"),Lr=r(async({subprocessStdout:e,onStdoutDataDone:t,readable:n,subprocess:o,subprocessStdin:i})=>{try{await Rr(e),await o,await Ir(i),await t,n.readable&&n.push(null)}catch(s){await Ir(i),Xa(n,await Ch(o,s))}},"onStdoutFinished"),Ch=r(async(e,t)=>{if(t.code!=="ERR_STREAM_PREMATURE_CLOSE")return t;try{await e}catch(n){return n}return t},"getPrematureCloseError"),Br=r(async({subprocessStdout:e,subprocess:t,waitReadableDestroy:n},o)=>{await Oe(n,t)&&(Xa(e,o),await rn(t,o))},"onReadableDestroy"),Xa=r((e,t)=>{on(e,e.readable,t)},"destroyOtherReadable");import{Readable as Ph,Writable as Lh,Duplex as Bh}from"node:stream";var an=r((e,t)=>Ph.toWeb(e.readable(t)),"createReadableStream"),Ja=r((e,t)=>Lh.toWeb(e.writable(t)),"createWritableStream"),Qa=r((e,t)=>Bh.toWeb(e.duplex(t)),"createTransformStream");var qa=r(({source:e,sourcePromise:t,boundOptions:n,createNested:o},...i)=>{let s=at(),{destination:a,destinationStream:c,destinationError:l,from:d,unpipeSignal:f}=Fh(n,o,i),{sourceStream:u,sourceError:p}=Uh(e,d),{options:m,fileDescriptors:g}=W.get(e);return{sourcePromise:t,sourceStream:u,sourceOptions:m,sourceError:p,destination:a,destinationStream:c,destinationError:l,unpipeSignal:f,fileDescriptors:g,startTime:s}},"normalizePipeArguments"),Fh=r((e,t,n)=>{try{let{destination:o,pipeOptions:{from:i,to:s,unpipeSignal:a}={}}=_h(e,t,...n),c=zt(o,s);return{destination:o,destinationStream:c,from:i,unpipeSignal:a}}catch(o){return{destinationError:o}}},"getDestinationStream"),_h=r((e,t,n,...o)=>{if(Array.isArray(n))return{destination:t(Za,e)(n,...o),pipeOptions:e};if(typeof n=="string"||n instanceof URL||gn(n)){if(Object.keys(e).length>0)throw new TypeError('Please use .pipe("file", ..., options) or .pipe(execa("file", ..., options)) instead of .pipe(options)("file", ...).');let[i,s,a]=Qe(n,...o);return{destination:t(Za)(i,s,a),pipeOptions:a}}if(W.has(n)){if(Object.keys(e).length>0)throw new TypeError("Please use .pipe(options)`command` or .pipe($(options)`command`) instead of .pipe(options)($`command`).");return{destination:n,pipeOptions:o[0]}}throw new TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${n}`)},"getDestination"),Za=r(({options:e})=>({options:{...e,stdin:"pipe",piped:!0}}),"mapDestinationArguments"),Uh=r((e,t)=>{try{return{sourceStream:Ee(e,t)}}catch(n){return{sourceError:n}}},"getSourceStream");var tc=r(({sourceStream:e,sourceError:t,destinationStream:n,destinationError:o,fileDescriptors:i,sourceOptions:s,startTime:a})=>{let c=$h({sourceStream:e,sourceError:t,destinationStream:n,destinationError:o});if(c!==void 0)throw Fr({error:c,fileDescriptors:i,sourceOptions:s,startTime:a})},"handlePipeArgumentsError"),$h=r(({sourceStream:e,sourceError:t,destinationStream:n,destinationError:o})=>{if(t!==void 0&&o!==void 0)return o;if(o!==void 0)return gr(e),o;if(t!==void 0)return hr(n),t},"getPipeArgumentsError"),Fr=r(({error:e,fileDescriptors:t,sourceOptions:n,startTime:o})=>be({error:e,command:ec,escapedCommand:ec,fileDescriptors:t,options:n,startTime:o,isSync:!1}),"createNonCommandError"),ec="source.pipe(destination)";var nc=r(async e=>{let[{status:t,reason:n,value:o=n},{status:i,reason:s,value:a=s}]=await e;if(a.pipedFrom.includes(o)||a.pipedFrom.push(o),i==="rejected")throw a;if(t==="rejected")throw o;return a},"waitForBothSubprocesses");import{finished as vh}from"node:stream/promises";var rc=r((e,t,n)=>{let o=cn.has(t)?jh(e,t):Nh(e,t);return ne(e,Gh,n.signal),ne(t,Wh,n.signal),kh(t),o},"pipeSubprocessStream"),Nh=r((e,t)=>{let n=se([e]);return Te(n,t),cn.set(t,n),n},"pipeFirstSubprocessStream"),jh=r((e,t)=>{let n=cn.get(t);return n.add(e),n},"pipeMoreSubprocessStream"),kh=r(async e=>{try{await vh(e,{cleanup:!0,readable:!1,writable:!0})}catch{}cn.delete(e)},"cleanupMergedStreamsMap"),cn=new WeakMap,Gh=2,Wh=1;import{aborted as zh}from"node:util";var oc=r((e,t)=>e===void 0?[]:[Vh(e,t)],"unpipeOnAbort"),Vh=r(async(e,{sourceStream:t,mergedStream:n,fileDescriptors:o,sourceOptions:i,startTime:s})=>{await zh(e,t),await n.remove(t);let a=new Error("Pipe canceled by `unpipeSignal` option.");throw Fr({error:a,fileDescriptors:o,sourceOptions:i,startTime:s})},"unpipeOnSignalAbort");var ln=r((e,...t)=>{if(T(t[0]))return ln.bind(void 0,{...e,boundOptions:{...e.boundOptions,...t[0]}});let{destination:n,...o}=qa(e,...t),i=new AbortController,s=og({...o,destination:n,pipeFailureController:i});return s.pipe=ln.bind(void 0,{...e,source:n,sourcePromise:s,boundOptions:{}}),Yh(s,n,i.signal),s},"pipeToSubprocess"),Yh=r((e,t,n)=>{t!==void 0&&(Hh(e,t),Qh(e,t,n))},"forwardDestinationMethods"),Hh=r((e,t)=>{let n=W.get(t);W.set(e,n),e.stdio=t.stdio,e.all=t.all;let{options:{encoding:o}}=n,i=tn();e[Symbol.asyncIterator]=Ae.bind(void 0,e,o,{}),e.iterable=Ae.bind(void 0,e,o),e.readable=Xh.bind(void 0,e,{subprocess:e,concurrentStreams:i,encoding:o}),e.readableStream=an.bind(void 0,e),Kh(e,t)},"forwardReadableMethods"),Kh=r((e,t)=>{if(t.all===void 0){e.all=void 0;return}Object.defineProperty(e,"all",{get(){ic(e,t.all);let n=e.readable({from:"all"});return ic(e,n),n},enumerable:!0,configurable:!0})},"forwardAll"),ic=r((e,t)=>{Object.defineProperty(e,"all",{value:t,writable:!0,enumerable:!0,configurable:!0})},"setAllProperty"),Xh=r((e,t,...n)=>{let o=sn(t,...n);return Jh(e,o),o},"createPipeReadable"),Jh=r(async(e,t)=>{try{await e}catch(n){t.destroy(n)}},"destroyOnPipeFailure"),Qh=r((e,t,n)=>{e.sendMessage=t.sendMessage,e.getOneMessage=Zh.bind(void 0,t,n),e.getEachMessage=tg.bind(void 0,e,t,n)},"forwardIpcMethods"),Zh=r((e,t,...n)=>{let o=new AbortController,i=e.getOneMessage(...sc(n,o.signal,lr));return qh(t,i,o)},"getOnePipeMessage"),qh=r(async(e,t,n)=>{try{return await Promise.race([t,eg(e,n.signal)])}finally{n.abort()}},"waitForOnePipeMessage"),eg=r((e,t)=>new Promise((n,o)=>{if(e.aborted){o(e.reason);return}e.addEventListener("abort",()=>{o(e.reason)},{once:!0,signal:t})}),"getSignalRejection"),tg=r((e,t,n,...o)=>{let i=new AbortController,s=t.getEachMessage(...sc(o,i.signal,dr));return rg(n,i),ng(e,s,i)},"getEachPipeMessage"),ng=r(async function*(e,t,n){try{yield*t}finally{n.abort(),await e}},"iterateOnPipeMessages"),sc=r((e,t,n)=>{if(e[0]===null)return e;let[o]=e;return[{...o,[n]:{signal:t,shouldAwait:!1}}]},"addPipeOptions"),rg=r((e,t)=>{if(e.aborted){t.abort();return}e.addEventListener("abort",()=>{t.abort()},{once:!0,signal:t.signal})},"abortOnSignal"),og=r(async({sourcePromise:e,sourceStream:t,sourceOptions:n,sourceError:o,destination:i,destinationStream:s,destinationError:a,unpipeSignal:c,fileDescriptors:l,startTime:d,pipeFailureController:f})=>{let u=new AbortController;try{let p=ig(e,i);tc({sourceStream:t,sourceError:o,destinationStream:s,destinationError:a,fileDescriptors:l,sourceOptions:n,startTime:d});let m=rc(t,s,u);return await Promise.race([nc(p),...oc(c,{sourceStream:t,mergedStream:m,sourceOptions:n,fileDescriptors:l,startTime:d})])}catch(p){throw f.abort(p),p}finally{u.abort()}},"handlePipePromise"),ig=r((e,t)=>Promise.allSettled([e,t]),"getSubprocessPromises");import{setImmediate as sg}from"node:timers/promises";var cc=r(async({stream:e,onStreamEnd:t,fdNumber:n,encoding:o,buffer:i,maxBuffer:s,lines:a,allMixed:c,stripFinalNewline:l,verboseInfo:d,streamInfo:f})=>{let u=ag({stream:e,onStreamEnd:t,fdNumber:n,encoding:o,allMixed:c,verboseInfo:d,streamInfo:f});if(!i){await Promise.all([cg(e),u]);return}let p=er(l,n),m=Tr({stream:e,onStreamEnd:t,lines:a,encoding:o,stripFinalNewline:p,allMixed:c}),[g]=await Promise.all([lg({stream:e,iterable:m,fdNumber:n,encoding:o,maxBuffer:s,lines:a}),u]);return g},"getStreamOutput"),ag=r(async({stream:e,onStreamEnd:t,fdNumber:n,encoding:o,allMixed:i,verboseInfo:s,streamInfo:{fileDescriptors:a}})=>{if(!Jt({stdioItems:a[n]?.stdioItems,encoding:o,verboseInfo:s,fdNumber:n}))return;let c=Tr({stream:e,onStreamEnd:t,lines:!0,encoding:o,stripFinalNewline:!0,allMixed:i});await ea(c,e,n,s)},"logOutputAsync"),cg=r(async e=>{await sg(),e.readableFlowing===null&&e.resume()},"resumeStream"),lg=r(async({stream:e,stream:{readableObjectMode:t},iterable:n,fdNumber:o,encoding:i,maxBuffer:s,lines:a})=>{try{return t||a?await Ft(n,{maxBuffer:s}):i==="buffer"?new Uint8Array(await _t(n,{maxBuffer:s})):await $t(n,{maxBuffer:s})}catch(c){return ac(Ki({error:c,stream:e,readableObjectMode:t,lines:a,encoding:i,fdNumber:o}))}},"getStreamContents"),_r=r(async e=>{try{return await e}catch(t){return ac(t)}},"getBufferedData"),ac=r(({bufferedData:e})=>Yr(e)?new Uint8Array(e):e,"handleBufferedData");var lc=r(({subprocess:e,encoding:t,buffer:n,maxBuffer:o,lines:i,stripFinalNewline:s,verboseInfo:a,streamInfo:c})=>e.stdio.map((l,d)=>Ur({stream:l,fdNumber:d,encoding:t,buffer:n[d],maxBuffer:o[d],lines:i[d],allMixed:!1,stripFinalNewline:s,verboseInfo:a,streamInfo:c})),"waitForStdioStreams"),Ur=r(async({stream:e,fdNumber:t,encoding:n,buffer:o,maxBuffer:i,lines:s,allMixed:a,stripFinalNewline:c,verboseInfo:l,streamInfo:d})=>{if(!e)return;let f=Je(e,t,d);if(Ar(d,t)){await f;return}let[u]=await Promise.all([cc({stream:e,onStreamEnd:f,fdNumber:t,encoding:n,buffer:o,maxBuffer:i,lines:s,allMixed:a,stripFinalNewline:c,verboseInfo:l,streamInfo:d}),f]);return u},"waitForSubprocessStream");var dc=r(({stdout:e,stderr:t},{all:n})=>n&&(e||t)?se([e,t].filter(Boolean)):void 0,"makeAllStream"),fc=r(({subprocess:e,all:t,encoding:n,buffer:o,maxBuffer:i,lines:s,stripFinalNewline:a,verboseInfo:c,streamInfo:l})=>Ur({...dg(e,t,o),fdNumber:"all",encoding:n,maxBuffer:i[1]+i[2],lines:s[1]||s[2],allMixed:fg(e,t),stripFinalNewline:a,verboseInfo:c,streamInfo:l}),"waitForAllStream"),dg=r(({stdout:e,stderr:t},n,[,o,i])=>{let s=o||i;return s?o?i?{stream:n,buffer:s}:{stream:e,buffer:s}:{stream:t,buffer:s}:{stream:n,buffer:s}},"getAllStream"),fg=r(({stdout:e,stderr:t},n)=>n&&e&&t&&e.readableObjectMode!==t.readableObjectMode,"getAllMixed");var uc=r(e=>le(e,"ipc"),"shouldLogIpc"),pc=r((e,t)=>{let n=st(e);j({type:"ipc",verboseMessage:n,fdNumber:"ipc",verboseInfo:t})},"logIpcOutput");var mc=r(async({subprocess:e,buffer:t,maxBuffer:n,ipc:o,ipcOutput:i,verboseInfo:s})=>{if(!o)return i;let a=uc(s),c=H(t,"ipc"),l=H(n,"ipc");for await(let d of fr({anyProcess:e,channel:e.channel,isSubprocess:!1,ipc:o,shouldAwait:!1,reference:!0}))c&&(Xi(e,i,l),i.push(d)),a&&pc(d,s);return i},"waitForIpcOutput"),hc=r(async(e,t)=>(await Promise.allSettled([e]),t),"getBufferedIpcOutput");import{once as ug}from"node:events";var gc=r(async({subprocess:e,kill:t,all:n,options:{encoding:o,buffer:i,maxBuffer:s,lines:a,timeoutDuration:c,cancelSignal:l,gracefulCancel:d,forceKillAfterDelay:f,stripFinalNewline:u,ipc:p,ipcInput:m},context:g,verboseInfo:S,fileDescriptors:w,originalStreams:b,onInternalError:E,controller:x})=>{let D=ia(e,g),A={originalStreams:b,fileDescriptors:w,subprocess:e,exitPromise:D,propagating:!1},R=lc({subprocess:e,encoding:o,buffer:i,maxBuffer:s,lines:a,stripFinalNewline:u,verboseInfo:S,streamInfo:A}),C=fc({subprocess:e,all:n,encoding:o,buffer:i,maxBuffer:s,lines:a,stripFinalNewline:u,verboseInfo:S,streamInfo:A}),N=[],F=mc({subprocess:e,buffer:i,maxBuffer:s,ipc:p,ipcOutput:N,verboseInfo:S}),y=pg(b,e,A),I=mg(w,A);try{return await Promise.race([Promise.all([{},sa(D),Promise.all(R),C,F,Ei(e,m,p),...y,...I]),E,hg(e,x),...Si(t,c,g,x),...vo({kill:t,cancelSignal:l,gracefulCancel:d,context:g,controller:x}),...hi({subprocess:e,kill:t,cancelSignal:l,gracefulCancel:d,forceKillAfterDelay:f,context:g,controller:x})])}catch(P){return g.terminationReason??="other",Promise.all([{error:P},D,Promise.all(R.map(V=>_r(V))),_r(C),hc(F,N),Promise.allSettled(y),Promise.allSettled(I)])}},"waitForSubprocessResult"),pg=r((e,t,n)=>e.map((o,i)=>o===t.stdio[i]?void 0:Je(o,i,n)),"waitForOriginalStreams"),mg=r((e,t)=>e.flatMap(({stdioItems:n},o)=>n.filter(({value:i,stream:s=i})=>v(s,{checkOpen:!1})&&!_(s)).map(({type:i,value:s,stream:a=s})=>Je(a,o,t,{isSameDirection:B.has(i),stopOnExit:i==="native"}))),"waitForCustomStreamsEnd"),hg=r(async(e,{signal:t})=>{let[n]=await ug(e,"error",{signal:t});throw n},"throwOnSubprocessError");import{Writable as gg}from"node:stream";import{callbackify as Sc}from"node:util";var bc=r(({subprocess:e,concurrentStreams:t},{to:n}={})=>{let{subprocessStdin:o,waitWritableFinal:i,waitWritableDestroy:s}=$r(e,n,t),a=new gg({...vr(o,e,i),destroy:Sc(jr.bind(void 0,{subprocessStdin:o,subprocess:e,waitWritableFinal:i,waitWritableDestroy:s})),highWaterMark:o.writableHighWaterMark,objectMode:o.writableObjectMode});return Nr(o,a,void 0,e),a},"createWritable"),$r=r((e,t,n)=>{let o=zt(e,t),i=Xe(n,o,"writableFinal"),s=Xe(n,o,"writableDestroy");return{subprocessStdin:o,waitWritableFinal:i,waitWritableDestroy:s}},"getSubprocessStdin"),vr=r((e,t,n)=>({write:Sg.bind(void 0,e),final:Sc(yg.bind(void 0,e,t,n))}),"getWritableMethods"),Sg=r((e,t,n,o)=>{e.write(t,n)?o():e.once("drain",o)},"onWrite"),yg=r(async(e,t,n)=>{await Oe(n,t)&&(e.writable&&e.end(),await t)},"onWritableFinal"),Nr=r(async(e,t,n,o)=>{try{await Dr(e),await o,t.writable&&t.end()}catch(i){await Ka(n),yc(t,await bg(o,i))}},"onStdinFinished"),bg=r(async(e,t)=>{if(!wg(t))return t;try{await e}catch(n){return n}return t},"getSubprocessError"),wg=r(e=>e===void 0||Ie(e),"shouldUseSubprocessError"),jr=r(async({subprocessStdin:e,subprocess:t,waitWritableFinal:n,waitWritableDestroy:o},i)=>{await Oe(n,t),await Oe(o,t)&&(yc(e,i),await rn(t,i))},"onWritableDestroy"),yc=r((e,t)=>{on(e,e.writable,t)},"destroyOtherWritable");import{Duplex as xg}from"node:stream";import{callbackify as Eg}from"node:util";var wc=r(({subprocess:e,concurrentStreams:t,encoding:n},{from:o,to:i,binary:s=!0,preserveNewlines:a=!0}={})=>{let c=s||M.has(n),{subprocessStdout:l,waitReadableDestroy:d}=Mr(e,o,t),{subprocessStdin:f,waitWritableFinal:u,waitWritableDestroy:p}=$r(e,i,t),{readableEncoding:m,readableObjectMode:g,readableHighWaterMark:S}=Cr(l,c),{read:w,onStdoutDataDone:b}=Pr({subprocessStdout:l,subprocess:e,binary:c,encoding:n,preserveNewlines:a}),E=new xg({read:w,...vr(f,e,u),destroy:Eg(Tg.bind(void 0,{subprocessStdout:l,subprocessStdin:f,subprocess:e,waitReadableDestroy:d,waitWritableFinal:u,waitWritableDestroy:p})),readableHighWaterMark:S,writableHighWaterMark:f.writableHighWaterMark,readableObjectMode:g,writableObjectMode:f.writableObjectMode,encoding:m});return Lr({subprocessStdout:l,onStdoutDataDone:b,readable:E,subprocess:e,subprocessStdin:f}),Nr(f,E,l,e),E},"createDuplex"),Tg=r(async({subprocessStdout:e,subprocessStdin:t,subprocess:n,waitReadableDestroy:o,waitWritableFinal:i,waitWritableDestroy:s},a)=>{await Promise.all([Br({subprocessStdout:e,subprocess:n,waitReadableDestroy:o},a),jr({subprocessStdin:t,subprocess:n,waitWritableFinal:i,waitWritableDestroy:s},a)])},"onDuplexDestroy");var xc=r((e,{encoding:t})=>{let n=tn();e.readable=sn.bind(void 0,{subprocess:e,concurrentStreams:n,encoding:t}),e.writable=bc.bind(void 0,{subprocess:e,concurrentStreams:n}),e.duplex=wc.bind(void 0,{subprocess:e,concurrentStreams:n,encoding:t}),e.readableStream=an.bind(void 0,e),e.writableStream=Ja.bind(void 0,e),e.transformStream=Qa.bind(void 0,e),e.iterable=Ae.bind(void 0,e,t),e[Symbol.asyncIterator]=Ae.bind(void 0,e,t,{})},"addConvertedStreams");var Ec=r((e,t)=>Object.assign(e,t),"mergePromise");import{setMaxListeners as Og}from"node:events";import{spawn as Ag}from"node:child_process";var Tc=r((e,t,n,o)=>{let{file:i,commandArguments:s,command:a,escapedCommand:c,startTime:l,verboseInfo:d,options:f,fileDescriptors:u}=Ig(e,t,n),{subprocess:p,promise:m,kill:g,all:S,convertedStreams:w}=Rg({file:i,commandArguments:s,options:f,startTime:l,verboseInfo:d,command:a,escapedCommand:c,fileDescriptors:u}),b=Mg({promise:m,nodeChildProcess:p,kill:g,all:S,convertedStreams:w,options:f});return b.pipe=ln.bind(void 0,{source:b,sourcePromise:m,boundOptions:{},createNested:o}),W.set(b,{options:f,fileDescriptors:u}),b},"execaCoreAsync"),Ig=r((e,t,n)=>{let{command:o,escapedCommand:i,startTime:s,verboseInfo:a}=ct(e,t,n),{file:c,commandArguments:l,options:d}=Rt(e,t,n),f=Dg(d),u=Ra(f,a);return{file:c,commandArguments:l,command:o,escapedCommand:i,startTime:s,verboseInfo:a,options:f,fileDescriptors:u}},"handleAsyncArguments"),Dg=r(({timeout:e,signal:t,...n})=>{if(t!==void 0)throw new TypeError('The "signal" option has been renamed to "cancelSignal" instead.');return{...n,timeoutDuration:e}},"handleAsyncOptions"),Rg=r(({file:e,commandArguments:t,options:n,startTime:o,verboseInfo:i,command:s,escapedCommand:a,fileDescriptors:c})=>{let l;try{l=Ag(...Mt(e,t,ja(n)))}catch(w){return Oa({error:w,command:s,escapedCommand:a,fileDescriptors:c,options:n,startTime:o,verboseInfo:i})}let d=new AbortController;Og(1/0,d.signal);let f=[...l.stdio];$a(l,c,d),li(l,n);let u={},p=k(),m=Uo.bind(void 0,{kill:ka(l,n),options:n,onInternalError:p,context:u,controller:d});Wa(m,n,d);let g=dc(l,n),S=Pg({subprocess:l,kill:m,all:g,options:n,startTime:o,verboseInfo:i,fileDescriptors:c,originalStreams:f,command:s,escapedCommand:a,context:u,onInternalError:p,controller:d});return{subprocess:l,promise:S,kill:m,all:g}},"spawnSubprocessAsync"),Mg=r(({promise:e,nodeChildProcess:t,kill:n,all:o,convertedStreams:i,options:s})=>{let a=Ec(e,Cg(t,o));return a.kill=n??a.kill,i===void 0?xc(a,s):Object.assign(a,i),ha(a,t,s),a},"getSubprocessPromise"),Cg=r((e,t)=>({nodeChildProcess:e,pid:e.pid,stdin:e.stdin,stdout:e.stdout,stderr:e.stderr,stdio:e.stdio,all:t,kill:e.kill.bind(e)}),"getSubprocessProperties"),Pg=r(async({subprocess:e,kill:t,all:n,options:o,startTime:i,verboseInfo:s,fileDescriptors:a,originalStreams:c,command:l,escapedCommand:d,context:f,onInternalError:u,controller:p})=>{let[m,[g,S],w,b,E]=await gc({subprocess:e,kill:t,all:n,options:o,context:f,verboseInfo:s,fileDescriptors:a,originalStreams:c,onInternalError:u,controller:p});p.abort(),u.resolve();let x=w.map((R,C)=>J(R,o,C)),D=J(b,o,"all"),A=Lg({errorInfo:m,exitCode:g,signal:S,stdio:x,all:D,ipcOutput:E,context:f,options:o,command:l,escapedCommand:d,startTime:i});return we(A,s,o)},"handlePromise"),Lg=r(({errorInfo:e,exitCode:t,signal:n,stdio:o,all:i,ipcOutput:s,context:a,options:c,command:l,escapedCommand:d,startTime:f})=>"error"in e?je({error:e.error,command:l,escapedCommand:d,timedOut:a.terminationReason==="timeout",isCanceled:a.terminationReason==="cancel"||a.terminationReason==="gracefulCancel",isGracefullyCanceled:a.terminationReason==="gracefulCancel",isMaxBuffer:e.error instanceof G,isForcefullyTerminated:a.isForcefullyTerminated,exitCode:t,signal:n,stdio:o,all:i,ipcOutput:s,options:c,startTime:f,isSync:!1}):Nt({command:l,escapedCommand:d,stdio:o,all:i,ipcOutput:s,options:c,startTime:f}),"getAsyncResult");var dn=r((e,t)=>{let n={__proto__:null,...e},o=Object.fromEntries(Object.entries(t).map(([i,s])=>[i,Bg(i,n[i],s)]));return{...n,...o}},"mergeOptions"),Bg=r((e,t,n)=>Fg.has(e)&&T(t)&&T(n)?{...t,...n}:n,"mergeOption"),Fg=new Set(["env",...En]);var De=r((e,t,n,o)=>{let i=r((a,c,l)=>De(a,c,n,l),"createNested"),s=r((...a)=>_g({mapArguments:e,deepOptions:n,boundOptions:t,setBoundExeca:o,createNested:i},...a),"boundExeca");return o!==void 0&&o(s,i,t),s},"createExeca"),_g=r(({mapArguments:e,deepOptions:t={},boundOptions:n={},setBoundExeca:o,createNested:i},s,...a)=>{if(T(s))return i(e,dn(n,s),o);let{file:c,commandArguments:l,options:d,isSync:f}=Ug({mapArguments:e,firstArgument:s,nextArguments:a,deepOptions:t,boundOptions:n});return f?ca(c,l,d):Tc(c,l,d,i)},"callBoundExeca"),Ug=r(({mapArguments:e,firstArgument:t,nextArguments:n,deepOptions:o,boundOptions:i})=>{let s=Qr(t)?Zr(t,n):[t,...n],[a,c,l]=Qe(...s),d=dn(dn(o,i),l),{options:f=d,isSync:u=!1}=e({options:d});return{file:a,commandArguments:c,options:f,isSync:u}},"parseArguments");var Ac=r((e,t,n)=>{e.sync=t($g,n),e.s=e.sync},"setScriptSync"),Ic=r(({options:e})=>Oc(e),"mapScriptAsync"),$g=r(({options:e})=>({...Oc(e),isSync:!0}),"mapScriptSync"),Oc=r(e=>({options:{...vg(e),...e}}),"getScriptOptions"),vg=r(({input:e,inputFile:t,stdio:n})=>e===void 0&&t===void 0&&n===void 0?{stdin:"inherit"}:{},"getScriptStdinOption"),Dc={preferLocal:!0};var Rc=De(()=>({})),fP=De(()=>({isSync:!0})),uP=De(bi),pP=De(Ic,{},Dc,Ac),{sendMessage:Ng,getOneMessage:jg,getEachMessage:kg,getCancelSignal:Gg}=ga();import{accessSync as Wg}from"node:fs";import{basename as zg,isAbsolute as Vg}from"node:path";import"./process-contracts.js";import{captureProcessCreationIdentity as Yg,inspectProcessLiveness as Hg}from"./process-identity.js";import{MAX_SUPERVISED_PROCESS_CAPTURE_BYTES as Kg}from"./process-limits.js";import{requireReadySignal as Xg,startReadyDeadline as Mc}from"./ready-deadline.js";import{toError as fn}from"../kernel/error-serialization.js";import{recordWork as Jg}from"../kernel/work-metrics.js";import{}from"./process-contracts.js";import{terminateAttributedProcessLineage as _P,terminateOwnedPosixProcessGroup as UP}from"./recovery.js";import{cleanupExitedProcessGroup as Cc,processGroupExists as Pc}from"./process-group.js";import{createShutdownDeadline as Qg,DEFAULT_SHUTDOWN_TIMEOUT_MS as Re,FORCE_TERMINATION_WAIT_MS as kr,PROCESS_STOP_LIMIT_MS as Zg}from"./shutdown.js";import{settleStoppable as qg}from"./stoppable-settlement.js";import{terminateWindowsProcessTree as eS}from"./windows-native.js";import{cleanupExitedProcessGroup as vP}from"./process-group.js";function CP(e){if(_c(e,!1),e.signal.aborted)return Promise.resolve(pn());try{if(process.platform==="win32")return nS(e);let t=e.timeoutStartsWhenReady;if(t!==void 0)return tS(e,t);let n=un(e,"bounded-capture",{cancelSignal:e.signal,forceKillAfterDelay:Re,timeout:e.timeoutMs});return Bc(n)}catch(t){return Promise.resolve(aS(t))}}r(CP,"runManagedProcess");function tS(e,t){let n=new AbortController,o=!1,i=un(e,"bounded-capture",{cancelSignal:n.signal,forceKillAfterDelay:Re}),s=r(()=>{n.abort()},"onAbort");e.signal.addEventListener("abort",s,{once:!0});let a=Mc({onExpired:r(()=>{n.signal.aborted||(o=!0,n.abort())},"onExpired"),ready:t,stdout:i.stdout,timeoutMs:e.timeoutMs});return i.finally(()=>{a(),e.signal.removeEventListener("abort",s)}),Bc(i).then(c=>o&&c.cancelled?{...c,cancelled:!1,timedOut:o}:c)}r(tS,"runReadyManagedProcess");function nS(e){let t=un(e,"bounded-capture",{forceKillAfterDelay:!1,killDescendants:!1}),n=Date.now()+1e3,o=qg(t,kr),i=r(c=>{if(o.stop!==null)return;let l=t.nodeChildProcess,d=l.exitCode!==null||l.signalCode!==null;o.stopWith({reason:c,termination:d?Promise.resolve(null):rS(t,n)})},"stop"),s=r(()=>{i("cancelled")},"onAbort");e.signal.addEventListener("abort",s,{once:!0});let a=Lc(e.timeoutMs,e.timeoutStartsWhenReady,t.stdout,()=>{i("timedOut")});return(async()=>{let c;try{c=await o.completion}finally{e.signal.removeEventListener("abort",s),a()}let l={cancelled:c.stop?.reason==="cancelled",timedOut:c.stop?.reason==="timedOut"};if(!c.abandoned)return{...Wr(c.result,!0,c.terminationError),...l};let d=t.nodeChildProcess;for(let f of[t.stdin,t.stdout,t.stderr])f.destroy();return d.unref(),{...pn(),...l,exitCode:d.exitCode,exitSignal:d.signalCode,terminationError:c.terminationError}})()}r(nS,"runWindowsManagedProcess");async function rS(e,t){if(e.pid===void 0)return null;try{return await eS(e.pid,t,Re+kr),null}catch(n){return oS(e.nodeChildProcess),fn(n)}}r(rS,"terminateWindowsTree");function oS(e){e.exitCode!==null||e.signalCode!==null||e.kill()}r(oS,"terminateRootByHandle");var Gr=class extends Error{static{r(this,"ProcessExitedBeforeReadyError")}exitCode;exitSignal;constructor(t,n){super("Process exited before becoming ready"),this.exitCode=t,this.exitSignal=n}},iS=2**31-1;function PP(e){if(_c(e,!0),e.signal.aborted)throw new Error(`${e.displayLabel} was cancelled before its process could start`);let t=e.timeoutStartsWhenReady,n=t===void 0?null:new AbortController,o=un(e,e.outputMode,{forceKillAfterDelay:e.shutdownTimeoutMs===void 0?Re:!1,...n!==null?{cancelSignal:n.signal}:e.timeoutMs===null?{}:{timeout:e.timeoutMs}}),i=o.pid;if(i===void 0)throw o.kill("SIGKILL"),new Error(`${e.displayLabel} could not start ${JSON.stringify(e.executable)}`);let s=!1,a=!1,c=!1,l=!1,d=Qg(e.shutdownTimeoutMs??Re),f=(e.shutdownTimeoutMs??0)+(e.stopLimitMs??Zg),u=0,p=null,m=Number.POSITIVE_INFINITY,g,S=r(()=>{},"abandon"),w=new Promise(y=>{S=r(()=>{y(null)},"abandon")}),b=r(y=>{m===Number.POSITIVE_INFINITY&&(u=performance.now());let I=Math.min(m===Number.POSITIVE_INFINITY?Date.now()+f:m,y===void 0?Number.POSITIVE_INFINITY:Math.max(y,Date.now()+kr));if(I>=m)return;m=I,clearTimeout(g);let P=Math.max(0,m-Date.now());P<=iS&&(g=setTimeout(S,P))},"limitSettlement"),E=null,x={failure:null,cleanup:null},D=r(()=>{if(x.failure=null,d.deadlineAt!==null)try{E?.(d.deadlineAt)}catch(y){x.failure=fn(y)}},"publishShutdown"),A=r(y=>{l||(b(y),d.begin(y)&&D(),!s&&(s=!0,o.kill("SIGTERM"),x.cleanup=Cc(i,{remainingMs:d.remainingMs,initialSignalSent:!0,sendSignal:r((I,P)=>{o.kill(P)},"sendSignal")})))},"beginShutdown"),R=r(()=>{!s&&!l&&o.nodeChildProcess.exitCode===null&&o.nodeChildProcess.signalCode===null&&(a=!0),A()},"onAbort");for(let y of[o.stdout,o.stderr])y.once("close",()=>{!y.readableEnded&&o.nodeChildProcess.exitCode===null&&o.nodeChildProcess.signalCode===null&&A()});e.signal.addEventListener("abort",R,{once:!0});let C=e.timeoutMs===null?()=>{}:Lc(e.timeoutMs,t,o.stdout,()=>{if(!s){let y=o.nodeChildProcess;c=y.exitCode===null&&y.signalCode===null,n?.abort()}A()});o.nodeChildProcess.once("exit",()=>{process.platform!=="win32"&&Pc(i)&&A()});let N=e.recoveryIdentity==="none"?void 0:new Promise((y,I)=>{o.nodeChildProcess.once("error",I),o.nodeChildProcess.once("spawn",()=>{let P=Yg(i);if(P===null){let V=new Error(`${e.displayLabel} process creation identity could not be captured`);Hg(i)==="absent"?o.nodeChildProcess.once("exit",(mn,hn)=>{I(new Gr(mn,hn))}):(o.kill("SIGKILL"),I(V));return}y({pid:i,recovery:{creationIdentity:P,processGroupId:process.platform==="win32"?null:i}})})});N?.catch(()=>{});let F=(async()=>{let y=await Promise.race([o,w]);if(C(),clearTimeout(g),y===null){let V=o.nodeChildProcess,mn=V.exitCode!==null||V.signalCode!==null;for(let hn of[o.stdin,o.stdout,o.stderr])hn.destroy();return V.unref(),p=new Error(`${e.displayLabel} didn't settle within ${((performance.now()-u)/1e3).toFixed(1)} s of its termination: `+(mn?"its process exited, but its output stayed open":`process ${i.toString()} is still running`)),{...pn(),cancelled:a,exitCode:V.exitCode,exitSignal:V.signalCode,terminationError:p,timedOut:c}}process.platform!=="win32"&&Pc(i)&&A();let I=x.cleanup===null?null:await x.cleanup,P=Wr(y,e.outputMode==="bounded-capture",I??x.failure);return{...P,cancelled:a,timedOut:P.timedOut||n!==null&&y.isCanceled}})().finally(()=>{l=!0,clearTimeout(g),e.signal.removeEventListener("abort",R),C(),x.failure===null&&(E=null)});return{completion:F,...N===void 0?{}:{ready:N},stderr:o.stderr,stdin:o.stdin,stdout:o.stdout,pid:i,shutdownTimeoutMs:e.shutdownTimeoutMs??Re,get shutdownDeadlineAt(){return d.deadlineAt},onShutdownStarted(y){return E=y,d.deadlineAt!==null&&y(d.deadlineAt),()=>{E===y&&(E=null)}},async stop(y){return x.failure!==null&&D(),A(y),{...await F,terminationError:p??await x.cleanup??x.failure}}}}r(PP,"startSupervisedProcess");function Lc(e,t,n,o){if(t!==void 0)return Mc({onExpired:o,ready:t,stdout:n,timeoutMs:e});let i=setTimeout(o,e);return()=>{clearTimeout(i)}}r(Lc,"startTimeout");async function Bc(e){let t=e.pid,n=await e,o=t===void 0?null:await Cc(t);return Wr(n,!0,o)}r(Bc,"settle");function un(e,t,n){return process.platform==="win32"&&Vg(e.executable)&&Wg(e.executable),Jg(sS(e.executable,e.workPurpose)),Rc(e.executable,[...e.args],{buffer:t==="bounded-capture",maxBuffer:Kg/2,cleanup:!0,killDescendants:!0,...n,cwd:e.cwd,encoding:"utf8",env:e.env,extendEnv:!1,reject:!1,stderr:"pipe",stdin:"pipe",stdout:"pipe",stripFinalNewline:!1,windowsHide:!0,windowsVerbatimArguments:e.windowsVerbatimArguments})}r(un,"launch");function sS(e,t){let n=zg(e).toLowerCase().replace(/\.(?:bat|cmd|exe)$/u,"");return t===void 0?`process.launches.${n}`:`process.launches.${n}.${t}`}r(sS,"processLaunchMetric");function Wr(e,t,n){let o=e.failed&&e.exitCode===void 0&&e.signal===void 0&&!e.timedOut&&!e.isCanceled&&!e.isMaxBuffer?fn(e):null;return{cancelled:e.isCanceled,error:o,exitCode:e.exitCode??null,exitSignal:e.signal??null,outputLimitExceeded:e.isMaxBuffer,stderr:t?Fc(e.stderr):"",stdout:t?Fc(e.stdout):"",terminationError:n,timedOut:e.timedOut}}r(Wr,"mapResult");function Fc(e){return typeof e=="string"?e:e instanceof Uint8Array?Buffer.from(e).toString("utf8"):""}r(Fc,"outputString");function _c(e,t){if(e.executable.length===0)throw new Error("Managed process executable must be non-empty");if(e.cwd.length===0)throw new Error("Managed process working directory must be non-empty");if(e.displayLabel.trim().length===0)throw new Error("Managed process display label must be non-empty");if(e.timeoutMs!==null&&(!Number.isSafeInteger(e.timeoutMs)||e.timeoutMs<=0))throw new Error("Managed process timeout must be a positive safe integer");if(Xg(e.timeoutStartsWhenReady),e.timeoutStartsWhenReady!==void 0&&e.timeoutMs===null)throw new Error("A managed process ready signal needs a timeout to start");if(e.timeoutStartsWhenReady!==void 0&&"stdoutMarker"in e.timeoutStartsWhenReady&&"outputMode"in e&&e.outputMode==="caller-drained")throw new Error("A stdout ready marker needs bounded-capture output");if(t&&"recoveryIdentity"in e&&e.recoveryIdentity!==void 0&&!["capture","none"].includes(e.recoveryIdentity))throw new Error("Supervised process recovery identity mode must be capture or none");if(t&&"outputMode"in e&&!["bounded-capture","caller-drained"].includes(e.outputMode))throw new Error("Supervised process output mode must be bounded-capture or caller-drained")}r(_c,"requireRequest");function pn(){return{cancelled:!0,error:null,exitCode:null,exitSignal:null,outputLimitExceeded:!1,stderr:"",stdout:"",terminationError:null,timedOut:!1}}r(pn,"cancelledBeforeStart");function aS(e){return{...pn(),cancelled:!1,error:fn(e)}}r(aS,"startFailure");export{Gr as ProcessExitedBeforeReadyError,vP as cleanupExitedProcessGroup,CP as runManagedProcess,PP as startSupervisedProcess,_P as terminateAttributedProcessLineage,UP as terminateOwnedPosixProcessGroup};
46
+ if (condition) { yield value; }`)},"validateEmptyReturn");import{Buffer as $p}from"node:buffer";import{StringDecoder as vp}from"node:string_decoder";var Ht=r((e,t,n)=>{if(n)return;if(e)return{transform:Np.bind(void 0,new TextEncoder)};let o=new vp(t);return{transform:jp.bind(void 0,o),final:kp.bind(void 0,o)}},"getEncodingTransformGenerator"),Np=r(function*(e,t){$p.isBuffer(t)?yield Y(t):typeof t=="string"?yield e.encode(t):yield t},"encodingUint8ArrayGenerator"),jp=r(function*(e,t){yield O(t)?e.write(t):t},"encodingStringGenerator"),kp=r(function*(e){let t=e.end();t!==""&&(yield t)},"encodingStringFinal");import{callbackify as Ys}from"node:util";var rr=Ys(async(e,t,n,o)=>{t.currentIterable=e(...n);try{for await(let i of t.currentIterable)o.push(i)}finally{delete t.currentIterable}}),Kt=r(async function*(e,t,n){if(n===t.length){yield e;return}let{transform:o=Wp}=t[n];for await(let i of o(e))yield*Kt(i,t,n+1)},"transformChunk"),Hs=r(async function*(e){for(let[t,{final:n}]of Object.entries(e))yield*Gp(n,Number(t),e)},"finalChunks"),Gp=r(async function*(e,t,n){if(e!==void 0)for await(let o of e())yield*Kt(o,n,t+1)},"generatorFinalChunks"),Ks=Ys(async({currentIterable:e},t)=>{if(e!==void 0){await(t?e.throw(t):e.return());return}if(t)throw t}),Wp=r(function*(e){yield e},"identityGenerator");var or=r((e,t,n,o)=>{try{for(let i of e(...t))n.push(i);o()}catch(i){o(i)}},"pushChunksSync"),Xs=r((e,t)=>[...t.flatMap(n=>[...ie(n,e,0)]),...ze(e)],"runTransformSync"),ie=r(function*(e,t,n){if(n===t.length){yield e;return}let{transform:o=Vp}=t[n];for(let i of o(e))yield*ie(i,t,n+1)},"transformChunkSync"),ze=r(function*(e){for(let[t,{final:n}]of Object.entries(e))yield*zp(n,Number(t),e)},"finalChunksSync"),zp=r(function*(e,t,n){if(e!==void 0)for(let o of e())yield*ie(o,n,t+1)},"generatorFinalChunksSync"),Vp=r(function*(e){yield e},"identityGenerator");import{Transform as Yp,getDefaultHighWaterMark as Js}from"node:stream";var ir=r(({value:e,value:{transform:t,final:n,writableObjectMode:o,readableObjectMode:i},optionName:s},{encoding:a})=>{let c={},l=Qs(e,a,s),d=oe(t),f=oe(n),u=d?rr.bind(void 0,Kt,c):or.bind(void 0,ie),p=d||f?rr.bind(void 0,Hs,c):or.bind(void 0,ze),m=d||f?Ks.bind(void 0,c):void 0;return{stream:new Yp({writableObjectMode:o,writableHighWaterMark:Js(o),readableObjectMode:i,readableHighWaterMark:Js(i),transform(S,w,b){u([S,l,0],this,b)},flush(S){p([l],this,S)},destroy:m})}},"generatorToStream"),Xt=r((e,t,n,o)=>{let i=t.filter(({type:a})=>a==="generator"),s=o?i.reverse():i;for(let{value:a,optionName:c}of s){let l=Qs(a,n,c);e=Xs(l,e)}return e},"runGeneratorsSync"),Qs=r(({transform:e,final:t,binary:n,writableObjectMode:o,readableObjectMode:i,preserveNewlines:s},a,c)=>{let l={};return[{transform:zs(o,c)},Ht(n,a,o),Yt(n,s,o,l),{transform:e,final:t},{transform:Vs(i,c)},Gs({binary:n,preserveNewlines:s,readableObjectMode:i,state:l})].filter(Boolean)},"addInternalGenerators");var Zs=r((e,t)=>{for(let n of Hp(e))Kp(e,n,t)},"addInputOptionsSync"),Hp=r(e=>new Set(Object.entries(e).filter(([,{direction:t}])=>t==="input").map(([t])=>Number(t))),"getInputFdNumbers"),Kp=r((e,t,n)=>{let{stdioItems:o}=e[t],i=o.filter(({contents:c})=>c!==void 0);if(i.length===0)return;if(t!==0){let[{type:c,optionName:l}]=i;throw new TypeError(`Only the \`stdin\` option, not \`${l}\`, can be ${q[c]} with synchronous methods.`)}let a=i.map(({contents:c})=>c).map(c=>Xp(c,o));n.input=Me(a)},"addInputOptionSync"),Xp=r((e,t)=>{let n=Xt(e,t,"utf8",!0);return Jp(n),Me(n)},"applySingleInputGeneratorsSync"),Jp=r(e=>{let t=e.find(n=>typeof n!="string"&&!O(n));if(t!==void 0)throw new TypeError(`The \`stdin\` option is invalid: when passing objects as input, a transform must be used to serialize them to strings or Uint8Arrays: ${t}.`)},"validateSerializable");var Jt=r(({stdioItems:e,encoding:t,verboseInfo:n,fdNumber:o})=>o!=="all"&&le(n,o)&&!M.has(t)&&Qp(o)&&(e.some(({type:i,value:s})=>i==="native"&&Zp.has(s))||e.every(({type:i})=>B.has(i))),"shouldLogOutput"),Qp=r(e=>e===1||e===2,"isFdVerbose"),Zp=new Set(["pipe","overlapped"]),ea=r(async(e,t,n,o)=>{for await(let i of e)qp(t)||qs(i,n,o)},"logLines"),ta=r((e,t,n)=>{for(let o of e)qs(o,t,n)},"logLinesSync"),qp=r(e=>e._readableState.pipes.length>0,"isPipingStream"),qs=r((e,t,n)=>{let o=st(e);j({type:"output",verboseMessage:o,fdNumber:t,verboseInfo:n})},"logLine");import{writeFileSync as em,appendFileSync as tm}from"node:fs";var na=r(({fileDescriptors:e,syncResult:{output:t},options:n,isMaxBuffer:o,verboseInfo:i})=>{if(t===null)return{output:Array.from({length:3})};let s={},a=new Set;return{output:t.map((l,d)=>nm({result:l,fileDescriptors:e,fdNumber:d,state:s,outputFiles:a,isMaxBuffer:o,verboseInfo:i},n)),...s}},"transformOutputSync"),nm=r(({result:e,fileDescriptors:t,fdNumber:n,state:o,outputFiles:i,isMaxBuffer:s,verboseInfo:a},{buffer:c,encoding:l,lines:d,stripFinalNewline:f,maxBuffer:u})=>{if(e===null)return;let p=Zi(e,s,u),m=Y(p),{stdioItems:g,objectMode:S}=t[n],w=rm([m],g,l,o),{serializedResult:b,finalResult:E=b}=om({chunks:w,objectMode:S,encoding:l,lines:d,stripFinalNewline:f,fdNumber:n});im({serializedResult:b,fdNumber:n,state:o,verboseInfo:a,encoding:l,stdioItems:g,objectMode:S});let x=c[n]?E:void 0;try{return o.error===void 0&&sm(b,g,i),x}catch(D){return o.error=D,x}},"transformOutputResultSync"),rm=r((e,t,n,o)=>{try{return Xt(e,t,n,!1)}catch(i){return o.error=i,e}},"runOutputGeneratorsSync"),om=r(({chunks:e,objectMode:t,encoding:n,lines:o,stripFinalNewline:i,fdNumber:s})=>{if(t)return{serializedResult:e};if(n==="buffer")return{serializedResult:Me(e)};let a=Hr(e,n);return o[s]?{serializedResult:a,finalResult:nr(a,!i[s],t)}:{serializedResult:a}},"serializeChunks"),im=r(({serializedResult:e,fdNumber:t,state:n,verboseInfo:o,encoding:i,stdioItems:s,objectMode:a})=>{if(!Jt({stdioItems:s,encoding:i,verboseInfo:o,fdNumber:t}))return;let c=nr(e,!1,a);try{ta(c,t,o)}catch(l){n.error??=l}},"logOutputSync"),sm=r((e,t,n)=>{let o=t.filter(({type:i})=>Gt.has(i));for(let{path:i,append:s}of o){let a=typeof i=="string"?i:i.toString();s||n.has(a)?tm(i,e):(n.add(a),em(i,e))}},"writeToFiles");var ra=r(([,e,t],n)=>{if(n.all)return e===void 0?t:t===void 0?e:Array.isArray(e)?Array.isArray(t)?[...e,...t]:[...e,J(t,n,"all")]:Array.isArray(t)?[J(e,n,"all"),...t]:O(e)&&O(t)?yn([e,t]):`${e}${t}`},"getAllSync");import{once as sr}from"node:events";var ia=r(async(e,t)=>{let[n,o]=await am(e);return t.isForcefullyTerminated??=!1,[n,o]},"waitForExit"),am=r(async e=>{let[t,n]=await Promise.allSettled([sr(e,"spawn"),sr(e,"exit")]);return t.status==="rejected"?[]:n.status==="rejected"?oa(e):n.value},"waitForExitOrError"),oa=r(async e=>{try{return await sr(e,"exit")}catch{return oa(e)}},"waitForSubprocessExit"),sa=r(async e=>{let[t,n]=await e;if(!cm(t,n)&&ar(t,n))throw new U;return[t,n]},"waitForSuccessfulExit"),cm=r((e,t)=>e===void 0&&t===void 0,"isSubprocessErrorExit"),ar=r((e,t)=>e!==0||t!==null,"isFailedExit");var aa=r(({error:e,status:t,signal:n,output:o},{maxBuffer:i})=>{let s=lm(e,t,n),a=s?.code==="ETIMEDOUT",c=Qi(s,o,i);return{resultError:s,exitCode:t,signal:n,timedOut:a,isMaxBuffer:c}},"getExitResultSync"),lm=r((e,t,n)=>e!==void 0?e:ar(t,n)?new U:void 0,"getResultError");import{spawnSync as dm}from"node:child_process";var ca=r((e,t,n)=>{let{file:o,commandArguments:i,command:s,escapedCommand:a,startTime:c,verboseInfo:l,options:d,fileDescriptors:f}=fm(e,t,n),u=mm({file:o,commandArguments:i,options:d,command:s,escapedCommand:a,verboseInfo:l,fileDescriptors:f,startTime:c});return we(u,l,d)},"execaCoreSync"),fm=r((e,t,n)=>{let{command:o,escapedCommand:i,startTime:s,verboseInfo:a}=ct(e,t,n),c=um(n),{file:l,commandArguments:d,options:f}=Rt(e,t,c);pm(f);let u=Ns(f,a);return{file:l,commandArguments:d,command:o,escapedCommand:i,startTime:s,verboseInfo:a,options:f,fileDescriptors:u}},"handleSyncArguments"),um=r(e=>e.node&&!e.ipc?{...e,ipc:!1}:e,"normalizeSyncOptions"),pm=r(({ipc:e,ipcInput:t,detached:n,cancelSignal:o,killDescendants:i})=>{t&&Ve("ipcInput"),e&&Ve("ipc: true"),n&&Ve("detached: true"),i&&Ve("killDescendants: true"),o&&Ve("cancelSignal")},"validateSyncOptions"),Ve=r(e=>{throw new TypeError(`The "${e}" option cannot be used with synchronous methods.`)},"throwInvalidSyncOption"),mm=r(({file:e,commandArguments:t,options:n,command:o,escapedCommand:i,verboseInfo:s,fileDescriptors:a,startTime:c})=>{let l=hm({file:e,commandArguments:t,options:n,command:o,escapedCommand:i,fileDescriptors:a,startTime:c});if(l.failed)return l;let{resultError:d,exitCode:f,signal:u,timedOut:p,isMaxBuffer:m}=aa(l,n),{output:g,error:S=d}=na({fileDescriptors:a,syncResult:l,options:n,isMaxBuffer:m,verboseInfo:s}),w=g.map((E,x)=>J(E,n,x)),b=J(ra(g,n),n,"all");return Sm({error:S,exitCode:f,signal:u,timedOut:p,isMaxBuffer:m,stdio:w,all:b,options:n,command:o,escapedCommand:i,startTime:c})},"spawnSubprocessSync"),hm=r(({file:e,commandArguments:t,options:n,command:o,escapedCommand:i,fileDescriptors:s,startTime:a})=>{try{Zs(s,n);let c=gm(n);return dm(...Mt(e,t,c))}catch(c){return be({error:c,command:o,escapedCommand:i,fileDescriptors:s,options:n,startTime:a,isSync:!0})}},"runSubprocessSync"),gm=r(({encoding:e,maxBuffer:t,...n})=>({...n,encoding:"buffer",maxBuffer:vt(t)}),"normalizeSpawnSyncOptions"),Sm=r(({error:e,exitCode:t,signal:n,timedOut:o,isMaxBuffer:i,stdio:s,all:a,options:c,command:l,escapedCommand:d,startTime:f})=>e===void 0?Nt({command:l,escapedCommand:d,stdio:s,all:a,ipcOutput:[],options:c,startTime:f}):je({error:e,command:l,escapedCommand:d,timedOut:o,isCanceled:!1,isGracefullyCanceled:!1,isMaxBuffer:i,isForcefullyTerminated:!1,exitCode:t,signal:n,stdio:s,all:a,ipcOutput:[],options:c,startTime:f,isSync:!0}),"getSyncResult");import{once as cr,on as ym}from"node:events";var lr=Symbol("internalGetOneMessageOptions"),la=r(({anyProcess:e,channel:t,isSubprocess:n,ipc:o},i={})=>{let{reference:s=!0,filter:a}=i,{signal:c}=i[lr]??{};return ue({methodName:"getOneMessage",isSubprocess:n,ipc:o,isConnected:bt(e)}),bm({anyProcess:e,channel:t,isSubprocess:n,filter:a,reference:s,signal:c})},"getOneMessage"),bm=r(async({anyProcess:e,channel:t,isSubprocess:n,filter:o,reference:i,signal:s})=>{ht(t,i);let a=Z(e,t,n),c=new AbortController;wm(s,c);try{return await Promise.race([xm(a,o,c),Em(a,n,c),Tm(a,n,c)])}catch(l){throw pe(e),l}finally{c.abort(),gt(t,i)}},"getOneMessageAsync"),wm=r((e,t)=>{if(e!==void 0){if(e.aborted){t.abort();return}e.addEventListener("abort",()=>{t.abort()},{once:!0,signal:t.signal})}},"stopOnAbort"),xm=r(async(e,t,{signal:n})=>{if(t===void 0){let[o]=await cr(e,"message",{signal:n});return o}for await(let[o]of ym(e,"message",{signal:n}))if(t(o))return o},"getMessage"),Em=r(async(e,t,{signal:n})=>{await cr(e,"disconnect",{signal:n}),No(t)},"throwOnDisconnect"),Tm=r(async(e,t,{signal:n})=>{let[o]=await cr(e,"strict:error",{signal:n});throw mt(o,t)},"throwOnStrictError");import{once as da,on as Om}from"node:events";var dr=Symbol("internalGetEachMessageOptions"),ua=r((e,t={})=>{let{reference:n=!0}=t,{signal:o,shouldAwait:i=!e.isSubprocess}=t[dr]??{};return fr({...e,shouldAwait:i,reference:n,signal:o})},"getEachMessage"),fr=r(({anyProcess:e,waitProcess:t=e,channel:n,isSubprocess:o,ipc:i,shouldAwait:s,reference:a,signal:c})=>{ue({methodName:"getEachMessage",isSubprocess:o,ipc:i,isConnected:bt(e)}),ht(n,a);let l=Z(e,n,o),d=new AbortController,f={};return Am(c,d),Im(e,l,d),Dm({ipcEmitter:l,isSubprocess:o,controller:d,state:f}),Rm({anyProcess:e,waitProcess:t,channel:n,ipcEmitter:l,isSubprocess:o,shouldAwait:s,controller:d,state:f,reference:a})},"loopOnMessages"),Am=r((e,t)=>{if(e!==void 0){if(e.aborted){t.abort();return}e.addEventListener("abort",()=>{t.abort()},{once:!0,signal:t.signal})}},"stopOnAbort"),Im=r(async(e,t,n)=>{try{await da(t,"disconnect",{signal:n.signal}),n.abort()}catch{}},"stopOnDisconnect"),Dm=r(async({ipcEmitter:e,isSubprocess:t,controller:n,state:o})=>{try{let[i]=await da(e,"strict:error",{signal:n.signal});o.error=mt(i,t),n.abort()}catch{}},"abortOnStrictError"),Rm=r(async function*({anyProcess:e,waitProcess:t,channel:n,ipcEmitter:o,isSubprocess:i,shouldAwait:s,controller:a,state:c,reference:l}){try{for await(let[d]of Om(o,"message",{signal:a.signal}))fa(c),yield d}catch{fa(c)}finally{a.abort(),gt(n,l),i||pe(e),s&&await t}},"iterateOnMessages"),fa=r(({error:e})=>{if(e)throw e},"throwIfStrictError");import pa from"node:process";var ha=r((e,t,{ipc:n})=>{Object.assign(e,ma(t,!1,n,e))},"addIpcMethods"),ga=r(()=>{let e=pa,t=!0,n=pa.channel!==void 0;return{...ma(e,t,n),getCancelSignal:pi.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:n})}},"getIpcExport"),ma=r((e,t,n,o=e)=>({sendMessage:me.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:n}),getOneMessage:la.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:n}),getEachMessage:ua.bind(void 0,{anyProcess:e,channel:e.channel,isSubprocess:t,ipc:n,waitProcess:o})}),"getIpcMethods");import{ChildProcess as Mm}from"node:child_process";import{PassThrough as Cm,Readable as Sa,Writable as ya,Duplex as ba}from"node:stream";var Oa=r(({error:e,command:t,escapedCommand:n,fileDescriptors:o,options:i,startTime:s,verboseInfo:a})=>{qn(o);let c=new Mm,l=Pm(c,o),d=be({error:e,command:t,escapedCommand:n,fileDescriptors:o,options:i,startTime:s,isSync:!1}),f=_m(d,a,i);return{subprocess:c,promise:f,all:i.all?l:void 0,convertedStreams:{readable:wa,writable:xa,duplex:Ea,readableStream:Lm,writableStream:Bm,transformStream:Fm,iterable:Ta,[Symbol.asyncIterator]:Ta}}},"handleEarlyError"),Pm=r((e,t)=>{let n=Ye(),o=Ye(),i=Ye(),s=Array.from({length:t.length-3},Ye),a=Ye(),c=[n,o,i,...s];return Object.assign(e,{stdin:n,stdout:o,stderr:i,stdio:c}),a},"createDummyStreams"),Ye=r(()=>{let e=new Cm;return e.end(),e},"createDummyStream"),wa=r(()=>new Sa({read(){}}),"readable"),xa=r(()=>new ya({write(){}}),"writable"),Ea=r(()=>new ba({read(){},write(){}}),"duplex"),Lm=r(()=>Sa.toWeb(wa()),"readableStream"),Bm=r(()=>ya.toWeb(xa()),"writableStream"),Fm=r(()=>ba.toWeb(Ea()),"transformStream"),Ta=r(async function*(){},"iterable"),_m=r(async(e,t,n)=>we(e,t,n),"handleDummyPromise");import{createReadStream as Aa,createWriteStream as Ia}from"node:fs";import{Buffer as Um}from"node:buffer";import{Readable as He,Writable as $m,Duplex as vm}from"node:stream";var Ra=r((e,t)=>Vt(Nm,e,t,!1),"handleStdioAsync"),Ke=r(({type:e,optionName:t})=>{throw new TypeError(`The \`${t}\` option cannot be ${q[e]}.`)},"forbiddenIfAsync"),Da={fileNumber:Ke,generator:ir,asyncGenerator:ir,nodeStream:r(({value:e})=>({stream:e}),"nodeStream"),webTransform({value:{transform:e,writableObjectMode:t,readableObjectMode:n}}){let o=t||n;return{stream:vm.fromWeb(e,{objectMode:o})}},duplex:r(({value:{transform:e}})=>({stream:e}),"duplex"),native(){}},Nm={input:{...Da,fileUrl:r(({value:e})=>({stream:Aa(e)}),"fileUrl"),filePath:r(({value:{file:e}})=>({stream:Aa(e)}),"filePath"),webStream:r(({value:e})=>({stream:He.fromWeb(e)}),"webStream"),iterable:r(({value:e})=>({stream:He.from(e)}),"iterable"),asyncIterable:r(({value:e})=>({stream:He.from(e)}),"asyncIterable"),string:r(({value:e})=>({stream:He.from(e)}),"string"),uint8Array:r(({value:e})=>({stream:He.from(Um.from(e))}),"uint8Array")},output:{...Da,fileUrl:r(({value:e})=>({stream:Ia(e)}),"fileUrl"),filePath:r(({value:{file:e,append:t}})=>({stream:Ia(e,t?{flags:"a"}:{})}),"filePath"),webStream:r(({value:e})=>({stream:$m.fromWeb(e)}),"webStream"),iterable:Ke,asyncIterable:Ke,string:Ke,uint8Array:Ke}};import{on as jm,once as Ma}from"node:events";import{PassThrough as km,getDefaultHighWaterMark as Gm}from"node:stream";import{finished as Ca}from"node:stream/promises";function se(e){if(!Array.isArray(e))throw new TypeError(`Expected an array, got \`${typeof e}\`.`);for(let i of e)pr(i);let t=e.some(({readableObjectMode:i})=>i),n=Wm(e,t),o=new ur({objectMode:t,writableHighWaterMark:n,readableHighWaterMark:n});for(let i of e)o.add(i);return o}r(se,"mergeStreams");var Wm=r((e,t)=>{if(e.length===0)return Gm(t);let n=e.filter(({readableObjectMode:o})=>o===t).map(({readableHighWaterMark:o})=>o);return Math.max(...n)},"getHighWaterMark"),ur=class extends km{static{r(this,"MergedStream")}#t=new Set([]);#n=new Set([]);#e=new Set([]);#r;#i=Symbol("unpipe");#o=new WeakMap;add(t){if(pr(t),this.#t.has(t))return;this.#t.add(t),this.#r??=zm(this,this.#t,this.#i);let n=Hm({passThroughStream:this,stream:t,streams:this.#t,ended:this.#n,aborted:this.#e,onFinished:this.#r,unpipeEvent:this.#i});this.#o.set(t,n),t.pipe(this,{end:!1})}async remove(t){if(pr(t),!this.#t.has(t))return!1;let n=this.#o.get(t);return n===void 0?!1:(this.#o.delete(t),t.unpipe(this),await n,!0)}},zm=r(async(e,t,n)=>{Qt(e,Fa);let o=new AbortController;try{await Promise.race([Vm(e,o),Ym(e,t,n,o)])}finally{o.abort(),Qt(e,-Fa)}},"onMergedStreamFinished"),Vm=r(async(e,{signal:t})=>{try{await Ca(e,{signal:t,cleanup:!0})}catch(n){throw Pa(e,n),n}},"onMergedStreamEnd"),Ym=r(async(e,t,n,{signal:o})=>{for await(let[i]of jm(e,"unpipe",{signal:o}))t.has(i)&&i.emit(n)},"onInputStreamsUnpipe"),pr=r(e=>{if(typeof e?.pipe!="function")throw new TypeError(`Expected a readable stream, got: \`${typeof e}\`.`)},"validateStream"),Hm=r(async({passThroughStream:e,stream:t,streams:n,ended:o,aborted:i,onFinished:s,unpipeEvent:a})=>{Qt(e,_a);let c=new AbortController;try{await Promise.race([Km(s,t,c),Xm({passThroughStream:e,stream:t,streams:n,ended:o,aborted:i,controller:c}),Jm({stream:t,streams:n,ended:o,aborted:i,unpipeEvent:a,controller:c})])}finally{c.abort(),Qt(e,-_a)}n.size>0&&n.size===o.size+i.size&&(o.size===0&&i.size>0?mr(e):Qm(e))},"endWhenStreamsDone"),Km=r(async(e,t,{signal:n})=>{try{await e,n.aborted||mr(t)}catch(o){n.aborted||Pa(t,o)}},"afterMergedStreamFinished"),Xm=r(async({passThroughStream:e,stream:t,streams:n,ended:o,aborted:i,controller:{signal:s}})=>{try{await Ca(t,{signal:s,cleanup:!0,readable:!0,writable:!1}),n.has(t)&&o.add(t)}catch(a){if(s.aborted||!n.has(t))return;La(a)?i.add(t):Ba(e,a)}},"onInputStreamEnd"),Jm=r(async({stream:e,streams:t,ended:n,aborted:o,unpipeEvent:i,controller:{signal:s}})=>{if(await Ma(e,i,{signal:s}),!e.readable)return Ma(s,"abort",{signal:s});t.delete(e),n.delete(e),o.delete(e)},"onInputStreamUnpipe"),Qm=r(e=>{e.writable&&e.end()},"endStream"),Pa=r((e,t)=>{La(t)?mr(e):Ba(e,t)},"errorOrAbortStream"),La=r(e=>e?.code==="ERR_STREAM_PREMATURE_CLOSE","isAbortError"),mr=r(e=>{(e.readable||e.writable)&&e.destroy()},"abortStream"),Ba=r((e,t)=>{e.destroyed||(e.once("error",Zm),e.destroy(t))},"errorStream"),Zm=r(()=>{},"noop"),Qt=r((e,t)=>{let n=e.getMaxListeners();n!==0&&n!==Number.POSITIVE_INFINITY&&e.setMaxListeners(n+t)},"updateMaxListeners"),Fa=2,_a=1;import{finished as Ua}from"node:stream/promises";var Te=r((e,t)=>{e.pipe(t),qm(e,t),eh(e,t)},"pipeStreams"),qm=r(async(e,t)=>{if(!(_(e)||_(t))){try{await Ua(e,{cleanup:!0,readable:!0,writable:!1})}catch{}hr(t)}},"onSourceFinish"),hr=r(e=>{e.writable&&e.end()},"endDestinationStream"),eh=r(async(e,t)=>{if(!(_(e)||_(t))){try{await Ua(t,{cleanup:!0,readable:!1,writable:!0})}catch{}gr(e)}},"onDestinationFinish"),gr=r(e=>{e.readable&&e.destroy()},"abortSourceStream");var $a=r((e,t,n)=>{let o=new Map;for(let[i,{stdioItems:s,direction:a}]of Object.entries(t)){let c=s.filter(({type:d})=>B.has(d));for(let{stream:d}of c)th(e,d,a,i);let l=s.filter(({type:d})=>!B.has(d));for(let{stream:d}of l)rh({subprocess:e,stream:d,direction:a,fdNumber:i,pipeGroups:o,controller:n})}for(let[i,s]of o){let a=s.length===1?s[0]:se(s);Te(a,i)}},"pipeOutputAsync"),th=r((e,t,n,o)=>{n==="output"?Te(e.stdio[o],t):Te(t,e.stdio[o]);let i=nh[o];i!==void 0&&(e[i]=t),e.stdio[o]=t},"pipeTransform"),nh=["stdin","stdout","stderr"],rh=r(({subprocess:e,stream:t,direction:n,fdNumber:o,pipeGroups:i,controller:s})=>{if(t===void 0)return;oh(t,s);let[a,c]=n==="output"?[t,e.stdio[o]]:[e.stdio[o],t],l=i.get(a)??[];i.set(a,[...l,c])},"pipeStdioItem"),oh=r((e,{signal:t})=>{_(e)&&ne(e,ih,t)},"setStandardStreamMaxListeners"),ih=2;import Zt from"node:process";import{execFile as sh}from"node:child_process";import va from"node:path/win32";var Na=Zt.platform==="win32",ja=r(e=>e.killDescendants&&!Na?{...e,detached:!0}:e,"getSpawnOptions"),ka=r((e,{killDescendants:t})=>t?(Na?ch:ah).bind(void 0,e):e.kill.bind(e),"getKillFunction"),ah=r((e,t)=>{if(e.pid===void 0)return!1;try{return Zt.kill(-e.pid,t)}catch{return e.kill(t)}},"killDescendantsUnix"),ch=r((e,t)=>{if(e.pid===void 0)return!1;let n=lh();return n===void 0?e.kill(t):(sh(n,["/pid",`${e.pid}`,"/T","/F"],o=>{o&&e.kill(t)}),!0)},"killDescendantsWindows"),lh=r(()=>{let e=[Zt.env.SystemRoot,Zt.env.windir].find(t=>t&&dh(t));return e===void 0?void 0:va.join(e,"System32","taskkill.exe")},"getTaskkillFile"),dh=r(e=>{let{root:t}=va.parse(e);return/^[a-z]:[/\\]/i.test(t)},"isWindowsDriveAbsolutePath");var ee=[];ee.push("SIGHUP","SIGINT","SIGTERM"),process.platform!=="win32"&&ee.push("SIGALRM","SIGABRT","SIGVTALRM","SIGXCPU","SIGXFSZ","SIGUSR2","SIGTRAP","SIGSYS","SIGQUIT","SIGIOT"),process.platform==="linux"&&ee.push("SIGIO","SIGPOLL","SIGPWR","SIGSTKFLT");var qt=r(e=>!!e&&typeof e=="object"&&typeof e.removeListener=="function"&&typeof e.emit=="function"&&typeof e.reallyExit=="function"&&typeof e.listeners=="function"&&typeof e.kill=="function"&&typeof e.pid=="number"&&typeof e.on=="function","processOk"),Sr=Symbol.for("signal-exit emitter"),yr=globalThis,fh=Object.defineProperty.bind(Object),br=class{static{r(this,"Emitter")}emitted={afterExit:!1,exit:!1};listeners={afterExit:[],exit:[]};count=0;id=Math.random();constructor(){if(yr[Sr])return yr[Sr];fh(yr,Sr,{value:this,writable:!1,enumerable:!1,configurable:!1})}on(t,n){this.listeners[t].push(n)}removeListener(t,n){let o=this.listeners[t],i=o.indexOf(n);i!==-1&&(i===0&&o.length===1?o.length=0:o.splice(i,1))}emit(t,n,o){if(this.emitted[t])return!1;this.emitted[t]=!0;let i=!1;for(let s of this.listeners[t])i=s(n,o)===!0||i;return t==="exit"&&(i=this.emit("afterExit",n,o)||i),i}},en=class{static{r(this,"SignalExitBase")}},uh=r(e=>({onExit(t,n){return e.onExit(t,n)},load(){return e.load()},unload(){return e.unload()}}),"signalExitWrap"),wr=class extends en{static{r(this,"SignalExitFallback")}onExit(){return()=>{}}load(){}unload(){}},xr=class extends en{static{r(this,"SignalExit")}#t=Er.platform==="win32"?"SIGINT":"SIGHUP";#n=new br;#e;#r;#i;#o={};#s=!1;constructor(t){super(),this.#e=t,this.#o={};for(let n of ee)this.#o[n]=()=>{let o=this.#e.listeners(n),{count:i}=this.#n,s=t;if(typeof s.__signal_exit_emitter__=="object"&&typeof s.__signal_exit_emitter__.count=="number"&&(i+=s.__signal_exit_emitter__.count),o.length===i){this.unload();let a=this.#n.emit("exit",null,n),c=n==="SIGHUP"?this.#t:n;a||t.kill(t.pid,c)}};this.#i=t.reallyExit,this.#r=t.emit}onExit(t,n){if(!qt(this.#e))return()=>{};this.#s===!1&&this.load();let o=n?.alwaysLast?"afterExit":"exit";return this.#n.on(o,t),()=>{this.#n.removeListener(o,t),this.#n.listeners.exit.length===0&&this.#n.listeners.afterExit.length===0&&this.unload()}}load(){if(!this.#s){this.#s=!0,this.#n.count+=1;for(let t of ee)try{let n=this.#o[t];n&&this.#e.on(t,n)}catch{}this.#e.emit=(t,...n)=>this.#c(t,...n),this.#e.reallyExit=t=>this.#a(t)}}unload(){this.#s&&(this.#s=!1,ee.forEach(t=>{let n=this.#o[t];if(!n)throw new Error("Listener not defined for signal: "+t);try{this.#e.removeListener(t,n)}catch{}}),this.#e.emit=this.#r,this.#e.reallyExit=this.#i,this.#n.count-=1)}#a(t){return qt(this.#e)?(this.#e.exitCode=t||0,this.#n.emit("exit",this.#e.exitCode,null),this.#i.call(this.#e,this.#e.exitCode)):0}#c(t,...n){let o=this.#r;if(t==="exit"&&qt(this.#e)){typeof n[0]=="number"&&(this.#e.exitCode=n[0]);let i=o.call(this.#e,t,...n);return this.#n.emit("exit",this.#e.exitCode,null),i}else return o.call(this.#e,t,...n)}},Er=globalThis.process,{onExit:Ga,load:FD,unload:_D}=uh(qt(Er)?new xr(Er):new wr);import{addAbortListener as ph}from"node:events";var Wa=r((e,{cleanup:t,detached:n},{signal:o})=>{if(!t||n)return;let i=Ga(()=>{e()});ph(o,()=>{i()})},"cleanupOnExit");var tn=r(()=>({readableDestroy:new WeakMap,writableFinal:new WeakMap,writableDestroy:new WeakMap}),"initializeConcurrentStreams"),Xe=r((e,t,n)=>{let o=e[n];o.has(t)||o.set(t,[]);let i=o.get(t),s=k();return i.push(s),{resolve:s.resolve.bind(s),promises:i}},"addConcurrentStream"),Oe=r(async({resolve:e,promises:t},n)=>{e();let[o]=await Promise.race([Promise.allSettled([!0,n]),Promise.all([!1,...t])]);return!o},"waitForConcurrentStreams");import{on as mh}from"node:events";import{getDefaultHighWaterMark as hh}from"node:stream";var nn=r(({subprocessStdout:e,subprocess:t,binary:n,shouldEncode:o,encoding:i,preserveNewlines:s})=>{let a=new AbortController;return gh(t,a),za({stream:e,controller:a,binary:n,shouldEncode:!e.readableObjectMode&&o,encoding:i,shouldSplit:!e.readableObjectMode,preserveNewlines:s})},"iterateOnSubprocessStream"),gh=r(async(e,t)=>{try{await e}catch{}finally{t.abort()}},"stopReadingOnExit"),Tr=r(({stream:e,onStreamEnd:t,lines:n,encoding:o,stripFinalNewline:i,allMixed:s})=>{let a=new AbortController;Sh(t,a,e);let c=e.readableObjectMode&&!s;return za({stream:e,controller:a,binary:o==="buffer",shouldEncode:!c,encoding:o,shouldSplit:!c&&n,preserveNewlines:!i})},"iterateForResult"),Sh=r(async(e,t,n)=>{try{await e}catch{n.destroy()}finally{t.abort()}},"stopReadingOnStreamEnd"),za=r(({stream:e,controller:t,binary:n,shouldEncode:o,encoding:i,shouldSplit:s,preserveNewlines:a})=>{let c=mh(e,"data",{signal:t.signal,highWaterMark:Va,highWatermark:Va});return yh({onStdoutChunk:c,controller:t,binary:n,shouldEncode:o,encoding:i,shouldSplit:s,preserveNewlines:a})},"iterateOnStream"),Or=hh(!0),Va=Or,yh=r(async function*({onStdoutChunk:e,controller:t,binary:n,shouldEncode:o,encoding:i,shouldSplit:s,preserveNewlines:a}){let c=bh({binary:n,shouldEncode:o,encoding:i,shouldSplit:s,preserveNewlines:a});try{for await(let[l]of e)yield*ie(l,c,0)}catch(l){if(!t.signal.aborted)throw l}finally{yield*ze(c)}},"iterateOnData"),bh=r(({binary:e,shouldEncode:t,encoding:n,shouldSplit:o,preserveNewlines:i})=>[Ht(e,n,!t),Yt(e,i,!o,{})].filter(Boolean),"getGenerators");var Ae=r((e,t,{from:n,binary:o=!1,preserveNewlines:i=!1}={})=>{let s=o||M.has(t),a=Ee(e,n),c=nn({subprocessStdout:a,subprocess:e,binary:s,shouldEncode:!0,encoding:t,preserveNewlines:i});return wh(c,a,e)},"createIterable"),wh=r(async function*(e,t,n){try{yield*e}finally{t.readable&&t.destroy(),await n}},"iterateOnStdoutData");import{finished as xh}from"node:stream/promises";var Je=r(async(e,t,n,{isSameDirection:o,stopOnExit:i=!1}={})=>{let s=Eh(e,n),a=new AbortController;try{await Promise.race([...i?[n.exitPromise]:[],xh(e,{cleanup:!0,signal:a.signal})])}catch(c){s.stdinCleanedUp||Ah(c,t,n,o)}finally{a.abort()}},"waitForStream"),Eh=r((e,{originalStreams:t,subprocess:n})=>{let[o]=t,i={stdinCleanedUp:!1};return e===o&&Th(e,n,i),i},"handleStdinDestroy"),Th=r((e,t,n)=>{let{_destroy:o}=e;e._destroy=(...i)=>{Oh(t,n),o.call(e,...i)}},"spyOnStdinDestroy"),Oh=r(({exitCode:e,signalCode:t},n)=>{(e!==null||t!==null)&&(n.stdinCleanedUp=!0)},"setStdinCleanedUp"),Ah=r((e,t,n,o)=>{if(!Ih(e,t,n,o))throw e},"handleStreamError"),Ih=r((e,t,n,o=!0)=>n.propagating?Ya(e)||Ie(e):(n.propagating=!0,Ar(n,t)===o?Ya(e):Ie(e)),"shouldIgnoreStreamError"),Ar=r(({fileDescriptors:e},t)=>t!=="all"&&e[t].direction==="input","isInputFileDescriptor"),Ie=r(e=>e?.code==="ERR_STREAM_PREMATURE_CLOSE","isStreamAbort"),Ya=r(e=>e?.code==="EPIPE","isStreamEpipe");import{finished as Ha}from"node:stream/promises";var Ir=r(async e=>{if(e!==void 0)try{await Dr(e)}catch{}},"safeWaitForSubprocessStdin"),Ka=r(async e=>{if(e!==void 0)try{await Rr(e)}catch{}},"safeWaitForSubprocessStdout"),Dr=r(async e=>{await Ha(e,{cleanup:!0,readable:!1,writable:!0})},"waitForSubprocessStdin"),Rr=r(async e=>{await Ha(e,{cleanup:!0,readable:!0,writable:!1})},"waitForSubprocessStdout"),rn=r(async(e,t)=>{if(await e,t)throw t},"waitForSubprocess"),on=r((e,t,n)=>{n&&!Ie(n)?e.destroy(n):t&&e.destroy()},"destroyOtherStream");import{Readable as Dh}from"node:stream";import{callbackify as Rh}from"node:util";var sn=r(({subprocess:e,concurrentStreams:t,encoding:n},{from:o,binary:i=!0,preserveNewlines:s=!0}={})=>{let a=i||M.has(n),{subprocessStdout:c,waitReadableDestroy:l}=Mr(e,o,t),{readableEncoding:d,readableObjectMode:f,readableHighWaterMark:u}=Cr(c,a),{read:p,onStdoutDataDone:m}=Pr({subprocessStdout:c,subprocess:e,binary:a,encoding:n,preserveNewlines:s}),g=new Dh({read:p,destroy:Rh(Br.bind(void 0,{subprocessStdout:c,subprocess:e,waitReadableDestroy:l})),highWaterMark:u,objectMode:f,encoding:d});return Lr({subprocessStdout:c,onStdoutDataDone:m,readable:g,subprocess:e}),g},"createReadable"),Mr=r((e,t,n)=>{let o=Ee(e,t),i=Xe(n,o,"readableDestroy");return{subprocessStdout:o,waitReadableDestroy:i}},"getSubprocessStdout"),Cr=r(({readableEncoding:e,readableObjectMode:t,readableHighWaterMark:n},o)=>o?{readableEncoding:e,readableObjectMode:t,readableHighWaterMark:n}:{readableEncoding:e,readableObjectMode:!0,readableHighWaterMark:Or},"getReadableOptions"),Pr=r(({subprocessStdout:e,subprocess:t,binary:n,encoding:o,preserveNewlines:i})=>{let s=k(),a=nn({subprocessStdout:e,subprocess:t,binary:n,shouldEncode:!n,encoding:o,preserveNewlines:i});return{read(){Mh(this,a,s)},onStdoutDataDone:s}},"getReadableMethods"),Mh=r(async(e,t,n)=>{try{let{value:o,done:i}=await t.next();i?n.resolve():e.push(o)}catch{}},"onRead"),Lr=r(async({subprocessStdout:e,onStdoutDataDone:t,readable:n,subprocess:o,subprocessStdin:i})=>{try{await Rr(e),await o,await Ir(i),await t,n.readable&&n.push(null)}catch(s){await Ir(i),Xa(n,await Ch(o,s))}},"onStdoutFinished"),Ch=r(async(e,t)=>{if(t.code!=="ERR_STREAM_PREMATURE_CLOSE")return t;try{await e}catch(n){return n}return t},"getPrematureCloseError"),Br=r(async({subprocessStdout:e,subprocess:t,waitReadableDestroy:n},o)=>{await Oe(n,t)&&(Xa(e,o),await rn(t,o))},"onReadableDestroy"),Xa=r((e,t)=>{on(e,e.readable,t)},"destroyOtherReadable");import{Readable as Ph,Writable as Lh,Duplex as Bh}from"node:stream";var an=r((e,t)=>Ph.toWeb(e.readable(t)),"createReadableStream"),Ja=r((e,t)=>Lh.toWeb(e.writable(t)),"createWritableStream"),Qa=r((e,t)=>Bh.toWeb(e.duplex(t)),"createTransformStream");var qa=r(({source:e,sourcePromise:t,boundOptions:n,createNested:o},...i)=>{let s=at(),{destination:a,destinationStream:c,destinationError:l,from:d,unpipeSignal:f}=Fh(n,o,i),{sourceStream:u,sourceError:p}=Uh(e,d),{options:m,fileDescriptors:g}=W.get(e);return{sourcePromise:t,sourceStream:u,sourceOptions:m,sourceError:p,destination:a,destinationStream:c,destinationError:l,unpipeSignal:f,fileDescriptors:g,startTime:s}},"normalizePipeArguments"),Fh=r((e,t,n)=>{try{let{destination:o,pipeOptions:{from:i,to:s,unpipeSignal:a}={}}=_h(e,t,...n),c=zt(o,s);return{destination:o,destinationStream:c,from:i,unpipeSignal:a}}catch(o){return{destinationError:o}}},"getDestinationStream"),_h=r((e,t,n,...o)=>{if(Array.isArray(n))return{destination:t(Za,e)(n,...o),pipeOptions:e};if(typeof n=="string"||n instanceof URL||gn(n)){if(Object.keys(e).length>0)throw new TypeError('Please use .pipe("file", ..., options) or .pipe(execa("file", ..., options)) instead of .pipe(options)("file", ...).');let[i,s,a]=Qe(n,...o);return{destination:t(Za)(i,s,a),pipeOptions:a}}if(W.has(n)){if(Object.keys(e).length>0)throw new TypeError("Please use .pipe(options)`command` or .pipe($(options)`command`) instead of .pipe(options)($`command`).");return{destination:n,pipeOptions:o[0]}}throw new TypeError(`The first argument must be a template string, an options object, or an Execa subprocess: ${n}`)},"getDestination"),Za=r(({options:e})=>({options:{...e,stdin:"pipe",piped:!0}}),"mapDestinationArguments"),Uh=r((e,t)=>{try{return{sourceStream:Ee(e,t)}}catch(n){return{sourceError:n}}},"getSourceStream");var tc=r(({sourceStream:e,sourceError:t,destinationStream:n,destinationError:o,fileDescriptors:i,sourceOptions:s,startTime:a})=>{let c=$h({sourceStream:e,sourceError:t,destinationStream:n,destinationError:o});if(c!==void 0)throw Fr({error:c,fileDescriptors:i,sourceOptions:s,startTime:a})},"handlePipeArgumentsError"),$h=r(({sourceStream:e,sourceError:t,destinationStream:n,destinationError:o})=>{if(t!==void 0&&o!==void 0)return o;if(o!==void 0)return gr(e),o;if(t!==void 0)return hr(n),t},"getPipeArgumentsError"),Fr=r(({error:e,fileDescriptors:t,sourceOptions:n,startTime:o})=>be({error:e,command:ec,escapedCommand:ec,fileDescriptors:t,options:n,startTime:o,isSync:!1}),"createNonCommandError"),ec="source.pipe(destination)";var nc=r(async e=>{let[{status:t,reason:n,value:o=n},{status:i,reason:s,value:a=s}]=await e;if(a.pipedFrom.includes(o)||a.pipedFrom.push(o),i==="rejected")throw a;if(t==="rejected")throw o;return a},"waitForBothSubprocesses");import{finished as vh}from"node:stream/promises";var rc=r((e,t,n)=>{let o=cn.has(t)?jh(e,t):Nh(e,t);return ne(e,Gh,n.signal),ne(t,Wh,n.signal),kh(t),o},"pipeSubprocessStream"),Nh=r((e,t)=>{let n=se([e]);return Te(n,t),cn.set(t,n),n},"pipeFirstSubprocessStream"),jh=r((e,t)=>{let n=cn.get(t);return n.add(e),n},"pipeMoreSubprocessStream"),kh=r(async e=>{try{await vh(e,{cleanup:!0,readable:!1,writable:!0})}catch{}cn.delete(e)},"cleanupMergedStreamsMap"),cn=new WeakMap,Gh=2,Wh=1;import{aborted as zh}from"node:util";var oc=r((e,t)=>e===void 0?[]:[Vh(e,t)],"unpipeOnAbort"),Vh=r(async(e,{sourceStream:t,mergedStream:n,fileDescriptors:o,sourceOptions:i,startTime:s})=>{await zh(e,t),await n.remove(t);let a=new Error("Pipe canceled by `unpipeSignal` option.");throw Fr({error:a,fileDescriptors:o,sourceOptions:i,startTime:s})},"unpipeOnSignalAbort");var ln=r((e,...t)=>{if(T(t[0]))return ln.bind(void 0,{...e,boundOptions:{...e.boundOptions,...t[0]}});let{destination:n,...o}=qa(e,...t),i=new AbortController,s=og({...o,destination:n,pipeFailureController:i});return s.pipe=ln.bind(void 0,{...e,source:n,sourcePromise:s,boundOptions:{}}),Yh(s,n,i.signal),s},"pipeToSubprocess"),Yh=r((e,t,n)=>{t!==void 0&&(Hh(e,t),Qh(e,t,n))},"forwardDestinationMethods"),Hh=r((e,t)=>{let n=W.get(t);W.set(e,n),e.stdio=t.stdio,e.all=t.all;let{options:{encoding:o}}=n,i=tn();e[Symbol.asyncIterator]=Ae.bind(void 0,e,o,{}),e.iterable=Ae.bind(void 0,e,o),e.readable=Xh.bind(void 0,e,{subprocess:e,concurrentStreams:i,encoding:o}),e.readableStream=an.bind(void 0,e),Kh(e,t)},"forwardReadableMethods"),Kh=r((e,t)=>{if(t.all===void 0){e.all=void 0;return}Object.defineProperty(e,"all",{get(){ic(e,t.all);let n=e.readable({from:"all"});return ic(e,n),n},enumerable:!0,configurable:!0})},"forwardAll"),ic=r((e,t)=>{Object.defineProperty(e,"all",{value:t,writable:!0,enumerable:!0,configurable:!0})},"setAllProperty"),Xh=r((e,t,...n)=>{let o=sn(t,...n);return Jh(e,o),o},"createPipeReadable"),Jh=r(async(e,t)=>{try{await e}catch(n){t.destroy(n)}},"destroyOnPipeFailure"),Qh=r((e,t,n)=>{e.sendMessage=t.sendMessage,e.getOneMessage=Zh.bind(void 0,t,n),e.getEachMessage=tg.bind(void 0,e,t,n)},"forwardIpcMethods"),Zh=r((e,t,...n)=>{let o=new AbortController,i=e.getOneMessage(...sc(n,o.signal,lr));return qh(t,i,o)},"getOnePipeMessage"),qh=r(async(e,t,n)=>{try{return await Promise.race([t,eg(e,n.signal)])}finally{n.abort()}},"waitForOnePipeMessage"),eg=r((e,t)=>new Promise((n,o)=>{if(e.aborted){o(e.reason);return}e.addEventListener("abort",()=>{o(e.reason)},{once:!0,signal:t})}),"getSignalRejection"),tg=r((e,t,n,...o)=>{let i=new AbortController,s=t.getEachMessage(...sc(o,i.signal,dr));return rg(n,i),ng(e,s,i)},"getEachPipeMessage"),ng=r(async function*(e,t,n){try{yield*t}finally{n.abort(),await e}},"iterateOnPipeMessages"),sc=r((e,t,n)=>{if(e[0]===null)return e;let[o]=e;return[{...o,[n]:{signal:t,shouldAwait:!1}}]},"addPipeOptions"),rg=r((e,t)=>{if(e.aborted){t.abort();return}e.addEventListener("abort",()=>{t.abort()},{once:!0,signal:t.signal})},"abortOnSignal"),og=r(async({sourcePromise:e,sourceStream:t,sourceOptions:n,sourceError:o,destination:i,destinationStream:s,destinationError:a,unpipeSignal:c,fileDescriptors:l,startTime:d,pipeFailureController:f})=>{let u=new AbortController;try{let p=ig(e,i);tc({sourceStream:t,sourceError:o,destinationStream:s,destinationError:a,fileDescriptors:l,sourceOptions:n,startTime:d});let m=rc(t,s,u);return await Promise.race([nc(p),...oc(c,{sourceStream:t,mergedStream:m,sourceOptions:n,fileDescriptors:l,startTime:d})])}catch(p){throw f.abort(p),p}finally{u.abort()}},"handlePipePromise"),ig=r((e,t)=>Promise.allSettled([e,t]),"getSubprocessPromises");import{setImmediate as sg}from"node:timers/promises";var cc=r(async({stream:e,onStreamEnd:t,fdNumber:n,encoding:o,buffer:i,maxBuffer:s,lines:a,allMixed:c,stripFinalNewline:l,verboseInfo:d,streamInfo:f})=>{let u=ag({stream:e,onStreamEnd:t,fdNumber:n,encoding:o,allMixed:c,verboseInfo:d,streamInfo:f});if(!i){await Promise.all([cg(e),u]);return}let p=er(l,n),m=Tr({stream:e,onStreamEnd:t,lines:a,encoding:o,stripFinalNewline:p,allMixed:c}),[g]=await Promise.all([lg({stream:e,iterable:m,fdNumber:n,encoding:o,maxBuffer:s,lines:a}),u]);return g},"getStreamOutput"),ag=r(async({stream:e,onStreamEnd:t,fdNumber:n,encoding:o,allMixed:i,verboseInfo:s,streamInfo:{fileDescriptors:a}})=>{if(!Jt({stdioItems:a[n]?.stdioItems,encoding:o,verboseInfo:s,fdNumber:n}))return;let c=Tr({stream:e,onStreamEnd:t,lines:!0,encoding:o,stripFinalNewline:!0,allMixed:i});await ea(c,e,n,s)},"logOutputAsync"),cg=r(async e=>{await sg(),e.readableFlowing===null&&e.resume()},"resumeStream"),lg=r(async({stream:e,stream:{readableObjectMode:t},iterable:n,fdNumber:o,encoding:i,maxBuffer:s,lines:a})=>{try{return t||a?await Ft(n,{maxBuffer:s}):i==="buffer"?new Uint8Array(await _t(n,{maxBuffer:s})):await $t(n,{maxBuffer:s})}catch(c){return ac(Ki({error:c,stream:e,readableObjectMode:t,lines:a,encoding:i,fdNumber:o}))}},"getStreamContents"),_r=r(async e=>{try{return await e}catch(t){return ac(t)}},"getBufferedData"),ac=r(({bufferedData:e})=>Yr(e)?new Uint8Array(e):e,"handleBufferedData");var lc=r(({subprocess:e,encoding:t,buffer:n,maxBuffer:o,lines:i,stripFinalNewline:s,verboseInfo:a,streamInfo:c})=>e.stdio.map((l,d)=>Ur({stream:l,fdNumber:d,encoding:t,buffer:n[d],maxBuffer:o[d],lines:i[d],allMixed:!1,stripFinalNewline:s,verboseInfo:a,streamInfo:c})),"waitForStdioStreams"),Ur=r(async({stream:e,fdNumber:t,encoding:n,buffer:o,maxBuffer:i,lines:s,allMixed:a,stripFinalNewline:c,verboseInfo:l,streamInfo:d})=>{if(!e)return;let f=Je(e,t,d);if(Ar(d,t)){await f;return}let[u]=await Promise.all([cc({stream:e,onStreamEnd:f,fdNumber:t,encoding:n,buffer:o,maxBuffer:i,lines:s,allMixed:a,stripFinalNewline:c,verboseInfo:l,streamInfo:d}),f]);return u},"waitForSubprocessStream");var dc=r(({stdout:e,stderr:t},{all:n})=>n&&(e||t)?se([e,t].filter(Boolean)):void 0,"makeAllStream"),fc=r(({subprocess:e,all:t,encoding:n,buffer:o,maxBuffer:i,lines:s,stripFinalNewline:a,verboseInfo:c,streamInfo:l})=>Ur({...dg(e,t,o),fdNumber:"all",encoding:n,maxBuffer:i[1]+i[2],lines:s[1]||s[2],allMixed:fg(e,t),stripFinalNewline:a,verboseInfo:c,streamInfo:l}),"waitForAllStream"),dg=r(({stdout:e,stderr:t},n,[,o,i])=>{let s=o||i;return s?o?i?{stream:n,buffer:s}:{stream:e,buffer:s}:{stream:t,buffer:s}:{stream:n,buffer:s}},"getAllStream"),fg=r(({stdout:e,stderr:t},n)=>n&&e&&t&&e.readableObjectMode!==t.readableObjectMode,"getAllMixed");var uc=r(e=>le(e,"ipc"),"shouldLogIpc"),pc=r((e,t)=>{let n=st(e);j({type:"ipc",verboseMessage:n,fdNumber:"ipc",verboseInfo:t})},"logIpcOutput");var mc=r(async({subprocess:e,buffer:t,maxBuffer:n,ipc:o,ipcOutput:i,verboseInfo:s})=>{if(!o)return i;let a=uc(s),c=H(t,"ipc"),l=H(n,"ipc");for await(let d of fr({anyProcess:e,channel:e.channel,isSubprocess:!1,ipc:o,shouldAwait:!1,reference:!0}))c&&(Xi(e,i,l),i.push(d)),a&&pc(d,s);return i},"waitForIpcOutput"),hc=r(async(e,t)=>(await Promise.allSettled([e]),t),"getBufferedIpcOutput");import{once as ug}from"node:events";var gc=r(async({subprocess:e,kill:t,all:n,options:{encoding:o,buffer:i,maxBuffer:s,lines:a,timeoutDuration:c,cancelSignal:l,gracefulCancel:d,forceKillAfterDelay:f,stripFinalNewline:u,ipc:p,ipcInput:m},context:g,verboseInfo:S,fileDescriptors:w,originalStreams:b,onInternalError:E,controller:x})=>{let D=ia(e,g),A={originalStreams:b,fileDescriptors:w,subprocess:e,exitPromise:D,propagating:!1},R=lc({subprocess:e,encoding:o,buffer:i,maxBuffer:s,lines:a,stripFinalNewline:u,verboseInfo:S,streamInfo:A}),C=fc({subprocess:e,all:n,encoding:o,buffer:i,maxBuffer:s,lines:a,stripFinalNewline:u,verboseInfo:S,streamInfo:A}),N=[],F=mc({subprocess:e,buffer:i,maxBuffer:s,ipc:p,ipcOutput:N,verboseInfo:S}),y=pg(b,e,A),I=mg(w,A);try{return await Promise.race([Promise.all([{},sa(D),Promise.all(R),C,F,Ei(e,m,p),...y,...I]),E,hg(e,x),...Si(t,c,g,x),...vo({kill:t,cancelSignal:l,gracefulCancel:d,context:g,controller:x}),...hi({subprocess:e,kill:t,cancelSignal:l,gracefulCancel:d,forceKillAfterDelay:f,context:g,controller:x})])}catch(P){return g.terminationReason??="other",Promise.all([{error:P},D,Promise.all(R.map(V=>_r(V))),_r(C),hc(F,N),Promise.allSettled(y),Promise.allSettled(I)])}},"waitForSubprocessResult"),pg=r((e,t,n)=>e.map((o,i)=>o===t.stdio[i]?void 0:Je(o,i,n)),"waitForOriginalStreams"),mg=r((e,t)=>e.flatMap(({stdioItems:n},o)=>n.filter(({value:i,stream:s=i})=>v(s,{checkOpen:!1})&&!_(s)).map(({type:i,value:s,stream:a=s})=>Je(a,o,t,{isSameDirection:B.has(i),stopOnExit:i==="native"}))),"waitForCustomStreamsEnd"),hg=r(async(e,{signal:t})=>{let[n]=await ug(e,"error",{signal:t});throw n},"throwOnSubprocessError");import{Writable as gg}from"node:stream";import{callbackify as Sc}from"node:util";var bc=r(({subprocess:e,concurrentStreams:t},{to:n}={})=>{let{subprocessStdin:o,waitWritableFinal:i,waitWritableDestroy:s}=$r(e,n,t),a=new gg({...vr(o,e,i),destroy:Sc(jr.bind(void 0,{subprocessStdin:o,subprocess:e,waitWritableFinal:i,waitWritableDestroy:s})),highWaterMark:o.writableHighWaterMark,objectMode:o.writableObjectMode});return Nr(o,a,void 0,e),a},"createWritable"),$r=r((e,t,n)=>{let o=zt(e,t),i=Xe(n,o,"writableFinal"),s=Xe(n,o,"writableDestroy");return{subprocessStdin:o,waitWritableFinal:i,waitWritableDestroy:s}},"getSubprocessStdin"),vr=r((e,t,n)=>({write:Sg.bind(void 0,e),final:Sc(yg.bind(void 0,e,t,n))}),"getWritableMethods"),Sg=r((e,t,n,o)=>{e.write(t,n)?o():e.once("drain",o)},"onWrite"),yg=r(async(e,t,n)=>{await Oe(n,t)&&(e.writable&&e.end(),await t)},"onWritableFinal"),Nr=r(async(e,t,n,o)=>{try{await Dr(e),await o,t.writable&&t.end()}catch(i){await Ka(n),yc(t,await bg(o,i))}},"onStdinFinished"),bg=r(async(e,t)=>{if(!wg(t))return t;try{await e}catch(n){return n}return t},"getSubprocessError"),wg=r(e=>e===void 0||Ie(e),"shouldUseSubprocessError"),jr=r(async({subprocessStdin:e,subprocess:t,waitWritableFinal:n,waitWritableDestroy:o},i)=>{await Oe(n,t),await Oe(o,t)&&(yc(e,i),await rn(t,i))},"onWritableDestroy"),yc=r((e,t)=>{on(e,e.writable,t)},"destroyOtherWritable");import{Duplex as xg}from"node:stream";import{callbackify as Eg}from"node:util";var wc=r(({subprocess:e,concurrentStreams:t,encoding:n},{from:o,to:i,binary:s=!0,preserveNewlines:a=!0}={})=>{let c=s||M.has(n),{subprocessStdout:l,waitReadableDestroy:d}=Mr(e,o,t),{subprocessStdin:f,waitWritableFinal:u,waitWritableDestroy:p}=$r(e,i,t),{readableEncoding:m,readableObjectMode:g,readableHighWaterMark:S}=Cr(l,c),{read:w,onStdoutDataDone:b}=Pr({subprocessStdout:l,subprocess:e,binary:c,encoding:n,preserveNewlines:a}),E=new xg({read:w,...vr(f,e,u),destroy:Eg(Tg.bind(void 0,{subprocessStdout:l,subprocessStdin:f,subprocess:e,waitReadableDestroy:d,waitWritableFinal:u,waitWritableDestroy:p})),readableHighWaterMark:S,writableHighWaterMark:f.writableHighWaterMark,readableObjectMode:g,writableObjectMode:f.writableObjectMode,encoding:m});return Lr({subprocessStdout:l,onStdoutDataDone:b,readable:E,subprocess:e,subprocessStdin:f}),Nr(f,E,l,e),E},"createDuplex"),Tg=r(async({subprocessStdout:e,subprocessStdin:t,subprocess:n,waitReadableDestroy:o,waitWritableFinal:i,waitWritableDestroy:s},a)=>{await Promise.all([Br({subprocessStdout:e,subprocess:n,waitReadableDestroy:o},a),jr({subprocessStdin:t,subprocess:n,waitWritableFinal:i,waitWritableDestroy:s},a)])},"onDuplexDestroy");var xc=r((e,{encoding:t})=>{let n=tn();e.readable=sn.bind(void 0,{subprocess:e,concurrentStreams:n,encoding:t}),e.writable=bc.bind(void 0,{subprocess:e,concurrentStreams:n}),e.duplex=wc.bind(void 0,{subprocess:e,concurrentStreams:n,encoding:t}),e.readableStream=an.bind(void 0,e),e.writableStream=Ja.bind(void 0,e),e.transformStream=Qa.bind(void 0,e),e.iterable=Ae.bind(void 0,e,t),e[Symbol.asyncIterator]=Ae.bind(void 0,e,t,{})},"addConvertedStreams");var Ec=r((e,t)=>Object.assign(e,t),"mergePromise");import{setMaxListeners as Og}from"node:events";import{spawn as Ag}from"node:child_process";var Tc=r((e,t,n,o)=>{let{file:i,commandArguments:s,command:a,escapedCommand:c,startTime:l,verboseInfo:d,options:f,fileDescriptors:u}=Ig(e,t,n),{subprocess:p,promise:m,kill:g,all:S,convertedStreams:w}=Rg({file:i,commandArguments:s,options:f,startTime:l,verboseInfo:d,command:a,escapedCommand:c,fileDescriptors:u}),b=Mg({promise:m,nodeChildProcess:p,kill:g,all:S,convertedStreams:w,options:f});return b.pipe=ln.bind(void 0,{source:b,sourcePromise:m,boundOptions:{},createNested:o}),W.set(b,{options:f,fileDescriptors:u}),b},"execaCoreAsync"),Ig=r((e,t,n)=>{let{command:o,escapedCommand:i,startTime:s,verboseInfo:a}=ct(e,t,n),{file:c,commandArguments:l,options:d}=Rt(e,t,n),f=Dg(d),u=Ra(f,a);return{file:c,commandArguments:l,command:o,escapedCommand:i,startTime:s,verboseInfo:a,options:f,fileDescriptors:u}},"handleAsyncArguments"),Dg=r(({timeout:e,signal:t,...n})=>{if(t!==void 0)throw new TypeError('The "signal" option has been renamed to "cancelSignal" instead.');return{...n,timeoutDuration:e}},"handleAsyncOptions"),Rg=r(({file:e,commandArguments:t,options:n,startTime:o,verboseInfo:i,command:s,escapedCommand:a,fileDescriptors:c})=>{let l;try{l=Ag(...Mt(e,t,ja(n)))}catch(w){return Oa({error:w,command:s,escapedCommand:a,fileDescriptors:c,options:n,startTime:o,verboseInfo:i})}let d=new AbortController;Og(1/0,d.signal);let f=[...l.stdio];$a(l,c,d),li(l,n);let u={},p=k(),m=Uo.bind(void 0,{kill:ka(l,n),options:n,onInternalError:p,context:u,controller:d});Wa(m,n,d);let g=dc(l,n),S=Pg({subprocess:l,kill:m,all:g,options:n,startTime:o,verboseInfo:i,fileDescriptors:c,originalStreams:f,command:s,escapedCommand:a,context:u,onInternalError:p,controller:d});return{subprocess:l,promise:S,kill:m,all:g}},"spawnSubprocessAsync"),Mg=r(({promise:e,nodeChildProcess:t,kill:n,all:o,convertedStreams:i,options:s})=>{let a=Ec(e,Cg(t,o));return a.kill=n??a.kill,i===void 0?xc(a,s):Object.assign(a,i),ha(a,t,s),a},"getSubprocessPromise"),Cg=r((e,t)=>({nodeChildProcess:e,pid:e.pid,stdin:e.stdin,stdout:e.stdout,stderr:e.stderr,stdio:e.stdio,all:t,kill:e.kill.bind(e)}),"getSubprocessProperties"),Pg=r(async({subprocess:e,kill:t,all:n,options:o,startTime:i,verboseInfo:s,fileDescriptors:a,originalStreams:c,command:l,escapedCommand:d,context:f,onInternalError:u,controller:p})=>{let[m,[g,S],w,b,E]=await gc({subprocess:e,kill:t,all:n,options:o,context:f,verboseInfo:s,fileDescriptors:a,originalStreams:c,onInternalError:u,controller:p});p.abort(),u.resolve();let x=w.map((R,C)=>J(R,o,C)),D=J(b,o,"all"),A=Lg({errorInfo:m,exitCode:g,signal:S,stdio:x,all:D,ipcOutput:E,context:f,options:o,command:l,escapedCommand:d,startTime:i});return we(A,s,o)},"handlePromise"),Lg=r(({errorInfo:e,exitCode:t,signal:n,stdio:o,all:i,ipcOutput:s,context:a,options:c,command:l,escapedCommand:d,startTime:f})=>"error"in e?je({error:e.error,command:l,escapedCommand:d,timedOut:a.terminationReason==="timeout",isCanceled:a.terminationReason==="cancel"||a.terminationReason==="gracefulCancel",isGracefullyCanceled:a.terminationReason==="gracefulCancel",isMaxBuffer:e.error instanceof G,isForcefullyTerminated:a.isForcefullyTerminated,exitCode:t,signal:n,stdio:o,all:i,ipcOutput:s,options:c,startTime:f,isSync:!1}):Nt({command:l,escapedCommand:d,stdio:o,all:i,ipcOutput:s,options:c,startTime:f}),"getAsyncResult");var dn=r((e,t)=>{let n={__proto__:null,...e},o=Object.fromEntries(Object.entries(t).map(([i,s])=>[i,Bg(i,n[i],s)]));return{...n,...o}},"mergeOptions"),Bg=r((e,t,n)=>Fg.has(e)&&T(t)&&T(n)?{...t,...n}:n,"mergeOption"),Fg=new Set(["env",...En]);var De=r((e,t,n,o)=>{let i=r((a,c,l)=>De(a,c,n,l),"createNested"),s=r((...a)=>_g({mapArguments:e,deepOptions:n,boundOptions:t,setBoundExeca:o,createNested:i},...a),"boundExeca");return o!==void 0&&o(s,i,t),s},"createExeca"),_g=r(({mapArguments:e,deepOptions:t={},boundOptions:n={},setBoundExeca:o,createNested:i},s,...a)=>{if(T(s))return i(e,dn(n,s),o);let{file:c,commandArguments:l,options:d,isSync:f}=Ug({mapArguments:e,firstArgument:s,nextArguments:a,deepOptions:t,boundOptions:n});return f?ca(c,l,d):Tc(c,l,d,i)},"callBoundExeca"),Ug=r(({mapArguments:e,firstArgument:t,nextArguments:n,deepOptions:o,boundOptions:i})=>{let s=Qr(t)?Zr(t,n):[t,...n],[a,c,l]=Qe(...s),d=dn(dn(o,i),l),{options:f=d,isSync:u=!1}=e({options:d});return{file:a,commandArguments:c,options:f,isSync:u}},"parseArguments");var Ac=r((e,t,n)=>{e.sync=t($g,n),e.s=e.sync},"setScriptSync"),Ic=r(({options:e})=>Oc(e),"mapScriptAsync"),$g=r(({options:e})=>({...Oc(e),isSync:!0}),"mapScriptSync"),Oc=r(e=>({options:{...vg(e),...e}}),"getScriptOptions"),vg=r(({input:e,inputFile:t,stdio:n})=>e===void 0&&t===void 0&&n===void 0?{stdin:"inherit"}:{},"getScriptStdinOption"),Dc={preferLocal:!0};var Rc=De(()=>({})),fP=De(()=>({isSync:!0})),uP=De(bi),pP=De(Ic,{},Dc,Ac),{sendMessage:Ng,getOneMessage:jg,getEachMessage:kg,getCancelSignal:Gg}=ga();import{accessSync as Wg}from"node:fs";import{basename as zg,isAbsolute as Vg}from"node:path";import"./process-contracts.js";import{captureProcessCreationIdentity as Yg,inspectProcessLiveness as Hg}from"./process-identity.js";import{MAX_SUPERVISED_PROCESS_CAPTURE_BYTES as Kg}from"./process-limits.js";import{requireReadySignal as Xg,startReadyDeadline as Mc}from"./ready-deadline.js";import{toError as fn}from"../kernel/error-serialization.js";import{recordWork as Jg}from"../kernel/work-metrics.js";import{}from"./process-contracts.js";import{terminateAttributedProcessLineage as _P,terminateOwnedPosixProcessGroup as UP}from"./recovery.js";import{cleanupExitedProcessGroup as Cc,processGroupExists as Pc}from"./process-group.js";import{createShutdownDeadline as Qg,DEFAULT_SHUTDOWN_TIMEOUT_MS as Re,FORCE_TERMINATION_WAIT_MS as kr,PROCESS_STOP_LIMIT_MS as Zg}from"./shutdown.js";import{settleStoppable as qg}from"./stoppable-settlement.js";import{terminateWindowsProcessTree as eS}from"./windows-native.js";import{cleanupExitedProcessGroup as vP}from"./process-group.js";function CP(e){if(_c(e),e.signal.aborted)return Promise.resolve(pn());try{if(process.platform==="win32")return nS(e);let t=e.timeoutStartsWhenReady;if(t!==void 0)return tS(e,t);let n=un(e,"bounded-capture",{cancelSignal:e.signal,forceKillAfterDelay:Re,timeout:e.timeoutMs});return Bc(n)}catch(t){return Promise.resolve(aS(t))}}r(CP,"runManagedProcess");function tS(e,t){let n=new AbortController,o=!1,i=un(e,"bounded-capture",{cancelSignal:n.signal,forceKillAfterDelay:Re}),s=r(()=>{n.abort()},"onAbort");e.signal.addEventListener("abort",s,{once:!0});let a=Mc({onExpired:r(()=>{n.signal.aborted||(o=!0,n.abort())},"onExpired"),ready:t,stdout:i.stdout,timeoutMs:e.timeoutMs});return i.finally(()=>{a(),e.signal.removeEventListener("abort",s)}),Bc(i).then(c=>o&&c.cancelled?{...c,cancelled:!1,timedOut:o}:c)}r(tS,"runReadyManagedProcess");function nS(e){let t=un(e,"bounded-capture",{forceKillAfterDelay:!1,killDescendants:!1}),n=Date.now()+1e3,o=qg(t,kr),i=r(c=>{if(o.stop!==null)return;let l=t.nodeChildProcess,d=l.exitCode!==null||l.signalCode!==null;o.stopWith({reason:c,termination:d?Promise.resolve(null):rS(t,n)})},"stop"),s=r(()=>{i("cancelled")},"onAbort");e.signal.addEventListener("abort",s,{once:!0});let a=Lc(e.timeoutMs,e.timeoutStartsWhenReady,t.stdout,()=>{i("timedOut")});return(async()=>{let c;try{c=await o.completion}finally{e.signal.removeEventListener("abort",s),a()}let l={cancelled:c.stop?.reason==="cancelled",timedOut:c.stop?.reason==="timedOut"};if(!c.abandoned)return{...Wr(c.result,!0,c.terminationError),...l};let d=t.nodeChildProcess;for(let f of[t.stdin,t.stdout,t.stderr])f.destroy();return d.unref(),{...pn(),...l,exitCode:d.exitCode,exitSignal:d.signalCode,terminationError:c.terminationError}})()}r(nS,"runWindowsManagedProcess");async function rS(e,t){if(e.pid===void 0)return null;try{return await eS(e.pid,t,Re+kr),null}catch(n){return oS(e.nodeChildProcess),fn(n)}}r(rS,"terminateWindowsTree");function oS(e){e.exitCode!==null||e.signalCode!==null||e.kill()}r(oS,"terminateRootByHandle");var Gr=class extends Error{static{r(this,"ProcessExitedBeforeReadyError")}exitCode;exitSignal;constructor(t,n){super("Process exited before becoming ready"),this.exitCode=t,this.exitSignal=n}},iS=2**31-1;function PP(e){if(_c(e),e.signal.aborted)throw new Error(`${e.displayLabel} was cancelled before its process could start`);let t=e.timeoutStartsWhenReady,n=t===void 0?null:new AbortController,o=un(e,e.outputMode,{forceKillAfterDelay:e.shutdownTimeoutMs===void 0?Re:!1,...n!==null?{cancelSignal:n.signal}:e.timeoutMs===null?{}:{timeout:e.timeoutMs}}),i=o.pid;if(i===void 0)throw o.kill("SIGKILL"),new Error(`${e.displayLabel} could not start ${JSON.stringify(e.executable)}`);let s=!1,a=!1,c=!1,l=!1,d=Qg(e.shutdownTimeoutMs??Re),f=(e.shutdownTimeoutMs??0)+(e.stopLimitMs??Zg),u=0,p=null,m=Number.POSITIVE_INFINITY,g,S=r(()=>{},"abandon"),w=new Promise(y=>{S=r(()=>{y(null)},"abandon")}),b=r(y=>{m===Number.POSITIVE_INFINITY&&(u=performance.now());let I=Math.min(m===Number.POSITIVE_INFINITY?Date.now()+f:m,y===void 0?Number.POSITIVE_INFINITY:Math.max(y,Date.now()+kr));if(I>=m)return;m=I,clearTimeout(g);let P=Math.max(0,m-Date.now());P<=iS&&(g=setTimeout(S,P))},"limitSettlement"),E=null,x={failure:null,cleanup:null},D=r(()=>{if(x.failure=null,d.deadlineAt!==null)try{E?.(d.deadlineAt)}catch(y){x.failure=fn(y)}},"publishShutdown"),A=r(y=>{l||(b(y),d.begin(y)&&D(),!s&&(s=!0,o.kill("SIGTERM"),x.cleanup=Cc(i,{remainingMs:d.remainingMs,initialSignalSent:!0,sendSignal:r((I,P)=>{o.kill(P)},"sendSignal")})))},"beginShutdown"),R=r(()=>{!s&&!l&&o.nodeChildProcess.exitCode===null&&o.nodeChildProcess.signalCode===null&&(a=!0),A()},"onAbort");for(let y of[o.stdout,o.stderr])y.once("close",()=>{!y.readableEnded&&o.nodeChildProcess.exitCode===null&&o.nodeChildProcess.signalCode===null&&A()});e.signal.addEventListener("abort",R,{once:!0});let C=e.timeoutMs===null?()=>{}:Lc(e.timeoutMs,t,o.stdout,()=>{if(!s){let y=o.nodeChildProcess;c=y.exitCode===null&&y.signalCode===null,n?.abort()}A()});o.nodeChildProcess.once("exit",()=>{process.platform!=="win32"&&Pc(i)&&A()});let N=e.recoveryIdentity==="none"?void 0:new Promise((y,I)=>{o.nodeChildProcess.once("error",I),o.nodeChildProcess.once("spawn",()=>{let P=Yg(i);if(P===null){let V=new Error(`${e.displayLabel} process creation identity could not be captured`);Hg(i)==="absent"?o.nodeChildProcess.once("exit",(mn,hn)=>{I(new Gr(mn,hn))}):(o.kill("SIGKILL"),I(V));return}y({pid:i,recovery:{creationIdentity:P,processGroupId:process.platform==="win32"?null:i}})})});N?.catch(()=>{});let F=(async()=>{let y=await Promise.race([o,w]);if(C(),clearTimeout(g),y===null){let V=o.nodeChildProcess,mn=V.exitCode!==null||V.signalCode!==null;for(let hn of[o.stdin,o.stdout,o.stderr])hn.destroy();return V.unref(),p=new Error(`${e.displayLabel} didn't settle within ${((performance.now()-u)/1e3).toFixed(1)} s of its termination: `+(mn?"its process exited, but its output stayed open":`process ${i.toString()} is still running`)),{...pn(),cancelled:a,exitCode:V.exitCode,exitSignal:V.signalCode,terminationError:p,timedOut:c}}process.platform!=="win32"&&Pc(i)&&A();let I=x.cleanup===null?null:await x.cleanup,P=Wr(y,e.outputMode==="bounded-capture",I??x.failure);return{...P,cancelled:a,timedOut:P.timedOut||n!==null&&y.isCanceled}})().finally(()=>{l=!0,clearTimeout(g),e.signal.removeEventListener("abort",R),C(),x.failure===null&&(E=null)});return{completion:F,...N===void 0?{}:{ready:N},stderr:o.stderr,stdin:o.stdin,stdout:o.stdout,pid:i,shutdownTimeoutMs:e.shutdownTimeoutMs??Re,get shutdownDeadlineAt(){return d.deadlineAt},onShutdownStarted(y){return E=y,d.deadlineAt!==null&&y(d.deadlineAt),()=>{E===y&&(E=null)}},async stop(y){return x.failure!==null&&D(),A(y),{...await F,terminationError:p??await x.cleanup??x.failure}}}}r(PP,"startSupervisedProcess");function Lc(e,t,n,o){if(t!==void 0)return Mc({onExpired:o,ready:t,stdout:n,timeoutMs:e});let i=setTimeout(o,e);return()=>{clearTimeout(i)}}r(Lc,"startTimeout");async function Bc(e){let t=e.pid,n=await e,o=t===void 0?null:await Cc(t);return Wr(n,!0,o)}r(Bc,"settle");function un(e,t,n){return process.platform==="win32"&&Vg(e.executable)&&Wg(e.executable),Jg(sS(e.executable,e.workPurpose)),Rc(e.executable,[...e.args],{buffer:t==="bounded-capture",maxBuffer:Kg/2,cleanup:!0,killDescendants:!0,...n,cwd:e.cwd,encoding:"utf8",env:e.env,extendEnv:!1,reject:!1,stderr:"pipe",stdin:"pipe",stdout:"pipe",stripFinalNewline:!1,windowsHide:!0,windowsVerbatimArguments:e.windowsVerbatimArguments})}r(un,"launch");function sS(e,t){let n=zg(e).toLowerCase().replace(/\.(?:bat|cmd|exe)$/u,"");return t===void 0?`process.launches.${n}`:`process.launches.${n}.${t}`}r(sS,"processLaunchMetric");function Wr(e,t,n){let o=e.failed&&e.exitCode===void 0&&e.signal===void 0&&!e.timedOut&&!e.isCanceled&&!e.isMaxBuffer?fn(e):null;return{cancelled:e.isCanceled,error:o,exitCode:e.exitCode??null,exitSignal:e.signal??null,outputLimitExceeded:e.isMaxBuffer,stderr:t?Fc(e.stderr):"",stdout:t?Fc(e.stdout):"",terminationError:n,timedOut:e.timedOut}}r(Wr,"mapResult");function Fc(e){return typeof e=="string"?e:e instanceof Uint8Array?Buffer.from(e).toString("utf8"):""}r(Fc,"outputString");function _c(e){if(e.executable.length===0)throw new Error("Managed process executable must be non-empty");if(e.cwd.length===0)throw new Error("Managed process working directory must be non-empty");if(e.displayLabel.trim().length===0)throw new Error("Managed process display label must be non-empty");if(e.timeoutMs!==null&&(!Number.isSafeInteger(e.timeoutMs)||e.timeoutMs<=0))throw new Error("Managed process timeout must be a positive safe integer");if(Xg(e.timeoutStartsWhenReady),e.timeoutStartsWhenReady!==void 0&&e.timeoutMs===null)throw new Error("A managed process ready signal needs a timeout to start");if(e.timeoutStartsWhenReady!==void 0&&"stdoutMarker"in e.timeoutStartsWhenReady&&"outputMode"in e&&e.outputMode==="caller-drained")throw new Error("A stdout ready marker needs bounded-capture output")}r(_c,"requireRequest");function pn(){return{cancelled:!0,error:null,exitCode:null,exitSignal:null,outputLimitExceeded:!1,stderr:"",stdout:"",terminationError:null,timedOut:!1}}r(pn,"cancelledBeforeStart");function aS(e){return{...pn(),cancelled:!1,error:fn(e)}}r(aS,"startFailure");export{Gr as ProcessExitedBeforeReadyError,vP as cleanupExitedProcessGroup,CP as runManagedProcess,PP as startSupervisedProcess,_P as terminateAttributedProcessLineage,UP as terminateOwnedPosixProcessGroup};
@@ -1 +1 @@
1
- import d from"node:fs";import{StringDecoder as l}from"node:string_decoder";const c=20;export function readyDeadline(e,n,t,r){const a=t+n;return r===null||r>=a?{at:a,phase:"startup"}:{at:r+e,phase:"run"}}export function createOutputMarkerDetector(e){const n=new l("utf8");let t="";return r=>{const a=t+(typeof r=="string"?r:n.write(Buffer.from(r)));return a.includes(e)?!0:(t=e.length>1?a.slice(1-e.length):"",!1)}}export function startReadyDeadline(e){const n=performance.now();let t=null,r=!1,a,o=()=>{};const i=()=>{r=!0,clearTimeout(a),o()},s=()=>{clearTimeout(a);const u=readyDeadline(e.timeoutMs,e.ready.startupTimeoutMs,n,t);a=setTimeout(()=>{r||(i(),e.onExpired(u.phase))},Math.max(0,u.at-performance.now()))},f=()=>{r||t!==null||(t=performance.now(),o(),s())};return o=m(e.ready,e.stdout,f),s(),i}function m(e,n,t){if("stdoutMarker"in e){if(!n)throw new Error("A stdout ready marker needs the command's captured stdout");const a=createOutputMarkerDetector(e.stdoutMarker),o=i=>{a(i)&&t()};return n.on("data",o),()=>{n.off("data",o)}}const r=setInterval(()=>{d.existsSync(e.readyFile)&&t()},c);return()=>{clearInterval(r)}}export function requireReadySignal(e){if(e===void 0)return;if(!Number.isSafeInteger(e.startupTimeoutMs)||e.startupTimeoutMs<=0)throw new Error("Managed process startup timeout must be a positive safe integer");const n="stdoutMarker"in e?e.stdoutMarker:void 0,t="readyFile"in e?e.readyFile:void 0;if(n===void 0==(t===void 0))throw new Error("Managed process ready signal must name exactly one stdout marker or ready file");if((n??t)?.length===0)throw new Error("Managed process ready signal must be non-empty")}
1
+ import f from"node:fs";import{StringDecoder as l}from"node:string_decoder";const d=20;export function readyDeadline(t,a,r,e){const n=r+a;return e===null||e>=n?{at:n,phase:"startup"}:{at:e+t,phase:"run"}}export function createOutputMarkerDetector(t){const a=new l("utf8");let r="";return e=>{const n=r+(typeof e=="string"?e:a.write(Buffer.from(e)));return n.includes(t)?!0:(r=t.length>1?n.slice(1-t.length):"",!1)}}export function startReadyDeadline(t){const a=performance.now();let r=null,e=!1,n,o=()=>{};const i=()=>{e=!0,clearTimeout(n),o()},s=()=>{clearTimeout(n);const u=readyDeadline(t.timeoutMs,t.ready.startupTimeoutMs,a,r);n=setTimeout(()=>{e||(i(),t.onExpired(u.phase))},Math.max(0,u.at-performance.now()))},c=()=>{e||r!==null||(r=performance.now(),o(),s())};return o=m(t.ready,t.stdout,c),s(),i}function m(t,a,r){if("stdoutMarker"in t){if(!a)throw new Error("A stdout ready marker needs the command's captured stdout");const n=createOutputMarkerDetector(t.stdoutMarker),o=i=>{n(i)&&r()};return a.on("data",o),()=>{a.off("data",o)}}const e=setInterval(()=>{f.existsSync(t.readyFile)&&r()},d);return()=>{clearInterval(e)}}export function requireReadySignal(t){if(t!==void 0&&(!Number.isSafeInteger(t.startupTimeoutMs)||t.startupTimeoutMs<=0))throw new Error("Managed process startup timeout must be a positive safe integer")}
@@ -1 +1 @@
1
- import{isWorkObserved as $,recordWork as I}from"../../kernel/work-metrics.js";import o from"node:fs";import l from"node:path";import{randomUUID as F}from"node:crypto";import{publishWindowsFile as O}from"../windows-native.js";import{serializeJson as U,writeJsonFileAtomicWithRetry as S}from"../files/json-file.js";import{RUN_MAINTENANCE_STOP_REQUEST_SCHEMA_VERSION as g,RUN_MANIFEST_SCHEMA_VERSION as h}from"./schema.js";import{isNullableString as R,isUnknownRecord as m}from"../../kernel/unknown-values.js";import{hasErrorCode as T}from"../../kernel/error-serialization.js";export{g as RUN_MAINTENANCE_STOP_REQUEST_SCHEMA_VERSION,h as RUN_MANIFEST_SCHEMA_VERSION};const k=l.join(".testkit","_runs"),C=".maintenance-stop",_=128,D=/^[A-Za-z0-9][A-Za-z0-9._-]*$/u,j=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u,z=/^(?:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(?:\.|$)/iu;export class RunManifestCollisionError extends Error{code="TESTKIT_RUN_MANIFEST_COLLISION";manifestPath;constructor(t,r){super(`Testkit run manifest already exists at ${t}`,r),this.name="RunManifestCollisionError",this.manifestPath=t}}export class RunManifestInventoryError extends Error{code="TESTKIT_RUN_MANIFEST_INVENTORY_FAILED";manifestPath;constructor(t,r,e){super(`Cannot inventory Testkit run manifest ${t}: ${r}`,e),this.name="RunManifestInventoryError",this.manifestPath=t}}export function runManifestPath(n,t){const r=requireSafeRunId(t,"Testkit run id");return l.join(p(n),`${r}.json`)}export function writeRunManifest(n,t){const r=runManifestPath(n,t.runId);o.mkdirSync(p(n),{recursive:!0}),S(r,t)}export function persistRunShutdownDeadlines(n,t){S(runManifestPath(n,t.runId),t)}export function createRunManifest(n,t){const r=runManifestPath(n,t.runId),e=p(n);o.mkdirSync(e,{recursive:!0});const s=l.join(e,`.${l.basename(r)}.${process.pid.toString()}.${F()}.tmp`);o.writeFileSync(s,U(t,`run manifest ${t.runId}`),{flag:"wx"});try{process.platform==="win32"?O(s,r):o.linkSync(s,r)}catch(i){throw T(i,"EEXIST")?new RunManifestCollisionError(r,{cause:i}):i}finally{o.rmSync(s,{force:!0})}}export function writeRunMaintenanceStopRequest(n,t){const r=N(n,t.runId);o.mkdirSync(p(n),{recursive:!0}),S(r,t)}export function readRunMaintenanceStopRequest(n,t){const r=requireSafeRunId(t,"Testkit run id"),e=N(n,r);let s;try{s=JSON.parse(o.readFileSync(e,"utf8"))}catch{return null}const i=L(s);return i?.runId===r?i:null}export function removeRunMaintenanceStopRequest(n,t){o.rmSync(N(n,t),{force:!0})}export function removeRunManifestFile(n,t){const r=runManifestPath(n,t),e=p(n);o.rmSync(r,{force:!0}),removeRunMaintenanceStopRequest(n,t),o.existsSync(e)&&o.readdirSync(e).length===0&&o.rmSync(e,{recursive:!0,force:!0})}export function loadRunManifest(n,t){const r=runManifestPath(n,t);I("runs.manifestLookups");let e;try{e=o.lstatSync(r)}catch(s){if(T(s,"ENOENT"))return null;throw new RunManifestInventoryError(r,"manifest path could not be inspected",{cause:s})}if(!e.isFile())throw new RunManifestInventoryError(r,"manifest path is not a regular file");return M(r)}export function listRunManifests(n){const t=p(n);if(!o.existsSync(t))return[];const r=o.readdirSync(t,{withFileTypes:!0});return I("runs.manifestDirectoriesRead"),I("runs.manifestEntriesVisited",r.length),r.filter(e=>e.name.endsWith(".json")).map(e=>{const s=l.join(t,e.name);if(!e.isFile())throw new RunManifestInventoryError(s,"manifest path is not a regular file");return M(s)}).sort((e,s)=>(e.startedAt||"").localeCompare(s.startedAt||""))}export function requireSafeRunId(n,t){const r=A(n);if(r!==null)return r;throw new Error(`${t} must be 1-${_.toString()} characters using only ASCII letters, digits, dot, underscore, or hyphen, must start with a letter or digit, and must not use a reserved Windows device name`)}export function normalizeRunManifest(n){if(!m(n)||n.schemaVersion!==h)return null;const t=A(n.runId);if(t===null)return null;const r=n.controller,e=n.finishedAt,s=n.heartbeatAt,i=P(n.incarnationId),c=n.interruptReason,a=n.pid,d=n.processIdentity,u=n.session,f=n.startedAt,y=n.status,w=V(n.services),E=J(n.runtimeDirs);return typeof a!="number"||!Number.isSafeInteger(a)||a<0||i===null||w===null||E===null||a===0&&d!==null||a>0&&(typeof d!="string"||d.length===0)?null:{incarnationId:i,runId:t,runtimeDirs:E,schemaVersion:h,services:w,pid:a,processIdentity:typeof d=="string"?d:null,...G(r)?{controller:r}:{},...typeof e=="string"?{finishedAt:e}:{},...R(s)?{heartbeatAt:s}:{},...R(c)?{interruptReason:c}:{},...X(u)?{session:u}:{},...typeof f=="string"?{startedAt:f}:{},...typeof y=="string"?{status:y}:{}}}function N(n,t){const r=requireSafeRunId(t,"Testkit run id");return l.join(p(n),`${r}${C}`)}function L(n){if(!m(n)||n.schemaVersion!==g)return null;const t=A(n.runId),r=P(n.targetIncarnationId);return t===null||r===null||!x(n.coordinatorPid)||typeof n.coordinatorProcessIdentity!="string"||n.coordinatorProcessIdentity.length===0||typeof n.reason!="string"||n.reason.length===0||typeof n.requestedAt!="string"||!Number.isFinite(Date.parse(n.requestedAt))||!x(n.targetPid)||typeof n.targetProcessIdentity!="string"||n.targetProcessIdentity.length===0?null:{coordinatorPid:n.coordinatorPid,coordinatorProcessIdentity:n.coordinatorProcessIdentity,reason:n.reason,requestedAt:n.requestedAt,runId:t,schemaVersion:g,targetIncarnationId:r,targetPid:n.targetPid,targetProcessIdentity:n.targetProcessIdentity}}function M(n){let t;try{if($()){const c=o.readFileSync(n);I("runs.manifestFilesRead"),I("runs.manifestBytesRead",c.byteLength),t=c.toString("utf8")}else t=o.readFileSync(n,"utf8")}catch(c){throw new RunManifestInventoryError(n,"file could not be read",{cause:c})}let r;try{r=JSON.parse(t)}catch(c){throw new RunManifestInventoryError(n,"file is not valid JSON",{cause:c})}const e=normalizeRunManifest(r);if(e!==null){const c=l.basename(n,".json");if(e.runId!==c)throw new RunManifestInventoryError(n,"embedded runId does not match the manifest filename");return e}const s=m(r)?r.schemaVersion:void 0,i=s===h?`schema-v${h.toString()} record is invalid`:`unsupported schema version ${typeof s=="number"?s.toString():"missing"}`;throw new RunManifestInventoryError(n,i)}function A(n){return typeof n=="string"&&n.length<=_&&D.test(n)&&!z.test(n)?n:null}function P(n){return typeof n=="string"&&j.test(n)?n:null}function V(n){if(!Array.isArray(n))return null;const t=[];for(const r of n){const e=q(r);if(e===null)return null;t.push(e)}return t}function q(n){if(!m(n))return null;const t=n.command,r=n.cwd,e=n.pid,s=n.processIdentity,i=n.processGroupId,c=n.runtimeLabel,a=n.serviceName,d=n.startedAt,u=n.shutdownTimeoutMs,f=n.shutdownDeadlineAt;if(u!==void 0&&(typeof u!="number"||!Number.isFinite(u)||!Number.isInteger(u)||u<=0)||f!=null&&(u===void 0||typeof f!="number"||!Number.isFinite(f)||f<0))return null;const y=W(n.ports);return typeof e!="number"||!Number.isSafeInteger(e)||e<=0||i!==null&&(typeof i!="number"||!Number.isSafeInteger(i)||i!==e)||typeof s!="string"||s.length===0||y===null?null:{...u===void 0?{}:{shutdownTimeoutMs:u},...f===void 0?{}:{shutdownDeadlineAt:f},ports:y,pid:e,processGroupId:i,processIdentity:s,...R(t)?{command:t}:{},...typeof r=="string"?{cwd:r}:{},...typeof c=="string"?{runtimeLabel:c}:{},...typeof a=="string"?{serviceName:a}:{},...typeof d=="string"?{startedAt:d}:{}}}function W(n){if(!Array.isArray(n))return null;const t=[];for(const r of n){if(!m(r))return null;const e=r.host,s=r.port;if(typeof e!="string"||typeof s!="number"||!Number.isSafeInteger(s)||s<=0||s>65535)return null;t.push({...r,host:e,port:s})}return t}function J(n){return!Array.isArray(n)||!n.every(t=>typeof t=="string")?null:n}function x(n){return typeof n=="number"&&Number.isSafeInteger(n)&&n>0}function p(n){return l.join(n,k)}function X(n){return n===null||m(n)}function G(n){return n===null?!0:m(n)?Object.values(n).every(t=>t===null||typeof t=="string"):!1}const b=String;export function formatRunSummary(n){const t=normalizeRunManifest(n);if(!t)return b(n);const r=[...new Set(t.services.map(e=>e.runtimeLabel).filter(e=>!!e))];return`${b(t.runId)} pid=${b(t.pid)}${r.length>0?` runtimes=${r.join(",")}`:""}`}
1
+ import{isWorkObserved as x,recordWork as I}from"../../kernel/work-metrics.js";import i from"node:fs";import l from"node:path";import{randomUUID as $}from"node:crypto";import{publishWindowsFile as F}from"../windows-native.js";import{serializeJson as O,writeJsonFileAtomicWithRetry as S}from"../files/json-file.js";import{RUN_MAINTENANCE_STOP_REQUEST_SCHEMA_VERSION as g,RUN_MANIFEST_SCHEMA_VERSION as h}from"./schema.js";import{isNullableString as R,isUnknownRecord as m}from"../../kernel/unknown-values.js";import{hasErrorCode as w}from"../../kernel/error-serialization.js";export{g as RUN_MAINTENANCE_STOP_REQUEST_SCHEMA_VERSION,h as RUN_MANIFEST_SCHEMA_VERSION};const U=l.join(".testkit","_runs"),C=".maintenance-stop",T=128,D=/^[A-Za-z0-9][A-Za-z0-9._-]*$/u,k=/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u,j=/^(?:CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])(?:\.|$)/iu;export class RunManifestCollisionError extends Error{code="TESTKIT_RUN_MANIFEST_COLLISION";manifestPath;constructor(n,r){super(`Testkit run manifest already exists at ${n}`,r),this.name="RunManifestCollisionError",this.manifestPath=n}}export class RunManifestInventoryError extends Error{code="TESTKIT_RUN_MANIFEST_INVENTORY_FAILED";manifestPath;constructor(n,r,e){super(`Cannot inventory Testkit run manifest ${n}: ${r}`,e),this.name="RunManifestInventoryError",this.manifestPath=n}}export function runManifestPath(t,n){const r=requireSafeRunId(n,"Testkit run id");return l.join(p(t),`${r}.json`)}export function writeRunManifest(t,n){const r=runManifestPath(t,n.runId);i.mkdirSync(p(t),{recursive:!0}),S(r,n)}export function persistRunShutdownDeadlines(t,n){S(runManifestPath(t,n.runId),n)}export function createRunManifest(t,n){const r=runManifestPath(t,n.runId),e=p(t);i.mkdirSync(e,{recursive:!0});const s=l.join(e,`.${l.basename(r)}.${process.pid.toString()}.${$()}.tmp`);i.writeFileSync(s,O(n,`run manifest ${n.runId}`),{flag:"wx"});try{process.platform==="win32"?F(s,r):i.linkSync(s,r)}catch(o){throw w(o,"EEXIST")?new RunManifestCollisionError(r,{cause:o}):o}finally{i.rmSync(s,{force:!0})}}export function writeRunMaintenanceStopRequest(t,n){const r=N(t,n.runId);i.mkdirSync(p(t),{recursive:!0}),S(r,n)}export function readRunMaintenanceStopRequest(t,n){const r=requireSafeRunId(n,"Testkit run id"),e=N(t,r);let s;try{s=JSON.parse(i.readFileSync(e,"utf8"))}catch{return null}const o=L(s);return o?.runId===r?o:null}export function removeRunMaintenanceStopRequest(t,n){i.rmSync(N(t,n),{force:!0})}export function removeRunManifestFile(t,n){const r=runManifestPath(t,n),e=p(t);i.rmSync(r,{force:!0}),removeRunMaintenanceStopRequest(t,n),i.existsSync(e)&&i.readdirSync(e).length===0&&i.rmSync(e,{recursive:!0,force:!0})}export function loadRunManifest(t,n){const r=runManifestPath(t,n);I("runs.manifestLookups");let e;try{e=i.lstatSync(r)}catch(s){if(w(s,"ENOENT"))return null;throw new RunManifestInventoryError(r,"manifest path could not be inspected",{cause:s})}if(!e.isFile())throw new RunManifestInventoryError(r,"manifest path is not a regular file");return _(r)}export function listRunManifests(t){const n=p(t);if(!i.existsSync(n))return[];const r=i.readdirSync(n,{withFileTypes:!0});return I("runs.manifestDirectoriesRead"),I("runs.manifestEntriesVisited",r.length),r.filter(e=>e.name.endsWith(".json")).map(e=>{const s=l.join(n,e.name);if(!e.isFile())throw new RunManifestInventoryError(s,"manifest path is not a regular file");return _(s)}).sort((e,s)=>(e.startedAt||"").localeCompare(s.startedAt||""))}export function requireSafeRunId(t,n){const r=A(t);if(r!==null)return r;throw new Error(`${n} must be 1-${T.toString()} characters using only ASCII letters, digits, dot, underscore, or hyphen, must start with a letter or digit, and must not use a reserved Windows device name`)}export function normalizeRunManifest(t){if(!m(t)||t.schemaVersion!==h)return null;const n=A(t.runId);if(n===null)return null;const r=t.controller,e=t.finishedAt,s=t.heartbeatAt,o=M(t.incarnationId),u=t.interruptReason,a=t.pid,d=t.processIdentity,c=t.session,f=t.startedAt,y=t.status,b=z(t.services),E=W(t.runtimeDirs);return typeof a!="number"||!Number.isSafeInteger(a)||a<0||o===null||b===null||E===null||a===0&&d!==null||a>0&&(typeof d!="string"||d.length===0)?null:{incarnationId:o,runId:n,runtimeDirs:E,schemaVersion:h,services:b,pid:a,processIdentity:typeof d=="string"?d:null,...X(r)?{controller:r}:{},...typeof e=="string"?{finishedAt:e}:{},...R(s)?{heartbeatAt:s}:{},...R(u)?{interruptReason:u}:{},...J(c)?{session:c}:{},...typeof f=="string"?{startedAt:f}:{},...typeof y=="string"?{status:y}:{}}}function N(t,n){const r=requireSafeRunId(n,"Testkit run id");return l.join(p(t),`${r}${C}`)}function L(t){if(!m(t)||t.schemaVersion!==g)return null;const n=A(t.runId),r=M(t.targetIncarnationId);return n===null||r===null||!P(t.coordinatorPid)||typeof t.coordinatorProcessIdentity!="string"||t.coordinatorProcessIdentity.length===0||typeof t.reason!="string"||t.reason.length===0||typeof t.requestedAt!="string"||!Number.isFinite(Date.parse(t.requestedAt))||!P(t.targetPid)||typeof t.targetProcessIdentity!="string"||t.targetProcessIdentity.length===0?null:{coordinatorPid:t.coordinatorPid,coordinatorProcessIdentity:t.coordinatorProcessIdentity,reason:t.reason,requestedAt:t.requestedAt,runId:n,schemaVersion:g,targetIncarnationId:r,targetPid:t.targetPid,targetProcessIdentity:t.targetProcessIdentity}}function _(t){let n;try{if(x()){const u=i.readFileSync(t);I("runs.manifestFilesRead"),I("runs.manifestBytesRead",u.byteLength),n=u.toString("utf8")}else n=i.readFileSync(t,"utf8")}catch(u){throw new RunManifestInventoryError(t,"file could not be read",{cause:u})}let r;try{r=JSON.parse(n)}catch(u){throw new RunManifestInventoryError(t,"file is not valid JSON",{cause:u})}const e=normalizeRunManifest(r);if(e!==null){const u=l.basename(t,".json");if(e.runId!==u)throw new RunManifestInventoryError(t,"embedded runId does not match the manifest filename");return e}const s=m(r)?r.schemaVersion:void 0,o=s===h?`schema-v${h.toString()} record is invalid`:`unsupported schema version ${typeof s=="number"?s.toString():"missing"}`;throw new RunManifestInventoryError(t,o)}function A(t){return typeof t=="string"&&t.length<=T&&D.test(t)&&!j.test(t)?t:null}function M(t){return typeof t=="string"&&k.test(t)?t:null}function z(t){if(!Array.isArray(t))return null;const n=[];for(const r of t){const e=V(r);if(e===null)return null;n.push(e)}return n}function V(t){if(!m(t))return null;const n=t.command,r=t.cwd,e=t.pid,s=t.processIdentity,o=t.processGroupId,u=t.runtimeLabel,a=t.serviceName,d=t.startedAt,c=t.shutdownTimeoutMs,f=t.shutdownDeadlineAt;if(c!==void 0&&(typeof c!="number"||!Number.isFinite(c)||!Number.isInteger(c)||c<=0)||f!=null&&(c===void 0||typeof f!="number"||!Number.isFinite(f)||f<0))return null;const y=q(t.ports);return typeof e!="number"||!Number.isSafeInteger(e)||e<=0||o!==null&&(typeof o!="number"||!Number.isSafeInteger(o)||o!==e)||typeof s!="string"||s.length===0||y===null?null:{...c===void 0?{}:{shutdownTimeoutMs:c},...f===void 0?{}:{shutdownDeadlineAt:f},ports:y,pid:e,processGroupId:o,processIdentity:s,...R(n)?{command:n}:{},...typeof r=="string"?{cwd:r}:{},...typeof u=="string"?{runtimeLabel:u}:{},...typeof a=="string"?{serviceName:a}:{},...typeof d=="string"?{startedAt:d}:{}}}function q(t){if(!Array.isArray(t))return null;const n=[];for(const r of t){if(!m(r))return null;const e=r.host,s=r.port;if(typeof e!="string"||typeof s!="number"||!Number.isSafeInteger(s)||s<=0||s>65535)return null;n.push({...r,host:e,port:s})}return n}function W(t){return!Array.isArray(t)||!t.every(n=>typeof n=="string")?null:t}function P(t){return typeof t=="number"&&Number.isSafeInteger(t)&&t>0}function p(t){return l.join(t,U)}function J(t){return t===null||m(t)}function X(t){return t===null?!0:m(t)?Object.values(t).every(n=>n===null||typeof n=="string"):!1}export function formatRunSummary(t){const n=[...new Set(t.services.map(r=>r.runtimeLabel).filter(r=>!!r))];return`${t.runId} pid=${t.pid.toString()}${n.length>0?` runtimes=${n.join(",")}`:""}`}
@@ -1 +1 @@
1
- import{isTerminalRunStatus as g}from"./schema.js";import{observeProcessCreationIdentity as a}from"../index.js";import{withProductLifecycleFence as c}from"../lifecycle-fence.js";import{terminateAttributedProcessLineage as f,terminateOwnedPosixProcessGroup as T}from"../service-processes.js";import{listRunManifests as d}from"./manifest.js";import{createShutdownDeadline as h,remainingShutdownMs as A,FORCE_TERMINATION_WAIT_MS as M}from"../shutdown.js";import{hasErrorCode as S}from"../../kernel/error-serialization.js";import{delay as y}from"../process-group.js";const w=5e3,E=5e3;export function isPidRunning(t){if(!Number.isInteger(Number(t))||Number(t)<=0)return!1;try{return process.kill(Number(t),0),!0}catch(n){return S(n,"EPERM")}}export async function waitForPreparedRunStop(t){if(t.controllerActive&&t.targetProcessIdentity!==null){const i=await D(t,t.targetProcessIdentity);let s=i,r=i;if(!s&&!r&&(await f(t.pid,"SIGKILL",t.targetProcessIdentity),s=await p(t.pid,w,t.targetProcessIdentity),r=!s&&await b(t)),!s&&!r)throw new Error(`Timed out stopping Testkit run process ${t.pid.toString()}`)}const n=new Set,e=await c(t.productDir,()=>d(t.productDir).find(i=>i.runId===t.runId)),o=new Map(t.manifest.services.map(i=>[runManifestServiceKey(i),i]));if(e&&sameRunManifestIncarnation(e,t.manifest))for(const i of e.services){const s=runManifestServiceKey(i),r=o.get(s);o.set(s,r?.shutdownDeadlineAt==null?i:{...i,shutdownTimeoutMs:r.shutdownTimeoutMs,shutdownDeadlineAt:Math.min(r.shutdownDeadlineAt,i.shutdownDeadlineAt??Number.MAX_VALUE)})}return await drainRunServices([...o.values()],n),n}async function D(t,n){const e=new Map,o=r=>{for(const u of r){const m=runManifestServiceKey(u),l=u.shutdownTimeoutMs??t.graceMs,I=e.get(m)??h(l+M);I.begin((u.shutdownDeadlineAt??Date.parse(t.requestedAt)+l)+M),e.set(m,I)}return Math.max(0,...r.map(u=>e.get(runManifestServiceKey(u))?.remainingMs()??0))};o(t.manifest.services);const i=h(t.graceMs);i.begin(Date.parse(t.requestedAt)+t.graceMs);let s=null;for(;;){if(a(t.pid,n)==="different")return!0;const r=await c(t.productDir,()=>d(t.productDir).find(u=>u.runId===t.runId));if(!r||!sameRunManifestIncarnation(r,t.manifest)||g(r.status))return!0;if(Math.max(i.remainingMs(),o(r.services))<=0){if(s===null){if(process.platform!=="win32")try{await f(t.pid,"SIGTERM",n)}catch{}s=performance.now()}if(performance.now()-s>=E)return!1}await y(100)}}async function b(t){return c(t.productDir,()=>{const n=d(t.productDir).find(e=>e.runId===t.runId);return n===void 0||!sameRunManifestIncarnation(n,t.manifest)||g(n.status)})}export async function drainRunServices(t,n){for(const e of[...t].reverse())await P(e),n.add(runManifestServiceKey(e))}async function P(t){const n=t.pid;if(!Number.isSafeInteger(n)||n<=0)return;const e=t.processIdentity;if(typeof e!="string"||e.length===0)throw new Error(`Application service process ${n.toString()} has no creation identity; refusing unsafe cleanup`);const o=Number(t.processGroupId);if(process.platform!=="win32"&&Number.isSafeInteger(o)&&o>0&&o===n){await T(o,e,t.shutdownTimeoutMs===void 0?w:t.shutdownDeadlineAt==null?t.shutdownTimeoutMs:A(t.shutdownTimeoutMs,t.shutdownDeadlineAt));return}if(process.platform!=="win32")throw new Error(`Application service process ${n.toString()} does not have an owned POSIX process group; refusing unsafe cleanup`);const i=a(n,e);if(i!=="different"){if(i==="unknown")throw new Error(`Cannot establish the creation identity of application service process ${n.toString()}; refusing unsafe cleanup`);if(await f(n,"SIGKILL",e),!await p(n,w,e))throw new Error(`Timed out stopping application service process ${n.toString()}`)}}export function requestProcessStop(t,n,e){const o=a(t,n);if(o!=="different"){if(o==="unknown")throw new Error(`Cannot establish the creation identity of Testkit run process ${t.toString()}; refusing unsafe stop request`);try{process.kill(t,e)}catch(i){if(!S(i,"ESRCH"))throw i}}}async function p(t,n,e){const o=()=>e===void 0?isPidRunning(t):a(t,e)!=="different",i=Date.now();for(;Date.now()-i<n;){if(!o())return!0;await y(100)}return!o()}export function runManifestServiceKey(t){return`${t.pid.toString()}:${String(t.processGroupId)}:${t.processIdentity}`}export function sameRunManifestIncarnation(t,n){return t.runId===n.runId&&t.incarnationId===n.incarnationId&&t.pid===n.pid&&t.processIdentity===n.processIdentity}
1
+ import{isTerminalRunStatus as h}from"./schema.js";import{observeProcessCreationIdentity as a}from"../index.js";import{withProductLifecycleFence as c}from"../lifecycle-fence.js";import{terminateAttributedProcessLineage as f,terminateOwnedPosixProcessGroup as A}from"../service-processes.js";import{listRunManifests as d}from"./manifest.js";import{createShutdownDeadline as g,remainingShutdownMs as p,FORCE_TERMINATION_WAIT_MS as M}from"../shutdown.js";import{hasErrorCode as S}from"../../kernel/error-serialization.js";import{delay as y}from"../process-group.js";const w=5e3,D=5e3;export function isPidRunning(t){if(!Number.isInteger(Number(t))||Number(t)<=0)return!1;try{return process.kill(Number(t),0),!0}catch(n){return S(n,"EPERM")}}export async function waitForPreparedRunStop(t){if(t.controllerActive&&t.targetProcessIdentity!==null){const i=await E(t,t.targetProcessIdentity);let s=i,r=i;if(!s&&!r&&(await f(t.pid,"SIGKILL",t.targetProcessIdentity),s=await T(t.pid,w,t.targetProcessIdentity),r=!s&&await P(t)),!s&&!r)throw new Error(`Timed out stopping Testkit run process ${t.pid.toString()}`)}const n=new Set,e=await c(t.productDir,()=>d(t.productDir).find(i=>i.runId===t.runId)),o=new Map(t.manifest.services.map(i=>[runManifestServiceKey(i),i]));if(e&&sameRunManifestIncarnation(e,t.manifest))for(const i of e.services){const s=runManifestServiceKey(i),r=o.get(s);o.set(s,r?.shutdownDeadlineAt==null?i:{...i,shutdownTimeoutMs:r.shutdownTimeoutMs,shutdownDeadlineAt:Math.min(r.shutdownDeadlineAt,i.shutdownDeadlineAt??Number.MAX_VALUE)})}return await drainRunServices([...o.values()],n),n}async function E(t,n){const e=new Map,o=r=>{for(const u of r){const m=runManifestServiceKey(u),l=u.shutdownTimeoutMs??t.graceMs,I=e.get(m)??g(l+M);I.begin((u.shutdownDeadlineAt??Date.parse(t.requestedAt)+l)+M),e.set(m,I)}return Math.max(0,...r.map(u=>e.get(runManifestServiceKey(u))?.remainingMs()??0))};o(t.manifest.services);const i=g(t.graceMs);i.begin(Date.parse(t.requestedAt)+t.graceMs);let s=null;for(;;){if(a(t.pid,n)==="different")return!0;const r=await c(t.productDir,()=>d(t.productDir).find(u=>u.runId===t.runId));if(!r||!sameRunManifestIncarnation(r,t.manifest)||h(r.status))return!0;if(Math.max(i.remainingMs(),o(r.services))<=0){if(s===null){if(process.platform!=="win32")try{await f(t.pid,"SIGTERM",n)}catch{}s=performance.now()}if(performance.now()-s>=D)return!1}await y(100)}}async function P(t){return c(t.productDir,()=>{const n=d(t.productDir).find(e=>e.runId===t.runId);return n===void 0||!sameRunManifestIncarnation(n,t.manifest)||h(n.status)})}export async function drainRunServices(t,n){for(const e of[...t].reverse())await R(e),n.add(runManifestServiceKey(e))}async function R(t){const{pid:n,processIdentity:e}=t;if(process.platform!=="win32"&&t.processGroupId===n){await A(n,e,t.shutdownTimeoutMs===void 0?w:t.shutdownDeadlineAt==null?t.shutdownTimeoutMs:p(t.shutdownTimeoutMs,t.shutdownDeadlineAt));return}if(process.platform!=="win32")throw new Error(`Application service process ${n.toString()} does not have an owned POSIX process group; refusing unsafe cleanup`);const o=a(n,e);if(o!=="different"){if(o==="unknown")throw new Error(`Cannot establish the creation identity of application service process ${n.toString()}; refusing unsafe cleanup`);if(await f(n,"SIGKILL",e),!await T(n,w,e))throw new Error(`Timed out stopping application service process ${n.toString()}`)}}export function requestProcessStop(t,n,e){const o=a(t,n);if(o!=="different"){if(o==="unknown")throw new Error(`Cannot establish the creation identity of Testkit run process ${t.toString()}; refusing unsafe stop request`);try{process.kill(t,e)}catch(i){if(!S(i,"ESRCH"))throw i}}}async function T(t,n,e){const o=()=>a(t,e)!=="different",i=Date.now();for(;Date.now()-i<n;){if(!o())return!0;await y(100)}return!o()}export function runManifestServiceKey(t){return`${t.pid.toString()}:${String(t.processGroupId)}:${t.processIdentity}`}export function sameRunManifestIncarnation(t,n){return t.runId===n.runId&&t.incarnationId===n.incarnationId&&t.pid===n.pid&&t.processIdentity===n.processIdentity}
@@ -1 +1 @@
1
- import{execFile as d,execFileSync as u}from"node:child_process";import l from"node:fs";import i from"node:path";import{fileURLToPath as p}from"node:url";export function windowsOwnerExecutable(){if(!["x64","arm64"].includes(process.arch))throw new Error(`Unsupported Testkit Windows architecture: ${process.arch}`);return i.resolve(i.dirname(p(import.meta.url)),"../../bin",`testkit-windows-owner-${process.arch}.exe`)}export function publishWindowsFile(t,e){const n=l.lstatSync(t,{bigint:!0});try{u(windowsOwnerExecutable(),["publish-file",i.toNamespacedPath(i.resolve(t)),i.toNamespacedPath(i.resolve(e))],{encoding:"utf8",maxBuffer:16*1024,stdio:["ignore","pipe","pipe"],timeout:5e3,windowsHide:!0})}catch(r){if(typeof r=="object"&&r!==null&&Reflect.get(r,"status")===17)throw Object.assign(new Error("File already exists",{cause:r}),{code:"EEXIST"});try{const o={bigint:!0,throwIfNoEntry:!1},s=l.lstatSync(t,o),a=l.lstatSync(e,o);if(!s&&n.isFile()&&a?.isFile()&&sameFileAfterRename(n,a))return}catch{}throw r}}const w=2,f=3,E=new Map([[5,"EACCES"],[17,"EXDEV"],[32,"EBUSY"],[80,"EEXIST"],[183,"EEXIST"],[303,"EPERM"]]);export function retireWindowsClaim(t,e,n){try{return u(windowsOwnerExecutable(),["retire-claim",i.toNamespacedPath(i.resolve(t)),i.toNamespacedPath(i.resolve(e))],{encoding:"utf8",maxBuffer:16*1024,stdio:["ignore","pipe","pipe"],timeout:5e3,windowsHide:!0}),"moved"}catch(r){const o=typeof r=="object"&&r!==null&&Reflect.get(r,"status")===2?parseWindowsClaimRetirementFailure(String(Reflect.get(r,"stdout"))):null;if(o!==null){if(isAbsentClaimFailure(o))return"absent";throw windowsClaimRetirementError(t,o,r)}try{const s={bigint:!0,throwIfNoEntry:!1},a=l.lstatSync(t,s),c=l.lstatSync(e,s);if(!a&&c!==void 0&&c.dev===n.dev&&c.ino===n.ino&&c.birthtimeNs===n.birthtimeNs)return"moved"}catch{}throw r}}export function parseWindowsClaimRetirementFailure(t){const e=/^(open|rename) ([1-9]\d*)$/u.exec(t.trim());return e===null?null:{stage:e[1]==="open"?"open":"rename",win32Error:Number(e[2])}}export function isAbsentClaimFailure({stage:t,win32Error:e}){return t==="open"&&(e===w||e===f)}export function windowsClaimRetirementError(t,e,n){const r=E.get(e.win32Error);return Object.assign(new Error(`Could not retire Windows lock claim ${t}: ${e.stage} failed with Win32 error ${e.win32Error.toString()}`,{cause:n}),{...r===void 0?{}:{code:r},syscall:e.stage,win32Error:e.win32Error})}const h=11644473600000n;export function terminateWindowsProcessTree(t,e,n){return terminateWindowsProcessTreeCreatedBy(t,windowsFileTimeNotAfter(e),n)}export function windowsFileTimeNotAfter(t){return((BigInt(Math.floor(t))+h)*10000n).toString()}export function terminateWindowsProcessTreeCreatedBy(t,e,n){return new Promise((r,o)=>{d(windowsOwnerExecutable(),["terminate-tree",t.toString(),e,Math.ceil(n).toString()],{encoding:"utf8",maxBuffer:16*1024,timeout:n+5e3,windowsHide:!0},(s,a,c)=>{if(s===null)r("terminated");else if(s.code===3)r("absent");else{const m=c.trim()||`Could not terminate Windows process tree ${t.toString()}`;o(new Error(m,{cause:s}))}})})}export function sameFileAfterRename(t,e){return t.ino!==0n&&t.dev===e.dev&&t.ino===e.ino&&t.size===e.size&&t.mtimeNs===e.mtimeNs}
1
+ import{execFile as d,execFileSync as w}from"node:child_process";import l from"node:fs";import c from"node:path";import{fileURLToPath as f}from"node:url";export function windowsOwnerExecutable(){if(!["x64","arm64"].includes(process.arch))throw new Error(`Unsupported Testkit Windows architecture: ${process.arch}`);return c.resolve(c.dirname(f(import.meta.url)),"../../bin",`testkit-windows-owner-${process.arch}.exe`)}function u(e,t,r){w(windowsOwnerExecutable(),[e,c.toNamespacedPath(c.resolve(t)),c.toNamespacedPath(c.resolve(r))],{encoding:"utf8",maxBuffer:16*1024,stdio:["ignore","pipe","pipe"],timeout:5e3,windowsHide:!0})}export function publishWindowsFile(e,t){const r=l.lstatSync(e,{bigint:!0});try{u("publish-file",e,t)}catch(n){if(typeof n=="object"&&n!==null&&Reflect.get(n,"status")===17)throw Object.assign(new Error("File already exists",{cause:n}),{code:"EEXIST"});try{const i={bigint:!0,throwIfNoEntry:!1},o=l.lstatSync(e,i),a=l.lstatSync(t,i);if(!o&&r.isFile()&&a?.isFile()&&sameFileAfterRename(r,a))return}catch{}throw n}}const p=2,E=3,h=new Map([[5,"EACCES"],[17,"EXDEV"],[32,"EBUSY"],[80,"EEXIST"],[183,"EEXIST"],[303,"EPERM"]]);export function retireWindowsClaim(e,t,r){try{return u("retire-claim",e,t),"moved"}catch(n){const i=typeof n=="object"&&n!==null&&Reflect.get(n,"status")===2?parseWindowsClaimRetirementFailure(String(Reflect.get(n,"stdout"))):null;if(i!==null){if(isAbsentClaimFailure(i))return"absent";throw windowsClaimRetirementError(e,i,n)}try{const o={bigint:!0,throwIfNoEntry:!1},a=l.lstatSync(e,o),s=l.lstatSync(t,o);if(!a&&s!==void 0&&s.dev===r.dev&&s.ino===r.ino&&s.birthtimeNs===r.birthtimeNs)return"moved"}catch{}throw n}}export function parseWindowsClaimRetirementFailure(e){const t=/^(open|rename) ([1-9]\d*)$/u.exec(e.trim());return t===null?null:{stage:t[1]==="open"?"open":"rename",win32Error:Number(t[2])}}export function isAbsentClaimFailure({stage:e,win32Error:t}){return e==="open"&&(t===p||t===E)}export function windowsClaimRetirementError(e,t,r){const n=h.get(t.win32Error);return Object.assign(new Error(`Could not retire Windows lock claim ${e}: ${t.stage} failed with Win32 error ${t.win32Error.toString()}`,{cause:r}),{...n===void 0?{}:{code:n},syscall:t.stage,win32Error:t.win32Error})}const g=11644473600000n;export function terminateWindowsProcessTree(e,t,r){return terminateWindowsProcessTreeCreatedBy(e,windowsFileTimeNotAfter(t),r)}export function windowsFileTimeNotAfter(e){return((BigInt(Math.floor(e))+g)*10000n).toString()}export function terminateWindowsProcessTreeCreatedBy(e,t,r){return new Promise((n,i)=>{d(windowsOwnerExecutable(),["terminate-tree",e.toString(),t,Math.ceil(r).toString()],{encoding:"utf8",maxBuffer:16*1024,timeout:r+5e3,windowsHide:!0},(o,a,s)=>{if(o===null)n("terminated");else if(o.code===3)n("absent");else{const m=s.trim()||`Could not terminate Windows process tree ${e.toString()}`;i(new Error(m,{cause:o}))}})})}export function sameFileAfterRename(e,t){return e.ino!==0n&&e.dev===t.dev&&e.ino===t.ino&&e.size===t.size&&e.mtimeNs===t.mtimeNs}
@@ -0,0 +1,4 @@
1
+ import Z from"node:crypto";import w from"node:fs";import b from"node:path";import{finished as F}from"node:stream/promises";import{requireManagedHostCommandSuccess as R,startManagedHostProcess as J}from"../process/index.js";import{createManagedGitEnvironment as Q,DEFAULT_GIT_COMMAND_TIMEOUT_MS as V,gitCommandLabel as X,REPOSITORY_COMMAND_GUARD_ARGS as v,runManagedGitCommand as E}from"./managed-git.js";const ee=new Set([".testkit",".next-testkit"]),x="160000",G="120000",T="000000",S="same as base",te=4e3;export async function locateGitCheckout(e,t=process.env){const n=await k(e,["rev-parse","--show-toplevel"]);if(n.exitCode!==0){if(`${n.stderr}
2
+ ${n.stdout}`.toLowerCase().includes("not a git repository"))return null;R("Git rev-parse",n)}const s=w.realpathSync.native(n.stdout.trim()),o=w.realpathSync.native(b.resolve(e)),r=b.relative(s,o).split(b.sep).join("/");if(r===".."||r.startsWith("../")||b.isAbsolute(r))throw new Error(`Product directory must be inside its Git worktree: ${o}`);return{product:r,productDir:o,repoRoot:s,settings:await L(s,t)}}export async function readContent(e){const t=await k(e.repoRoot,["rev-parse","--verify","--quiet","HEAD^{commit}"]);if(t.exitCode!==0)return{unavailable:"the repository has no commit yet"};const n=t.stdout.trim(),s=await N(e.repoRoot,!0);if(s===null)return{unavailable:"the repository's Git config names a filter that Testkit can't turn off"};const o=[...D(e.settings),...s],[r,a,c,f]=await Promise.all([g(e.repoRoot,["diff-index","-z","--no-renames","--ignore-submodules=all",n],o),g(e.repoRoot,["diff-index","-z","--no-renames","--cached","--ignore-submodules=none",n]),g(e.repoRoot,["ls-files","-z","--others","--exclude-standard"],o),g(e.repoRoot,["ls-files","-z","-v","-s"],o)]),u=new Map,d=new Map,l=new Set,h=[];for(const i of parseRawDiff(r))$(i.path)||(u.set(i.path,i.from),i.to!==null&&d.set(i.path,i.to.mode));for(const i of parseRawDiff(a))(i.from?.mode===x||i.to?.mode===x)&&l.add(i.path);const M=process.platform==="win32"||e.settings.fileMode==="false";for(const{entry:i,hidden:p,path:m}of parseIndexEntries(f))if(!$(m)){if(i.mode===x){const y=O(m)?await z(b.join(e.repoRoot,m),i.object):"unidentified";y==="absent"&&h.push(m),y==="unidentified"&&l.add(m);continue}p&&(u.has(m)||u.set(m,i),(i.mode===G?e.settings.symlinks==="false":M)?d.set(m,i.mode):d.delete(m))}const A=new Set;for(const i of j(c)){const p=i.replace(/\/$/u,"");$(p)||u.has(p)||(u.set(p,null),A.add(p))}const C=new Map(h.map(i=>[i,null])),I=[];for(const[i,p]of u){if(p?.mode===x||d.get(i)===x||!O(i)){l.add(i);continue}const m=b.join(e.repoRoot,i),y=w.lstatSync(m,{throwIfNoEntry:!1});if(y?.isDirectory()===!0&&A.has(i))l.add(i);else if(y===void 0||y.isDirectory())p!==null&&C.set(i,null);else if(y.isSymbolicLink()){const Y=w.readlinkSync(m,{encoding:"buffer"});H(C,i,p,{mode:G,object:se(n,Y)})}else y.isFile()?I.push(i):l.add(i)}const P=await ie(e.repoRoot,o,I);return I.forEach((i,p)=>{const m=d.get(i)??oe(b.join(e.repoRoot,i),M);H(C,i,u.get(i)??null,{mode:m,object:P[p]})}),{snapshot:{base:n,changes:Object.fromEntries([...C].sort(([i],[p])=>i<p?-1:1)),product:e.product,unidentified:[...l].sort()}}}export function createContentCache(){return{commits:new Map,listings:new Map}}export async function compareContent(e,t,n,s=createContentCache()){if(t.product!==n.product)return{kind:"unknown",reason:`it ran in product directory "${t.product||"."}"`};const o=new Map;if(t.base!==n.base){for(const h of[t.base,n.base])if(!await U(s.commits,h,()=>ae(e,h)))return{kind:"unknown",reason:`commit ${h.slice(0,12)} isn't in this clone`};const l=await g(e,["diff-tree","-z","-r","--no-renames","--ignore-submodules=none",t.base,n.base]);for(const h of parseRawDiff(l))$(h.path)||o.set(h.path,h)}const a=[...new Set([...Object.keys(t.changes),...Object.keys(n.changes),...o.keys()])].sort().map(l=>({from:W(t.changes,l,o.get(l)?.from),path:l,to:W(n.changes,l,o.get(l)?.to)})),f=a.filter(l=>l.from===S||l.to===S).length===0?new Set:await U(s.listings,t.base,()=>re(e,t.base)),u=[];for(const l of a){if(l.from!==S&&l.to!==S&&B(l.from,l.to))continue;const h=l.from===S?f.has(l.path):l.from!==null,M=l.to===S?f.has(l.path):l.to!==null;!h&&!M||u.push({change:h?M?"modified":"deleted":"added",path:l.path})}const d=[...new Set([...t.unidentified,...n.unidentified])].sort();return u.length===0&&d.length===0?{kind:"same"}:{kind:"different",changes:u,unidentified:d}}export async function listIgnoredEnvFiles(e){const t=await _(e.repoRoot,"",D(e.settings)),n=t.find(s=>s.includes("\uFFFD"));if(n!==void 0)throw new Error(`the name of the ignored env file ${n} isn't valid UTF-8`);return t}async function _(e,t,n){const[s,o]=await Promise.all([g(e,["ls-files","-z","--others","--ignored","--exclude-standard","--",":(glob)**/.env*",":(exclude,glob)**/node_modules/**"],n),g(e,["ls-files","-z","-v","-s"])]),r=j(s).filter(a=>!$(a)).map(a=>`${t}${a}`);for(const{entry:a,path:c}of parseIndexEntries(o)){const f=b.join(e,c);if(a.mode!==x||!O(c)||!w.existsSync(b.join(f,".git")))continue;const u=D(await L(f,process.env));r.push(...await _(f,`${t}${c}/`,u))}return r}export async function readTree(e,t){return(await g(e,["rev-parse","--verify",`${t}^{tree}`])).trim()}export async function listOtherWorktrees(e){const t=await g(e.repoRoot,["worktree","list","--porcelain"]),n=[];for(const s of t.split(/\r?\n\r?\n/u)){const o=s.split(/\r?\n/u),r=o.find(c=>c.startsWith("worktree "))?.slice(9);if(r===void 0||o.includes("bare")||o.some(c=>c.startsWith("prunable")))continue;let a;try{a=w.realpathSync.native(r)}catch{continue}a!==e.repoRoot&&n.push(a)}return n}export async function listRecentCommits(e,t){return(await g(e,["rev-list","--first-parent",`--max-count=${String(t)}`,"HEAD"])).split(/\r?\n/u).filter(Boolean)}export function parseIndexEntries(e){return j(e).map(t=>{const n=/^([A-Za-z?]) (\d{6}) ([0-9a-f]+) \d\t/u.exec(t);if(n===null)throw new Error(`Git returned a malformed index record: ${t}`);const[s,o,r,a]=n;return{entry:{mode:r,object:a},hidden:o==="S"||o.toLowerCase()===o,path:t.slice(s.length)}})}export function parseRawDiff(e){const t=e.split("\0"),n=[];for(let s=0;s+1<t.length;s+=2){const o=/^:(\d{6}) (\d{6}) ([0-9a-f]+) ([0-9a-f]+) [A-Z]\d*$/u.exec(t[s]);if(o===null)throw new Error(`Git returned a malformed raw diff record: ${t[s]}`);const[,r,a,c,f]=o;n.push({from:r===T?null:{mode:r,object:c},path:t[s+1],to:a===T?null:{mode:a,object:f}})}return n}async function z(e,t){if(!w.existsSync(b.join(e,".git"))){const n=w.statSync(e,{throwIfNoEntry:!1});return n===void 0||n.isDirectory()&&w.readdirSync(e).length===0?"absent":"unidentified"}return await ne(e,t)?"matches":"unidentified"}async function ne(e,t){const n=await E(e,[...v,"rev-parse","--verify","HEAD"]);if(n.exitCode!==0||n.stdout.trim()!==t)return!1;const s=await N(e,!1);if(s===null)return!1;const o=await E(e,[...v,...s,"status","--porcelain","--untracked-files=all","--ignore-submodules=dirty"]);if(o.exitCode!==0||o.stdout.trim()!=="")return!1;const r=parseIndexEntries(await g(e,["ls-files","-z","-v","-s"]));if(r.some(a=>a.hidden))return!1;for(const a of r.filter(c=>c.entry.mode===x))if(!O(a.path)||await z(b.join(e,a.path),a.entry.object)!=="matches")return!1;return!0}async function L(e,t){const n=async u=>{const d=await E(e,[...v,"config",...u],{env:t});return d.exitCode===0&&d.stdout.trim()||null},[s,o,r,a,c,f]=await Promise.all([n(["--type=path","--get","core.attributesFile"]),n(["--get","core.autocrlf"]),n(["--get","core.eol"]),n(["--type=path","--get","core.excludesFile"]),n(["--type=bool","--get","core.fileMode"]),n(["--type=bool","--get","core.symlinks"])]);return{attributesFile:s,autocrlf:o,eol:r,excludesFile:a,fileMode:c,symlinks:f}}async function N(e,t){const n=await E(e,[...v,"config","-z","--name-only","--get-regexp","^filter[.]"],{repositoryConfigOnly:t});n.exitCode!==1&&R("Git config",n);const s=new Set(j(n.stdout).filter(o=>o.lastIndexOf(".")>6).map(o=>o.slice(7,o.lastIndexOf("."))));return[...s].some(o=>o.includes("="))?null:[...s].flatMap(o=>["clean=","process=","required=false"].flatMap(r=>["-c",`filter.${o}.${r}`]))}function D(e){return[...e.attributesFile===null?[]:["-c",`core.attributesFile=${e.attributesFile}`],...e.autocrlf===null?[]:["-c",`core.autocrlf=${e.autocrlf}`],...e.eol===null?[]:["-c",`core.eol=${e.eol}`],...e.excludesFile===null?[]:["-c",`core.excludesFile=${e.excludesFile}`],...e.fileMode===null?[]:["-c",`core.fileMode=${e.fileMode}`],...e.symlinks===null?[]:["-c",`core.symlinks=${e.symlinks}`]]}function W(e,t,n){return Object.hasOwn(e,t)?e[t]:n===void 0?S:n}function B(e,t){return e===null||t===null?e===t:e.mode===t.mode&&e.object===t.object}function H(e,t,n,s){B(n,s)||e.set(t,s)}function oe(e,t){return t?"100644":w.statSync(e).mode&64?"100755":"100644"}function se(e,t){return Z.createHash(e.length===64?"sha256":"sha1").update(`blob ${t.byteLength.toString()}\0`).update(t).digest("hex")}async function ie(e,t,n){if(n.length===0)return[];const o=(await le(e,["hash-object","--stdin-paths"],`${n.join(`
3
+ `)}
4
+ `,t)).split(/\r?\n/u).filter(Boolean);if(o.length!==n.length||o.some(r=>!/^[0-9a-f]{40}(?:[0-9a-f]{24})?$/u.test(r)))throw new Error(`Git hash-object returned ${String(o.length)} object IDs for ${String(n.length)} files`);return o}async function re(e,t){return new Set(j(await g(e,["ls-tree","-r","-z","--full-tree","--name-only",t])))}function U(e,t,n){let s=e.get(t);return s===void 0&&(s=n(),e.set(t,s)),s}function O(e){return!/[\n\r\uFFFD]/u.test(e)&&!e.startsWith('"')}async function ae(e,t){return(await k(e,["cat-file","-e",`${t}^{commit}`])).exitCode===0}function le(e,t,n,s=[]){return q(e,t,s,n)}function g(e,t,n=[]){return q(e,t,n,"")}async function q(e,t,n,s){const o=X(t),r=J({args:K(t,n),cwd:e,displayLabel:o,env:Q(process.env,process.platform,!0),executable:"git",outputMode:"caller-drained",recoveryIdentity:"none",timeoutMs:V}),a=[];let c="";r.stdout.on("data",d=>a.push(d)),r.stderr.on("data",d=>{c=`${c}${d.toString("utf8")}`.slice(-te)}),r.stdin.on("error",()=>{}),r.stdin.end(s);const[f]=await Promise.all([r.completion,F(r.stdout),F(r.stderr)]),u=Buffer.concat(a).toString("utf8");return R(o,{...f,stderr:c,stdout:u}).stdout}function k(e,t,n=[]){return E(e,K(t,n),{repositoryConfigOnly:!0})}function K(e,t=[]){return["--no-replace-objects","--no-pager",...v,...t,...e]}function $(e){return e.split("/").some(t=>ee.has(t))}function j(e){return e.split("\0").filter(Boolean)}
@@ -1 +1 @@
1
- import x from"fs";import f from"path";import{physicalNodeMode as u,readPhysicalDirectoryEntries as y,readPhysicalNode as b}from"./physical-tree.js";import{rejectUnknownKeys as w}from"../kernel/known-keys.js";import{isUnknownArray as $,isUnknownRecord as E}from"../kernel/unknown-values.js";const z=[".testkit",".next-testkit"],l={exclude:[],include:[]};export function normalizeFingerprintPolicy(t={}){if(t==null)return{exclude:[],include:[]};if(!E(t))throw new Error("testkit.config.ts fingerprints must be an object");return w(t,["exclude","include"],"testkit.config.ts fingerprints"),{exclude:m(t.exclude,"fingerprints.exclude"),include:m(t.include,"fingerprints.include")}}export function shouldIgnoreCanonicalFingerprintPath(t,n=l){return shouldIgnoreCanonicalFingerprintPathAtPrefix(t,"",n)}export function shouldIgnoreCanonicalFingerprintPathAtPrefix(t,n,e=l){const r=normalizeCanonicalRelativePath(t),i=g(n,r);return!i||d(i,e.include)?!1:T(r)?!0:d(i,e.exclude)}export function hasIncludedFingerprintDescendantAtPrefix(t,n,e){const r=g(n,t);if(!r)return e.include.length>0;const i=`${r}/`;return e.include.some(c=>{const o=normalizeCanonicalRelativePath(c);if(o.includes("*")){const a=S(o);return a.length===0||r.startsWith(a)||a.startsWith(i)}return h(o).startsWith(i)})}export function appendFingerprintPathToHash(t,n,e,r=l){const i=normalizeRelativePath(n,e),c=x.realpathSync.native(f.resolve(n));P(t,c,i,r)}export function normalizeRelativePath(t,n){const e=f.isAbsolute(n)?f.relative(t,n):n;return f.isAbsolute(n)?normalizeCanonicalRelativePath(e.split(f.sep).join("/")):normalizePath(e)}export function normalizePath(t){return t.split(f.sep).join("/").replace(/\\/g,"/").replace(/^\.\/+/,"").replace(/\/+$/,"")}function m(t,n){if(t==null)return[];if(!$(t))throw new Error(`testkit.config.ts ${n} must be an array of paths`);return t.map((e,r)=>{if(typeof e!="string")throw new Error(`testkit.config.ts ${n}[${String(r)}] must be a string path`);const i=normalizeCanonicalRelativePath(e.trim());if(!i)throw new Error(`testkit.config.ts ${n}[${String(r)}] must be a non-empty path`);if(L(i))throw new Error(`testkit.config.ts ${n}[${String(r)}] must use "/" as the path separator; a literal backslash is written doubled`);if(i.startsWith("/")||/^[a-z]:\//iu.test(i)||i.startsWith("../")||i==="..")throw new Error(`testkit.config.ts ${n}[${String(r)}] must be relative to the product directory`);return i})}function d(t,n){return n.some(e=>I(t,e))}function T(t){return d(t,z)}function I(t,n){const e=normalizeCanonicalRelativePath(t),r=normalizeCanonicalRelativePath(n);if(!r)return!1;const i=h(r);if(e===i||e.startsWith(`${i}/`))return!0;if(!r.includes("*"))return!1;const c=W(r);let o=e;for(;o;){if(c.test(o))return!0;const a=o.lastIndexOf("/");if(a<0)break;o=o.slice(0,a)}return!1}export function normalizeCanonicalRelativePath(t){return t.replace(/^\.\/+/,"").replace(/\/+$/,"")}function L(t){for(let n=0;n<t.length;n+=1)if(t[n]==="\\"){if(t[n+1]!=="\\")return!0;n+=1}return!1}function h(t){return t.replace(/\\\\/g,"\\")}function S(t){let n="";for(let e=0;e<t.length;e+=1){const r=t[e];if(r==="*")break;r==="\\"&&t[e+1]==="\\"?(n+="\\",e+=1):n+=r}return n}function P(t,n,e,r){const i=b(n,e),c=shouldIgnoreCanonicalFingerprintPath(e,r);if(!(c&&(i.kind!=="directory"||!hasIncludedFingerprintDescendantAtPrefix(e,"",r)))&&(c||R(t,e,i),i.kind==="directory"))for(const o of y(n,e))P(t,n,g(e,o),r)}function R(t,n,e){switch(t.update("node\0"),s(t,"path",n),s(t,"kind",e.kind),e.kind){case"file":s(t,"mode",u(e.mode)),p(t,"contents",e.contents);break;case"directory":s(t,"mode",u(e.mode));break;case"symlink":case"ancestor-symlink":"obstaclePath"in e&&s(t,"obstacle",e.obstaclePath),p(t,"target",e.target);break;case"ancestor-missing":s(t,"obstacle",e.obstaclePath);break;case"ancestor-non-directory":s(t,"obstacle",e.obstaclePath),s(t,"mode",u(e.mode));break;case"missing":break}}function s(t,n,e){p(t,n,Buffer.from(e))}function p(t,n,e){t.update(`${n}\0${e.byteLength.toString()}\0`),t.update(e),t.update("\0")}function g(t,n){const e=normalizeCanonicalRelativePath(t),r=normalizeCanonicalRelativePath(n);return e?r?`${e}/${r}`:e:r}function W(t){let n="^";for(let e=0;e<t.length;e+=1){const r=t[e],i=t[e+1];r==="\\"&&i==="\\"?(n+=k("\\"),e+=1):r==="*"&&i==="*"?(n+=".*",e+=1):r==="*"?n+="[^/]*":n+=k(r)}return n+="$",new RegExp(n)}function k(t){return t.replace(/[\\^$+?.()|[\]{}]/g,"\\$&")}export function appendFileToHash(t,n,e,r={}){appendFingerprintPathToHash(t,n,e,normalizeFingerprintPolicy(r))}
1
+ import P from"fs";import f from"path";import{physicalNodeMode as u,readPhysicalDirectoryEntries as k,readPhysicalNode as y}from"./physical-tree.js";import{rejectUnknownKeys as b}from"../kernel/known-keys.js";import{isUnknownArray as w,isUnknownRecord as $}from"../kernel/unknown-values.js";const E=[".testkit",".next-testkit"],l={exclude:[],include:[]};export function normalizeFingerprintPolicy(t={}){if(t==null)return{exclude:[],include:[]};if(!$(t))throw new Error("testkit.config.ts fingerprints must be an object");return b(t,["exclude","include"],"testkit.config.ts fingerprints"),{exclude:g(t.exclude,"fingerprints.exclude"),include:g(t.include,"fingerprints.include")}}export function shouldIgnoreCanonicalFingerprintPath(t,n=l){return shouldIgnoreCanonicalFingerprintPathAtPrefix(t,"",n)}export function shouldIgnoreCanonicalFingerprintPathAtPrefix(t,n,e=l){const r=normalizeCanonicalRelativePath(t),i=joinCanonicalPath(n,r);return!i||d(i,e.include)?!1:z(r)?!0:d(i,e.exclude)}export function hasIncludedFingerprintDescendantAtPrefix(t,n,e){const r=joinCanonicalPath(n,t);if(!r)return e.include.length>0;const i=`${r}/`;return e.include.some(c=>{const o=normalizeCanonicalRelativePath(c);if(o.includes("*")){const a=L(o);return a.length===0||r.startsWith(a)||a.startsWith(i)}return m(o).startsWith(i)})}export function appendFingerprintPathToHash(t,n,e,r=l){const i=normalizeRelativePath(n,e),c=P.realpathSync.native(f.resolve(n));h(t,c,i,r)}export function normalizeRelativePath(t,n){const e=f.isAbsolute(n)?f.relative(t,n):n;return f.isAbsolute(n)?normalizeCanonicalRelativePath(e.split(f.sep).join("/")):normalizePath(e)}export function normalizePath(t){return t.split(f.sep).join("/").replace(/\\/g,"/").replace(/^\.\/+/,"").replace(/\/+$/,"")}function g(t,n){if(t==null)return[];if(!w(t))throw new Error(`testkit.config.ts ${n} must be an array of paths`);return t.map((e,r)=>{if(typeof e!="string")throw new Error(`testkit.config.ts ${n}[${String(r)}] must be a string path`);const i=normalizeCanonicalRelativePath(e.trim());if(!i)throw new Error(`testkit.config.ts ${n}[${String(r)}] must be a non-empty path`);if(I(i))throw new Error(`testkit.config.ts ${n}[${String(r)}] must use "/" as the path separator; a literal backslash is written doubled`);if(i.startsWith("/")||/^[a-z]:\//iu.test(i)||i.startsWith("../")||i==="..")throw new Error(`testkit.config.ts ${n}[${String(r)}] must be relative to the product directory`);return i})}function d(t,n){return n.some(e=>T(t,e))}function z(t){return d(t,E)}function T(t,n){const e=normalizeCanonicalRelativePath(t),r=normalizeCanonicalRelativePath(n);if(!r)return!1;const i=m(r);if(e===i||e.startsWith(`${i}/`))return!0;if(!r.includes("*"))return!1;const c=R(r);let o=e;for(;o;){if(c.test(o))return!0;const a=o.lastIndexOf("/");if(a<0)break;o=o.slice(0,a)}return!1}export function normalizeCanonicalRelativePath(t){return t.replace(/^\.\/+/,"").replace(/\/+$/,"")}function I(t){for(let n=0;n<t.length;n+=1)if(t[n]==="\\"){if(t[n+1]!=="\\")return!0;n+=1}return!1}function m(t){return t.replace(/\\\\/g,"\\")}function L(t){let n="";for(let e=0;e<t.length;e+=1){const r=t[e];if(r==="*")break;r==="\\"&&t[e+1]==="\\"?(n+="\\",e+=1):n+=r}return n}function h(t,n,e,r){const i=y(n,e),c=shouldIgnoreCanonicalFingerprintPath(e,r);if(!(c&&(i.kind!=="directory"||!hasIncludedFingerprintDescendantAtPrefix(e,"",r)))&&(c||S(t,e,i),i.kind==="directory"))for(const o of k(n,e))h(t,n,joinCanonicalPath(e,o),r)}function S(t,n,e){switch(t.update("node\0"),s(t,"path",n),s(t,"kind",e.kind),e.kind){case"file":s(t,"mode",u(e.mode)),p(t,"contents",e.contents);break;case"directory":s(t,"mode",u(e.mode));break;case"symlink":case"ancestor-symlink":"obstaclePath"in e&&s(t,"obstacle",e.obstaclePath),p(t,"target",e.target);break;case"ancestor-missing":s(t,"obstacle",e.obstaclePath);break;case"ancestor-non-directory":s(t,"obstacle",e.obstaclePath),s(t,"mode",u(e.mode));break;case"missing":break}}function s(t,n,e){p(t,n,Buffer.from(e))}function p(t,n,e){t.update(`${n}\0${e.byteLength.toString()}\0`),t.update(e),t.update("\0")}export function joinCanonicalPath(t,n){const e=normalizeCanonicalRelativePath(t),r=normalizeCanonicalRelativePath(n);return e?r?`${e}/${r}`:e:r}function R(t){let n="^";for(let e=0;e<t.length;e+=1){const r=t[e],i=t[e+1];r==="\\"&&i==="\\"?(n+=x("\\"),e+=1):r==="*"&&i==="*"?(n+=".*",e+=1):r==="*"?n+="[^/]*":n+=x(r)}return n+="$",new RegExp(n)}function x(t){return t.replace(/[\\^$+?.()|[\]{}]/g,"\\$&")}export function appendFileToHash(t,n,e,r={}){appendFingerprintPathToHash(t,n,e,normalizeFingerprintPolicy(r))}
@@ -1 +1 @@
1
- import{runManagedHostCommand as O}from"../process/index.js";export const DEFAULT_GIT_COMMAND_TIMEOUT_MS=3e4,REPOSITORY_COMMAND_GUARD_ARGS=["--no-optional-locks","-c","core.fsmonitor=false"];const n=new Set(["GIT_ALTERNATE_OBJECT_DIRECTORIES","GIT_ATTR_SOURCE","GIT_COMMON_DIR","GIT_CONFIG","GIT_CONFIG_COUNT","GIT_CONFIG_GLOBAL","GIT_CONFIG_NOSYSTEM","GIT_CONFIG_PARAMETERS","GIT_CONFIG_SYSTEM","GIT_DIFF_OPTS","GIT_DIR","GIT_EXTERNAL_DIFF","GIT_GLOB_PATHSPECS","GIT_ICASE_PATHSPECS","GIT_IMPLICIT_WORK_TREE","GIT_INDEX_FILE","GIT_LITERAL_PATHSPECS","GIT_NAMESPACE","GIT_NOGLOB_PATHSPECS","GIT_NO_REPLACE_OBJECTS","GIT_OBJECT_DIRECTORY","GIT_PREFIX","GIT_QUARANTINE_PATH","GIT_REPLACE_REF_BASE","GIT_SHALLOW_FILE","GIT_WORK_TREE"]),C=new Set(["GIT_OPTIONAL_LOCKS"]);export function runManagedGitCommand(E,T,I={}){return O({args:T,cwd:E,displayLabel:gitCommandLabel(T),env:createManagedGitEnvironment(I.env??process.env,process.platform,I.repositoryConfigOnly??!1),executable:"git",signal:I.signal,timeoutMs:I.timeoutMs??DEFAULT_GIT_COMMAND_TIMEOUT_MS})}export function createManagedGitEnvironment(E,T=process.platform,I=!1){const _={};for(const[G,t]of Object.entries(E)){const e=T==="win32"?G.toUpperCase():G;n.has(e)||/^GIT_CONFIG_(?:KEY|VALUE)_\d+$/u.test(e)||C.has(e)||e==="LANG"||e==="LC_ALL"||(_[G]=t)}if(_.LANG="C",_.LC_ALL="C",_.GIT_NO_REPLACE_OBJECTS="1",_.GIT_OPTIONAL_LOCKS="0",I){const G=T==="win32"?"NUL":"/dev/null";_.GIT_CONFIG_GLOBAL=G,_.GIT_CONFIG_NOSYSTEM="1",_.GIT_CONFIG_SYSTEM=G}return _}export function gitCommandLabel(E){const T=E.find(I=>!I.startsWith("-"));return T?`Git ${T}`:"Git command"}
1
+ import{runManagedHostCommand as O}from"../process/index.js";export const DEFAULT_GIT_COMMAND_TIMEOUT_MS=3e4,REPOSITORY_COMMAND_GUARD_ARGS=["--no-optional-locks","-c","core.fsmonitor=false"];const n=new Set(["GIT_ALTERNATE_OBJECT_DIRECTORIES","GIT_ATTR_SOURCE","GIT_COMMON_DIR","GIT_CONFIG","GIT_CONFIG_COUNT","GIT_CONFIG_GLOBAL","GIT_CONFIG_NOSYSTEM","GIT_CONFIG_PARAMETERS","GIT_CONFIG_SYSTEM","GIT_DIFF_OPTS","GIT_DIR","GIT_EXTERNAL_DIFF","GIT_GLOB_PATHSPECS","GIT_ICASE_PATHSPECS","GIT_IMPLICIT_WORK_TREE","GIT_INDEX_FILE","GIT_LITERAL_PATHSPECS","GIT_NAMESPACE","GIT_NOGLOB_PATHSPECS","GIT_NO_REPLACE_OBJECTS","GIT_OBJECT_DIRECTORY","GIT_PREFIX","GIT_QUARANTINE_PATH","GIT_REPLACE_REF_BASE","GIT_SHALLOW_FILE","GIT_WORK_TREE"]),C=new Set(["GIT_OPTIONAL_LOCKS"]);export function runManagedGitCommand(G,T,I={}){return O({args:T,cwd:G,displayLabel:gitCommandLabel(T),env:createManagedGitEnvironment(I.env??process.env,process.platform,I.repositoryConfigOnly??!1),executable:"git",signal:I.signal,timeoutMs:I.timeoutMs??DEFAULT_GIT_COMMAND_TIMEOUT_MS})}export function createManagedGitEnvironment(G,T=process.platform,I=!1){const _={};for(const[E,t]of Object.entries(G)){const e=T==="win32"?E.toUpperCase():E;n.has(e)||/^GIT_CONFIG_(?:KEY|VALUE)_\d+$/u.test(e)||C.has(e)||e==="LANG"||e==="LC_ALL"||(_[E]=t)}if(_.LANG="C",_.LC_ALL="C",_.GIT_NO_REPLACE_OBJECTS="1",_.GIT_OPTIONAL_LOCKS="0",I){const E=T==="win32"?"NUL":"/dev/null";_.GIT_CONFIG_GLOBAL=E,_.GIT_CONFIG_NOSYSTEM="1",_.GIT_CONFIG_SYSTEM=E}return _}export function gitCommandLabel(G){const T=G.find((I,_)=>!I.startsWith("-")&&G[_-1]!=="-c");return T?`Git ${T}`:"Git command"}
@@ -1 +1 @@
1
- import l from"node:fs";import o from"node:path";import{resolveCiGitReference as a}from"./ci-environment.js";import{collectGitRepoState as i}from"./state.js";export async function collectGitMetadata(t){const r=a(process.env),e=await i(t);return e===null?{branch:null,commitSha:null,pullRequest:r.pullRequest,pullRequestHeadSha:null,repoRoot:null,remoteUrl:null,repository:null,detached:!1,dirty:!1,dirtyFingerprint:null,worktreePath:l.realpathSync.native(o.resolve(t))}:{branch:e.branch,commitSha:e.commitSha,pullRequest:e.pullRequest,pullRequestHeadSha:e.pullRequestHeadSha,repoRoot:e.repoRoot,remoteUrl:e.remoteUrl,repository:e.repository,detached:e.detached,dirty:e.dirty,dirtyFingerprint:e.dirtyFingerprint,worktreePath:e.worktreePath}}
1
+ import{resolveCiGitReference as t}from"./ci-environment.js";import{collectGitRepoState as o}from"./state.js";export async function collectGitMetadata(e){return await o(e)??{pullRequest:t(process.env).pullRequest}}