@overkill-dev/run 0.0.38 → 0.0.40

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 (119) hide show
  1. package/compare/serialized-value.d.ts +1 -1
  2. package/compare/serialized-value.d.ts.map +1 -1
  3. package/compare/serialized-value.js +4 -2
  4. package/compare/serialized-value.js.map +1 -1
  5. package/engine/assertion-recorder.js +12 -3
  6. package/engine/assertion-recorder.js.map +1 -1
  7. package/engine/async-control.d.ts +33 -0
  8. package/engine/async-control.d.ts.map +1 -0
  9. package/engine/async-control.js +153 -0
  10. package/engine/async-control.js.map +1 -0
  11. package/engine/async-leak-diagnostics.d.ts +20 -0
  12. package/engine/async-leak-diagnostics.d.ts.map +1 -0
  13. package/engine/async-leak-diagnostics.js +157 -0
  14. package/engine/async-leak-diagnostics.js.map +1 -0
  15. package/engine/case-execution.d.ts +1 -1
  16. package/engine/case-execution.d.ts.map +1 -1
  17. package/engine/case-execution.js +127 -65
  18. package/engine/case-execution.js.map +1 -1
  19. package/engine/engine.d.ts +2 -1
  20. package/engine/engine.d.ts.map +1 -1
  21. package/engine/engine.js +1 -0
  22. package/engine/engine.js.map +1 -1
  23. package/engine/execution-async-leak-policy.d.ts +24 -0
  24. package/engine/execution-async-leak-policy.d.ts.map +1 -0
  25. package/engine/execution-async-leak-policy.js +56 -0
  26. package/engine/execution-async-leak-policy.js.map +1 -0
  27. package/engine/execution-options.d.ts +26 -0
  28. package/engine/execution-options.d.ts.map +1 -0
  29. package/engine/execution-options.js +25 -0
  30. package/engine/execution-options.js.map +1 -0
  31. package/engine/execution-resource-tracked-cases.js +35 -0
  32. package/engine/execution-resource-tracked-cases.js.map +1 -0
  33. package/engine/execution-result.js +16 -0
  34. package/engine/execution-result.js.map +1 -1
  35. package/engine/execution-supervision.js +2 -2
  36. package/engine/execution-supervision.js.map +1 -1
  37. package/engine/execution.d.ts +7 -20
  38. package/engine/execution.d.ts.map +1 -1
  39. package/engine/execution.js +49 -85
  40. package/engine/execution.js.map +1 -1
  41. package/engine/node-assertion-error.js +47 -0
  42. package/engine/node-assertion-error.js.map +1 -0
  43. package/engine/run-result.d.ts +19 -1
  44. package/engine/run-result.d.ts.map +1 -1
  45. package/engine/run-result.js.map +1 -1
  46. package/engine/test-node.d.ts +28 -1
  47. package/engine/test-node.d.ts.map +1 -1
  48. package/engine/test-node.js +24 -2
  49. package/engine/test-node.js.map +1 -1
  50. package/engine/test-plan.js +1 -1
  51. package/engine/test-plan.js.map +1 -1
  52. package/engine/test-scope-lifecycle.js +63 -0
  53. package/engine/test-scope-lifecycle.js.map +1 -0
  54. package/engine/throwing-test-scope.js +27 -0
  55. package/engine/throwing-test-scope.js.map +1 -0
  56. package/package.json +10 -4
  57. package/packages/engine/engine.entry-point.js +11 -3
  58. package/packages/engine/engine.entry-point.js.map +1 -1
  59. package/packages/run/run.entry-point.d.ts +1 -1
  60. package/packages/run/run.entry-point.d.ts.map +1 -1
  61. package/readme.md +10 -4
  62. package/reporters/line-failure-rendering.js +1 -1
  63. package/reporters/line-failure-rendering.js.map +1 -1
  64. package/run/default-run-engine.d.ts.map +1 -1
  65. package/run/default-run-engine.js +6 -0
  66. package/run/default-run-engine.js.map +1 -1
  67. package/run/run-collected-resolution.js +59 -0
  68. package/run/run-collected-resolution.js.map +1 -0
  69. package/run/run-config-schema.d.ts +30 -10
  70. package/run/run-config-schema.d.ts.map +1 -1
  71. package/run/run-config-schema.js +19 -6
  72. package/run/run-config-schema.js.map +1 -1
  73. package/run/run-config.d.ts.map +1 -1
  74. package/run/run-config.js +24 -4
  75. package/run/run-config.js.map +1 -1
  76. package/run/run-facts.js +27 -14
  77. package/run/run-facts.js.map +1 -1
  78. package/run/run-isolated-command.js +63 -0
  79. package/run/run-isolated-command.js.map +1 -0
  80. package/run/run-list-renderer.js +1 -1
  81. package/run/run-list-renderer.js.map +1 -1
  82. package/run/run-local-resolution.js +62 -0
  83. package/run/run-local-resolution.js.map +1 -0
  84. package/run/run-orchestrator-dependencies.d.ts +18 -0
  85. package/run/run-orchestrator-dependencies.d.ts.map +1 -1
  86. package/run/run-orchestrator.d.ts.map +1 -1
  87. package/run/run-orchestrator.js +7 -0
  88. package/run/run-orchestrator.js.map +1 -1
  89. package/run/run-process-engine.js +15 -9
  90. package/run/run-process-engine.js.map +1 -1
  91. package/run/run-support.js +8 -1
  92. package/run/run-support.js.map +1 -1
  93. package/run/run-types.d.ts +23 -5
  94. package/run/run-types.d.ts.map +1 -1
  95. package/run/run-types.js.map +1 -1
  96. package/run/run.js +69 -154
  97. package/run/run.js.map +1 -1
  98. package/run/supervised-child.js +5 -0
  99. package/run/supervised-child.js.map +1 -1
  100. package/run/supervised-run.js.map +1 -1
  101. package/run/tinypool-node-compatibility.js +15 -0
  102. package/run/tinypool-node-compatibility.js.map +1 -0
  103. package/run/worker-pool-collection.js +96 -0
  104. package/run/worker-pool-collection.js.map +1 -0
  105. package/run/worker-pool-execution.js +342 -0
  106. package/run/worker-pool-execution.js.map +1 -0
  107. package/run/worker-pool-output.js +87 -0
  108. package/run/worker-pool-output.js.map +1 -0
  109. package/run/worker-pool-results.js +98 -0
  110. package/run/worker-pool-results.js.map +1 -0
  111. package/run/worker-pool-run.js +33 -0
  112. package/run/worker-pool-run.js.map +1 -0
  113. package/run/worker-pool-runtime.js +106 -0
  114. package/run/worker-pool-runtime.js.map +1 -0
  115. package/run/worker-pool-worker-plan.js +54 -0
  116. package/run/worker-pool-worker-plan.js.map +1 -0
  117. package/run/worker-pool-worker.js +95 -0
  118. package/run/worker-pool-worker.js.map +1 -0
  119. package/sbom.cdx.json +26 -9
@@ -0,0 +1,33 @@
1
+ import { createSupervisedRunState } from "./supervised-run-state.js";
2
+ import { collectInWorkerPool } from "./worker-pool-collection.js";
3
+ import { executeWorkerPoolUnits, reportRunStart, startPoolResourceTracking } from "./worker-pool-execution.js";
4
+ import { createEmptyWorkerPoolResult, finishWorkerPoolRun } from "./worker-pool-results.js";
5
+ import { createWorkerPoolRuntime, fileUnits, workerPoolCollectedPlan } from "./worker-pool-runtime.js";
6
+ export async function collectWorkerPoolRun(command, dependencies) {
7
+ return await collectInWorkerPool(command, dependencies, createSupervisedRunState());
8
+ }
9
+ async function executeWorkerPoolRunWithState(resolvedRun, dependencies, collectionRunState) {
10
+ if (fileUnits(workerPoolCollectedPlan(resolvedRun)).length === 0) {
11
+ return await createEmptyWorkerPoolResult(resolvedRun, dependencies, collectionRunState);
12
+ }
13
+ const runtime = await createWorkerPoolRuntime(resolvedRun, dependencies, resolvedRun.collectionRunnerErrors, collectionRunState);
14
+ const startedAtMilliseconds = dependencies.wallClock.currentTimestampInMilliseconds;
15
+ try {
16
+ await reportRunStart(runtime, startedAtMilliseconds);
17
+ startPoolResourceTracking(runtime);
18
+ const completedTaskRuns = await executeWorkerPoolUnits(runtime, fileUnits(runtime.collectedPlan), startedAtMilliseconds);
19
+ return await finishWorkerPoolRun(runtime, completedTaskRuns, startedAtMilliseconds);
20
+ }
21
+ finally {
22
+ await runtime.pool.destroy();
23
+ }
24
+ }
25
+ export async function executeWorkerPoolRun(resolvedRun, dependencies) {
26
+ return await executeWorkerPoolRunWithState(resolvedRun, dependencies, createSupervisedRunState());
27
+ }
28
+ export async function runWorkerPoolCommand(command, dependencies, createResolvedRun) {
29
+ const collectionRunState = createSupervisedRunState();
30
+ const collection = await collectInWorkerPool(command, dependencies, collectionRunState);
31
+ return await executeWorkerPoolRunWithState(createResolvedRun(collection), dependencies, collectionRunState);
32
+ }
33
+ //# sourceMappingURL=worker-pool-run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool-run.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-run.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,wBAAwB,EAE3B,MAAM,2BAA2B,CAAC;AAInC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACH,sBAAsB,EACtB,cAAc,EACd,yBAAyB,EAC5B,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EACH,2BAA2B,EAC3B,mBAAmB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,uBAAuB,EACvB,SAAS,EACT,uBAAuB,EAE1B,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,OAA0B,EAC1B,YAAyC;IAEzC,OAAO,MAAM,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,KAAK,UAAU,6BAA6B,CACxC,WAAwB,EACxB,YAAyC,EACzC,kBAAsC;IAEtC,IAAI,SAAS,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/D,OAAO,MAAM,2BAA2B,CAAC,WAAW,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAC5F,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,uBAAuB,CACzC,WAAW,EACX,YAAY,EACZ,WAAW,CAAC,sBAAsB,EAClC,kBAAkB,CACrB,CAAC;IACF,MAAM,qBAAqB,GAAG,YAAY,CAAC,SAAS,CAAC,8BAA8B,CAAC;IAEpF,IAAI,CAAC;QACD,MAAM,cAAc,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;QACrD,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,iBAAiB,GAAG,MAAM,sBAAsB,CAClD,OAAO,EACP,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,EAChC,qBAAqB,CACxB,CAAC;QAEF,OAAO,MAAM,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,CAAC,CAAC;IACxF,CAAC;YAAS,CAAC;QACP,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,WAAwB,EACxB,YAAyC;IAEzC,OAAO,MAAM,6BAA6B,CAAC,WAAW,EAAE,YAAY,EAAE,wBAAwB,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACtC,OAA0B,EAC1B,YAAyC,EACzC,iBAA0E;IAE1E,MAAM,kBAAkB,GAAG,wBAAwB,EAAE,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;IAExF,OAAO,MAAM,6BAA6B,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;AAChH,CAAC"}
@@ -0,0 +1,106 @@
1
+ import os from 'node:os';
2
+ import { createCaseId } from "../engine/identity.js";
3
+ import { createReporterDelivery, createReporterEventQueue } from "./supervised-run-runtime.js";
4
+ import { createStoredRunValue } from "./supervised-run-state.js";
5
+ import { loadTinypoolConstructor } from "./tinypool-node-compatibility.js";
6
+ import { runTask as workerPoolWorkerEntryPoint } from "./worker-pool-worker.js";
7
+ const Tinypool = loadTinypoolConstructor();
8
+ const maximumWorkerCount = 8;
9
+ function workerPoolEntryPointHref(entryPoint) {
10
+ const entryPointWorkerName = entryPoint.worker.name;
11
+ const workerPoolEntryPointUrl = new URL('./worker-pool-worker.ts', import.meta.url);
12
+ return workerPoolEntryPointUrl.href + entryPointWorkerName.slice(0, 0);
13
+ }
14
+ const workerPoolEntryPoint = workerPoolEntryPointHref({
15
+ compatibility: null,
16
+ worker: workerPoolWorkerEntryPoint
17
+ });
18
+ export function runStartTimeFromMilliseconds(milliseconds) {
19
+ const startedAt = new Date(milliseconds);
20
+ return startedAt.toISOString();
21
+ }
22
+ function defaultWorkerCount(unitCount) {
23
+ if (unitCount === 0) {
24
+ return 0;
25
+ }
26
+ return Math.min(Math.max(os.availableParallelism() - 1, 1), maximumWorkerCount, unitCount);
27
+ }
28
+ function isolateWorkers(options) {
29
+ return options.workerLifecycle === 'fresh-worker-per-unit';
30
+ }
31
+ export function createTinypoolWorkerPool(options) {
32
+ return new Tinypool({
33
+ concurrentTasksPerWorker: 1,
34
+ filename: options.filename,
35
+ isolateWorkers: isolateWorkers(options),
36
+ maxThreads: options.workerCount,
37
+ minThreads: options.workerCount,
38
+ runtime: 'worker_threads'
39
+ });
40
+ }
41
+ export function createPool(options) {
42
+ return createTinypoolWorkerPool({
43
+ ...options,
44
+ filename: workerPoolEntryPoint
45
+ });
46
+ }
47
+ export function workerPoolCollectedPlan(resolvedRun) {
48
+ if (resolvedRun.plan.kind !== 'worker-pool') {
49
+ throw new Error('Worker-pool execution requires a worker-pool collected plan.');
50
+ }
51
+ return resolvedRun.plan.collectedPlan;
52
+ }
53
+ function collectFileCaseIds(file) {
54
+ return file.cases.map(function toCaseId(testCase) {
55
+ return createCaseId(file.file, testCase.suitePath.map(function toSuiteTitle(entry) {
56
+ return entry.title;
57
+ }), testCase.title, testCase.params);
58
+ });
59
+ }
60
+ export function fileUnits(collectedPlan) {
61
+ return collectedPlan.files.map(function toFileUnit(file) {
62
+ return {
63
+ assignedCases: collectFileCaseIds(file),
64
+ file: file.file
65
+ };
66
+ });
67
+ }
68
+ function createPoolResourceUsageTracker(resolvedRun, dependencies) {
69
+ if (!resolvedRun.facts.execution.resourceUsagePolicy.measure) {
70
+ return null;
71
+ }
72
+ return dependencies.createResourceUsageTracker({
73
+ samplingIntervalMilliseconds: resolvedRun.facts.execution.resourceUsagePolicy.samplingIntervalMilliseconds
74
+ });
75
+ }
76
+ function workerPoolExecutionFacts(resolvedRun) {
77
+ if (resolvedRun.facts.execution.processModel !== 'worker-pool') {
78
+ throw new Error('Worker-pool execution requires worker-pool execution facts.');
79
+ }
80
+ return resolvedRun.facts.execution;
81
+ }
82
+ export async function createWorkerPoolRuntime(resolvedRun, dependencies, collectionRunnerErrors, runState) {
83
+ const units = fileUnits(workerPoolCollectedPlan(resolvedRun));
84
+ const workerCount = defaultWorkerCount(units.length);
85
+ const execution = workerPoolExecutionFacts(resolvedRun);
86
+ const taskResults = [];
87
+ return {
88
+ activeTasks: new Set(),
89
+ collectedPlan: workerPoolCollectedPlan(resolvedRun),
90
+ collectionRunnerErrors,
91
+ dependencies,
92
+ pool: dependencies.createWorkerPool({
93
+ workerCount,
94
+ workerLifecycle: execution.workerLifecycle
95
+ }),
96
+ poolResourceUsageTracker: createPoolResourceUsageTracker(resolvedRun, dependencies),
97
+ previousPoolSample: createStoredRunValue(null),
98
+ reporterDelivery: await createReporterDelivery(resolvedRun, dependencies),
99
+ reporterEvents: createReporterEventQueue(),
100
+ resolvedRun,
101
+ runState,
102
+ taskResults,
103
+ terminalFailure: createStoredRunValue(false)
104
+ };
105
+ }
106
+ //# sourceMappingURL=worker-pool-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool-runtime.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { caseIdentityKey } from "../engine/identity.js";
2
+ import { collectedRunPlanFromTestPlan, createRunResultFromCollectedPlan } from "./collected-run-plan.js";
3
+ import { defaultRunEngine } from "./default-run-engine.js";
4
+ import { loadRunEngineModule, loadRunTestModules, runDiscovery } from "./node-run-dependencies.entry-point.js";
5
+ import { createRunTestPlan } from "./run-test-plan.js";
6
+ async function selectedEngine(command) {
7
+ return command.engine.kind === 'module' ? await loadRunEngineModule(command.engine) : defaultRunEngine;
8
+ }
9
+ async function createWorkerPoolTestPlan(command) {
10
+ return await createRunTestPlan({
11
+ cwd: command.cwd,
12
+ discoverRunFiles: runDiscovery.discoverRunFiles,
13
+ engine: await selectedEngine(command),
14
+ loadRunTestModules,
15
+ paths: command.paths,
16
+ testFamily: command.testFamily
17
+ });
18
+ }
19
+ export async function collectTestPlan(command) {
20
+ return {
21
+ runnerErrors: [],
22
+ testPlan: await createWorkerPoolTestPlan(command)
23
+ };
24
+ }
25
+ export function sendCollectedPlan(collectedPlan) {
26
+ return {
27
+ collectedPlan: collectedRunPlanFromTestPlan(collectedPlan.testPlan),
28
+ runnerErrors: collectedPlan.runnerErrors
29
+ };
30
+ }
31
+ export function selectedAssignedCases(testPlan, assignedCases) {
32
+ const assigned = new Set(assignedCases.map(caseIdentityKey));
33
+ const cases = testPlan.cases.filter(function assignedCase(testCase) {
34
+ return assigned.has(caseIdentityKey(testCase.id));
35
+ });
36
+ const firstCase = cases[0];
37
+ if (firstCase === undefined || cases.length !== assigned.size) {
38
+ throw new Error('Worker-pool test plan did not match assigned case identities.');
39
+ }
40
+ return {
41
+ ...testPlan,
42
+ cases: [firstCase, ...cases.slice(1)]
43
+ };
44
+ }
45
+ export function createEmptyAssignmentResult(testPlan, wallClock, startedAtMilliseconds) {
46
+ return {
47
+ result: createRunResultFromCollectedPlan(collectedRunPlanFromTestPlan(testPlan), [], [], {
48
+ resourceUsage: null,
49
+ startedAtMs: startedAtMilliseconds,
50
+ wallClock
51
+ })
52
+ };
53
+ }
54
+ //# sourceMappingURL=worker-pool-worker-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool-worker-plan.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-worker-plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAe,MAAM,uBAAuB,CAAC;AAGrE,OAAO,EACH,4BAA4B,EAC5B,gCAAgC,EACnC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EACH,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACf,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAYvD,KAAK,UAAU,cAAc,CAAC,OAA0B;IACpD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC;AAC3G,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,OAA0B;IAC9D,OAAO,MAAM,iBAAiB,CAAC;QAC3B,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;QAC/C,MAAM,EAAE,MAAM,cAAc,CAAC,OAAO,CAAC;QACrC,kBAAkB;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,UAAU,EAAE,OAAO,CAAC,UAAU;KACjC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAA0B;IAC5D,OAAO;QACH,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,MAAM,wBAAwB,CAAC,OAAO,CAAC;KACpD,CAAC;AACN,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,aAA0C;IACxE,OAAO;QACH,aAAa,EAAE,4BAA4B,CAAC,aAAa,CAAC,QAAQ,CAAC;QACnE,YAAY,EAAE,aAAa,CAAC,YAAY;KAC3C,CAAC;AACN,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAkB,EAAE,aAAgC;IACtF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,YAAY,CAAC,QAAQ;QAC9D,OAAO,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACrF,CAAC;IAED,OAAO;QACH,GAAG,QAAQ;QACX,KAAK,EAAE,CAAE,SAAS,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE;KAC1C,CAAC;AACN,CAAC;AAED,MAAM,UAAU,2BAA2B,CACvC,QAAkB,EAClB,SAA6C,EAC7C,qBAA6B;IAE7B,OAAO;QACH,MAAM,EAAE,gCAAgC,CACpC,4BAA4B,CAAC,QAAQ,CAAC,EACtC,EAAE,EACF,EAAE,EACF;YACI,aAAa,EAAE,IAAI;YACnB,WAAW,EAAE,qBAAqB;YAClC,SAAS;SACZ,CACJ;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { createWallClock } from '@enormora/wall-clock';
2
+ import { createExecute } from "../engine/execution.js";
3
+ import { createReporterDispatcher } from "../engine/reporter-dispatcher.js";
4
+ import { createPlainOutputRenderer } from "../packages/engine/engine.entry-point.js";
5
+ import { createNodeResourceUsageTracker } from "./resource-usage.js";
6
+ import { captureOutput, createWorkerPoolReporter, silentOutputSinks, suppressOutput } from "./worker-pool-output.js";
7
+ import { collectTestPlan, createEmptyAssignmentResult, selectedAssignedCases, sendCollectedPlan } from "./worker-pool-worker-plan.js";
8
+ function executionMode(command) {
9
+ return command.scheduling === 'concurrent' ? 'concurrent-in-process' : 'serial-in-process';
10
+ }
11
+ function workerResourceBudgets(command) {
12
+ return {
13
+ activeResourceCount: command.resourceBudgets.activeResourceCount,
14
+ javaScriptEngineHeapBytes: command.resourceBudgets.javaScriptEngineHeapBytes,
15
+ residentSetBytes: null,
16
+ residentSetGrowthBytesPerSecond: null
17
+ };
18
+ }
19
+ function createResourceUsageTracker(command) {
20
+ return createNodeResourceUsageTracker(createWallClock(), {
21
+ samplingIntervalMilliseconds: command.resourceUsageSamplingIntervalMilliseconds
22
+ });
23
+ }
24
+ function startedAtIso(startedAtMilliseconds) {
25
+ const startedAt = new Date(startedAtMilliseconds);
26
+ return startedAt.toISOString();
27
+ }
28
+ function readActiveResourceTypes() {
29
+ return process.getActiveResourcesInfo();
30
+ }
31
+ async function collectAssignmentTestPlan(task) {
32
+ const bootstrapOutput = suppressOutput();
33
+ try {
34
+ return await collectTestPlan(task.command);
35
+ }
36
+ finally {
37
+ bootstrapOutput.restore();
38
+ }
39
+ }
40
+ async function runAssignment(task, wallClock) {
41
+ const collectedPlan = await collectAssignmentTestPlan(task);
42
+ if (task.assignedCases.length === 0) {
43
+ return createEmptyAssignmentResult(collectedPlan.testPlan, wallClock, task.startedAtMilliseconds);
44
+ }
45
+ const outputCapture = captureOutput(task, wallClock);
46
+ const execute = createExecute({
47
+ asyncLeakDiagnostics: 'enabled',
48
+ readActiveResourceTypes,
49
+ reporterDispatcher: createReporterDispatcher({
50
+ ...silentOutputSinks,
51
+ wallClock
52
+ }),
53
+ wallClock
54
+ });
55
+ try {
56
+ const result = await execute(selectedAssignedCases(collectedPlan.testPlan, task.assignedCases), {
57
+ execution: { mode: executionMode(task.command) },
58
+ outputRenderer: createPlainOutputRenderer(),
59
+ reporters: [createWorkerPoolReporter(task)],
60
+ resourceBudgets: workerResourceBudgets(task.command),
61
+ resourceUsageTracker: createResourceUsageTracker(task.command),
62
+ runtimePolicy: null,
63
+ runFacts: {},
64
+ startedAt: startedAtIso(task.startedAtMilliseconds),
65
+ timeoutPolicy: {
66
+ hardTimeoutMilliseconds: task.command.hardTimeoutMilliseconds,
67
+ timeoutMilliseconds: task.command.timeoutMilliseconds
68
+ }
69
+ });
70
+ return { result };
71
+ }
72
+ finally {
73
+ outputCapture.restore();
74
+ }
75
+ }
76
+ export async function runTask(task) {
77
+ const wallClock = createWallClock();
78
+ if (task.kind === 'collect') {
79
+ const outputCapture = captureOutput(task, wallClock);
80
+ try {
81
+ return sendCollectedPlan(await collectTestPlan(task.command));
82
+ }
83
+ finally {
84
+ outputCapture.restore();
85
+ task.port.close();
86
+ }
87
+ }
88
+ try {
89
+ return await runAssignment(task, wallClock);
90
+ }
91
+ finally {
92
+ task.port.close();
93
+ }
94
+ }
95
+ //# sourceMappingURL=worker-pool-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool-worker.js","sourceRoot":"","sources":["../../../../source/run/worker-pool-worker.ts"],"names":[],"mappings":"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"}
package/sbom.cdx.json CHANGED
@@ -16,9 +16,9 @@
16
16
  "component": {
17
17
  "type": "library",
18
18
  "name": "@overkill-dev/run",
19
- "version": "0.0.38",
20
- "bom-ref": "pkg:npm/@overkill-dev/run@0.0.38",
21
- "purl": "pkg:npm/@overkill-dev/run@0.0.38"
19
+ "version": "0.0.40",
20
+ "bom-ref": "pkg:npm/@overkill-dev/run@0.0.40",
21
+ "purl": "pkg:npm/@overkill-dev/run@0.0.40"
22
22
  }
23
23
  },
24
24
  "components": [
@@ -113,6 +113,19 @@
113
113
  ],
114
114
  "purl": "pkg:npm/string-width@8.2.2"
115
115
  },
116
+ {
117
+ "type": "library",
118
+ "name": "tinypool",
119
+ "version": "2.1.2",
120
+ "bom-ref": "pkg:npm/tinypool@2.1.2",
121
+ "scope": "required",
122
+ "licenses": [
123
+ {
124
+ "expression": "MIT"
125
+ }
126
+ ],
127
+ "purl": "pkg:npm/tinypool@2.1.2"
128
+ },
116
129
  {
117
130
  "type": "library",
118
131
  "name": "yoctocolors",
@@ -129,15 +142,15 @@
129
142
  {
130
143
  "type": "library",
131
144
  "name": "zod",
132
- "version": "4.5.4",
133
- "bom-ref": "pkg:npm/zod@4.5.4",
145
+ "version": "4.6.1",
146
+ "bom-ref": "pkg:npm/zod@4.6.1",
134
147
  "scope": "required",
135
148
  "licenses": [
136
149
  {
137
150
  "expression": "MIT"
138
151
  }
139
152
  ],
140
- "purl": "pkg:npm/zod@4.5.4"
153
+ "purl": "pkg:npm/zod@4.6.1"
141
154
  }
142
155
  ],
143
156
  "dependencies": [
@@ -145,7 +158,7 @@
145
158
  "ref": "pkg:npm/@enormora/wall-clock@0.0.3"
146
159
  },
147
160
  {
148
- "ref": "pkg:npm/@overkill-dev/run@0.0.38",
161
+ "ref": "pkg:npm/@overkill-dev/run@0.0.40",
149
162
  "dependsOn": [
150
163
  "pkg:npm/@enormora/wall-clock@0.0.3",
151
164
  "pkg:npm/@schema-hub/zod-error-formatter@0.0.16",
@@ -154,8 +167,9 @@
154
167
  "pkg:npm/figures@6.1.0",
155
168
  "pkg:npm/pure-rand@8.4.2",
156
169
  "pkg:npm/string-width@8.2.2",
170
+ "pkg:npm/tinypool@2.1.2",
157
171
  "pkg:npm/yoctocolors@2.2.0",
158
- "pkg:npm/zod@4.5.4"
172
+ "pkg:npm/zod@4.6.1"
159
173
  ]
160
174
  },
161
175
  {
@@ -176,11 +190,14 @@
176
190
  {
177
191
  "ref": "pkg:npm/string-width@8.2.2"
178
192
  },
193
+ {
194
+ "ref": "pkg:npm/tinypool@2.1.2"
195
+ },
179
196
  {
180
197
  "ref": "pkg:npm/yoctocolors@2.2.0"
181
198
  },
182
199
  {
183
- "ref": "pkg:npm/zod@4.5.4"
200
+ "ref": "pkg:npm/zod@4.6.1"
184
201
  }
185
202
  ]
186
203
  }