@visulima/task-runner 1.0.0-alpha.14 → 1.0.0-alpha.15
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.
- package/CHANGELOG.md +8 -0
- package/dist/index.d.ts +161 -3
- package/dist/index.js +1 -1
- package/dist/packem_chunks/index.js +30 -10
- package/dist/packem_shared/HttpRemoteCache-D3Z6b_FO.js +1 -0
- package/dist/packem_shared/TaskOrchestrator-epY79EWq.js +2 -0
- package/dist/packem_shared/createTaskGraph-D6nPDd4s.js +1 -0
- package/dist/packem_shared/defaultTaskRunner-DtBuDlMy.js +2 -0
- package/dist/packem_shared/{resolveCacheMode-DXe7i-tj.js → resolveCacheMode-DEDFC-kM.js} +1 -1
- package/index.js +556 -729
- package/package.json +9 -9
- package/dist/packem_shared/HttpRemoteCache-Ch-_9ejF.js +0 -1
- package/dist/packem_shared/TaskOrchestrator-CXeojk7n.js +0 -2
- package/dist/packem_shared/createTaskGraph-CEYYI-DL.js +0 -1
- package/dist/packem_shared/defaultTaskRunner-Byi0zsgh.js +0 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@visulima/task-runner",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.15",
|
|
4
4
|
"description": "A task runner with caching support for monorepo workspaces",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cache",
|
|
@@ -70,14 +70,14 @@
|
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"optionalDependencies": {
|
|
73
|
-
"@visulima/task-runner-binding-darwin-
|
|
74
|
-
"@visulima/task-runner-binding-
|
|
75
|
-
"@visulima/task-runner-binding-linux-arm64-
|
|
76
|
-
"@visulima/task-runner-binding-
|
|
77
|
-
"@visulima/task-runner-binding-linux-x64-gnu": "1.0.0-alpha.
|
|
78
|
-
"@visulima/task-runner-binding-linux-x64-musl": "1.0.0-alpha.
|
|
79
|
-
"@visulima/task-runner-binding-win32-arm64-msvc": "1.0.0-alpha.
|
|
80
|
-
"@visulima/task-runner-binding-win32-x64-msvc": "1.0.0-alpha.
|
|
73
|
+
"@visulima/task-runner-binding-darwin-arm64": "1.0.0-alpha.15",
|
|
74
|
+
"@visulima/task-runner-binding-darwin-x64": "1.0.0-alpha.15",
|
|
75
|
+
"@visulima/task-runner-binding-linux-arm64-gnu": "1.0.0-alpha.15",
|
|
76
|
+
"@visulima/task-runner-binding-linux-arm64-musl": "1.0.0-alpha.15",
|
|
77
|
+
"@visulima/task-runner-binding-linux-x64-gnu": "1.0.0-alpha.15",
|
|
78
|
+
"@visulima/task-runner-binding-linux-x64-musl": "1.0.0-alpha.15",
|
|
79
|
+
"@visulima/task-runner-binding-win32-arm64-msvc": "1.0.0-alpha.15",
|
|
80
|
+
"@visulima/task-runner-binding-win32-x64-msvc": "1.0.0-alpha.15"
|
|
81
81
|
},
|
|
82
82
|
"engines": {
|
|
83
83
|
"node": "^22.14.0 || >=24.10.0"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var A=Object.defineProperty;var f=(r,t)=>A(r,"name",{value:t,configurable:!0});import{createRequire as S}from"node:module";import{join as u}from"@visulima/path";import{fetchBlobToFile as T,putBlobFromFile as k}from"./containsBlob-DBWgvkM_.js";import{O as v}from"./utils-BH2W5Wml.js";const C=S(import.meta.url),c=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,l=f(r=>{if(typeof c<"u"&&c.versions&&c.versions.node){const[t,e]=c.versions.node.split(".").map(Number);if(t>22||t===22&&e>=3||t===20&&e>=16)return c.getBuiltinModule(r)}return C(r)},"__cjs_getBuiltinModule"),{createHmac:x,timingSafeEqual:B,createHash:R}=l("node:crypto"),{createWriteStream:g,createReadStream:p}=l("node:fs"),{mkdir:y,rm:w,stat:j}=l("node:fs/promises"),{tmpdir:F}=l("node:os"),{pipeline:b}=l("node:stream/promises");var E=Object.defineProperty,d=f((r,t)=>E(r,"name",{value:t,configurable:!0}),"c");const m="X-Artifact-Signature",$=16,z="vis-entry.tar.gz",H=d(async r=>{const t=R("sha256");let e=0;for await(const s of p(r)){const i=s;t.update(i),e+=i.byteLength}return{hash:t.digest("hex"),sizeBytes:e}},"digestFile"),_=d(async(r,t,e)=>{const s=x("sha256",r);s.update(t);const i=p(e);for await(const a of i)s.update(a);return s.digest("hex")},"computeArtifactSignatureStream"),q=d((r,t)=>{if(r.length!==t.length)return!1;try{return B(Buffer.from(r,"hex"),Buffer.from(t,"hex"))}catch{return!1}},"signaturesMatch");class L{static{f(this,"x")}static{d(this,"HttpRemoteCache")}#u;#i;#r;#s;#a;#l;#f;#d;#t;#n;#e;#o=new Map;constructor(t){this.#u=t.url.replace(/\/$/,""),this.#i=t.token,this.#r=t.teamId,this.#s=t.timeout??3e4;const e=t.mode??"readwrite";if(this.#a=e==="read"||e==="readwrite",this.#l=e==="write"||e==="readwrite",this.#f=t.onUploadError,this.#d=t.compression??"gzip",this.#e=t.localCasRoot,t.signing){if(t.signing.secret.length<$)throw new Error(`Remote cache signing secret must be at least ${String($)} characters.`);this.#t=t.signing.secret,this.#n=t.signing.verifyOnDownload??!1}else this.#t=void 0,this.#n=!1}async close(){}async containsAction(t){if(!this.#a)return!1;try{const e=this.#h(`/v8/artifacts/${t.hash}`);return(await fetch(e,{headers:this.#c(),method:"HEAD",signal:AbortSignal.timeout(this.#s)})).ok}catch{return!1}}async fetchBlob(t,e){return this.#e?T(this.#e,t,e):!1}async retrieveAction(t){if(!this.#a||!this.#e)return null;const e=u(this.#e,"v2","tmp"),s=u(e,`.remote-${t.hash}-${v()}`);try{await y(e,{recursive:!0});const i=this.#h(`/v8/artifacts/${t.hash}`),a=await fetch(i,{headers:this.#c(),method:"GET",signal:AbortSignal.timeout(this.#s)});if(!a.ok||!a.body)return null;const n=this.#t?a.headers.get(m.toLowerCase())??a.headers.get(m):null;if(this.#t&&!n&&this.#n)return null;if(await b(a.body,g(s)),this.#t&&n){const h=await _(this.#t,t.hash,s);if(!q(n,h))return null}const o=await H(s);return await k(this.#e,o,s),{exitCode:0,outputDirectories:[],outputFiles:[{digest:o,isExecutable:!1,path:z}]}}catch{return null}finally{await w(s,{force:!0}).catch(()=>{})}}async storeAction(t,e,s){if(!this.#l||e.outputFiles.length!==1||s.length===0)return!1;const i=e.outputFiles[0];if(!i)return!1;const a=s.find(h=>h.digest.hash===i.digest.hash);if(!a)return!1;const n=this.#o.get(t.hash);if(n)return n;const o=this.#m(t,a).finally(()=>{this.#o.delete(t.hash)});return this.#o.set(t.hash,o),o}async#m(t,e){const s=this.#e?u(this.#e,"v2","tmp"):u(F(),"visulima-task-runner-uploads"),i=u(s,`.upload-${t.hash}-${v()}`);try{await y(s,{recursive:!0});const a=await e.open();await b(a,g(i));const n=this.#h(`/v8/artifacts/${t.hash}`),{size:o}=await j(i),h={...this.#c(),"Content-Length":String(o),"Content-Type":"application/octet-stream","X-Artifact-Compression":this.#d};return this.#t&&(h[m]=await _(this.#t,t.hash,i)),(await fetch(n,{body:p(i),duplex:"half",headers:h,method:"PUT",signal:AbortSignal.timeout(this.#s)})).ok}catch(a){return this.#f?.(t.hash,a),!1}finally{await w(i,{force:!0}).catch(()=>{})}}#h(t){const e=`${this.#u}${t}`;return this.#r?`${e}?teamId=${encodeURIComponent(this.#r)}`:e}#c(){const t={};return this.#i&&(t.Authorization=`Bearer ${this.#i}`),t}}export{L as HttpRemoteCache};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var C=Object.defineProperty;var k=(r,t)=>C(r,"name",{value:t,configurable:!0});import{j as w,v as O,f as R}from"./utils-BH2W5Wml.js";import{resolve as j,join as M}from"@visulima/path";import{retrieveByTaskHash as E,storeByTaskHash as F}from"./actionDigestForTaskHash-BOL4fZ9v.js";import{FingerprintManager as H}from"./FingerprintManager-CYW2EwLc.js";import{generateRunSummary as x,writeLastRunSummary as $,writeRunSummary as I}from"./generateRunSummary-beN13GH4.js";import{computeTaskHash as P}from"./computeTaskHash-Xxd8v-X3.js";import{TrackedTaskExecutor as W}from"./TrackedTaskExecutor-D3-LNT_d.js";import{getCurrentBranch as A,evaluateWhen as L,explainWhen as G}from"./getCurrentBranch-D-qoZByx.js";var N=Object.defineProperty,l=k((r,t)=>N(r,"name",{value:t,configurable:!0}),"l");const z=l(r=>{const t=R();t.update(r.commandHash);for(const s of Object.keys(r.fileHashes).toSorted())t.update(s),t.update(r.fileHashes[s]);for(const s of r.missingFiles)t.update(`missing:${s}`);for(const s of Object.keys(r.directoryListings).toSorted())t.update(`dir:${s}`),t.update(JSON.stringify(r.directoryListings[s]));for(const s of Object.keys(r.envHashes).toSorted())t.update(s),t.update(r.envHashes[s]);return t.digest()},"hashFingerprint"),b=l((r,t)=>{if(!r||r.length===0||!t)return!1;for(const s of r)try{if(new RegExp(s).test(t))return!0}catch{}return!1},"detectWarnings"),g=l(()=>{let r;return{promise:new Promise(t=>{r=t}),resolve:r}},"createDeferred");class Z{static{k(this,"z")}static{l(this,"TaskOrchestrator")}#r;#i;#h;#t;#f;#a;#m;#p;#w;#e;#n;#k;#g;#d;#S;#c;#C;#R;#j;#y;#T;#s=new Map;#M;#v;#O;#o=new Map;#u=g();#l=!1;constructor(t){this.#r=t.taskHasher,this.#i=t.cache,this.#h=t.scheduler,this.#t=t.lifeCycle,this.#f=t.taskExecutor,this.#a=t.workspaceRoot,this.#m=t.skipCache??!1,this.#p=t.captureOutput??!0,this.#w=t.autoFingerprint??!1,this.#k=t.fingerprintEnvPatterns??[],this.#g=t.untrackedEnvVars??[],this.#d=t.cacheDiagnostics??!1,this.#S=t.resolveCommand??void 0,this.#c=t.remoteCache??void 0,this.#C=t.onRemoteUploadError??void 0,this.#R=t.dryRun??!1,this.#j=t.summarize??!1,this.#y=t.dataDirectory,this.#T=t.taskGraph??void 0,this.#M=Date.now(),this.#v=t.alwaysTasks??[],this.#O=t.whenContext??{branch:A(t.workspaceRoot)},this.#w?(this.#e=new H(t.workspaceRoot),this.#n=new W(t.workspaceRoot)):(this.#e=void 0,this.#n=void 0)}async run(){this.#t.startCommand?.();const t=l(()=>{this.#l=!0,this.#n?.killAll()},"signalHandler");process.on("SIGINT",t),process.on("SIGTERM",t);try{await this.#x(),this.#v.length>0&&!this.#l&&await this.#H()}finally{process.removeListener("SIGINT",t),process.removeListener("SIGTERM",t),this.#t.endCommand?.()}if(this.#T&&!this.#l){const s=x(this.#s,this.#T,this.#M);await $(s,this.#a,{dataDirectory:this.#y}),this.#j&&await I(s,this.#a,{dataDirectory:this.#y})}return this.#s}async#H(){for(const t of this.#v){this.#t.scheduleTask?.(t),this.#t.startTasks?.([t]);let s;if(this.#E(t))s=this.#F(t);else{const e=Date.now();try{s=await this.#D(t,e)}catch(i){s=w(t,i,e),this.#s.set(t.id,s)}}this.#t.endTasks?.([s]),s.terminalOutput&&this.#t.printTaskTerminalOutput?.(s.task,s.status,s.terminalOutput)}}async#x(){for(;!this.#h.isComplete()&&!this.#l;){const t=this.#h.getNextBatch();if(t.length===0){if(this.#o.size>0){await this.#u.promise,this.#u=g();continue}if(this.#h.remainingCount>0)throw new Error("Deadlock detected: tasks remain but none can be scheduled. This may indicate a circular dependency.");break}for(const s of t)this.#t.scheduleTask?.(s),this.#h.startTask(s.id);this.#t.startTasks?.(t);for(const s of t){const e=(this.#E(s)?Promise.resolve(this.#F(s)):this.#w?this.#I(s):this.#$(s)).catch(i=>{const a=w(s,i,Date.now());return this.#s.set(s.id,a),a}).then(i=>(this.#o.delete(s.id),this.#h.completeTask(s.id),this.#t.endTasks?.([i]),i.terminalOutput&&this.#t.printTaskTerminalOutput?.(i.task,i.status,i.terminalOutput),this.#u.resolve(),i));this.#o.set(s.id,e)}this.#o.size>0&&(await this.#u.promise,this.#u=g())}this.#o.size>0&&await Promise.all(this.#o.values())}async#$(t){const s=Date.now(),e=await this.#r.hashTask(t),i=P(e);if(Object.assign(t,{hash:i,hashDetails:e}),this.#R)return this.#G(t,s);if(!this.#m&&t.cache!==!1){const h=await this.#i.get(i);if(h)return this.#b(t,h,s);if(this.#c&&await E(this.#c,i,this.#i.cacheDirectory)){const n=await this.#i.get(i);if(n){const c=await this.#b(t,n,s);return c.status="remote-cache",c}}}const a=await this.#D(t,s);return a.code===0&&t.cache!==!1&&t.hash&&this.#c&&F(this.#c,t.hash,this.#i.cacheDirectory,this.#C).catch(()=>{}),a}async#I(t){const s=Date.now();if(!this.#m&&t.cache!==!1){const e=await this.#i.getByTaskId(t.id);if(e?.fingerprint&&this.#e){const i=this.#e.validateCommand(e.fingerprint,`${t.target.project}:${t.target.target}`,t.overrides);if(i)this.#d&&this.#t.printCacheMiss?.(t,this.#e.formatMissReasons([i]));else{const a=await this.#e.validate(e.fingerprint);if(!a)return this.#b(t,e,s);this.#d&&this.#t.printCacheMiss?.(t,this.#e.formatMissReasons(a))}}else this.#d&&!e&&this.#t.printCacheMiss?.(t,`Cache miss reasons:
|
|
2
|
-
- No previous fingerprint found (first run)`)}return this.#W(t,s)}async#b(t,s,e){const i=await this.#i.restoreOutputs(s.hash,t.outputs,t.cacheRestore)?"local-cache":"local-cache-kept-existing",a={code:s.code,endTime:Date.now(),startTime:e,status:i,task:t,terminalOutput:s.terminalOutput};return this.#s.set(t.id,a),a}async#D(t,s){try{const{code:e,retryAttempts:i,terminalOutput:a}=await this.#f(t,{captureOutput:this.#p,cwd:O(this.#a,t)}),h=e===0&&b(t.warningPattern,a),n={code:e,endTime:Date.now(),hadWarnings:h||void 0,retryAttempts:i&&i>0?i:void 0,startTime:s,status:e===0?"success":"failure",task:t,terminalOutput:a};this.#s.set(t.id,n);const c=h&&t.cacheOnWarning===!1;if(e===0&&t.cache!==!1&&t.hash&&!c){const p=await this.#P(t);p.length>0?(n.selfModified=!0,this.#t.printSelfModifyingSkip?.(t,p)):await this.#i.put(t.hash,a,t.outputs,e)}return n}catch(e){const i=w(t,e,s);return this.#s.set(t.id,i),i}}async#P(t){const s=t.hashDetails?.nodes;if(!s||typeof this.#r.rehashFile!="function")return[];const e=this.#r.rehashFile.bind(this.#r),i=Object.entries(s);return(await Promise.all(i.map(async([a,h])=>{const n=j(this.#a,a),c=await e(n);return c!==void 0&&c!==h?a:void 0}))).filter(a=>a!==void 0)}async#W(t,s){if(!this.#e)return this.#D(t,s);const e=`${t.target.project}:${t.target.target}`,i=O(this.#a,t);try{let a,h,n,c=0,p=!1,f,y;const T=this.#S?.(t);if(T&&this.#n?.isTrackingSupported&&this.#n){const o=await this.#n.execute(t,{captureOutput:this.#p,cwd:i},T);a=o.code,h=o.terminalOutput,c=o.accesses.length,p=!0,y=o.accesses.filter(u=>u.type==="write").map(u=>u.path),n=await this.#e.createFingerprint(o.accesses,e,t.overrides,process.env,this.#k,this.#g)}else{const o=await this.#f(t,{captureOutput:this.#p,cwd:i});a=o.code,h=o.terminalOutput,f=o.retryAttempts;const u=await this.#r.hashTask(t),d=Object.keys(u.nodes).map(S=>({path:M(this.#a,S),type:"read"}));n=await this.#e.createFingerprint(d,e,t.overrides,process.env,this.#k,this.#g)}const v=a===0&&b(t.warningPattern,h),m={code:a,endTime:Date.now(),hadWarnings:v||void 0,retryAttempts:f&&f>0?f:void 0,startTime:s,status:a===0?"success":"failure",task:t,terminalOutput:h};this.#s.set(t.id,m);const D=v&&t.cacheOnWarning===!1;if(a===0&&t.cache!==!1&&n&&!D){const o=this.#A(n),u=this.#L(n,p,c);if(o.length>0)m.selfModified=!0,this.#t.printSelfModifyingSkip?.(t,o);else if(u)m.emptyFingerprint=!0,this.#t.printEmptyFingerprintWarning?.(t,u);else{const d=z(n);Object.assign(t,{hash:d}),await this.#i.put(d,h,t.outputs,a,n,y),await this.#i.setTaskIndex(t.id,d)}}return m}catch(a){const h=w(t,a,s);return this.#s.set(t.id,h),h}}#A(t){return t.modifiedInputs??[]}#L(t,s,e){return!s||Object.keys(t.fileHashes).length>0||Object.keys(t.directoryListings).length>0||t.missingFiles.length>0?void 0:e===0?"Tracker observed no workspace file accesses — likely a static binary on a platform without strace. Caching skipped.":"Tracker returned accesses but none fell inside the workspace. Caching skipped to avoid false cache hits."}#G(t,s){const e=t.hash?`[hash: ${t.hash.slice(0,12)}...]`:"[no hash]",i={code:0,endTime:Date.now(),startTime:s,status:"skipped",task:t,terminalOutput:`DRY RUN ${e}`};return this.#s.set(t.id,i),i}#E(t){return t.when?!L(t.when,this.#O):!1}#F(t){const s=G(t.when,this.#O),e=Date.now();this.#t.printWhenSkip?.(t,s);const i={code:0,endTime:e,startTime:e,status:"skipped",task:t,terminalOutput:s?`Skipped: ${s}`:"Skipped by when clause"};return this.#s.set(t.id,i),i}}export{Z as TaskOrchestrator};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var m=Object.defineProperty;var h=(t,e)=>m(t,"name",{value:e,configurable:!0});var v=Object.defineProperty,g=h((t,e)=>v(t,"name",{value:e,configurable:!0}),"p");const l=g(t=>{const e=[t.project,t.target];return t.configuration&&e.push(t.configuration),e.join(":")},"getTaskId"),R=g(t=>{const e=t.split(":");if(e.length<2)throw new Error(`Invalid task ID: ${t}`);return{configuration:e[2],project:e[0],target:e[1]}},"parseTaskId"),f=g(t=>{if(t===void 0)return;const e=typeof t=="string"?[t]:t;return e.length===0?void 0:e},"normalizeWarningPattern"),j=g((t,e,c,o)=>{const a=c.projects[t],r=a?.targets?.[e],i=o?.[e];return(r?.outputs??i?.outputs??[]).map(p=>p.replace("{projectRoot}",a?.root??"").replace("{projectName}",t))},"getTaskOutputs"),d=g((t,e,c,o,a)=>{const r=o.projects[t];if(!r)return[];if(!(r.targets?.[e]!==void 0||a?.[e]!==void 0))return[];const i={project:t,target:e};return[{always:r.targets?.[e]?.always??a?.[e]?.always,cache:r.targets?.[e]?.cache??a?.[e]?.cache,cacheOnWarning:r.targets?.[e]?.cacheOnWarning??a?.[e]?.cacheOnWarning,cacheRestore:r.targets?.[e]?.cacheRestore??a?.[e]?.cacheRestore,concurrencyGroup:r.targets?.[e]?.concurrencyGroup??a?.[e]?.concurrencyGroup,id:l(i),maxConcurrent:r.targets?.[e]?.maxConcurrent??a?.[e]?.maxConcurrent,outputs:j(t,e,o,a),overrides:c,parallelism:r.targets?.[e]?.parallelism??a?.[e]?.parallelism,projectRoot:r.root,target:i,warningPattern:f(r.targets?.[e]?.warningPattern??a?.[e]?.warningPattern),when:r.targets?.[e]?.when??a?.[e]?.when}]},"getSameProjectTask"),w=g((t,e,c,o,a,r)=>{const i=[],p=a.dependencies[t]??[];for(const n of p){const s=o.projects[n.target];if(s&&(s.targets?.[e]!==void 0||r?.[e]!==void 0)){const u={project:n.target,target:e};i.push({always:s.targets?.[e]?.always??r?.[e]?.always,cache:s.targets?.[e]?.cache??r?.[e]?.cache,cacheOnWarning:s.targets?.[e]?.cacheOnWarning??r?.[e]?.cacheOnWarning,cacheRestore:s.targets?.[e]?.cacheRestore??r?.[e]?.cacheRestore,concurrencyGroup:s.targets?.[e]?.concurrencyGroup??r?.[e]?.concurrencyGroup,id:l(u),maxConcurrent:s.targets?.[e]?.maxConcurrent??r?.[e]?.maxConcurrent,outputs:j(n.target,e,o,r),overrides:c,parallelism:s.targets?.[e]?.parallelism??r?.[e]?.parallelism,projectRoot:s.root,target:u,warningPattern:f(s.targets?.[e]?.warningPattern??r?.[e]?.warningPattern),when:s.targets?.[e]?.when??r?.[e]?.when})}}return i},"getDependencyProjectTasks"),k=g((t,e,c,o,a)=>{if(e.startsWith("^")){const r=e.slice(1);return w(t.target.project,r,{},c,o,a)}return d(t.target.project,e,{},c,a)},"resolveStringDependency"),O=g((t,e,c,o,a)=>{const r=[];if(e.dependencies)r.push(...w(t.target.project,e.target,e.params==="forward"?t.overrides:{},c,o,a));else if(e.projects){const i=Array.isArray(e.projects)?e.projects:[e.projects];for(const p of i)r.push(...d(p,e.target,e.params==="forward"?t.overrides:{},c,a))}else r.push(...d(t.target.project,e.target,e.params==="forward"?t.overrides:{},c,a));return r},"resolveConfigDependency"),P=g((t,e,c,o,a)=>typeof e=="string"?k(t,e,c,o,a):O(t,e,c,o,a),"resolveDependency"),T=g((t,e)=>{const{projectGraph:c,targetDefaults:o,workspace:a}=e,r=a.projects[t.target.project];if(!r)return[];const i=r.targets?.[t.target.target],p=o?.[t.target.target],n=i?.dependsOn??p?.dependsOn??[],s=[];for(const u of n){const y=P(t,u,a,c,o);s.push(...y)}return s},"resolveTaskDependencies"),C=g((t,e)=>{const c={},o={},a=new Set,r=[...t];for(;r.length>0;){const n=r.shift();if(!n)break;if(a.has(n.id))continue;a.add(n.id),c[n.id]=n,o[n.id]=[];const s=T(n,e);for(const u of s)o[n.id]?.push(u.id),a.has(u.id)||r.push(u)}const i=new Set;for(const n of Object.values(o))for(const s of n)i.add(s);const p=Object.keys(c).filter(n=>!i.has(n));return{dependencies:o,roots:p,tasks:c}},"createTaskGraph");export{C as createTaskGraph,l as getTaskId,R as parseTaskId};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var x=Object.defineProperty;var k=(e,a)=>x(e,"name",{value:a,configurable:!0});import{X as D}from"./utils-BH2W5Wml.js";import{createRemoteCacheBackend as F}from"./resolveCacheMode-DXe7i-tj.js";import{Cache as I}from"./Cache-C540ZPYk.js";import{inferFrameworkEnvPatterns as j}from"./detectFrameworks-WVZJOPgN.js";import{IncrementalFileHasher as H}from"./IncrementalFileHasher-CdLXVB5F.js";import{InProcessTaskHasher as O}from"./computeTaskHash-Xxd8v-X3.js";import{TaskOrchestrator as V}from"./TaskOrchestrator-CXeojk7n.js";import{TaskScheduler as z}from"./parsePartition-uzPNgtPp.js";var G=Object.defineProperty,m=k((e,a)=>G(e,"name",{value:a,configurable:!0}),"i");const P=m(e=>{const a=[],o={};for(const[r,n]of Object.entries(e.tasks))n.always?a.push(n):o[r]=n;if(a.length===0)return{alwaysTasks:[],graph:e};const i=new Set(a.map(r=>r.id)),c={};for(const[r,n]of Object.entries(e.dependencies))i.has(r)||(c[r]=n.filter(s=>!i.has(s)));return{alwaysTasks:a,graph:{dependencies:c,roots:e.roots.filter(r=>!i.has(r)),tasks:o}}},"partitionAlwaysTasks"),S=m(e=>{if(!e||e.length===0)return;const a=[...e].sort().map(o=>`${o}=${process.env[o]??""}`).join(`
|
|
2
|
-
`);return D(Buffer.from(a)).slice(0,16)},"computeGlobalEnvNamespace"),A=m(e=>typeof e=="number"?Math.max(1,e):e===!1?1:3,"resolveParallel"),J=m(async(e,a,o)=>{const{lifeCycle:i,projectGraph:c,taskExecutor:r,taskGraph:n,workspaceRoot:s}=o,v=a.namespaceByGlobalEnv?S(a.globalEnv):void 0,d=new I({cacheDirectory:a.cacheDirectory,cacheNamespace:v,maxCacheAge:a.maxCacheAge,maxCacheSize:a.maxCacheSize,workspaceRoot:s});d.removeOldEntries().catch(()=>{});const p={};for(const[t,h]of Object.entries(c.nodes))p[t]=h.data;const l=a.incrementalFileHashing?new H({workspaceRoot:s}):void 0;l&&await l.load();const w=new O({autoEnvVars:a.autoEnvVars,envVars:a.envVars,frameworkInference:a.frameworkInference,globalEnv:a.globalEnv,globalInputs:a.globalInputs,incrementalHasher:l,namedInputs:a.namedInputs,onFingerprint:a.onFingerprint,projects:p,smartLockfileHashing:a.smartLockfileHashing,targetDefaults:a.targetDefaults,workspaceRoot:s}),{alwaysTasks:y,graph:g}=P(n),E=A(a.parallel),C=new z(g,c,E,a.concurrencyGroups),b=m(t=>{const h=c.nodes[t.target.project]?.data.targets?.[t.target.target],T=a.targetDefaults?.[t.target.target];return h?.command??T?.command},"resolveCommand"),u=a.remoteCache?F(a.remoteCache):void 0;let f=a.fingerprintEnvPatterns??[];if(a.frameworkInference&&a.autoFingerprint){const t=await j(s,p);f=[...new Set([...f,...t])]}const R=new V({alwaysTasks:y,autoFingerprint:a.autoFingerprint,cache:d,cacheDiagnostics:a.cacheDiagnostics,captureOutput:!0,dataDirectory:a.dataDirectory,dryRun:a.dryRun,fingerprintEnvPatterns:f,lifeCycle:i,onRemoteUploadError:a.remoteCache?.onUploadError,remoteCache:u,resolveCommand:a.autoFingerprint?b:void 0,scheduler:C,skipCache:a.skipNxCache,summarize:a.summarize,taskExecutor:r,taskGraph:g,taskHasher:w,untrackedEnvVars:a.untrackedEnvVars,workspaceRoot:s});try{const t=await R.run();return l&&await l.save().catch(()=>{}),t}finally{u&&await u.close().catch(()=>{})}},"defaultTaskRunner");export{J as defaultTaskRunner};
|