ppef 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/bin/ppef.mjs +20 -0
  2. package/dist/__tests__/framework-pipeline.integration.test.js +13 -11
  3. package/dist/__tests__/framework-pipeline.integration.test.js.map +1 -1
  4. package/dist/__tests__/index-exports.unit.test.d.ts +8 -0
  5. package/dist/__tests__/index-exports.unit.test.d.ts.map +1 -0
  6. package/dist/__tests__/index-exports.unit.test.js +127 -0
  7. package/dist/__tests__/index-exports.unit.test.js.map +1 -0
  8. package/dist/__tests__/registry-executor.integration.test.js +12 -9
  9. package/dist/__tests__/registry-executor.integration.test.js.map +1 -1
  10. package/dist/aggregation/__tests__/aggregators.unit.test.d.ts +7 -0
  11. package/dist/aggregation/__tests__/aggregators.unit.test.d.ts.map +1 -0
  12. package/dist/aggregation/__tests__/aggregators.unit.test.js +350 -0
  13. package/dist/aggregation/__tests__/aggregators.unit.test.js.map +1 -0
  14. package/dist/aggregation/__tests__/pipeline.unit.test.d.ts +7 -0
  15. package/dist/aggregation/__tests__/pipeline.unit.test.d.ts.map +1 -0
  16. package/dist/aggregation/__tests__/pipeline.unit.test.js +213 -0
  17. package/dist/aggregation/__tests__/pipeline.unit.test.js.map +1 -0
  18. package/dist/aggregation/aggregators.d.ts +9 -0
  19. package/dist/aggregation/aggregators.d.ts.map +1 -1
  20. package/dist/aggregation/aggregators.js +1 -1
  21. package/dist/aggregation/aggregators.js.map +1 -1
  22. package/dist/aggregation/index.d.ts +1 -1
  23. package/dist/aggregation/index.d.ts.map +1 -1
  24. package/dist/aggregation/index.js +1 -1
  25. package/dist/aggregation/index.js.map +1 -1
  26. package/dist/claims/__tests__/evaluator.unit.test.d.ts +12 -0
  27. package/dist/claims/__tests__/evaluator.unit.test.d.ts.map +1 -0
  28. package/dist/claims/__tests__/evaluator.unit.test.js +801 -0
  29. package/dist/claims/__tests__/evaluator.unit.test.js.map +1 -0
  30. package/dist/cli/__tests__/aggregate.command.unit.test.d.ts +7 -0
  31. package/dist/cli/__tests__/aggregate.command.unit.test.d.ts.map +1 -0
  32. package/dist/cli/__tests__/aggregate.command.unit.test.js +396 -0
  33. package/dist/cli/__tests__/aggregate.command.unit.test.js.map +1 -0
  34. package/dist/cli/__tests__/commands.unit.test.d.ts +10 -0
  35. package/dist/cli/__tests__/commands.unit.test.d.ts.map +1 -0
  36. package/dist/cli/__tests__/commands.unit.test.js +217 -0
  37. package/dist/cli/__tests__/commands.unit.test.js.map +1 -0
  38. package/dist/cli/__tests__/index.unit.test.d.ts +10 -0
  39. package/dist/cli/__tests__/index.unit.test.d.ts.map +1 -0
  40. package/dist/cli/__tests__/index.unit.test.js +65 -0
  41. package/dist/cli/__tests__/index.unit.test.js.map +1 -0
  42. package/dist/cli/__tests__/logger.unit.test.d.ts +11 -0
  43. package/dist/cli/__tests__/logger.unit.test.d.ts.map +1 -0
  44. package/dist/cli/__tests__/logger.unit.test.js +180 -0
  45. package/dist/cli/__tests__/logger.unit.test.js.map +1 -0
  46. package/dist/cli/__tests__/module-loader.unit.test.d.ts +11 -0
  47. package/dist/cli/__tests__/module-loader.unit.test.d.ts.map +1 -0
  48. package/dist/cli/__tests__/module-loader.unit.test.js +262 -0
  49. package/dist/cli/__tests__/module-loader.unit.test.js.map +1 -0
  50. package/dist/cli/__tests__/output-writer.unit.test.d.ts +10 -0
  51. package/dist/cli/__tests__/output-writer.unit.test.d.ts.map +1 -0
  52. package/dist/cli/__tests__/output-writer.unit.test.js +216 -0
  53. package/dist/cli/__tests__/output-writer.unit.test.js.map +1 -0
  54. package/dist/cli/__tests__/plan.command.unit.test.d.ts +7 -0
  55. package/dist/cli/__tests__/plan.command.unit.test.d.ts.map +1 -0
  56. package/dist/cli/__tests__/plan.command.unit.test.js +289 -0
  57. package/dist/cli/__tests__/plan.command.unit.test.js.map +1 -0
  58. package/dist/cli/__tests__/run.command.unit.test.d.ts +7 -0
  59. package/dist/cli/__tests__/run.command.unit.test.d.ts.map +1 -0
  60. package/dist/cli/__tests__/run.command.unit.test.js +422 -0
  61. package/dist/cli/__tests__/run.command.unit.test.js.map +1 -0
  62. package/dist/cli/__tests__/validate.command.unit.test.d.ts +7 -0
  63. package/dist/cli/__tests__/validate.command.unit.test.d.ts.map +1 -0
  64. package/dist/cli/__tests__/validate.command.unit.test.js +226 -0
  65. package/dist/cli/__tests__/validate.command.unit.test.js.map +1 -0
  66. package/dist/cli/command-deps.d.ts +125 -0
  67. package/dist/cli/command-deps.d.ts.map +1 -0
  68. package/dist/cli/command-deps.js +7 -0
  69. package/dist/cli/command-deps.js.map +1 -0
  70. package/dist/cli/commands/aggregate.d.ts +35 -0
  71. package/dist/cli/commands/aggregate.d.ts.map +1 -0
  72. package/dist/cli/commands/aggregate.js +121 -0
  73. package/dist/cli/commands/aggregate.js.map +1 -0
  74. package/dist/cli/commands/plan.d.ts +36 -0
  75. package/dist/cli/commands/plan.d.ts.map +1 -0
  76. package/dist/cli/commands/plan.js +109 -0
  77. package/dist/cli/commands/plan.js.map +1 -0
  78. package/dist/cli/commands/run.d.ts +33 -0
  79. package/dist/cli/commands/run.d.ts.map +1 -0
  80. package/dist/cli/commands/run.js +185 -0
  81. package/dist/cli/commands/run.js.map +1 -0
  82. package/dist/cli/commands/validate.d.ts +27 -0
  83. package/dist/cli/commands/validate.d.ts.map +1 -0
  84. package/dist/cli/commands/validate.js +88 -0
  85. package/dist/cli/commands/validate.js.map +1 -0
  86. package/dist/cli/config-loader.d.ts +30 -0
  87. package/dist/cli/config-loader.d.ts.map +1 -0
  88. package/dist/cli/config-loader.js +181 -0
  89. package/dist/cli/config-loader.js.map +1 -0
  90. package/dist/cli/index.d.ts +26 -0
  91. package/dist/cli/index.d.ts.map +1 -0
  92. package/dist/cli/index.js +58 -0
  93. package/dist/cli/index.js.map +1 -0
  94. package/dist/cli/logger.d.ts +75 -0
  95. package/dist/cli/logger.d.ts.map +1 -0
  96. package/dist/cli/logger.js +131 -0
  97. package/dist/cli/logger.js.map +1 -0
  98. package/dist/cli/module-loader.d.ts +46 -0
  99. package/dist/cli/module-loader.d.ts.map +1 -0
  100. package/dist/cli/module-loader.js +116 -0
  101. package/dist/cli/module-loader.js.map +1 -0
  102. package/dist/cli/output-writer.d.ts +51 -0
  103. package/dist/cli/output-writer.d.ts.map +1 -0
  104. package/dist/cli/output-writer.js +65 -0
  105. package/dist/cli/output-writer.js.map +1 -0
  106. package/dist/cli/types.d.ts +174 -0
  107. package/dist/cli/types.d.ts.map +1 -0
  108. package/dist/cli/types.js +7 -0
  109. package/dist/cli/types.js.map +1 -0
  110. package/dist/collector/__tests__/result-collector.unit.test.d.ts +7 -0
  111. package/dist/collector/__tests__/result-collector.unit.test.d.ts.map +1 -0
  112. package/dist/collector/__tests__/result-collector.unit.test.js +1021 -0
  113. package/dist/collector/__tests__/result-collector.unit.test.js.map +1 -0
  114. package/dist/collector/__tests__/schema.unit.test.d.ts +7 -0
  115. package/dist/collector/__tests__/schema.unit.test.d.ts.map +1 -0
  116. package/dist/collector/__tests__/schema.unit.test.js +360 -0
  117. package/dist/collector/__tests__/schema.unit.test.js.map +1 -0
  118. package/dist/executor/__tests__/checkpoint-manager.unit.test.js +83 -1
  119. package/dist/executor/__tests__/checkpoint-manager.unit.test.js.map +1 -1
  120. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts +3 -6
  121. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.d.ts.map +1 -1
  122. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js +428 -159
  123. package/dist/executor/__tests__/checkpoint-merge-bug.diagnostic.test.js.map +1 -1
  124. package/dist/executor/__tests__/checkpoint-storage.unit.test.js +105 -1
  125. package/dist/executor/__tests__/checkpoint-storage.unit.test.js.map +1 -1
  126. package/dist/executor/__tests__/executor.unit.test.js +69 -1
  127. package/dist/executor/__tests__/executor.unit.test.js.map +1 -1
  128. package/dist/executor/__tests__/memory-monitor.unit.test.d.ts +7 -0
  129. package/dist/executor/__tests__/memory-monitor.unit.test.d.ts.map +1 -0
  130. package/dist/executor/__tests__/memory-monitor.unit.test.js +285 -0
  131. package/dist/executor/__tests__/memory-monitor.unit.test.js.map +1 -0
  132. package/dist/executor/__tests__/parallel-executor.unit.test.d.ts +2 -1
  133. package/dist/executor/__tests__/parallel-executor.unit.test.d.ts.map +1 -1
  134. package/dist/executor/__tests__/parallel-executor.unit.test.js +426 -156
  135. package/dist/executor/__tests__/parallel-executor.unit.test.js.map +1 -1
  136. package/dist/executor/__tests__/run-id.unit.test.d.ts +8 -0
  137. package/dist/executor/__tests__/run-id.unit.test.d.ts.map +1 -0
  138. package/dist/executor/__tests__/run-id.unit.test.js +156 -0
  139. package/dist/executor/__tests__/run-id.unit.test.js.map +1 -0
  140. package/dist/executor/__tests__/worker-entry.integration.test.d.ts +24 -0
  141. package/dist/executor/__tests__/worker-entry.integration.test.d.ts.map +1 -0
  142. package/dist/executor/__tests__/worker-entry.integration.test.js +82 -0
  143. package/dist/executor/__tests__/worker-entry.integration.test.js.map +1 -0
  144. package/dist/executor/__tests__/worker-entry.unit.test.d.ts +7 -0
  145. package/dist/executor/__tests__/worker-entry.unit.test.d.ts.map +1 -0
  146. package/dist/executor/__tests__/worker-entry.unit.test.js +364 -0
  147. package/dist/executor/__tests__/worker-entry.unit.test.js.map +1 -0
  148. package/dist/executor/parallel-executor.d.ts +186 -0
  149. package/dist/executor/parallel-executor.d.ts.map +1 -1
  150. package/dist/executor/parallel-executor.js +218 -83
  151. package/dist/executor/parallel-executor.js.map +1 -1
  152. package/dist/executor/run-id.d.ts.map +1 -1
  153. package/dist/executor/run-id.js +8 -1
  154. package/dist/executor/run-id.js.map +1 -1
  155. package/dist/executor/worker-entry.d.ts +2 -0
  156. package/dist/executor/worker-entry.d.ts.map +1 -1
  157. package/dist/executor/worker-entry.js +29 -54
  158. package/dist/executor/worker-entry.js.map +1 -1
  159. package/dist/executor/worker-executor.d.ts +156 -0
  160. package/dist/executor/worker-executor.d.ts.map +1 -0
  161. package/dist/executor/worker-executor.js +88 -0
  162. package/dist/executor/worker-executor.js.map +1 -0
  163. package/dist/robustness/__tests__/analyzer.unit.test.d.ts +11 -0
  164. package/dist/robustness/__tests__/analyzer.unit.test.d.ts.map +1 -0
  165. package/dist/robustness/__tests__/analyzer.unit.test.js +455 -0
  166. package/dist/robustness/__tests__/analyzer.unit.test.js.map +1 -0
  167. package/dist/robustness/__tests__/perturbations.unit.test.d.ts +11 -0
  168. package/dist/robustness/__tests__/perturbations.unit.test.d.ts.map +1 -0
  169. package/dist/robustness/__tests__/perturbations.unit.test.js +284 -0
  170. package/dist/robustness/__tests__/perturbations.unit.test.js.map +1 -0
  171. package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts +7 -0
  172. package/dist/statistical/__tests__/mann-whitney-u.unit.test.d.ts.map +1 -0
  173. package/dist/statistical/__tests__/mann-whitney-u.unit.test.js +185 -0
  174. package/dist/statistical/__tests__/mann-whitney-u.unit.test.js.map +1 -0
  175. package/package.json +8 -1
@@ -8,36 +8,77 @@
8
8
  * results/execute/checkpoint-worker-00.json
9
9
  * results/execute/checkpoint-worker-01.json
10
10
  * ...
11
+ *
12
+ * Dependency Injection:
13
+ * - Logger interface enables testing of log output
14
+ * - ProcessSpawner interface enables mocking spawn() calls
15
+ * - SystemInfo interface enables testing CPU count and node path logic
11
16
  */
12
17
  import { spawn } from "node:child_process";
13
18
  import { randomBytes } from "node:crypto";
14
19
  import { cpus } from "node:os";
15
20
  import { dirname, resolve } from "node:path";
16
21
  /**
17
- * Get the package root directory by resolving from the entry point script.
18
- * The CLI entry point is dist/cli.js, so we go up one level from there.
22
+ * Production logger using console.
19
23
  */
20
- const getPackageRoot = () => {
21
- // Get the directory containing the entry point script
22
- // process.argv[1] is the path to the executed script (e.g., /path/to/graphbox/dist/cli.js)
23
- const entryPoint = process.argv[1];
24
- // Resolve to absolute path first (handles relative paths like "dist/cli.js")
25
- const absoluteEntry = resolve(entryPoint);
26
- const entryDir = dirname(absoluteEntry);
27
- // If entry point is in dist/, go up one level to get package root
28
- if (entryDir.endsWith("/dist") || entryDir.endsWith(String.raw `\dist`)) {
29
- return entryDir.slice(0, -5); // Remove "/dist"
24
+ export class ConsoleLogger {
25
+ log(message) {
26
+ console.log(message);
30
27
  }
31
- // Fallback: use current directory
32
- return process.cwd();
33
- };
34
- const PACKAGE_ROOT = getPackageRoot();
28
+ debug(message) {
29
+ console.log(message);
30
+ }
31
+ info(message) {
32
+ console.log(message);
33
+ }
34
+ warn(message) {
35
+ console.warn(message);
36
+ }
37
+ }
38
+ /**
39
+ * Production process spawner using node:child_process.
40
+ */
41
+ export class ProcessSpawner {
42
+ spawn(command, args, options) {
43
+ return spawn(command, args, options);
44
+ }
45
+ }
46
+ /**
47
+ * Production system info using node:os and process.
48
+ */
49
+ export class SystemInfo {
50
+ cpuCount = cpus().length;
51
+ nodePath = process.execPath;
52
+ env = process.env;
53
+ packageRoot;
54
+ constructor() {
55
+ this.packageRoot = this.getPackageRoot();
56
+ }
57
+ /**
58
+ * Get the package root directory by resolving from the entry point script.
59
+ * The CLI entry point is dist/cli.js, so we go up one level from there.
60
+ */
61
+ getPackageRoot() {
62
+ // Get the directory containing the entry point script
63
+ // process.argv[1] is the path to the executed script (e.g., /path/to/graphbox/dist/cli.js)
64
+ const entryPoint = process.argv[1];
65
+ // Resolve to absolute path first (handles relative paths like "dist/cli.js")
66
+ const absoluteEntry = resolve(entryPoint);
67
+ const entryDir = dirname(absoluteEntry);
68
+ // If entry point is in dist/, go up one level to get package root
69
+ if (entryDir.endsWith("/dist") || entryDir.endsWith(String.raw `\dist`)) {
70
+ return entryDir.slice(0, -5); // Remove "/dist"
71
+ }
72
+ // Fallback: use current directory
73
+ return process.cwd();
74
+ }
75
+ }
35
76
  /**
36
77
  * Generate random worker names using tech-themed adjectives.
37
78
  * Returns unique names for each worker.
38
79
  * @param count
39
80
  */
40
- const generateWorkerNames = (count) => {
81
+ export const generateWorkerNames = (count) => {
41
82
  const adjectives = [
42
83
  "swift",
43
84
  "nimble",
@@ -111,84 +152,178 @@ const generateWorkerNames = (count) => {
111
152
  * @returns Path to the worker's checkpoint file
112
153
  */
113
154
  export const shardPath = (checkpointDir, workerIndex) => resolve(checkpointDir, `checkpoint-worker-${String(workerIndex).padStart(2, "0")}.json`);
155
+ /**
156
+ * Parallel executor class with dependency injection.
157
+ *
158
+ * Spawns multiple Node.js processes, each executing a subset of runs.
159
+ * Each worker writes to its own sharded checkpoint file to avoid race conditions.
160
+ */
161
+ export class ParallelExecutor {
162
+ logger;
163
+ spawner;
164
+ systemInfo;
165
+ constructor(logger, spawner, systemInfo) {
166
+ this.logger = logger ?? new ConsoleLogger();
167
+ this.spawner = spawner ?? new ProcessSpawner();
168
+ this.systemInfo = systemInfo ?? new SystemInfo();
169
+ }
170
+ /**
171
+ * Split runs into batches for parallel processing.
172
+ * @param runs - Runs to distribute
173
+ * @param numberWorkers - Number of worker processes
174
+ * @returns Array of run batches
175
+ */
176
+ _createBatches(runs, numberWorkers) {
177
+ const batchSize = Math.ceil(runs.length / numberWorkers);
178
+ const batches = [];
179
+ for (let i = 0; i < runs.length; i += batchSize) {
180
+ const batch = runs.slice(i, i + batchSize);
181
+ const batchIndex = Math.floor(i / batchSize);
182
+ const runIds = new Set(batch.map((r) => r.runId));
183
+ batches.push({
184
+ index: batchIndex,
185
+ runIds: [...runIds],
186
+ filter: JSON.stringify([...runIds]),
187
+ firstRunId: batch[0]?.runId ?? "none",
188
+ lastRunId: batch.at(-1)?.runId ?? "none",
189
+ });
190
+ }
191
+ return batches;
192
+ }
193
+ /**
194
+ * Create worker configurations for all batches.
195
+ * @param batches - Run batches
196
+ * @param workerNames - Names for each worker
197
+ * @param cliPath - Path to CLI entry point
198
+ * @param checkpointDir - Base checkpoint directory
199
+ * @param timeoutMs - Per-run timeout in milliseconds
200
+ * @returns Array of worker configurations
201
+ */
202
+ _createWorkerConfigs(batches, workerNames, cliPath, checkpointDir, timeoutMs) {
203
+ return batches.map((batch) => {
204
+ const workerName = workerNames[batch.index];
205
+ const workerCheckpointPath = shardPath(checkpointDir, batch.index);
206
+ const arguments_ = [
207
+ cliPath,
208
+ "evaluate",
209
+ "--phase=execute",
210
+ "--checkpoint-mode=file",
211
+ `--run-filter=${batch.filter}`,
212
+ ];
213
+ // Add timeout if specified
214
+ if (timeoutMs > 0) {
215
+ arguments_.push(`--timeout=${timeoutMs}`);
216
+ }
217
+ return {
218
+ index: batch.index,
219
+ name: workerName,
220
+ checkpointPath: workerCheckpointPath,
221
+ arguments: arguments_,
222
+ env: {
223
+ ...this.systemInfo.env,
224
+ NODE_OPTIONS: "--max-old-space-size=4096",
225
+ GRAPHBOX_WORKER_NAME: workerName,
226
+ GRAPHBOX_WORKER_INDEX: batch.index.toString(),
227
+ GRAPHBOX_TOTAL_WORKERS: batches.length.toString(),
228
+ GRAPHBOX_CHECKPOINT_DIR: checkpointDir,
229
+ GRAPHBOX_CHECKPOINT_PATH: workerCheckpointPath,
230
+ },
231
+ };
232
+ });
233
+ }
234
+ /**
235
+ * Spawn worker processes for all configurations.
236
+ * @param workerConfigs - Worker configurations
237
+ * @param nodePath - Path to node executable
238
+ * @param packageRoot - Package root directory
239
+ * @returns Array of child processes
240
+ */
241
+ _spawnWorkers(workerConfigs, nodePath, packageRoot) {
242
+ return workerConfigs.map((config) => {
243
+ this.logger.debug(`Spawning worker ${config.index}: ${config.name} with ${config.arguments.length} args`);
244
+ return this.spawner.spawn(nodePath, config.arguments, {
245
+ stdio: "inherit",
246
+ cwd: packageRoot,
247
+ env: config.env,
248
+ });
249
+ });
250
+ }
251
+ /**
252
+ * Wait for all workers to complete.
253
+ * @param workers - Child processes
254
+ * @returns Promise that resolves when all workers exit
255
+ */
256
+ async _waitForWorkers(workers) {
257
+ return Promise.all(workers.map((w) => new Promise((resolve) => {
258
+ w.on("exit", (code) => {
259
+ resolve(code);
260
+ });
261
+ })));
262
+ }
263
+ /**
264
+ * Execute runs using multiple parallel processes.
265
+ *
266
+ * Each worker writes to its own sharded checkpoint file to avoid race conditions.
267
+ * After all workers complete, the main process should merge the shards.
268
+ *
269
+ * @param runs - Planned runs to execute
270
+ * @param suts - SUT definitions (not used directly, passed to workers)
271
+ * @param cases - Case definitions (not used directly, passed to workers)
272
+ * @param config - Executor configuration
273
+ * @param options - Parallel executor options
274
+ * @returns Execution results (empty - CLI will load from shards)
275
+ */
276
+ async execute(runs, _suts, _cases, config, options = {}) {
277
+ const numberWorkers = options.workers ?? this.systemInfo.cpuCount;
278
+ const nodePath = options.nodePath ?? this.systemInfo.nodePath;
279
+ const checkpointDir = options.checkpointDir ?? resolve(this.systemInfo.packageRoot, "results/execute");
280
+ const timeoutMs = options.timeoutMs ?? config.timeoutMs;
281
+ this.logger.info(`ParallelExecutor: Spawning ${numberWorkers} processes for ${runs.length} runs`);
282
+ this.logger.info(`Checkpoint directory: ${checkpointDir}`);
283
+ if (timeoutMs > 0) {
284
+ this.logger.info(`Per-run timeout: ${timeoutMs}ms (${Math.round(timeoutMs / 1000)}s)`);
285
+ }
286
+ // Generate unique names for each worker
287
+ const workerNames = generateWorkerNames(numberWorkers);
288
+ this.logger.info(`Workers: ${workerNames.map((name, index) => `${index + 1}. ${name}`).join(", ")}`);
289
+ // Split runs into batches
290
+ const batches = this._createBatches(runs, numberWorkers);
291
+ // Log batch information
292
+ for (const batch of batches) {
293
+ this.logger.debug(`Batch ${batch.index} has ${batch.runIds.length} runs, filter length: ${batch.filter.length}`);
294
+ this.logger.debug(` First run: ${batch.firstRunId}, Last run: ${batch.lastRunId}`);
295
+ }
296
+ // Create worker configurations
297
+ const cliPath = resolve(this.systemInfo.packageRoot, "dist/cli.js");
298
+ const workerConfigs = this._createWorkerConfigs(batches, workerNames, cliPath, checkpointDir, timeoutMs);
299
+ // Spawn worker processes
300
+ const workers = this._spawnWorkers(workerConfigs, nodePath, this.systemInfo.packageRoot);
301
+ // Wait for all workers to complete
302
+ const exitCodes = await this._waitForWorkers(workers);
303
+ this.logger.debug(`All workers exited with codes: ${exitCodes.join(", ")}`);
304
+ // Load and return aggregated results
305
+ // For now, return empty - the CLI will handle results and merge shards
306
+ return { results: [], errors: [] };
307
+ }
308
+ }
114
309
  /**
115
310
  * Execute runs using multiple parallel processes.
116
311
  *
117
312
  * Each worker writes to its own sharded checkpoint file to avoid race conditions.
118
313
  * After all workers complete, the main process should merge the shards.
119
314
  *
315
+ * This is a convenience function that creates a ParallelExecutor with default dependencies.
316
+ * For testing or custom behavior, use the ParallelExecutor class directly.
317
+ *
120
318
  * @param runs - Planned runs to execute
121
319
  * @param suts - SUT definitions (not used directly, passed to workers)
122
320
  * @param cases - Case definitions (not used directly, passed to workers)
123
321
  * @param config - Executor configuration
124
322
  * @param options - Parallel executor options
323
+ * @returns Execution results (empty - CLI will load from shards)
125
324
  */
126
325
  export const executeParallel = async (runs, suts, cases, config, options = {}) => {
127
- const numberWorkers = options.workers ?? cpus().length;
128
- const nodePath = options.nodePath ?? process.execPath;
129
- const checkpointDir = options.checkpointDir ?? resolve(PACKAGE_ROOT, "results/execute");
130
- const timeoutMs = options.timeoutMs ?? config.timeoutMs;
131
- console.log(`ParallelExecutor: Spawning ${numberWorkers} processes for ${runs.length} runs`);
132
- console.log(`Checkpoint directory: ${checkpointDir}`);
133
- if (timeoutMs > 0) {
134
- console.log(`Per-run timeout: ${timeoutMs}ms (${Math.round(timeoutMs / 1000)}s)`);
135
- }
136
- // Generate unique names for each worker
137
- const workerNames = generateWorkerNames(numberWorkers);
138
- console.log(`Workers: ${workerNames.map((name, index) => `${index + 1}. ${name}`).join(", ")}`);
139
- // Split runs into batches
140
- const batchSize = Math.ceil(runs.length / numberWorkers);
141
- const batches = [];
142
- for (let index = 0; index < runs.length; index += batchSize) {
143
- batches.push(runs.slice(index, index + batchSize));
144
- }
145
- // Create a run filter function for each batch
146
- const runFilters = batches.map((batch, _index) => {
147
- const runIds = new Set(batch.map((r) => r.runId));
148
- const filter = JSON.stringify([...runIds]);
149
- const firstRunId = batch[0]?.runId ?? "none";
150
- const lastRunId = batch.at(-1)?.runId ?? "none";
151
- console.log(`DEBUG: Batch ${_index} has ${batch.length} runs, filter length: ${filter.length}`);
152
- console.log(`DEBUG: First run: ${firstRunId}, Last run: ${lastRunId}`);
153
- return filter;
154
- });
155
- // Spawn worker processes
156
- const workers = runFilters.map((runFilter, index) => {
157
- const workerName = workerNames[index];
158
- const workerCheckpointPath = shardPath(checkpointDir, index);
159
- const arguments_ = [
160
- resolve(PACKAGE_ROOT, "dist/cli.js"),
161
- "evaluate",
162
- "--phase=execute",
163
- "--checkpoint-mode=file",
164
- `--run-filter=${runFilter}`, // JSON array - needs to be quoted in shell but spawn() handles this
165
- ];
166
- // Add timeout if specified
167
- if (timeoutMs > 0) {
168
- arguments_.push(`--timeout=${timeoutMs}`);
169
- }
170
- return spawn(nodePath, arguments_, {
171
- stdio: "inherit",
172
- cwd: PACKAGE_ROOT, // Ensure workers use the package root as working directory
173
- env: {
174
- ...process.env,
175
- NODE_OPTIONS: "--max-old-space-size=4096",
176
- GRAPHBOX_WORKER_NAME: workerName,
177
- GRAPHBOX_WORKER_INDEX: index.toString(),
178
- GRAPHBOX_TOTAL_WORKERS: numberWorkers.toString(),
179
- GRAPHBOX_CHECKPOINT_DIR: checkpointDir,
180
- GRAPHBOX_CHECKPOINT_PATH: workerCheckpointPath,
181
- },
182
- });
183
- });
184
- // Wait for all workers to complete
185
- await Promise.all(workers.map((w) => new Promise((resolve) => {
186
- w.on("exit", (code) => {
187
- resolve(code);
188
- });
189
- })));
190
- // Load and return aggregated results
191
- // For now, return empty - the CLI will handle results and merge shards
192
- return { results: [], errors: [] };
326
+ const executor = new ParallelExecutor();
327
+ return executor.execute(runs, suts, cases, config, options);
193
328
  };
194
329
  //# sourceMappingURL=parallel-executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parallel-executor.js","sourceRoot":"","sources":["../../src/executor/parallel-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parallel-executor.js","sourceRoot":"","sources":["../../src/executor/parallel-executor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-id.d.ts","sourceRoot":"","sources":["../../src/executor/run-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IAEd,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,WAAW,KAAG,MAInD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAGpE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,EAAE,QAAQ,WAAW,KAAG,OACnC,CAAC;AAEjC;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAM1E,CAAC"}
1
+ {"version":3,"file":"run-id.d.ts","sourceRoot":"","sources":["../../src/executor/run-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;IAEd,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IAEf,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,WAAW,KAAG,MAInD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,MAUpE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,EAAE,QAAQ,WAAW,KAAG,OACnC,CAAC;AAEjC;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,MAAM,KAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAM1E,CAAC"}
@@ -38,7 +38,14 @@ export const generateRunId = (inputs) => {
38
38
  * @returns 8-character hex string
39
39
  */
40
40
  export const generateConfigHash = (config) => {
41
- const canonical = JSON.stringify(config, Object.keys(config).sort());
41
+ // Sort keys for consistent ordering, then stringify without replacer
42
+ // (using replacer array would filter nested properties)
43
+ const sortedKeys = Object.keys(config).sort();
44
+ const sortedObj = {};
45
+ for (const key of sortedKeys) {
46
+ sortedObj[key] = config[key];
47
+ }
48
+ const canonical = JSON.stringify(sortedObj);
42
49
  return createHash("sha256").update(canonical).digest("hex").slice(0, 8);
43
50
  };
44
51
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"run-id.js","sourceRoot":"","sources":["../../src/executor/run-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsBzC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAmB,EAAU,EAAE;IAC5D,mCAAmC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA+B,EAAU,EAAE;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,MAAmB,EAAW,EAAE,CAC5E,KAAK,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAsC,EAAE;IAC/E,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO;QACN,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;QACnC,MAAM,EAAE,KAAK,CAAC,MAAM;KACpB,CAAC;AACH,CAAC,CAAC"}
1
+ {"version":3,"file":"run-id.js","sourceRoot":"","sources":["../../src/executor/run-id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAsBzC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAmB,EAAU,EAAE;IAC5D,mCAAmC;IACnC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA+B,EAAU,EAAE;IAC7E,qEAAqE;IACrE,wDAAwD;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAE,MAAmB,EAAW,EAAE,CAC5E,KAAK,KAAK,aAAa,CAAC,MAAM,CAAC,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAAa,EAAsC,EAAE;IAC/E,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO;QACN,KAAK,EAAE,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;QACnC,MAAM,EAAE,KAAK,CAAC,MAAM;KACpB,CAAC;AACH,CAAC,CAAC"}
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * This file is loaded as a worker thread and receives messages
5
5
  * with batches of runs to execute.
6
+ *
7
+ * It uses dependency injection to allow testing of the core logic.
6
8
  */
7
9
  export {};
8
10
  //# sourceMappingURL=worker-entry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker-entry.d.ts","sourceRoot":"","sources":["../../src/executor/worker-entry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
1
+ {"version":3,"file":"worker-entry.d.ts","sourceRoot":"","sources":["../../src/executor/worker-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -3,65 +3,40 @@
3
3
  *
4
4
  * This file is loaded as a worker thread and receives messages
5
5
  * with batches of runs to execute.
6
+ *
7
+ * It uses dependency injection to allow testing of the core logic.
6
8
  */
7
9
  import { dirname, resolve } from "node:path";
8
10
  import { fileURLToPath } from "node:url";
9
11
  import { parentPort } from "node:worker_threads";
12
+ import { WorkerExecutor, } from "./worker-executor.js";
10
13
  const __filename = fileURLToPath(import.meta.url);
11
14
  const __dirname = dirname(__filename);
12
15
  const projectRoot = resolve(__dirname, "../../../");
13
- // Dynamically import the main code
14
- const executeBatch = async (message) => {
15
- // Import the executor and other dependencies
16
- const executorModule = (await import(`${projectRoot}/dist/experiments/framework/executor/executor.js`));
17
- const evaluateModule = (await import(`${projectRoot}/dist/cli-commands/evaluate.js`));
18
- const registryModule = (await import(`${projectRoot}/dist/experiments/framework/registry/index.js`));
19
- const sutsModule = (await import(`${projectRoot}/dist/experiments/framework/suts/index.js`));
20
- const datasetsModule = (await import(`${projectRoot}/dist/experiments/evaluation/fixtures/benchmark-datasets.js`));
21
- // Register all datasets and SUTs
22
- await datasetsModule.registerBenchmarkDatasets();
23
- sutsModule.registerAllSuts();
24
- const caseRegistry = await registryModule.registerAllBenchmarkCases();
25
- const sutRegistry = {
26
- list: () => ["degree-prioritised", "standard-bfs", "frontier-balanced", "random-priority"],
27
- getFactory: () => {
28
- // This would need to be implemented properly
29
- return null;
30
- },
31
- };
32
- const suts = evaluateModule.getSutDefinitions(sutRegistry);
33
- const cases = evaluateModule.getCaseDefinitions(caseRegistry);
34
- // Create executor with no onResult callback (workers don't save checkpoints)
35
- const executor = new executorModule.Executor({
36
- repetitions: message.config.repetitions,
37
- seedBase: message.config.seedBase,
38
- continueOnError: message.config.continueOnError,
39
- timeoutMs: message.config.timeoutMs,
40
- collectProvenance: message.config.collectProvenance,
41
- });
42
- // Execute the runs
43
- const results = await executor.execute(suts, cases, () => ({}));
44
- return {
45
- results: results.results,
46
- errors: results.errors,
47
- };
48
- };
49
- // Listen for messages from parent thread
50
- parentPort?.on("message", (data) => {
51
- // Validate message structure
52
- const message = data;
53
- // Execute asynchronously without returning the promise
54
- void (async () => {
55
- try {
56
- const result = await executeBatch(message);
57
- parentPort?.postMessage({ type: "done", ...result });
58
- }
59
- catch (error) {
60
- parentPort?.postMessage({
61
- type: "error",
62
- error: error instanceof Error ? error.message : String(error),
63
- });
64
- }
65
- })();
66
- });
16
+ /**
17
+ * Real module loader implementation for production use.
18
+ */
19
+ class RealModuleLoader {
20
+ async loadExecutor() {
21
+ return (await import(`${projectRoot}/dist/experiments/framework/executor/executor.js`));
22
+ }
23
+ async loadEvaluate() {
24
+ return (await import(`${projectRoot}/dist/cli-commands/evaluate.js`));
25
+ }
26
+ async loadRegistry() {
27
+ return (await import(`${projectRoot}/dist/experiments/framework/registry/index.js`));
28
+ }
29
+ async loadSuts() {
30
+ return (await import(`${projectRoot}/dist/experiments/framework/suts/index.js`));
31
+ }
32
+ async loadDatasets() {
33
+ return (await import(`${projectRoot}/dist/experiments/evaluation/fixtures/benchmark-datasets.js`));
34
+ }
35
+ }
36
+ // Create executor with real dependencies and start listening
37
+ if (parentPort) {
38
+ const moduleLoader = new RealModuleLoader();
39
+ const executor = new WorkerExecutor(parentPort, moduleLoader, projectRoot);
40
+ executor.start();
41
+ }
67
42
  //# sourceMappingURL=worker-entry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../../src/executor/worker-entry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAiFpD,mCAAmC;AACnC,MAAM,YAAY,GAAG,KAAK,EAAE,OAAsB,EAA2B,EAAE;IAC9E,6CAA6C;IAC7C,MAAM,cAAc,GAAG,CAAC,MAAM,MAAM,CACnC,GAAG,WAAW,kDAAkD,CAChE,CAA8B,CAAC;IAChC,MAAM,cAAc,GAAG,CAAC,MAAM,MAAM,CACnC,GAAG,WAAW,gCAAgC,CAC9C,CAA8B,CAAC;IAChC,MAAM,cAAc,GAAG,CAAC,MAAM,MAAM,CACnC,GAAG,WAAW,+CAA+C,CAC7D,CAA8B,CAAC;IAChC,MAAM,UAAU,GAAG,CAAC,MAAM,MAAM,CAC/B,GAAG,WAAW,2CAA2C,CACzD,CAA0B,CAAC;IAC5B,MAAM,cAAc,GAAG,CAAC,MAAM,MAAM,CACnC,GAAG,WAAW,6DAA6D,CAC3E,CAAuC,CAAC;IAEzC,iCAAiC;IACjC,MAAM,cAAc,CAAC,yBAAyB,EAAE,CAAC;IACjD,UAAU,CAAC,eAAe,EAAE,CAAC;IAC7B,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,yBAAyB,EAAE,CAAC;IAEtE,MAAM,WAAW,GAAgB;QAChC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,oBAAoB,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,CAAC;QAC1F,UAAU,EAAE,GAAG,EAAE;YAChB,6CAA6C;YAC7C,OAAO,IAAI,CAAC;QACb,CAAC;KACD,CAAC;IAEF,MAAM,IAAI,GAAG,cAAc,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,cAAc,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAE9D,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC;QAC5C,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW;QACvC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ;QACjC,eAAe,EAAE,OAAO,CAAC,MAAM,CAAC,eAAe;QAC/C,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;QACnC,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB;KACnD,CAAC,CAAC;IAEH,mBAAmB;IACnB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhE,OAAO;QACN,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;KACtB,CAAC;AACH,CAAC,CAAC;AAEF,yCAAyC;AACzC,UAAU,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE;IAC3C,6BAA6B;IAC7B,MAAM,OAAO,GAAG,IAAqB,CAAC;IAEtC,uDAAuD;IACvD,KAAK,CAAC,KAAK,IAAI,EAAE;QAChB,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;YAC3C,UAAU,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,UAAU,EAAE,WAAW,CAAC;gBACvB,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC7D,CAAC,CAAC;QACJ,CAAC;IACF,CAAC,CAAC,EAAE,CAAC;AACN,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../../src/executor/worker-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,OAAO,EAON,cAAc,GACd,MAAM,sBAAsB,CAAC;AAE9B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAEpD;;GAEG;AACH,MAAM,gBAAgB;IACd,KAAK,CAAC,YAAY;QACxB,OAAO,CAAC,MAAM,MAAM,CACnB,GAAG,WAAW,kDAAkD,CAChE,CAA+B,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,YAAY;QACxB,OAAO,CAAC,MAAM,MAAM,CACnB,GAAG,WAAW,gCAAgC,CAC9C,CAA+B,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,YAAY;QACxB,OAAO,CAAC,MAAM,MAAM,CACnB,GAAG,WAAW,+CAA+C,CAC7D,CAA+B,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,QAAQ;QACpB,OAAO,CAAC,MAAM,MAAM,CACnB,GAAG,WAAW,2CAA2C,CACzD,CAA2B,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,YAAY;QACxB,OAAO,CAAC,MAAM,MAAM,CACnB,GAAG,WAAW,6DAA6D,CAC3E,CAA+B,CAAC;IAClC,CAAC;CACD;AAED,6DAA6D;AAC7D,IAAI,UAAU,EAAE,CAAC;IAChB,MAAM,YAAY,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAC3E,QAAQ,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC"}