@overkill-dev/run 0.0.75 → 0.0.76
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/assertion-protocol/source-location.js +10 -0
- package/assertion-protocol/source-location.js.map +1 -1
- package/config/config.d.ts +4 -2
- package/config/config.d.ts.map +1 -1
- package/config/config.js +21 -0
- package/config/config.js.map +1 -1
- package/config/property-policy.js +54 -0
- package/config/property-policy.js.map +1 -0
- package/config/schema.d.ts +132 -0
- package/config/schema.d.ts.map +1 -1
- package/config/schema.js +17 -1
- package/config/schema.js.map +1 -1
- package/config/snapshot.js +12 -0
- package/config/snapshot.js.map +1 -1
- package/config/types.d.ts +12 -1
- package/config/types.d.ts.map +1 -1
- package/config/validation.js +25 -3
- package/config/validation.js.map +1 -1
- package/engine/case-body-execution.js +6 -2
- package/engine/case-body-execution.js.map +1 -1
- package/engine/case-execution-lifecycle.js +22 -0
- package/engine/case-execution-lifecycle.js.map +1 -0
- package/engine/engine.d.ts +2 -1
- package/engine/engine.d.ts.map +1 -1
- package/engine/engine.js +1 -0
- package/engine/engine.js.map +1 -1
- package/engine/execution-supervision-state.js +2 -0
- package/engine/execution-supervision-state.js.map +1 -1
- package/engine/execution-test-plan-cases.js +24 -1
- package/engine/execution-test-plan-cases.js.map +1 -1
- package/engine/identity.d.ts +1 -0
- package/engine/identity.d.ts.map +1 -1
- package/engine/property-node.d.ts +30 -0
- package/engine/property-node.d.ts.map +1 -0
- package/engine/property-node.js +9 -0
- package/engine/property-node.js.map +1 -0
- package/engine/test-body.d.ts +16 -0
- package/engine/test-body.d.ts.map +1 -0
- package/engine/test-body.js +23 -0
- package/engine/test-body.js.map +1 -1
- package/engine/test-node.d.ts +11 -5
- package/engine/test-node.d.ts.map +1 -1
- package/engine/test-node.js +23 -31
- package/engine/test-node.js.map +1 -1
- package/engine/test-plan.js +3 -3
- package/engine/test-plan.js.map +1 -1
- package/package.json +9 -1
- package/packages/run/command-line.entry-point.d.ts +1 -1
- package/packages/run/command-line.entry-point.d.ts.map +1 -1
- package/packages/run/config.entry-point.d.ts +2 -2
- package/packages/run/config.entry-point.d.ts.map +1 -1
- package/packages/run/run.entry-point.d.ts +11 -3
- package/packages/run/run.entry-point.d.ts.map +1 -1
- package/packages/run/run.entry-point.js +3 -0
- package/packages/run/run.entry-point.js.map +1 -1
- package/readme.md +16 -0
- package/run/attachment-coordinator-context.js +6 -0
- package/run/attachment-coordinator-context.js.map +1 -1
- package/run/attachment-eligibility.js +2 -1
- package/run/attachment-eligibility.js.map +1 -1
- package/run/benchmark-command-policy.d.ts +1 -1
- package/run/benchmark-command-policy.d.ts.map +1 -1
- package/run/child-process.entry-point.js +3 -1
- package/run/child-process.entry-point.js.map +1 -1
- package/run/collected-run-plan-schema.js +13 -0
- package/run/collected-run-plan-schema.js.map +1 -1
- package/run/collected-run-plan.js +5 -14
- package/run/collected-run-plan.js.map +1 -1
- package/run/command-line-config.js +1 -1
- package/run/command-line-config.js.map +1 -1
- package/run/command-line-execution.js.map +1 -1
- package/run/{current-process-run-orchestrator.d.ts → current-process-run-input.d.ts} +2 -2
- package/run/current-process-run-input.d.ts.map +1 -0
- package/run/current-process-run-input.js +42 -0
- package/run/current-process-run-input.js.map +1 -0
- package/run/current-process-run-orchestrator.js +3 -64
- package/run/current-process-run-orchestrator.js.map +1 -1
- package/run/default-run-engine.js +1 -0
- package/run/default-run-engine.js.map +1 -1
- package/run/duration-history-schema.js +1 -1
- package/run/duration-history-schema.js.map +1 -1
- package/run/duration-history.d.ts.map +1 -1
- package/run/duration-history.js +4 -0
- package/run/duration-history.js.map +1 -1
- package/run/execution-failure-schema.d.ts +4 -0
- package/run/execution-failure-schema.d.ts.map +1 -0
- package/run/execution-failure-schema.js +24 -0
- package/run/execution-failure-schema.js.map +1 -0
- package/run/execution-failure.d.ts +4 -0
- package/run/execution-failure.d.ts.map +1 -0
- package/run/execution-failure.js +66 -0
- package/run/execution-failure.js.map +1 -0
- package/run/execution-session-child.js +28 -0
- package/run/execution-session-child.js.map +1 -0
- package/run/execution-session-collected.js +41 -0
- package/run/execution-session-collected.js.map +1 -0
- package/run/execution-session-context.js +9 -0
- package/run/execution-session-context.js.map +1 -0
- package/run/execution-session-environment.js +23 -0
- package/run/execution-session-environment.js.map +1 -0
- package/run/execution-session-host.js +60 -0
- package/run/execution-session-host.js.map +1 -0
- package/run/execution-session-lifecycle.js +88 -0
- package/run/execution-session-lifecycle.js.map +1 -0
- package/run/execution-session-process.entry-point.js +15 -0
- package/run/execution-session-process.entry-point.js.map +1 -0
- package/run/execution-session-process.js +56 -0
- package/run/execution-session-process.js.map +1 -0
- package/run/execution-session-schema.js +48 -0
- package/run/execution-session-schema.js.map +1 -0
- package/run/execution-session-supervised.js +82 -0
- package/run/execution-session-supervised.js.map +1 -0
- package/run/execution-session-types.d.ts +46 -0
- package/run/execution-session-types.d.ts.map +1 -0
- package/run/execution-session.js +97 -0
- package/run/execution-session.js.map +1 -0
- package/run/frozen-supervised-command-schema.js +18 -1
- package/run/frozen-supervised-command-schema.js.map +1 -1
- package/run/node-command-line-runner.d.ts +1 -1
- package/run/node-command-line-runner.d.ts.map +1 -1
- package/run/node-command-line-runner.js.map +1 -1
- package/run/{run-orchestrator.d.ts → node-run-orchestrator-dependencies.d.ts} +1 -1
- package/run/node-run-orchestrator-dependencies.d.ts.map +1 -0
- package/run/node-run-orchestrator-dependencies.js +43 -0
- package/run/node-run-orchestrator-dependencies.js.map +1 -0
- package/run/property-collection.js +113 -0
- package/run/property-collection.js.map +1 -0
- package/run/run-cancellation.js.map +1 -1
- package/run/run-case-facts.js +28 -0
- package/run/run-case-facts.js.map +1 -0
- package/run/run-collected-resolution.js +5 -1
- package/run/run-collected-resolution.js.map +1 -1
- package/run/run-command-schema.js +3 -1
- package/run/run-command-schema.js.map +1 -1
- package/run/run-empty-shard.js.map +1 -1
- package/run/run-engine-primitives.d.ts +10 -1
- package/run/run-engine-primitives.d.ts.map +1 -1
- package/run/run-engine-selection.js +1 -0
- package/run/run-engine-selection.js.map +1 -1
- package/run/run-execution.js.map +1 -1
- package/run/run-facts.js +8 -13
- package/run/run-facts.js.map +1 -1
- package/run/run-in-process-execution.js.map +1 -1
- package/run/run-input-resolution.js +4 -4
- package/run/run-input-resolution.js.map +1 -1
- package/run/run-isolated-command.js +13 -4
- package/run/run-isolated-command.js.map +1 -1
- package/run/run-isolated-process.js.map +1 -1
- package/run/run-local-execution.js.map +1 -1
- package/run/run-local-planning.js +2 -1
- package/run/run-local-planning.js.map +1 -1
- package/run/run-local-resolution.js.map +1 -1
- package/run/run-local-test-plan.js +10 -2
- package/run/run-local-test-plan.js.map +1 -1
- package/run/run-operations.d.ts +2 -2
- package/run/run-operations.d.ts.map +1 -1
- package/run/run-operations.js.map +1 -1
- package/run/run-orchestrator-types.d.ts +9 -0
- package/run/run-orchestrator-types.d.ts.map +1 -0
- package/run/run-orchestrator.entry-point.d.ts +1 -1
- package/run/run-orchestrator.entry-point.d.ts.map +1 -1
- package/run/run-orchestrator.js +2 -41
- package/run/run-orchestrator.js.map +1 -1
- package/run/run-request-types.d.ts +9 -1
- package/run/run-request-types.d.ts.map +1 -1
- package/run/run-selection-filters.d.ts.map +1 -1
- package/run/run-selection-filters.js +11 -1
- package/run/run-selection-filters.js.map +1 -1
- package/run/run-selection-schema.d.ts.map +1 -1
- package/run/run-selection-schema.js +2 -1
- package/run/run-selection-schema.js.map +1 -1
- package/run/run-selection.js +8 -2
- package/run/run-selection.js.map +1 -1
- package/run/run-supervised-process.js.map +1 -1
- package/run/run-support.js +2 -2
- package/run/run-support.js.map +1 -1
- package/run/run-test-plan.js +12 -0
- package/run/run-test-plan.js.map +1 -1
- package/run/run-types.d.ts +27 -10
- package/run/run-types.d.ts.map +1 -1
- package/run/run-types.js.map +1 -1
- package/run/run.js +4 -0
- package/run/run.js.map +1 -1
- package/run/runtime-attachment-boundary.js +2 -1
- package/run/runtime-attachment-boundary.js.map +1 -1
- package/run/supervised-child-execution.js +14 -0
- package/run/supervised-child-execution.js.map +1 -1
- package/run/supervised-child-process.js +7 -3
- package/run/supervised-child-process.js.map +1 -1
- package/run/supervised-child-test-plan.js +6 -5
- package/run/supervised-child-test-plan.js.map +1 -1
- package/run/supervised-child.js +24 -10
- package/run/supervised-child.js.map +1 -1
- package/run/supervised-protocol-schema.js +6 -3
- package/run/supervised-protocol-schema.js.map +1 -1
- package/run/supervised-protocol.js +3 -17
- package/run/supervised-protocol.js.map +1 -1
- package/run/supervised-run-runtime.js +3 -0
- package/run/supervised-run-runtime.js.map +1 -1
- package/run/supervised-run.js +10 -5
- package/run/supervised-run.js.map +1 -1
- package/run/worker-pool-host-protocol-schema.js +1 -1
- package/run/worker-pool-host-protocol-schema.js.map +1 -1
- package/run/workload-input-validation.js +5 -0
- package/run/workload-input-validation.js.map +1 -1
- package/{sbom.cdx.json → software-bill-of-materials.cyclonedx.json} +5 -5
- package/run/current-process-run-orchestrator.d.ts.map +0 -1
- package/run/run-orchestrator.d.ts.map +0 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
+
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
+
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
+
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
return path;
|
|
8
|
+
};
|
|
9
|
+
import { z } from 'zod/v4';
|
|
10
|
+
import { withCaseExecutionLifecycle } from "../engine/case-execution-lifecycle.js";
|
|
11
|
+
import { withExecutionSession } from "./execution-session-context.js";
|
|
12
|
+
import { withFileModuleBoundary } from "./file-module-boundary.js";
|
|
13
|
+
import { parseRunSelection } from "./run-selection-schema.js";
|
|
14
|
+
function isLifecycleFactory(value) {
|
|
15
|
+
return typeof value === 'function';
|
|
16
|
+
}
|
|
17
|
+
function isExecutionLifecycle(value) {
|
|
18
|
+
return typeof value === 'object' && value !== null &&
|
|
19
|
+
['select', 'beforeCases', 'enterCase', 'completeCase', 'snapshot', 'dispose'].every(function (method) {
|
|
20
|
+
return typeof Reflect.get(value, method) === 'function';
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function validatedLifecycle(lifecycle) {
|
|
24
|
+
return {
|
|
25
|
+
async select(plan) {
|
|
26
|
+
return parseRunSelection(await lifecycle.select(plan));
|
|
27
|
+
},
|
|
28
|
+
async beforeCases() {
|
|
29
|
+
await lifecycle.beforeCases();
|
|
30
|
+
},
|
|
31
|
+
async enterCase(work) {
|
|
32
|
+
await lifecycle.enterCase(work);
|
|
33
|
+
},
|
|
34
|
+
async completeCase(result, errors) {
|
|
35
|
+
return z.enum(['continue', 'stop']).parse(await lifecycle.completeCase(result, errors));
|
|
36
|
+
},
|
|
37
|
+
snapshot() {
|
|
38
|
+
return z.json().parse(lifecycle.snapshot());
|
|
39
|
+
},
|
|
40
|
+
async dispose() {
|
|
41
|
+
await lifecycle.dispose();
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async function loadExecutionLifecycle(transport) {
|
|
46
|
+
const module = await import(__rewriteRelativeImportExtension(transport.lifecycle.moduleUrl));
|
|
47
|
+
const factory = typeof module === 'object' && module !== null
|
|
48
|
+
? Reflect.get(module, transport.lifecycle.exportName)
|
|
49
|
+
: null;
|
|
50
|
+
if (!isLifecycleFactory(factory)) {
|
|
51
|
+
throw new TypeError('Execution lifecycle export must be a factory.');
|
|
52
|
+
}
|
|
53
|
+
const created = await factory(structuredClone(transport.data));
|
|
54
|
+
if (!isExecutionLifecycle(created)) {
|
|
55
|
+
throw new TypeError('Execution lifecycle factory returned an invalid lifecycle.');
|
|
56
|
+
}
|
|
57
|
+
return validatedLifecycle(created);
|
|
58
|
+
}
|
|
59
|
+
async function runOwnedLifecycle(lifecycle, run) {
|
|
60
|
+
const [execution] = await Promise.allSettled([withCaseExecutionLifecycle({
|
|
61
|
+
async enter(testCase) {
|
|
62
|
+
await lifecycle.enterCase(testCase.workId);
|
|
63
|
+
},
|
|
64
|
+
complete: lifecycle.completeCase
|
|
65
|
+
}, async function () {
|
|
66
|
+
return await run(lifecycle);
|
|
67
|
+
})]);
|
|
68
|
+
const [disposal] = await Promise.allSettled([lifecycle.dispose()]);
|
|
69
|
+
if (execution.status === 'rejected' && disposal.status === 'rejected') {
|
|
70
|
+
throw new AggregateError([execution.reason, disposal.reason], 'Execution and lifecycle disposal failed.', { cause: execution.reason });
|
|
71
|
+
}
|
|
72
|
+
if (disposal.status === 'rejected') {
|
|
73
|
+
throw disposal.reason;
|
|
74
|
+
}
|
|
75
|
+
if (execution.status === 'rejected') {
|
|
76
|
+
throw execution.reason;
|
|
77
|
+
}
|
|
78
|
+
return execution.value;
|
|
79
|
+
}
|
|
80
|
+
export async function withExecutionLifecycle(transport, boundary, run) {
|
|
81
|
+
return await withExecutionSession(transport, async function () {
|
|
82
|
+
return await withFileModuleBoundary(boundary, async function () {
|
|
83
|
+
const lifecycle = await loadExecutionLifecycle(transport);
|
|
84
|
+
return await runOwnedLifecycle(lifecycle, run);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=execution-session-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-session-lifecycle.js","sourceRoot":"","sources":["../../../../source/run/execution-session-lifecycle.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAEnF,OAAO,EAAE,oBAAoB,EAA8B,MAAM,gCAAgC,CAAC;AAClG,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,SAAS,kBAAkB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC;AACvC,CAAC;AACD,SAAS,oBAAoB,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAC9C,CAAE,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,CAAE,CAAC,KAAK,CAAC,UAAU,MAAM;YAClG,OAAO,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,UAAU,CAAC;QAC5D,CAAC,CAAC,CAAC;AACX,CAAC;AACD,SAAS,kBAAkB,CAAC,SAAgC;IACxD,OAAO;QACH,KAAK,CAAC,MAAM,CAAC,IAAI;YACb,OAAO,iBAAiB,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,WAAW;YACb,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;QAClC,CAAC;QACD,KAAK,CAAC,SAAS,CAAC,IAAI;YAChB,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM;YAC7B,OAAO,CAAC,CAAC,IAAI,CAAC,CAAE,UAAU,EAAE,MAAM,CAAE,CAAC,CAAC,KAAK,CAAC,MAAM,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9F,CAAC;QACD,QAAQ;YACJ,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,KAAK,CAAC,OAAO;YACT,MAAM,SAAS,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;KACJ,CAAC;AACN,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,SAAgC;IAClE,MAAM,MAAM,GAAY,MAAM,MAAM,kCAAC,SAAS,CAAC,SAAS,CAAC,SAAS,EAAC,CAAC;IACpE,MAAM,OAAO,GAAY,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI;QAClE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC;QACrD,CAAC,CAAC,IAAI,CAAC;IACX,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,SAAS,CAAC,+CAA+C,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,OAAO,GAAY,MAAM,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,SAAS,CAAC,4DAA4D,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC5B,SAAgC,EAChC,GAAyD;IAEzD,MAAM,CAAE,SAAS,CAAE,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAE,0BAA0B,CAAC;YACxE,KAAK,CAAC,KAAK,CAAC,QAAQ;gBAChB,MAAM,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/C,CAAC;YACD,QAAQ,EAAE,SAAS,CAAC,YAAY;SACnC,EAAE,KAAK;YACJ,OAAO,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC,CAAC,CAAE,CAAC,CAAC;IACN,MAAM,CAAE,QAAQ,CAAE,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAE,SAAS,CAAC,OAAO,EAAE,CAAE,CAAC,CAAC;IACvE,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACpE,MAAM,IAAI,cAAc,CACpB,CAAE,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAE,EACrC,0CAA0C,EAC1C,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAC9B,CAAC;IACN,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,MAAM,QAAQ,CAAC,MAAM,CAAC;IAC1B,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,OAAO,SAAS,CAAC,KAAK,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CACxC,SAAgC,EAChC,QAAmC,EACnC,GAAyD;IAEzD,OAAO,MAAM,oBAAoB,CAAC,SAAS,EAAE,KAAK;QAC9C,OAAO,MAAM,sBAAsB,CAAC,QAAQ,EAAE,KAAK;YAC/C,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;YAC1D,OAAO,MAAM,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { readProcessEnvironment } from "./node-host-readers.js";
|
|
3
|
+
export const executionSessionProcessUrl = import.meta.url;
|
|
4
|
+
export const executionSessionProcessArgument = '--overkill-execution-session';
|
|
5
|
+
export function readExecutionSessionEnvironment() {
|
|
6
|
+
return readProcessEnvironment(process);
|
|
7
|
+
}
|
|
8
|
+
async function startExecutionSessionHost() {
|
|
9
|
+
await import("./execution-session-host.js");
|
|
10
|
+
}
|
|
11
|
+
if (process.argv[1] === fileURLToPath(executionSessionProcessUrl) &&
|
|
12
|
+
process.argv.includes(executionSessionProcessArgument)) {
|
|
13
|
+
await startExecutionSessionHost();
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=execution-session-process.entry-point.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-session-process.entry-point.js","sourceRoot":"","sources":["../../../../source/run/execution-session-process.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AAC1D,MAAM,CAAC,MAAM,+BAA+B,GAAG,8BAA8B,CAAC;AAC9E,MAAM,UAAU,+BAA+B;IAC3C,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,yBAAyB;IACpC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAChD,CAAC;AAED,IACI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,0BAA0B,CAAC;IAC7D,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EACxD,CAAC;IACC,MAAM,yBAAyB,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { fork } from 'node:child_process';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { sanitizedChildEnvironment } from "./supervised-child-process.js";
|
|
4
|
+
import { executionReplySchema } from "./execution-session-schema.js";
|
|
5
|
+
import { executionSessionProcessArgument, executionSessionProcessUrl, readExecutionSessionEnvironment } from "./execution-session-process.entry-point.js";
|
|
6
|
+
export async function runFreshExecutionSession(command, transport, timeoutMilliseconds, signal) {
|
|
7
|
+
signal.throwIfAborted();
|
|
8
|
+
const child = fork(fileURLToPath(executionSessionProcessUrl), [executionSessionProcessArgument], {
|
|
9
|
+
cwd: command.policy.cwd,
|
|
10
|
+
env: sanitizedChildEnvironment(readExecutionSessionEnvironment(), 'microtest'),
|
|
11
|
+
execArgv: [],
|
|
12
|
+
serialization: 'advanced',
|
|
13
|
+
killSignal: 'SIGKILL',
|
|
14
|
+
signal,
|
|
15
|
+
stdio: ['ignore', 'pipe', 'pipe', 'ipc']
|
|
16
|
+
});
|
|
17
|
+
child.stdout?.resume();
|
|
18
|
+
child.stderr?.resume();
|
|
19
|
+
const closed = new Promise(function (resolve) {
|
|
20
|
+
child.once('close', resolve);
|
|
21
|
+
});
|
|
22
|
+
try {
|
|
23
|
+
return await new Promise(function (resolve, reject) {
|
|
24
|
+
child.once('error', reject);
|
|
25
|
+
child.once('exit', function (code, termination) {
|
|
26
|
+
reject(new Error(`Execution host exited without a result (${String(code)}, ${String(termination)}).`));
|
|
27
|
+
});
|
|
28
|
+
child.once('message', function (message) {
|
|
29
|
+
try {
|
|
30
|
+
resolve(executionReplySchema.parse(message));
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
reject(error instanceof Error
|
|
34
|
+
? error
|
|
35
|
+
: new Error('Execution host returned an invalid reply.', { cause: error }));
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
child.send({
|
|
39
|
+
policy: command.policy,
|
|
40
|
+
seed: command.invocation.seed,
|
|
41
|
+
selection: command.invocation.selection,
|
|
42
|
+
transport,
|
|
43
|
+
timeoutMilliseconds
|
|
44
|
+
}, function (error) {
|
|
45
|
+
if (error !== null) {
|
|
46
|
+
reject(error);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
child.kill('SIGKILL');
|
|
53
|
+
await closed;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=execution-session-process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-session-process.js","sourceRoot":"","sources":["../../../../source/run/execution-session-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EACH,+BAA+B,EAC/B,0BAA0B,EAC1B,+BAA+B,EAClC,MAAM,4CAA4C,CAAC;AAKpD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC1C,OAAyB,EACzB,SAAgC,EAChC,mBAA2B,EAC3B,MAAmB;IAEnB,MAAM,CAAC,cAAc,EAAE,CAAC;IACxB,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,EAAE,CAAE,+BAA+B,CAAE,EAAE;QAC/F,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG;QACvB,GAAG,EAAE,yBAAyB,CAAC,+BAA+B,EAAE,EAAE,WAAW,CAAC;QAC9E,QAAQ,EAAE,EAAE;QACZ,aAAa,EAAE,UAAU;QACzB,UAAU,EAAE,SAAS;QACrB,MAAM;QACN,KAAK,EAAE,CAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAE;KAC7C,CAAC,CAAC;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,IAAI,OAAO,CAAO,UAAU,OAAO;QAC9C,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACD,OAAO,MAAM,IAAI,OAAO,CAAoB,UAAU,OAAO,EAAE,MAAM;YACjE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,KAAK,CAAC,IAAI,CACN,MAAM,EACN,UAAU,IAAI,EAAE,WAAW;gBACvB,MAAM,CACF,IAAI,KAAK,CAAC,2CAA2C,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CACjG,CAAC;YACN,CAAC,CACJ,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,OAAO;gBACnC,IAAI,CAAC;oBACD,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBACjD,CAAC;gBAAC,OAAO,KAAc,EAAE,CAAC;oBACtB,MAAM,CACF,KAAK,YAAY,KAAK;wBAClB,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,IAAI,KAAK,CAAC,2CAA2C,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CACjF,CAAC;gBACN,CAAC;YACL,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CACN;gBACI,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,IAAI;gBAC7B,SAAS,EAAE,OAAO,CAAC,UAAU,CAAC,SAAS;gBACvC,SAAS;gBACT,mBAAmB;aACtB,EACD,UAAU,KAAK;gBACX,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACjB,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClB,CAAC;YACL,CAAC,CACJ,CAAC;QACN,CAAC,CAAC,CAAC;IACP,CAAC;YAAS,CAAC;QACP,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,MAAM,MAAM,CAAC;IACjB,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
import { createPlainOutputRenderer } from "../engine/reporter-output.js";
|
|
3
|
+
import { frozenMicrotestPolicySchema } from "./frozen-run-policy-schema.js";
|
|
4
|
+
import { runResultSchema } from "./run-result-schema.js";
|
|
5
|
+
import { runExecutionFailureSchema } from "./execution-failure-schema.js";
|
|
6
|
+
import { runSelectionSchema } from "./run-selection-schema.js";
|
|
7
|
+
import { parseFrozenMicrotestPolicy } from "./frozen-run-policy.js";
|
|
8
|
+
import { RunResolutionError } from "./run-errors.js";
|
|
9
|
+
export function normalizeExecutionSessionOptions(supplied, createSeed) {
|
|
10
|
+
if (supplied.command.policy.request.coverage || supplied.command.policy.request.baselineUpdateMode !== 'none') {
|
|
11
|
+
throw new RunResolutionError('Memory execution sessions do not support recorded coverage or baseline updates.', undefined, 'unsupported-request');
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
...supplied,
|
|
15
|
+
lifecycle: { ...supplied.lifecycle },
|
|
16
|
+
command: {
|
|
17
|
+
...supplied.command,
|
|
18
|
+
policy: parseFrozenMicrotestPolicy(supplied.command.policy),
|
|
19
|
+
invocation: {
|
|
20
|
+
seed: { value: supplied.command.invocation.seed.value ?? createSeed() },
|
|
21
|
+
selection: runSelectionSchema.parse(supplied.command.invocation.selection)
|
|
22
|
+
},
|
|
23
|
+
reporting: { outputRenderer: createPlainOutputRenderer(), reporters: [] }
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export const executionTransportSchema = z.strictObject({
|
|
28
|
+
lifecycle: z.strictObject({ moduleUrl: z.url(), exportName: z.string().min(1) }),
|
|
29
|
+
data: z.json()
|
|
30
|
+
});
|
|
31
|
+
export const executionReplySchema = z.discriminatedUnion('kind', [
|
|
32
|
+
z.strictObject({
|
|
33
|
+
kind: z.literal('result'),
|
|
34
|
+
result: runResultSchema,
|
|
35
|
+
data: z.json(),
|
|
36
|
+
deadlineExceeded: z.boolean()
|
|
37
|
+
}),
|
|
38
|
+
z.strictObject({ kind: z.literal('failure'), failure: runExecutionFailureSchema, data: z.json() }),
|
|
39
|
+
z.strictObject({ kind: z.literal('timeout'), data: z.json() })
|
|
40
|
+
]);
|
|
41
|
+
export const executionHostRequestSchema = z.strictObject({
|
|
42
|
+
policy: frozenMicrotestPolicySchema,
|
|
43
|
+
seed: z.strictObject({ value: z.bigint().nonnegative() }),
|
|
44
|
+
selection: runSelectionSchema,
|
|
45
|
+
transport: executionTransportSchema,
|
|
46
|
+
timeoutMilliseconds: z.number().positive()
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=execution-session-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-session-schema.js","sourceRoot":"","sources":["../../../../source/run/execution-session-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,MAAM,UAAU,gCAAgC,CAC5C,QAAoC,EACpC,UAAwB;IAExB,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,kBAAkB,KAAK,MAAM,EAAE,CAAC;QAC5G,MAAM,IAAI,kBAAkB,CACxB,iFAAiF,EACjF,SAAS,EACT,qBAAqB,CACxB,CAAC;IACN,CAAC;IACD,OAAO;QACH,GAAG,QAAQ;QACX,SAAS,EAAE,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE;QACpC,OAAO,EAAE;YACL,GAAG,QAAQ,CAAC,OAAO;YACnB,MAAM,EAAE,0BAA0B,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC;YAC3D,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,UAAU,EAAE,EAAE;gBACvE,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC;aAC7E;YACD,SAAS,EAAE,EAAE,cAAc,EAAE,yBAAyB,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;SAC5E;KACJ,CAAC;AACN,CAAC;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,YAAY,CAAC;IACnD,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;CACjB,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IAC7D,CAAC,CAAC,YAAY,CAAC;QACX,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzB,MAAM,EAAE,eAAe;QACvB,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QACd,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE;KAChC,CAAC;IACF,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;IAClG,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;CACjE,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,YAAY,CAAC;IACrD,MAAM,EAAE,2BAA2B;IACnC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;IACzD,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAE,wBAAwB;IACnC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { createStoredValue } from "../stored-value.js";
|
|
2
|
+
import { envelopeMessage } from "./child-process-protocol.js";
|
|
3
|
+
import { supervisedChildMessageSchema } from "./supervised-protocol-schema.js";
|
|
4
|
+
import { supervisedChildCorrelationId } from "./supervised-protocol.js";
|
|
5
|
+
import { createRunOperations } from "./run-operations.js";
|
|
6
|
+
import { withExecutionSession } from "./execution-session-context.js";
|
|
7
|
+
import { runExecutionFailure } from "./execution-failure.js";
|
|
8
|
+
function readExecutionData(observation, message) {
|
|
9
|
+
const decoded = envelopeMessage(message, supervisedChildCorrelationId, supervisedChildMessageSchema);
|
|
10
|
+
if (decoded?.kind !== 'execution-data') {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (observation.delivered.read()) {
|
|
14
|
+
throw new Error('Duplicate execution lifecycle data.');
|
|
15
|
+
}
|
|
16
|
+
observation.delivered.write(true);
|
|
17
|
+
observation.data.write(decoded.data);
|
|
18
|
+
}
|
|
19
|
+
function observeExecutionMessage(observation, message) {
|
|
20
|
+
try {
|
|
21
|
+
readExecutionData(observation, message);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
observation.failure.write(error instanceof Error ? error : new Error('Invalid execution lifecycle data.', { cause: error }));
|
|
25
|
+
observation.invalid.abort();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function observedDependencies(dependencies, observation) {
|
|
29
|
+
return {
|
|
30
|
+
...dependencies,
|
|
31
|
+
async startSupervisedChild(input) {
|
|
32
|
+
const child = await dependencies.startSupervisedChild(input);
|
|
33
|
+
child.on('message', function (message) {
|
|
34
|
+
observeExecutionMessage(observation, message);
|
|
35
|
+
});
|
|
36
|
+
return child;
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function missingDataReply(result, call) {
|
|
41
|
+
if (call.signal.aborted && result.runnerErrors.every(function (error) {
|
|
42
|
+
return error.subtype === 'crash';
|
|
43
|
+
})) {
|
|
44
|
+
return { kind: 'failure', failure: runExecutionFailure(call.signal.reason), data: null };
|
|
45
|
+
}
|
|
46
|
+
const errors = result
|
|
47
|
+
.runnerErrors
|
|
48
|
+
.map(function (error) {
|
|
49
|
+
return error.message;
|
|
50
|
+
})
|
|
51
|
+
.join('\n');
|
|
52
|
+
return {
|
|
53
|
+
kind: 'failure',
|
|
54
|
+
failure: runExecutionFailure(new Error(`Execution lifecycle data was not delivered. ${errors}`)),
|
|
55
|
+
data: null
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function observedReply(result, call, observation) {
|
|
59
|
+
const failure = observation.failure.read();
|
|
60
|
+
if (failure !== null) {
|
|
61
|
+
return { kind: 'failure', failure: runExecutionFailure(failure), data: observation.data.read() };
|
|
62
|
+
}
|
|
63
|
+
if (!observation.delivered.read()) {
|
|
64
|
+
return missingDataReply(result, call);
|
|
65
|
+
}
|
|
66
|
+
return { kind: 'result', result, data: observation.data.read(), deadlineExceeded: false };
|
|
67
|
+
}
|
|
68
|
+
export async function runSupervisedExecutionSession(options, dependencies, call) {
|
|
69
|
+
const observation = {
|
|
70
|
+
data: createStoredValue(null),
|
|
71
|
+
delivered: createStoredValue(false),
|
|
72
|
+
failure: createStoredValue(null),
|
|
73
|
+
invalid: new AbortController()
|
|
74
|
+
};
|
|
75
|
+
const operations = createRunOperations(observedDependencies(dependencies, observation), 'test');
|
|
76
|
+
const signal = AbortSignal.any([call.signal, observation.invalid.signal]);
|
|
77
|
+
const result = await withExecutionSession(call.transport, async function () {
|
|
78
|
+
return await operations.run(options.command, { signal, timing: null });
|
|
79
|
+
});
|
|
80
|
+
return observedReply(result, call, observation);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=execution-session-supervised.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-session-supervised.js","sourceRoot":"","sources":["../../../../source/run/execution-session-supervised.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { JsonValue } from 'type-fest';
|
|
2
|
+
import type { NonEmptyReadonlyArray } from '../assertion-protocol/assertion-node-shape.ts';
|
|
3
|
+
import type { RunResult, RunnerError } from './run-engine-primitives.ts';
|
|
4
|
+
type ExecutionFailureDetails = {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly message: string;
|
|
7
|
+
readonly cause: unknown;
|
|
8
|
+
readonly stack: string | null;
|
|
9
|
+
};
|
|
10
|
+
type ExecutionFailureKind = {
|
|
11
|
+
readonly kind: 'collection-error';
|
|
12
|
+
readonly errors: NonEmptyReadonlyArray<RunnerError>;
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: 'config-error';
|
|
15
|
+
} | {
|
|
16
|
+
readonly kind: 'error';
|
|
17
|
+
} | {
|
|
18
|
+
readonly kind: 'resolution-error';
|
|
19
|
+
readonly code: 'invalid-request' | 'no-tests-collected' | 'unsupported-request';
|
|
20
|
+
};
|
|
21
|
+
export type RunExecutionFailure = ExecutionFailureDetails & ExecutionFailureKind;
|
|
22
|
+
export type RunExecutionInvocation = {
|
|
23
|
+
readonly data: JsonValue;
|
|
24
|
+
readonly timeoutMilliseconds: number;
|
|
25
|
+
readonly signal: AbortSignal | null;
|
|
26
|
+
};
|
|
27
|
+
export type RunExecutionReply = {
|
|
28
|
+
readonly kind: 'failure';
|
|
29
|
+
readonly failure: RunExecutionFailure;
|
|
30
|
+
readonly data: JsonValue;
|
|
31
|
+
} | {
|
|
32
|
+
readonly kind: 'result';
|
|
33
|
+
readonly result: RunResult;
|
|
34
|
+
readonly data: JsonValue;
|
|
35
|
+
readonly deadlineExceeded: boolean;
|
|
36
|
+
} | {
|
|
37
|
+
readonly kind: 'timeout';
|
|
38
|
+
readonly data: JsonValue;
|
|
39
|
+
};
|
|
40
|
+
export type RunExecutionSession = {
|
|
41
|
+
readonly environmentLifetime: 'fresh' | 'reused';
|
|
42
|
+
readonly run: (invocation: RunExecutionInvocation) => Promise<RunExecutionReply>;
|
|
43
|
+
readonly dispose: () => Promise<void>;
|
|
44
|
+
};
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=execution-session-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-session-types.d.ts","sourceRoot":"","sources":["../../../../source/run/execution-session-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzE,KAAK,uBAAuB,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,CAAC;AACF,KAAK,oBAAoB,GAAG;IACxB,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC;CACvD,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;CACjC,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CAC1B,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,qBAAqB,CAAC;CACnF,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,GAAG,oBAAoB,CAAC;AAEjF,MAAM,MAAM,sBAAsB,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CACvC,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC5B,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;CACtC,GAAG;IACA,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;CAC5B,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,OAAO,GAAG,QAAQ,CAAC;IACjD,QAAQ,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,sBAAsB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACjF,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACzC,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { setTimeout as scheduleDeadline, clearTimeout as cancelDeadline } from 'node:timers';
|
|
2
|
+
import { createStoredValue } from "../stored-value.js";
|
|
3
|
+
import { runExecutionFailure } from "./execution-failure.js";
|
|
4
|
+
import { executionTransportSchema, normalizeExecutionSessionOptions } from "./execution-session-schema.js";
|
|
5
|
+
async function initializeExecutionEnvironment(options, dependencies) {
|
|
6
|
+
const { createExecutionSessionEnvironment } = await import("./execution-session-environment.js");
|
|
7
|
+
return createExecutionSessionEnvironment(options, dependencies);
|
|
8
|
+
}
|
|
9
|
+
function deadlineCancelledReply(reply, signal, expired) {
|
|
10
|
+
return reply.kind === 'failure' && expired && signal.reason instanceof Error &&
|
|
11
|
+
reply.failure.message === signal.reason.message;
|
|
12
|
+
}
|
|
13
|
+
async function completeInvocation(environment, execution) {
|
|
14
|
+
const { invocation, signal, expired, lifecycle } = execution;
|
|
15
|
+
signal.throwIfAborted();
|
|
16
|
+
const transport = executionTransportSchema.parse({ lifecycle, data: structuredClone(invocation.data) });
|
|
17
|
+
const initialized = await environment;
|
|
18
|
+
const reply = await initialized.execute({ transport, timeoutMilliseconds: invocation.timeoutMilliseconds, signal });
|
|
19
|
+
if (deadlineCancelledReply(reply, signal, expired())) {
|
|
20
|
+
return { kind: 'timeout', data: reply.data };
|
|
21
|
+
}
|
|
22
|
+
return reply.kind === 'result' ? { ...reply, deadlineExceeded: reply.deadlineExceeded || expired() } : reply;
|
|
23
|
+
}
|
|
24
|
+
function cancelledDeadline(error, signal, expired) {
|
|
25
|
+
return expired && (error === signal.reason || error instanceof Error && error.cause === signal.reason);
|
|
26
|
+
}
|
|
27
|
+
async function executeInvocation(environment, invocation, disposed, lifecycle) {
|
|
28
|
+
const cancellation = new AbortController();
|
|
29
|
+
const signal = AbortSignal.any([
|
|
30
|
+
disposed,
|
|
31
|
+
cancellation.signal,
|
|
32
|
+
...invocation.signal === null ? [] : [invocation.signal]
|
|
33
|
+
]);
|
|
34
|
+
const expired = createStoredValue(false);
|
|
35
|
+
const started = performance.now();
|
|
36
|
+
const deadlineExpired = function () {
|
|
37
|
+
return expired.read() || performance.now() - started >= invocation.timeoutMilliseconds;
|
|
38
|
+
};
|
|
39
|
+
const timer = scheduleDeadline(function cancelExpiredInvocation() {
|
|
40
|
+
expired.write(true);
|
|
41
|
+
cancellation.abort();
|
|
42
|
+
}, invocation.timeoutMilliseconds);
|
|
43
|
+
try {
|
|
44
|
+
return await completeInvocation(environment, { invocation, signal, expired: deadlineExpired, lifecycle });
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
return cancelledDeadline(error, signal, expired.read())
|
|
48
|
+
? { kind: 'timeout', data: null }
|
|
49
|
+
: { kind: 'failure', failure: runExecutionFailure(error), data: null };
|
|
50
|
+
}
|
|
51
|
+
finally {
|
|
52
|
+
cancelDeadline(timer);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function assertSessionAdmission(disposed, active) {
|
|
56
|
+
if (disposed.aborted) {
|
|
57
|
+
throw new Error('Execution session has been disposed.');
|
|
58
|
+
}
|
|
59
|
+
if (active !== null) {
|
|
60
|
+
throw new Error('An execution invocation is already running.');
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function executionLifetime(options) {
|
|
64
|
+
const fresh = options.environment === 'fresh-invocation' ||
|
|
65
|
+
options.command.policy.profile.execution.processModel === 'supervised-process';
|
|
66
|
+
return fresh ? 'fresh' : 'reused';
|
|
67
|
+
}
|
|
68
|
+
export function createExecutionSession(supplied, dependencies) {
|
|
69
|
+
const options = normalizeExecutionSessionOptions(supplied, dependencies.createSeed);
|
|
70
|
+
const environment = createStoredValue(null);
|
|
71
|
+
const disposed = new AbortController();
|
|
72
|
+
const active = createStoredValue(null);
|
|
73
|
+
return {
|
|
74
|
+
environmentLifetime: executionLifetime(options),
|
|
75
|
+
async run(invocation) {
|
|
76
|
+
assertSessionAdmission(disposed.signal, active.read());
|
|
77
|
+
if (!Number.isFinite(invocation.timeoutMilliseconds) || invocation.timeoutMilliseconds <= 0) {
|
|
78
|
+
return { kind: 'timeout', data: null };
|
|
79
|
+
}
|
|
80
|
+
const initialized = environment.read() ?? initializeExecutionEnvironment(options, dependencies);
|
|
81
|
+
environment.write(initialized);
|
|
82
|
+
const running = executeInvocation(initialized, invocation, disposed.signal, options.lifecycle);
|
|
83
|
+
active.write(running);
|
|
84
|
+
try {
|
|
85
|
+
return await running;
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
active.write(null);
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
async dispose() {
|
|
92
|
+
disposed.abort();
|
|
93
|
+
await active.read();
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=execution-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution-session.js","sourceRoot":"","sources":["../../../../source/run/execution-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { frozenMicrotestPolicySchema } from "./frozen-run-policy-schema.js";
|
|
|
4
4
|
import { parseFrozenMicrotestPolicy, policyBaselineCommand } from "./frozen-run-policy.js";
|
|
5
5
|
import { createSupervisedCollectCommand, createSupervisedRunCommand } from "./run-isolated-command.js";
|
|
6
6
|
import { supervisedCommandFields } from "./run-command-schema.js";
|
|
7
|
+
import { executionTransportSchema } from "./execution-session-schema.js";
|
|
7
8
|
export const frozenSupervisedCommandSchema = z
|
|
8
9
|
.strictObject({
|
|
9
10
|
...supervisedCommandFields,
|
|
@@ -18,9 +19,25 @@ export const frozenSupervisedCommandSchema = z
|
|
|
18
19
|
const expected = command.kind === 'collect-frozen'
|
|
19
20
|
? createSupervisedCollectCommand(baseline, profile, policy.files, source)
|
|
20
21
|
: createSupervisedRunCommand(baseline, profile, policy.files, source);
|
|
21
|
-
|
|
22
|
+
const normalized = expected.kind === 'run-session'
|
|
23
|
+
? Object.fromEntries(Object.entries({ ...expected, kind: 'run-frozen' }).filter(function ([key]) {
|
|
24
|
+
return key !== 'session';
|
|
25
|
+
}))
|
|
26
|
+
: expected;
|
|
27
|
+
if (!isDeepStrictEqual(command, normalized)) {
|
|
22
28
|
throw new TypeError('Supervised command conflicts with frozen policy.');
|
|
23
29
|
}
|
|
24
30
|
return { ...command, policy };
|
|
25
31
|
});
|
|
32
|
+
export const sessionSupervisedCommandSchema = z
|
|
33
|
+
.strictObject({
|
|
34
|
+
...supervisedCommandFields,
|
|
35
|
+
kind: z.literal('run-session'),
|
|
36
|
+
policy: frozenMicrotestPolicySchema,
|
|
37
|
+
session: executionTransportSchema
|
|
38
|
+
})
|
|
39
|
+
.transform(function ({ session, ...command }) {
|
|
40
|
+
const validated = frozenSupervisedCommandSchema.parse({ ...command, kind: 'run-frozen' });
|
|
41
|
+
return { ...validated, kind: 'run-session', policy: command.policy, session };
|
|
42
|
+
});
|
|
26
43
|
//# sourceMappingURL=frozen-supervised-command-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frozen-supervised-command-schema.js","sourceRoot":"","sources":["../../../../source/run/frozen-supervised-command-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"frozen-supervised-command-schema.js","sourceRoot":"","sources":["../../../../source/run/frozen-supervised-command-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AACvG,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,MAAM,CAAC,MAAM,6BAA6B,GAAsC,CAAC;KAC5E,YAAY,CAAC;IACV,GAAG,uBAAuB;IAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAE,gBAAgB,EAAE,YAAY,CAAE,CAAC;IAChD,MAAM,EAAE,2BAA2B;CACtC,CAAC;KACD,SAAS,CAAC,SAAS,qBAAqB,CAAC,OAAO;IAC7C,MAAM,MAAM,GAAG,0BAA0B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,eAAwB,EAAE,MAAM,EAAE,CAAC;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,KAAK,gBAAgB;QAC9C,CAAC,CAAC,8BAA8B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC;QACzE,CAAC,CAAC,0BAA0B,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,KAAK,aAAa;QAC9C,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAE,GAAG,CAAE;YACxE,OAAO,GAAG,KAAK,SAAS,CAAC;QAC7B,CAAC,CAAC,CACL;QACD,CAAC,CAAC,QAAQ,CAAC;IACf,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,CAAC;AAClC,CAAC,CAAC,CAAC;AAEP,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC;KAC1C,YAAY,CAAC;IACV,GAAG,uBAAuB;IAC1B,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC9B,MAAM,EAAE,2BAA2B;IACnC,OAAO,EAAE,wBAAwB;CACpC,CAAC;KACD,SAAS,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE;IACxC,MAAM,SAAS,GAAG,6BAA6B,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;IAC1F,OAAO,EAAE,GAAG,SAAS,EAAE,IAAI,EAAE,aAAsB,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AAC3F,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Engine } from '../engine/engine.ts';
|
|
2
2
|
import { type CommandLineRunner, type CommandLineRunnerDependencies } from './command-line-runner.ts';
|
|
3
|
-
import {
|
|
3
|
+
import type { CurrentProcessRunOrchestratorDependencies } from './current-process-run-input.ts';
|
|
4
4
|
type NodeCommandLineRunDiscovery = CurrentProcessRunOrchestratorDependencies['discoverRunFilesWithProjectRoot'];
|
|
5
5
|
type NodeCommandLineStartSupervisedChild = CurrentProcessRunOrchestratorDependencies['startSupervisedChild'];
|
|
6
6
|
type NodeCommandLineStartWorkerPoolHost = CurrentProcessRunOrchestratorDependencies['startWorkerPoolHost'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-command-line-runner.d.ts","sourceRoot":"","sources":["../../../../source/run/node-command-line-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAGH,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EACrC,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"node-command-line-runner.d.ts","sourceRoot":"","sources":["../../../../source/run/node-command-line-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAGH,KAAK,iBAAiB,EACtB,KAAK,6BAA6B,EACrC,MAAM,0BAA0B,CAAC;AAIlC,OAAO,KAAK,EAAE,yCAAyC,EAAE,MAAM,gCAAgC,CAAC;AAKhG,KAAK,2BAA2B,GAAG,yCAAyC,CAAC,iCAAiC,CAAC,CAAC;AAChH,KAAK,mCAAmC,GAAG,yCAAyC,CAAC,sBAAsB,CAAC,CAAC;AAC7G,KAAK,kCAAkC,GAAG,yCAAyC,CAAC,qBAAqB,CAAC,CAAC;AAE3G,KAAK,iCAAiC,GAAG;IACrC,QAAQ,CAAC,+BAA+B,EAAE,2BAA2B,CAAC;IACtE,QAAQ,CAAC,UAAU,EAAE,6BAA6B,CAAC,YAAY,CAAC,CAAC;IACjE,QAAQ,CAAC,mBAAmB,EAAE,yCAAyC,CAAC,qBAAqB,CAAC,CAAC;IAC/F,QAAQ,CAAC,kBAAkB,EAAE,yCAAyC,CAAC,oBAAoB,CAAC,CAAC;IAC7F,QAAQ,CAAC,oBAAoB,EAAE,mCAAmC,CAAC;IACnE,QAAQ,CAAC,mBAAmB,EAAE,kCAAkC,CAAC;CACpE,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,4BAA4B,GAAG;IACpE,QAAQ,CAAC,YAAY,EAAE,iCAAiC,CAAC;CAC5D,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,0BAA0B,GAAG,iBAAiB,CAwBhG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-command-line-runner.js","sourceRoot":"","sources":["../../../../source/run/node-command-line-runner.ts"],"names":[],"mappings":"AACA,OAAO,EACH,uBAAuB,EACvB,uBAAuB,EAG1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,mCAAmC,
|
|
1
|
+
{"version":3,"file":"node-command-line-runner.js","sourceRoot":"","sources":["../../../../source/run/node-command-line-runner.ts"],"names":[],"mappings":"AACA,OAAO,EACH,uBAAuB,EACvB,uBAAuB,EAG1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,mCAAmC,EACtC,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EACH,iCAAiC,EACpC,MAAM,0CAA0C,CAAC;AAuBlD,MAAM,UAAU,2BAA2B,CAAC,KAAiC;IACzE,MAAM,YAAY,GAAG,mCAAmC,CAAC,KAAK,CAAC,aAAa,EAAE;QAC1E,+BAA+B,EAAE,KAAK,CAAC,YAAY,CAAC,+BAA+B;QACnF,mBAAmB,EAAE,KAAK,CAAC,YAAY,CAAC,mBAAmB;QAC3D,kBAAkB,EAAE,KAAK,CAAC,YAAY,CAAC,kBAAkB;QACzD,oBAAoB,EAAE,KAAK,CAAC,YAAY,CAAC,oBAAoB;QAC7D,mBAAmB,EAAE,KAAK,CAAC,YAAY,CAAC,mBAAmB;KAC9D,CAAC,CAAC;IAEH,OAAO,uBAAuB,CAAC;QAC3B,qBAAqB,EAAE,uBAAuB;QAC9C,oBAAoB,EAAE,iCAAiC;QACvD,KAAK,CAAC,qBAAqB;YACvB,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YAE5E,OAAO,uBAAuB,CAAC;gBAC3B,qBAAqB,EAAE,uBAAuB;gBAC9C,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,UAAU;gBACzC,YAAY;aACf,CAAC,CAAC;QACP,CAAC;QACD,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,UAAU;QACzC,YAAY;KACf,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-run-orchestrator-dependencies.d.ts","sourceRoot":"","sources":["../../../../source/run/node-run-orchestrator-dependencies.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAEpH,KAAK,4BAA4B,GAAG,2BAA2B,CAAC,yBAAyB,CAAC,CAAC;AAE3F,MAAM,MAAM,wBAAwB,GAAG;IACnC,QAAQ,CAAC,aAAa,EAAE,2BAA2B,CAAC,eAAe,CAAC,CAAC;IACrE,QAAQ,CAAC,+BAA+B,EAAE,2BAA2B,CAAC,iCAAiC,CAAC,CAAC;IACzG,QAAQ,CAAC,mBAAmB,EAAE,4BAA4B,CAAC,qBAAqB,CAAC,CAAC;IAClF,QAAQ,CAAC,kBAAkB,EAAE,4BAA4B,CAAC,oBAAoB,CAAC,CAAC;IAChF,QAAQ,CAAC,IAAI,EAAE,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,eAAe,EAAE,4BAA4B,CAAC,iBAAiB,CAAC,CAAC;IAC1E,QAAQ,CAAC,WAAW,EAAE,4BAA4B,CAAC,aAAa,CAAC,CAAC;IAClE,QAAQ,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,qBAAqB,CAAC,CAAC;IACjF,QAAQ,CAAC,kBAAkB,EAAE,2BAA2B,CAAC,oBAAoB,CAAC,CAAC;IAC/E,QAAQ,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,sBAAsB,CAAC,CAAC;IACnF,QAAQ,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;IAC3D,QAAQ,CAAC,MAAM,EAAE;QACb,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;QAC5C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KAC9C,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACb,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;QAC5C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KAC9C,CAAC;CACL,CAAC;AAEF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import os from 'node:os';
|
|
2
|
+
import { createClock } from '@enormora/clock';
|
|
3
|
+
import { createReporterDispatcher } from "../engine/reporter-dispatcher.js";
|
|
4
|
+
import { createNodeExecutionDependencies } from "./node-run-execution.js";
|
|
5
|
+
import { createRandomRunSeed } from "./run-seed.js";
|
|
6
|
+
export function createNodeRunOrchestratorDependencies(input) {
|
|
7
|
+
const wallClock = createClock();
|
|
8
|
+
const reporterDispatcher = createReporterDispatcher({
|
|
9
|
+
stderr: input.stderr,
|
|
10
|
+
stdout: input.stdout,
|
|
11
|
+
wallClock
|
|
12
|
+
});
|
|
13
|
+
return {
|
|
14
|
+
availableParallelism: os.availableParallelism(),
|
|
15
|
+
createSeed: createRandomRunSeed,
|
|
16
|
+
...createNodeExecutionDependencies({
|
|
17
|
+
readEnvironment: input.readEnvironment,
|
|
18
|
+
reporterDispatcher,
|
|
19
|
+
startWorkerPoolHost: input.startWorkerPoolHost,
|
|
20
|
+
wallClock
|
|
21
|
+
}),
|
|
22
|
+
defaultEngine: input.defaultEngine,
|
|
23
|
+
discoverRunFilesWithProjectRoot: input.discoverRunFilesWithProjectRoot,
|
|
24
|
+
loadRunEngineModule: input.loadRunEngineModule,
|
|
25
|
+
loadRunTestModules: input.loadRunTestModules,
|
|
26
|
+
liveOutput: {
|
|
27
|
+
stderr: { write: input.stderr.write },
|
|
28
|
+
stdout: { write: input.stdout.write }
|
|
29
|
+
},
|
|
30
|
+
node: input.node,
|
|
31
|
+
reporterDispatcher,
|
|
32
|
+
startSupervisedChild: input.startSupervisedChild,
|
|
33
|
+
startWorkerPoolHost: input.startWorkerPoolHost,
|
|
34
|
+
runtimeCapabilityPolicy: {
|
|
35
|
+
observeIpcListeners: input.observeIpcListeners,
|
|
36
|
+
observeProcessExit: input.observeProcessExit,
|
|
37
|
+
readEnvironment: input.readEnvironment,
|
|
38
|
+
readStorage: input.readStorage
|
|
39
|
+
},
|
|
40
|
+
wallClock
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=node-run-orchestrator-dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-run-orchestrator-dependencies.js","sourceRoot":"","sources":["../../../../source/run/node-run-orchestrator-dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AA2BpD,MAAM,UAAU,qCAAqC,CAAC,KAA+B;IACjF,MAAM,SAAS,GAAG,WAAW,EAAE,CAAC;IAChC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;QAChD,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS;KACZ,CAAC,CAAC;IAEH,OAAO;QACH,oBAAoB,EAAE,EAAE,CAAC,oBAAoB,EAAE;QAC/C,UAAU,EAAE,mBAAmB;QAC/B,GAAG,+BAA+B,CAAC;YAC/B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,kBAAkB;YAClB,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;YAC9C,SAAS;SACZ,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,aAAa;QAClC,+BAA+B,EAAE,KAAK,CAAC,+BAA+B;QACtE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;QAC5C,UAAU,EAAE;YACR,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;YACrC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE;SACxC;QACD,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,kBAAkB;QAClB,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;QAC9C,uBAAuB,EAAE;YACrB,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;YAC9C,kBAAkB,EAAE,KAAK,CAAC,kBAAkB;YAC5C,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,WAAW,EAAE,KAAK,CAAC,WAAW;SACjC;QACD,SAAS;KACZ,CAAC;AACN,CAAC"}
|