@overkill-dev/run 0.0.9 → 0.0.11

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 (76) hide show
  1. package/engine/engine.d.ts +27 -0
  2. package/engine/engine.d.ts.map +1 -0
  3. package/engine/engine.js +40 -0
  4. package/engine/engine.js.map +1 -0
  5. package/engine/execution-result.js +77 -0
  6. package/engine/execution-result.js.map +1 -0
  7. package/engine/execution.d.ts +2 -1
  8. package/engine/execution.d.ts.map +1 -1
  9. package/engine/execution.js +23 -76
  10. package/engine/execution.js.map +1 -1
  11. package/engine/identity.d.ts +1 -1
  12. package/engine/identity.d.ts.map +1 -1
  13. package/engine/identity.js +16 -1
  14. package/engine/identity.js.map +1 -1
  15. package/engine/run-if-main.d.ts +28 -0
  16. package/engine/run-if-main.d.ts.map +1 -0
  17. package/engine/run-if-main.js +46 -0
  18. package/engine/run-if-main.js.map +1 -0
  19. package/engine/run-result.d.ts +22 -0
  20. package/engine/run-result.d.ts.map +1 -1
  21. package/engine/run-result.js.map +1 -1
  22. package/engine/test-node.d.ts +1 -0
  23. package/engine/test-node.d.ts.map +1 -1
  24. package/engine/test-node.js +137 -0
  25. package/engine/test-node.js.map +1 -0
  26. package/engine/test-plan.d.ts +11 -1
  27. package/engine/test-plan.d.ts.map +1 -1
  28. package/engine/test-plan.js +174 -0
  29. package/engine/test-plan.js.map +1 -0
  30. package/package.json +6 -2
  31. package/packages/engine/engine.entry-point.js +67 -0
  32. package/packages/engine/engine.entry-point.js.map +1 -0
  33. package/packages/run/command-line.entry-point.d.ts +1 -1
  34. package/packages/run/command-line.entry-point.d.ts.map +1 -1
  35. package/packages/run/run.entry-point.d.ts +4 -2
  36. package/packages/run/run.entry-point.d.ts.map +1 -1
  37. package/packages/run/run.entry-point.js +2 -1
  38. package/packages/run/run.entry-point.js.map +1 -1
  39. package/readme.md +23 -5
  40. package/run/command-line-command.d.ts +1 -3
  41. package/run/command-line-command.d.ts.map +1 -1
  42. package/run/command-line-command.js +4 -1
  43. package/run/command-line-command.js.map +1 -1
  44. package/run/command-line-runner.d.ts +1 -1
  45. package/run/command-line-runner.d.ts.map +1 -1
  46. package/run/command-line-runner.js +5 -3
  47. package/run/command-line-runner.js.map +1 -1
  48. package/run/command-line-unimplemented-commands.js +1 -1
  49. package/run/command-line-unimplemented-commands.js.map +1 -1
  50. package/run/default-run-engine.js +14 -0
  51. package/run/default-run-engine.js.map +1 -0
  52. package/run/resource-usage.d.ts +15 -0
  53. package/run/resource-usage.d.ts.map +1 -0
  54. package/run/resource-usage.js +107 -0
  55. package/run/resource-usage.js.map +1 -0
  56. package/run/run-config.d.ts +30 -5
  57. package/run/run-config.d.ts.map +1 -1
  58. package/run/run-config.js +62 -1
  59. package/run/run-config.js.map +1 -1
  60. package/run/run-discovery.js +75 -0
  61. package/run/run-discovery.js.map +1 -0
  62. package/run/run-errors.d.ts +16 -0
  63. package/run/run-errors.d.ts.map +1 -0
  64. package/run/run-errors.js +37 -0
  65. package/run/run-errors.js.map +1 -0
  66. package/run/run-orchestrator.d.ts +3 -0
  67. package/run/run-orchestrator.d.ts.map +1 -0
  68. package/run/run-orchestrator.js +43 -0
  69. package/run/run-orchestrator.js.map +1 -0
  70. package/run/run-test-modules.js +53 -0
  71. package/run/run-test-modules.js.map +1 -0
  72. package/run/run.d.ts +35 -13
  73. package/run/run.d.ts.map +1 -1
  74. package/run/run.js +200 -66
  75. package/run/run.js.map +1 -1
  76. package/sbom.cdx.json +4 -4
@@ -0,0 +1,137 @@
1
+ const testNodeBrand = Symbol('OverkillTestNode');
2
+ const testRootBrand = Symbol('OverkillTestRoot');
3
+ const testNodeOwnerBrand = Symbol('OverkillTestNodeOwner');
4
+ const testNodeOwnerIdentity = Symbol('OverkillTestNodeOwnerIdentity');
5
+ export function createTestNodeOwner() {
6
+ return { [testNodeOwnerIdentity]: true };
7
+ }
8
+ function ensureName(name) {
9
+ if (name.trim().length === 0) {
10
+ throw new TypeError('Test node name must not be empty.');
11
+ }
12
+ }
13
+ function ensureMetadata(metadata) {
14
+ if (typeof metadata !== 'object' || metadata === null || Array.isArray(metadata)) {
15
+ throw new TypeError('Test node metadata must be an object.');
16
+ }
17
+ }
18
+ function ensureTestBody(body) {
19
+ if (typeof body !== 'function') {
20
+ throw new TypeError('Test case body must be a function.');
21
+ }
22
+ }
23
+ export function isTestNode(value) {
24
+ return typeof value === 'object' && value !== null && Object.hasOwn(value, testNodeBrand);
25
+ }
26
+ export function isTestRoot(value) {
27
+ return typeof value === 'object' && value !== null && Object.hasOwn(value, testRootBrand);
28
+ }
29
+ export function isOwnedTestNode(value, owner) {
30
+ return isTestNode(value) && value[testNodeOwnerBrand] === owner;
31
+ }
32
+ function hasTestNodeOwner(value, owner) {
33
+ return value[testNodeOwnerBrand] === owner;
34
+ }
35
+ function hasTestRootOwner(value, owner) {
36
+ return value[testNodeOwnerBrand] === owner;
37
+ }
38
+ function ensureOwnedTestNode(value, owner, plainObjectMessage, foreignNodeMessage) {
39
+ if (!isTestNode(value)) {
40
+ throw new TypeError(plainObjectMessage);
41
+ }
42
+ if (!hasTestNodeOwner(value, owner)) {
43
+ throw new TypeError(foreignNodeMessage);
44
+ }
45
+ }
46
+ export function ensureOwnedTestRoot(value, owner, plainObjectMessage, foreignRootMessage) {
47
+ if (!isTestRoot(value)) {
48
+ throw new TypeError(plainObjectMessage);
49
+ }
50
+ if (!hasTestRootOwner(value, owner)) {
51
+ throw new TypeError(foreignRootMessage);
52
+ }
53
+ }
54
+ function toTestNode(value, owner, plainObjectMessage, foreignNodeMessage) {
55
+ ensureOwnedTestNode(value, owner, plainObjectMessage, foreignNodeMessage);
56
+ return value;
57
+ }
58
+ export function createTestNodeFactory(factoryOptions) {
59
+ const { owner, recordConstructedNode } = factoryOptions;
60
+ function createTestCase(options) {
61
+ ensureName(options.name);
62
+ ensureMetadata(options.metadata);
63
+ ensureTestBody(options.body);
64
+ const testCase = {
65
+ [testNodeBrand]: true,
66
+ [testNodeOwnerBrand]: owner,
67
+ body: options.body,
68
+ kind: 'test',
69
+ metadata: options.metadata,
70
+ name: options.name
71
+ };
72
+ recordConstructedNode(testCase);
73
+ return testCase;
74
+ }
75
+ function createRoot(options) {
76
+ ensureName(options.name);
77
+ ensureMetadata(options.metadata);
78
+ const children = options.children.map(function validateChild(child) {
79
+ return toTestNode(child, owner, 'Root children must be engine-created TestNode values.', 'Root children must be created by the same engine instance.');
80
+ });
81
+ return {
82
+ [testRootBrand]: true,
83
+ [testNodeOwnerBrand]: owner,
84
+ children,
85
+ kind: 'root',
86
+ metadata: options.metadata,
87
+ name: options.name
88
+ };
89
+ }
90
+ function createSuite(options) {
91
+ ensureName(options.name);
92
+ ensureMetadata(options.metadata);
93
+ const children = options.children.map(function validateChild(child) {
94
+ return toTestNode(child, owner, 'Suite children must be engine-created TestNode values.', 'Suite children must be created by the same engine instance.');
95
+ });
96
+ const suite = {
97
+ [testNodeBrand]: true,
98
+ [testNodeOwnerBrand]: owner,
99
+ children,
100
+ kind: 'suite',
101
+ metadata: options.metadata,
102
+ name: options.name
103
+ };
104
+ recordConstructedNode(suite);
105
+ return suite;
106
+ }
107
+ function createTable(options) {
108
+ ensureName(options.name);
109
+ ensureMetadata(options.metadata);
110
+ for (const tableCase of options.cases) {
111
+ ensureName(tableCase.name);
112
+ ensureMetadata(tableCase.metadata);
113
+ ensureMetadata(tableCase.parameters);
114
+ ensureTestBody(tableCase.body);
115
+ }
116
+ const table = {
117
+ [testNodeBrand]: true,
118
+ [testNodeOwnerBrand]: owner,
119
+ cases: options.cases,
120
+ kind: 'table',
121
+ metadata: options.metadata,
122
+ name: options.name
123
+ };
124
+ recordConstructedNode(table);
125
+ return table;
126
+ }
127
+ return {
128
+ createRoot,
129
+ createSuite,
130
+ createTable,
131
+ createTestCase
132
+ };
133
+ }
134
+ export function mergeMetadata(parent, child) {
135
+ return { ...parent, ...child };
136
+ }
137
+ //# sourceMappingURL=test-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-node.js","sourceRoot":"","sources":["../../../../source/engine/test-node.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { NonEmptyReadonlyArray } from '../assertion-protocol/assertion-node-shape.ts';
2
2
  import { type CaseId } from './identity.ts';
3
3
  import type { OrphanedNode } from './run-result.ts';
4
- import { type Metadata, type TestBody, type TestNode, type TestNodeOwner, type TestRoot } from './test-node.ts';
4
+ import { type Metadata, type RootOptions, type TestBody, type TestNode, type TestNodeOwner, type TestRoot } from './test-node.ts';
5
5
  export type TestPlanCaseBody = TestBody;
6
6
  export type TestPlanCase = {
7
7
  readonly id: CaseId;
@@ -21,6 +21,16 @@ type TestPlanRoot = {
21
21
  readonly name: string;
22
22
  };
23
23
  export type TestPlanFactory = (root: TestRoot) => TestPlan;
24
+ export type TestPlanFile = {
25
+ readonly file: string;
26
+ readonly testNode: TestNode;
27
+ };
28
+ export type TestPlanFromTestFilesOptions = {
29
+ readonly files: NonEmptyReadonlyArray<TestPlanFile>;
30
+ readonly root: TestPlanRoot;
31
+ };
32
+ export type TestPlanFromTestFilesFactory = (options: TestPlanFromTestFilesOptions) => TestPlan;
24
33
  export declare function createTestPlanFactory(owner: TestNodeOwner, constructedNodes: ReadonlySet<TestNode>): TestPlanFactory;
34
+ export declare function createTestPlanFromTestFilesFactory(owner: TestNodeOwner, createRoot: (options: RootOptions) => TestRoot): TestPlanFromTestFilesFactory;
25
35
  export {};
26
36
  //# sourceMappingURL=test-plan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-plan.d.ts","sourceRoot":"","sources":["../../../../source/engine/test-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAA+C,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAGH,KAAK,QAAQ,EAEb,KAAK,QAAQ,EAEb,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,QAAQ,EAChB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpD,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC/B,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAsJ3D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,eAAe,CAyBpH"}
1
+ {"version":3,"file":"test-plan.d.ts","sourceRoot":"","sources":["../../../../source/engine/test-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAC3F,OAAO,EAA+C,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAIH,KAAK,QAAQ,EACb,KAAK,WAAW,EAEhB,KAAK,QAAQ,EAEb,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,QAAQ,EAChB,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAExC,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpD,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IAC9D,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC/B,CAAC;AAEF,KAAK,YAAY,GAAG;IAChB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,QAAQ,CAAC;AAE3D,MAAM,MAAM,YAAY,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACvC,QAAQ,CAAC,KAAK,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACpD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,CAAC,OAAO,EAAE,4BAA4B,KAAK,QAAQ,CAAC;AAqK/F,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,eAAe,CAyBpH;AAgBD,wBAAgB,kCAAkC,CAC9C,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,QAAQ,GAC/C,4BAA4B,CA4B9B"}
@@ -0,0 +1,174 @@
1
+ import { caseIdentityKey, createCaseId, formatCaseId } from "./identity.js";
2
+ import { ensureOwnedTestRoot, isOwnedTestNode, mergeMetadata } from "./test-node.js";
3
+ function collectTestCase(testCase, file, suitePath, metadata) {
4
+ const resolvedMetadata = mergeMetadata(metadata, testCase.metadata);
5
+ return {
6
+ cases: [
7
+ {
8
+ body: testCase.body,
9
+ id: createCaseId(file, suitePath, testCase.name, null),
10
+ metadata: resolvedMetadata,
11
+ suitePath
12
+ }
13
+ ],
14
+ reachedNodes: [testCase]
15
+ };
16
+ }
17
+ function collectTable(table, file, suitePath, metadata) {
18
+ if (table.cases.length === 0) {
19
+ throw new TypeError(`Table must contain at least one case: ${[...suitePath, table.name].join(' > ')}.`);
20
+ }
21
+ const tablePath = [...suitePath, table.name];
22
+ const tableMetadata = mergeMetadata(metadata, table.metadata);
23
+ return {
24
+ cases: table.cases.map(function collectTableCase(tableCase) {
25
+ const resolvedMetadata = mergeMetadata(tableMetadata, tableCase.metadata);
26
+ return {
27
+ body: tableCase.body,
28
+ id: createCaseId(file, tablePath, tableCase.name, null),
29
+ metadata: resolvedMetadata,
30
+ suitePath: tablePath
31
+ };
32
+ }),
33
+ reachedNodes: [table]
34
+ };
35
+ }
36
+ function mergeCollectedTestCases(collections) {
37
+ return {
38
+ cases: collections.flatMap(function collectCases(collection) {
39
+ return collection.cases;
40
+ }),
41
+ reachedNodes: collections.flatMap(function collectReachedNodes(collection) {
42
+ return collection.reachedNodes;
43
+ })
44
+ };
45
+ }
46
+ function collectNode(node, file, suitePath, metadata) {
47
+ if (node.kind === 'test') {
48
+ return collectTestCase(node, file, suitePath, metadata);
49
+ }
50
+ if (node.kind === 'table') {
51
+ return collectTable(node, file, suitePath, metadata);
52
+ }
53
+ if (node.children.length === 0) {
54
+ throw new TypeError(`Suite must contain at least one child: ${[...suitePath, node.name].join(' > ')}.`);
55
+ }
56
+ const childPath = [...suitePath, node.name];
57
+ const childMetadata = mergeMetadata(metadata, node.metadata);
58
+ const children = mergeCollectedTestCases(node.children.map(function collectChild(child) {
59
+ return collectNode(child, file, childPath, childMetadata);
60
+ }));
61
+ return {
62
+ cases: children.cases,
63
+ reachedNodes: [node, ...children.reachedNodes]
64
+ };
65
+ }
66
+ function collectRoot(root) {
67
+ if (root.children.length === 0) {
68
+ throw new TypeError(`Root must contain at least one child: ${root.name}.`);
69
+ }
70
+ return mergeCollectedTestCases(root.children.map(function collectChild(child) {
71
+ return collectNode(child, null, [], root.metadata);
72
+ }));
73
+ }
74
+ function collectTestFiles(root, files) {
75
+ return mergeCollectedTestCases(root.children.map(function collectChild(child, index) {
76
+ const file = files[index];
77
+ if (file === undefined) {
78
+ throw new TypeError('Every test file must map to one root child.');
79
+ }
80
+ return collectNode(child, file.file, [], root.metadata);
81
+ }));
82
+ }
83
+ function toReachedNodeSet(reachedNodes) {
84
+ return new Set(reachedNodes);
85
+ }
86
+ function createOrphanedNode(node) {
87
+ return {
88
+ file: null,
89
+ kind: node.kind,
90
+ name: node.name
91
+ };
92
+ }
93
+ function collectOrphans(constructedNodes, reachedNodes) {
94
+ const reachedNodeSet = toReachedNodeSet(reachedNodes);
95
+ return Array
96
+ .from(constructedNodes)
97
+ .filter(function isOrphan(node) {
98
+ return !reachedNodeSet.has(node);
99
+ })
100
+ .map(createOrphanedNode);
101
+ }
102
+ function assertUniqueCaseIds(cases) {
103
+ const seenCaseIds = new Set();
104
+ for (const testCase of cases) {
105
+ const key = caseIdentityKey(testCase.id);
106
+ if (seenCaseIds.has(key)) {
107
+ throw new TypeError(`Duplicate test case identity: ${formatCaseId(testCase.id)}.`);
108
+ }
109
+ seenCaseIds.add(key);
110
+ }
111
+ }
112
+ function assertNonEmptyCases(cases) {
113
+ if (cases.length === 0) {
114
+ throw new TypeError('Test plan must contain at least one executable test case.');
115
+ }
116
+ }
117
+ export function createTestPlanFactory(owner, constructedNodes) {
118
+ return function createTestPlan(root) {
119
+ ensureOwnedTestRoot(root, owner, 'Test plan root must be an engine-created TestRoot value.', 'Test plan root must be created by the same engine instance.');
120
+ const collection = collectRoot(root);
121
+ const { cases: discoveredCases, reachedNodes } = collection;
122
+ assertNonEmptyCases(discoveredCases);
123
+ assertUniqueCaseIds(discoveredCases);
124
+ return {
125
+ cases: discoveredCases,
126
+ defined: constructedNodes.size,
127
+ discoveredCases,
128
+ orphans: collectOrphans(constructedNodes, reachedNodes),
129
+ root: {
130
+ metadata: root.metadata,
131
+ name: root.name
132
+ }
133
+ };
134
+ };
135
+ }
136
+ function ensureTestPlanFile(file, owner) {
137
+ if (file.file.trim().length === 0) {
138
+ throw new TypeError('Test file identity must not be empty.');
139
+ }
140
+ if (!isOwnedTestNode(file.testNode, owner)) {
141
+ throw new TypeError('Test file must provide a TestNode created by the selected engine.');
142
+ }
143
+ }
144
+ function countReachedNodes(reachedNodes) {
145
+ return reachedNodes.length;
146
+ }
147
+ export function createTestPlanFromTestFilesFactory(owner, createRoot) {
148
+ return function createTestPlanFromTestFiles(options) {
149
+ for (const file of options.files) {
150
+ ensureTestPlanFile(file, owner);
151
+ }
152
+ const root = createRoot({
153
+ children: options.files.map(function toTestNode(file) {
154
+ return file.testNode;
155
+ }),
156
+ metadata: options.root.metadata,
157
+ name: options.root.name
158
+ });
159
+ const { cases: discoveredCases, reachedNodes } = collectTestFiles(root, options.files);
160
+ assertNonEmptyCases(discoveredCases);
161
+ assertUniqueCaseIds(discoveredCases);
162
+ return {
163
+ cases: discoveredCases,
164
+ defined: countReachedNodes(reachedNodes),
165
+ discoveredCases,
166
+ orphans: [],
167
+ root: {
168
+ metadata: root.metadata,
169
+ name: root.name
170
+ }
171
+ };
172
+ };
173
+ }
174
+ //# sourceMappingURL=test-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-plan.js","sourceRoot":"","sources":["../../../../source/engine/test-plan.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -42,12 +42,16 @@
42
42
  "sideEffects": [
43
43
  "./assertion-protocol/assertion-reference.js",
44
44
  "./engine/execution.js",
45
+ "./engine/run-if-main.js",
46
+ "./packages/engine/engine.entry-point.js",
45
47
  "./reporters/line-reporter.js",
46
48
  "./run/command-line-command.js",
47
49
  "./run/command-line-runner.js",
50
+ "./run/default-run-engine.js",
48
51
  "./run/run-config.js",
49
- "./run/run.js"
52
+ "./run/run-orchestrator.js",
53
+ "./run/run-test-modules.js"
50
54
  ],
51
55
  "type": "module",
52
- "version": "0.0.9"
56
+ "version": "0.0.11"
53
57
  }
@@ -0,0 +1,67 @@
1
+ import { createWallClock } from '@enormora/wall-clock';
2
+ import { createEngine as createEngineInstance } from "../../engine/engine.js";
3
+ import { createExecute } from "../../engine/execution.js";
4
+ import { createReporterDispatcher } from "../../engine/reporter-dispatcher.js";
5
+ function readProcessExitCode() {
6
+ return process.exitCode;
7
+ }
8
+ function writeProcessExitCode(exitCode) {
9
+ process.exitCode = exitCode;
10
+ }
11
+ function writeStdoutLine(line) {
12
+ process.stdout.write(`${line}\n`);
13
+ }
14
+ function writeStderrLine(line) {
15
+ process.stderr.write(`${line}\n`);
16
+ }
17
+ export function createEngine() {
18
+ const wallClock = createWallClock();
19
+ return createEngineInstance({
20
+ execute: createExecute({
21
+ reporterDispatcher: createReporterDispatcher({
22
+ stderr: { writeLine: writeStderrLine },
23
+ stdout: { writeLine: writeStdoutLine },
24
+ wallClock
25
+ }),
26
+ wallClock
27
+ }),
28
+ nodeVersion: process.versions.node,
29
+ readExitCode: readProcessExitCode,
30
+ wallClock,
31
+ writeExitCode: writeProcessExitCode
32
+ });
33
+ }
34
+ const defaultEngine = createEngine();
35
+ export function createRoot(options) {
36
+ return defaultEngine.createRoot(options);
37
+ }
38
+ export function createSuite(options) {
39
+ return defaultEngine.createSuite(options);
40
+ }
41
+ export function createTable(options) {
42
+ return defaultEngine.createTable(options);
43
+ }
44
+ export function createTestCase(options) {
45
+ return defaultEngine.createTestCase(options);
46
+ }
47
+ export function createTestPlan(root) {
48
+ return defaultEngine.createTestPlan(root);
49
+ }
50
+ export function createTestPlanFromTestFiles(options) {
51
+ return defaultEngine.createTestPlanFromTestFiles(options);
52
+ }
53
+ export async function execute(testPlan, options) {
54
+ return await defaultEngine.execute(testPlan, options);
55
+ }
56
+ export async function runIfMain(meta, testNode, options) {
57
+ await defaultEngine.runIfMain(meta, testNode, options);
58
+ }
59
+ export function ownsTestNode(value) {
60
+ return defaultEngine.ownsTestNode(value);
61
+ }
62
+ export { formatCaseId } from "../../engine/identity.js";
63
+ export { ReporterSinkConflictError, validateReporterSinks } from "../../engine/reporter.js";
64
+ export { createPlainOutputRenderer } from "../../engine/reporter-output.js";
65
+ export { defaultSerializationBudget, serializeValue, serializeValueWithBudget } from "../../compare/serialized-value.js";
66
+ export { captureSourceLocation, unknownSourceLocation } from "../../assertion-protocol/source-location.js";
67
+ //# sourceMappingURL=engine.entry-point.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/engine/engine.entry-point.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,5 @@ export { commandLineRunner } from '../../run/command-line-runner.ts';
3
3
  export type { CommandLineBaselineCommands, CommandLineBenchmarkCommands, CommandLineCommand, CommandLineCommandContext, CommandLineExitCode, CommandLineRunnerResult, CommandLineRunTestsRequest } from '../../run/command-line-command.ts';
4
4
  export type { CommandLineRunner } from '../../run/command-line-runner.ts';
5
5
  export { defineConfig, loadRunConfig, RunConfigError } from '../../run/run-config.ts';
6
- export type { LoadedRunConfig, RunConfigLoadRequest, RunProjectConfig } from '../../run/run-config.ts';
6
+ export type { LoadedRunConfig, RunConfigLoadRequest, RunProjectConfig, RunProjectMeasuredMicrotestProfileConfig, RunProjectMicrotestProfileConfig, RunProjectProfilesConfig, RunProjectResourceBudgets, RunProjectUnmeasuredMicrotestProfileConfig } from '../../run/run-config.ts';
7
7
  //# sourceMappingURL=command-line.entry-point.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-line.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/run/command-line.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,iBAAiB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACR,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC7B,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACR,iBAAiB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACH,YAAY,EACZ,aAAa,EACb,cAAc,EACjB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACR,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EACnB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"command-line.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/run/command-line.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACH,iBAAiB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,YAAY,EACR,2BAA2B,EAC3B,4BAA4B,EAC5B,kBAAkB,EAClB,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC7B,MAAM,mCAAmC,CAAC;AAC3C,YAAY,EACR,iBAAiB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACH,YAAY,EACZ,aAAa,EACb,cAAc,EACjB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACR,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,wCAAwC,EACxC,gCAAgC,EAChC,wBAAwB,EACxB,yBAAyB,EACzB,0CAA0C,EAC7C,MAAM,yBAAyB,CAAC"}
@@ -1,3 +1,5 @@
1
- export { orchestrator, RunResolutionError } from '../../run/run.ts';
2
- export type { ResolvedRun, RunCaseFacts, RunCommand, RunConfig, RunDebugRequest, RunEnvironmentFacts, RunExecutionRequest, RunFacts, RunExecutionFacts, RunLoaderConfig, RunOrchestrator, RunReproducibilityFacts, RunRequest, RunResolutionErrorCode, RunSeed, RunSelection, RunShard, SerializedValue } from '../../run/run.ts';
1
+ export { orchestrator } from '../../run/run-orchestrator.ts';
2
+ export { RunResolutionError } from '../../run/run-errors.ts';
3
+ export type { RunResolutionErrorCode } from '../../run/run-errors.ts';
4
+ export type { ResolvedRun, ResourceBudgetOverrides, RunCaseFacts, RunCommand, RunConfig, RunDebugRequest, RunEnvironmentFacts, RunExecutionRequest, RunFacts, RunExecutionFacts, RunLoaderConfig, RunOrchestrator, RunProfilesConfig, RunResourceBudgets, RunResourceUsagePolicy, RunReproducibilityFacts, RunRequest, RunSeed, RunSelection, RunShard, SerializedValue } from '../../run/run.ts';
3
5
  //# sourceMappingURL=run.entry-point.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/run/run.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACpE,YAAY,EACR,WAAW,EACX,YAAY,EACZ,UAAU,EACV,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,uBAAuB,EACvB,UAAU,EACV,sBAAsB,EACtB,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,eAAe,EAClB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"run.entry-point.d.ts","sourceRoot":"","sources":["../../../../../source/packages/run/run.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,YAAY,EACR,WAAW,EACX,uBAAuB,EACvB,YAAY,EACZ,UAAU,EACV,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,EACV,OAAO,EACP,YAAY,EACZ,QAAQ,EACR,eAAe,EAClB,MAAM,kBAAkB,CAAC"}
@@ -1,2 +1,3 @@
1
- export { orchestrator, RunResolutionError } from "../../run/run.js";
1
+ export { orchestrator } from "../../run/run-orchestrator.js";
2
+ export { RunResolutionError } from "../../run/run-errors.js";
2
3
  //# sourceMappingURL=run.entry-point.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/run/run.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"run.entry-point.js","sourceRoot":"","sources":["../../../../../source/packages/run/run.entry-point.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC"}
package/readme.md CHANGED
@@ -7,6 +7,9 @@ Top-level API:
7
7
  - `RunCommand`
8
8
  - `RunRequest`
9
9
  - `RunFacts`
10
+ - `RunResourceBudgets`
11
+ - `RunResourceUsagePolicy`
12
+ - `ResourceBudgetOverrides`
10
13
  - `ResolvedRun`
11
14
  - `orchestrator.resolve(command)`
12
15
  - `orchestrator.run(command)`
@@ -32,11 +35,26 @@ Command-line business logic is exposed through `@overkill-dev/run/command-line`:
32
35
  - `defineConfig(config)`
33
36
  - `loadRunConfig({ cwd, configPath })`
34
37
 
35
- The current runner accepts an explicit `TestPlan` through `RunCommand`. File
36
- discovery, filtering, sharding, seeded ordering, resources, records, replay,
37
- and argv parsing are separate runner milestones. The non-`runTests` command
38
- methods are fixed first-party entrypoints and currently return argument errors
39
- until their command implementations land.
38
+ The current runner accepts explicit file paths through `RunRequest.paths`.
39
+ Each file is imported as a native Node ESM module and must export a named
40
+ `testNode` value created by the selected engine. `RunCommand.engine` may be
41
+ `null` to use the shared public engine, or a custom `Engine` for programmatic
42
+ callers that also create their test nodes with that engine.
43
+
44
+ General file discovery, filtering, sharding, seeded ordering, records, replay,
45
+ and argv parsing are separate runner milestones. Direct prebuilt `TestPlan`
46
+ execution belongs to `@overkill-dev/engine` through `execute(testPlan)`. The
47
+ non-`runTests` command methods are fixed first-party entrypoints and currently
48
+ return argument errors until their command implementations land.
49
+
50
+ Resource usage measurement is explicit. Project config can enable it under
51
+ `profiles.microtest.measureResourceUsage`; `RunRequest.measureResourceUsage`
52
+ can override that policy for one run. `resourceBudgets` are thresholds and
53
+ require measurement, while `RunRequest.resourceBudgetOverrides` changes
54
+ individual thresholds for one run. Budgeted execution is rejected until
55
+ supervised resource enforcement lands. Textual parsing for
56
+ `--measure-resource-usage` and `--resource-budget <name=value>` belongs to the
57
+ later command-line implementation milestone.
40
58
 
41
59
  Config loading is common command-line infrastructure, not plugin discovery.
42
60
  The command-line runner loads native Node config files, selects the default
@@ -1,6 +1,5 @@
1
1
  import type { RunResult } from '../engine/run-result.ts';
2
- import type { TestPlan } from '../engine/test-plan.ts';
3
- import { type RunRequest } from './run.ts';
2
+ import type { RunRequest } from './run.ts';
4
3
  import { type RunConfigLoadRequest } from './run-config.ts';
5
4
  export declare const commandLineExitCodes: Readonly<{
6
5
  argumentOrConfig: 3;
@@ -14,7 +13,6 @@ export declare const commandLineExitCodes: Readonly<{
14
13
  export type CommandLineExitCode = (typeof commandLineExitCodes)[keyof typeof commandLineExitCodes];
15
14
  export type CommandLineRunTestsRequest = RunConfigLoadRequest & {
16
15
  readonly request: RunRequest;
17
- readonly testPlan: TestPlan;
18
16
  };
19
17
  export type CommandLineCommandContext = RunConfigLoadRequest & {
20
18
  readonly arguments: readonly string[];
@@ -1 +1 @@
1
- {"version":3,"file":"command-line-command.d.ts","sourceRoot":"","sources":["../../../../source/run/command-line-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,yBAAyB,CAAC;AAEtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,eAAO,MAAM,oBAAoB;;;;;;;;EAQ/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEnG,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,GAAG;IAC5D,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,oBAAoB,GAAG;IAC3D,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAE1G,MAAM,MAAM,2BAA2B,GAAG;IACtC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACvC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;CAC9C,CAAC;AAsEF,wBAAgB,yBAAyB,CACrC,MAAM,EAAE,SAAS,EACjB,sBAAsB,EAAE,OAAO,GAChC,SAAS,MAAM,EAAE,CAOnB;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,mBAAmB,CAchF;AAcD,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAgB/F"}
1
+ {"version":3,"file":"command-line-command.d.ts","sourceRoot":"","sources":["../../../../source/run/command-line-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,yBAAyB,CAAC;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAkB,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE5E,eAAO,MAAM,oBAAoB;;;;;;;;EAQ/B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEnG,MAAM,MAAM,0BAA0B,GAAG,oBAAoB,GAAG;IAC5D,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,oBAAoB,GAAG;IAC3D,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,mBAAmB,EAAE,SAAS,MAAM,EAAE,CAAC;IAChD,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,yBAAyB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAE1G,MAAM,MAAM,2BAA2B,GAAG;IACtC,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACvC,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;CAC9C,CAAC;AAsEF,wBAAgB,yBAAyB,CACrC,MAAM,EAAE,SAAS,EACjB,sBAAsB,EAAE,OAAO,GAChC,SAAS,MAAM,EAAE,CAOnB;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,mBAAmB,CAchF;AAcD,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAoB/F"}
@@ -1,5 +1,5 @@
1
1
  import { ReporterSinkConflictError } from "../engine/reporter.js";
2
- import { RunResolutionError } from "./run.js";
2
+ import { RunResolutionError } from "./run-errors.js";
3
3
  import { RunConfigError } from "./run-config.js";
4
4
  export const commandLineExitCodes = Object.freeze({
5
5
  argumentOrConfig: 3,
@@ -97,6 +97,9 @@ export function createCommandLineErrorResultFromUnknown(error) {
97
97
  return createCommandLineErrorResult(commandLineExitCodes.argumentOrConfig, 'configuration error', error);
98
98
  }
99
99
  if (classifiedError instanceof RunResolutionError) {
100
+ if (classifiedError.code() === 'no-tests-collected') {
101
+ return createCommandLineErrorResult(commandLineExitCodes.noTestsCollected, 'no tests collected', error);
102
+ }
100
103
  return createCommandLineErrorResult(commandLineExitCodes.argumentOrConfig, 'argument error', error);
101
104
  }
102
105
  return createCommandLineErrorResult(commandLineExitCodes.internalCrash, 'internal error', error);
@@ -1 +1 @@
1
- {"version":3,"file":"command-line-command.js","sourceRoot":"","sources":["../../../../source/run/command-line-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command-line-command.js","sourceRoot":"","sources":["../../../../source/run/command-line-command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAA6B,MAAM,iBAAiB,CAAC;AAE5E,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC9C,gBAAgB,EAAE,CAAC;IACnB,aAAa,EAAE,EAAE;IACjB,gBAAgB,EAAE,CAAC;IACnB,IAAI,EAAE,CAAC;IACP,kBAAkB,EAAE,CAAC;IACrB,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,CAAC;CACjB,CAAC,CAAC;AAkCH,SAAS,iBAAiB,CAAC,KAAkB;IACzC,OAAO,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC;AACrD,CAAC;AAED,SAAS,WAAW,CAAC,KAAc;IAC/B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,OAAO,CAAC;IACzB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACvC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACjC,OAAO,mBAAmB,CAAC,KAAK,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC;QAC/B,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ;QACjC,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAqB;IAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAChC,IAAI,CAAC,CAAC,KAAK,YAAY,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC;AAC9D,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC3C,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,4BAA4B,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAa,EAAE,KAAc;IACzD,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,CAAE,YAAY,KAAK,KAAK,WAAW,CAAC,OAAO,CAAC,EAAE,CAAE,CAAC;IAErE,IAAI,CAAC,CAAC,KAAK,YAAY,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,WAAW,CAAC;IACvB,CAAC;IAED,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,OAAO;QACH,GAAG,WAAW;QACd,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,oBAAoB,CAAC,KAAK;YAClE,IAAI,CAAC,cAAc,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBACvC,cAAc,GAAG,IAAI,CAAC;gBAEtB,OAAO,EAAE,CAAC;YACd,CAAC;YAED,OAAO,CAAE,uBAAuB,CAAC,KAAK,CAAC,CAAE,CAAC;QAC9C,CAAC,CAAC;KACL,CAAC;AACN,CAAC;AAED,MAAM,UAAU,yBAAyB,CACrC,MAAiB,EACjB,sBAA+B;IAE/B,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,eAAe,CAAC,KAAK;QAC5E,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;IAEvF,OAAO,gBAAgB,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACvD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,oBAAoB,CAAC,WAAW,CAAC;IAC5C,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,oBAAoB,CAAC,gBAAgB,CAAC;IACjD,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,oBAAoB,CAAC,WAAW,CAAC;IAC5C,CAAC;IAED,OAAO,oBAAoB,CAAC,IAAI,CAAC;AACrC,CAAC;AAED,SAAS,4BAA4B,CACjC,QAA6B,EAC7B,KAAa,EACb,KAAc;IAEd,OAAO;QACH,QAAQ;QACR,mBAAmB,EAAE,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC;QACzD,SAAS,EAAE,IAAI;KAClB,CAAC;AACN,CAAC;AAED,MAAM,UAAU,uCAAuC,CAAC,KAAc;IAClE,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAE5C,IAAI,eAAe,YAAY,cAAc,EAAE,CAAC;QAC5C,OAAO,4BAA4B,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAC7G,CAAC;IAED,IAAI,eAAe,YAAY,yBAAyB,EAAE,CAAC;QACvD,OAAO,4BAA4B,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;IAC7G,CAAC;IAED,IAAI,eAAe,YAAY,kBAAkB,EAAE,CAAC;QAChD,IAAI,eAAe,CAAC,IAAI,EAAE,KAAK,oBAAoB,EAAE,CAAC;YAClD,OAAO,4BAA4B,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAC5G,CAAC;QAED,OAAO,4BAA4B,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACxG,CAAC;IAED,OAAO,4BAA4B,CAAC,oBAAoB,CAAC,aAAa,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;AACrG,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { Reporter } from '../engine/reporter.ts';
2
- import { type RunOrchestrator } from './run.ts';
2
+ import type { RunOrchestrator } from './run.ts';
3
3
  import { type LoadedRunConfig, type RunConfigLoadRequest } from './run-config.ts';
4
4
  import { type CommandLineBaselineCommands, type CommandLineBenchmarkCommands, type CommandLineCommand, type CommandLineRunTestsRequest, type CommandLineRunnerResult as CommandLineRunnerResultShape } from './command-line-command.ts';
5
5
  import { type CommandLineCommandLoaders } from './command-line-command-namespace.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"command-line-runner.d.ts","sourceRoot":"","sources":["../../../../source/run/command-line-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAIH,KAAK,eAAe,EACvB,MAAM,UAAU,CAAC;AAClB,OAAO,EAEH,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIH,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,IAAI,4BAA4B,EAC/D,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEH,KAAK,yBAAyB,EACjC,MAAM,qCAAqC,CAAC;AAO7C,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAChG,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AAEnE,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,GAAG;IACpE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACpF,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;CAC1C,CAAC;AAkEF,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,6BAA6B,GAAG,iBAAiB,CAkBtG;AAQD,eAAO,MAAM,iBAAiB,EAAE,iBAM9B,CAAC"}
1
+ {"version":3,"file":"command-line-runner.d.ts","sourceRoot":"","sources":["../../../../source/run/command-line-runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,KAAK,EAAyB,eAAe,EAAE,MAAM,UAAU,CAAC;AAEvE,OAAO,EAEH,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIH,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,EACjC,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,uBAAuB,IAAI,4BAA4B,EAC/D,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEH,KAAK,yBAAyB,EACjC,MAAM,qCAAqC,CAAC;AAO7C,MAAM,MAAM,iBAAiB,GAAG;IAC5B,QAAQ,CAAC,QAAQ,EAAE,2BAA2B,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAChG,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG,4BAA4B,CAAC;AAEnE,MAAM,MAAM,6BAA6B,GAAG,yBAAyB,GAAG;IACpE,QAAQ,CAAC,qBAAqB,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACpF,QAAQ,CAAC,YAAY,EAAE,eAAe,CAAC;CAC1C,CAAC;AAoEF,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,6BAA6B,GAAG,iBAAiB,CAkBtG;AAQD,eAAO,MAAM,iBAAiB,EAAE,iBAM9B,CAAC"}