@overkill-dev/engine 0.0.14 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,9 +7,13 @@ type IndexPathSegment = {
7
7
  readonly index: number;
8
8
  readonly kind: 'index';
9
9
  };
10
- type MapPathSegment = {
10
+ type MapKeyPathSegment = {
11
11
  readonly key: SerializedValue;
12
- readonly kind: 'map-key' | 'map-value';
12
+ readonly kind: 'map-key';
13
+ };
14
+ type MapValuePathSegment = {
15
+ readonly key: SerializedValue;
16
+ readonly kind: 'map-value';
13
17
  };
14
18
  type PropertyPathSegment = {
15
19
  readonly key: SerializedPropertyKey;
@@ -20,6 +24,7 @@ type SetValuePathSegment = {
20
24
  readonly value: SerializedValue;
21
25
  };
22
26
  type IndexedPathSegment = BytePathSegment | IndexPathSegment;
27
+ type MapPathSegment = MapKeyPathSegment | MapValuePathSegment;
23
28
  type KeyedPathSegment = MapPathSegment | PropertyPathSegment | SetValuePathSegment;
24
29
  export type DiffPathSegment = IndexedPathSegment | KeyedPathSegment;
25
30
  type ReplaceOperation = {
@@ -1 +1 @@
1
- {"version":3,"file":"diff-shape.d.ts","sourceRoot":"","sources":["../../../../source/diff/diff-shape.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diff-shape.d.ts","sourceRoot":"","sources":["../../../../source/diff/diff-shape.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,242 @@
1
+ import { assertionPasses } from "../assertion-protocol/evaluation.js";
2
+ export class RequireFailedSignalError extends Error {
3
+ constructor() {
4
+ super('Requirement failed.');
5
+ this.name = 'RequireFailedSignalError';
6
+ }
7
+ }
8
+ export class TestContractSignalError extends Error {
9
+ contractFailure;
10
+ constructor(failure, options) {
11
+ super(failure.summary, options);
12
+ this.name = 'TestContractSignalError';
13
+ this.contractFailure = failure;
14
+ }
15
+ failure() {
16
+ return this.contractFailure;
17
+ }
18
+ }
19
+ export function assertNonEmptyItems(items, message) {
20
+ if (items.length === 0) {
21
+ throw new TypeError(message);
22
+ }
23
+ }
24
+ function createNoAssertionsFailure() {
25
+ return {
26
+ actual: 0,
27
+ code: 'no-assertions',
28
+ expected: 'at least one assertion',
29
+ kind: 'test-contract',
30
+ summary: 'Expected at least one assertion.'
31
+ };
32
+ }
33
+ function createInvalidPlanFailure(actual) {
34
+ return {
35
+ actual,
36
+ code: 'invalid-plan',
37
+ expected: 'positive integer plan before assertions',
38
+ kind: 'test-contract',
39
+ summary: 'Assertion plan must be a positive integer before assertions.'
40
+ };
41
+ }
42
+ function createPlanMismatchFailure(actual, expected) {
43
+ return {
44
+ actual,
45
+ code: 'plan-mismatch',
46
+ expected: String(expected),
47
+ kind: 'test-contract',
48
+ summary: 'Assertion plan count did not match.'
49
+ };
50
+ }
51
+ function createDeadBuilderAssertionFailure() {
52
+ return {
53
+ actual: 'missing recorded builder assertion',
54
+ code: 'dead-builder-assertion',
55
+ expected: 'returned assertions include every recorded builder assertion',
56
+ kind: 'test-contract',
57
+ summary: 'Returned assertions must include every recorded builder assertion.'
58
+ };
59
+ }
60
+ function createPendingAsyncAssertionFailure() {
61
+ return {
62
+ actual: 'pending async assertion',
63
+ code: 'pending-async-assertion',
64
+ expected: 'all async assertions awaited before collect',
65
+ kind: 'test-contract',
66
+ summary: 'Async assertion must be awaited before scope.assert.collect().'
67
+ };
68
+ }
69
+ export function isTestContractFailure(value) {
70
+ return !Array.isArray(value);
71
+ }
72
+ function isAssertionNode(assertionResult) {
73
+ return !Array.isArray(assertionResult);
74
+ }
75
+ function normalizeAssertionResult(assertionResult) {
76
+ const assertions = isAssertionNode(assertionResult) ? [assertionResult] : assertionResult;
77
+ assertNonEmptyItems(assertions, 'Expected returned assertions to be non-empty.');
78
+ return assertions;
79
+ }
80
+ function builderAssertionsInReturnedOrder(builderAssertions, returnedAssertions) {
81
+ let returnedIndex = 0;
82
+ return builderAssertions.every(function builderAssertionReturned(builderAssertion) {
83
+ while (returnedIndex < returnedAssertions.length) {
84
+ const returnedAssertion = returnedAssertions[returnedIndex];
85
+ returnedIndex += 1;
86
+ if (returnedAssertion === builderAssertion) {
87
+ return true;
88
+ }
89
+ }
90
+ return false;
91
+ });
92
+ }
93
+ function recordContainsBuilderAssertion(recorded, builderAssertion) {
94
+ return recorded?.builderAssertion === builderAssertion;
95
+ }
96
+ function requireAssertionFromRecord(recorded) {
97
+ if (recorded?.assertion?.source === 'require') {
98
+ return recorded.assertion;
99
+ }
100
+ return null;
101
+ }
102
+ function requireAssertionsFromRecord(recorded) {
103
+ const requireAssertion = requireAssertionFromRecord(recorded);
104
+ if (requireAssertion !== null) {
105
+ return [requireAssertion];
106
+ }
107
+ return [];
108
+ }
109
+ function appendRecordedRequiresBeforeBuilderAssertion(recordedAssertions, recordIndex, builderAssertion) {
110
+ let nextRecordIndex = recordIndex;
111
+ const assertions = [];
112
+ while (nextRecordIndex < recordedAssertions.length) {
113
+ const recorded = recordedAssertions[nextRecordIndex];
114
+ if (recordContainsBuilderAssertion(recorded, builderAssertion)) {
115
+ return { assertions, recordIndex: nextRecordIndex + 1 };
116
+ }
117
+ assertions.push(...requireAssertionsFromRecord(recorded));
118
+ nextRecordIndex += 1;
119
+ }
120
+ return { assertions, recordIndex: nextRecordIndex };
121
+ }
122
+ function appendRemainingRecordedRequires(recordedAssertions, recordIndex) {
123
+ const assertions = [];
124
+ for (const recorded of recordedAssertions.slice(recordIndex)) {
125
+ if (recorded.assertion?.source === 'require') {
126
+ assertions.push(recorded.assertion);
127
+ }
128
+ }
129
+ return assertions;
130
+ }
131
+ function mergeRecordedRequires(recordedAssertions, returnedAssertions) {
132
+ const mergedAssertions = [];
133
+ let recordIndex = 0;
134
+ for (const returnedAssertion of returnedAssertions) {
135
+ const step = appendRecordedRequiresBeforeBuilderAssertion(recordedAssertions, recordIndex, returnedAssertion);
136
+ recordIndex = step.recordIndex;
137
+ mergedAssertions.push(...step.assertions, returnedAssertion);
138
+ }
139
+ mergedAssertions.push(...appendRemainingRecordedRequires(recordedAssertions, recordIndex));
140
+ return mergedAssertions;
141
+ }
142
+ export function createAssertionRecorder() {
143
+ const builderAssertions = [];
144
+ const recordedAssertions = [];
145
+ let failedRequireIndex = null;
146
+ let plannedCount = null;
147
+ function activeRecords() {
148
+ if (failedRequireIndex === null) {
149
+ return recordedAssertions;
150
+ }
151
+ return recordedAssertions.slice(0, failedRequireIndex + 1);
152
+ }
153
+ function pendingAssertionExists() {
154
+ return builderAssertions.includes(null);
155
+ }
156
+ function ensurePlanAllowed(count) {
157
+ if (!Number.isSafeInteger(count) || count <= 0 || plannedCount !== null || recordedAssertions.length > 0) {
158
+ throw new TestContractSignalError(createInvalidPlanFailure(count), undefined);
159
+ }
160
+ }
161
+ function collect() {
162
+ if (builderAssertions.length === 0) {
163
+ throw new TestContractSignalError(createNoAssertionsFailure(), undefined);
164
+ }
165
+ if (pendingAssertionExists()) {
166
+ throw new TestContractSignalError(createPendingAsyncAssertionFailure(), undefined);
167
+ }
168
+ const resolvedAssertions = builderAssertions.filter(function resolvedAssertion(assertion) {
169
+ return assertion !== null;
170
+ });
171
+ assertNonEmptyItems(resolvedAssertions, 'Expected builder assertions to be non-empty.');
172
+ return resolvedAssertions;
173
+ }
174
+ function validateReturnedAssertions(assertions) {
175
+ if (pendingAssertionExists()) {
176
+ return createPendingAsyncAssertionFailure();
177
+ }
178
+ const resolvedAssertions = builderAssertions.filter(function resolvedAssertion(assertion) {
179
+ return assertion !== null;
180
+ });
181
+ if (!builderAssertionsInReturnedOrder(resolvedAssertions, assertions)) {
182
+ return createDeadBuilderAssertionFailure();
183
+ }
184
+ return null;
185
+ }
186
+ return {
187
+ activeRecordedAssertions() {
188
+ return activeRecords().flatMap(function toAssertion(recorded) {
189
+ return recorded.assertion === null ? [] : [recorded.assertion];
190
+ });
191
+ },
192
+ collect,
193
+ failContract(failure) {
194
+ throw new TestContractSignalError(failure, undefined);
195
+ },
196
+ plan(count) {
197
+ ensurePlanAllowed(count);
198
+ plannedCount = count;
199
+ },
200
+ recordAssert(assertion) {
201
+ builderAssertions.push(assertion);
202
+ recordedAssertions.push({ assertion, builderAssertion: assertion });
203
+ },
204
+ recordPendingAssert() {
205
+ const builderIndex = builderAssertions.length;
206
+ const recordIndex = recordedAssertions.length;
207
+ builderAssertions.push(null);
208
+ recordedAssertions.push({ assertion: null, builderAssertion: null });
209
+ return {
210
+ resolve(assertion) {
211
+ builderAssertions[builderIndex] = assertion;
212
+ recordedAssertions[recordIndex] = { assertion, builderAssertion: assertion };
213
+ }
214
+ };
215
+ },
216
+ recordRequire(assertion) {
217
+ recordedAssertions.push({ assertion, builderAssertion: null });
218
+ if (!assertionPasses(assertion)) {
219
+ failedRequireIndex = recordedAssertions.length - 1;
220
+ throw new RequireFailedSignalError();
221
+ }
222
+ },
223
+ requireFailed() {
224
+ return failedRequireIndex !== null;
225
+ },
226
+ returnedAssertions(assertionResult) {
227
+ const assertions = normalizeAssertionResult(assertionResult);
228
+ const contractFailure = validateReturnedAssertions(assertions);
229
+ if (contractFailure !== null) {
230
+ return contractFailure;
231
+ }
232
+ return mergeRecordedRequires(activeRecords(), assertions);
233
+ },
234
+ validateAssertionCount(reachedAssertionCount) {
235
+ if (plannedCount !== null && plannedCount !== reachedAssertionCount) {
236
+ return createPlanMismatchFailure(reachedAssertionCount, plannedCount);
237
+ }
238
+ return null;
239
+ }
240
+ };
241
+ }
242
+ //# sourceMappingURL=assertion-recorder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assertion-recorder.js","sourceRoot":"","sources":["../../../../source/engine/assertion-recorder.ts"],"names":[],"mappings":"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"}
@@ -1,248 +1,9 @@
1
- import { assertionPasses, evaluateAssertion, invalidDeepAssertionOperand } from "../assertion-protocol/evaluation.js";
1
+ import { evaluateAssertion, invalidDeepAssertionOperand } from "../assertion-protocol/evaluation.js";
2
2
  import { createThrownErrorRecord } from "../assertion-protocol/thrown-error-record.js";
3
+ import { assertNonEmptyItems, createAssertionRecorder, isTestContractFailure, RequireFailedSignalError, TestContractSignalError } from "./assertion-recorder.js";
3
4
  import { createRecordingAssertFacade } from "./assertion-facade.js";
4
5
  import { createRecordingRequireFacade } from "./require-assertion-facade.js";
5
6
  import { invalidDeepAssertionOperandFailure, verdictFromOutcome } from "./run-result.js";
6
- class RequireFailedSignalError extends Error {
7
- constructor() {
8
- super('Requirement failed.');
9
- this.name = 'RequireFailedSignalError';
10
- }
11
- }
12
- class TestContractSignalError extends Error {
13
- contractFailure;
14
- constructor(failure, options) {
15
- super(failure.summary, options);
16
- this.name = 'TestContractSignalError';
17
- this.contractFailure = failure;
18
- }
19
- failure() {
20
- return this.contractFailure;
21
- }
22
- }
23
- function assertNonEmptyItems(items, message) {
24
- if (items.length === 0) {
25
- throw new TypeError(message);
26
- }
27
- }
28
- function createNoAssertionsFailure() {
29
- return {
30
- actual: 0,
31
- code: 'no-assertions',
32
- expected: 'at least one assertion',
33
- kind: 'test-contract',
34
- summary: 'Expected at least one assertion.'
35
- };
36
- }
37
- function createInvalidPlanFailure(actual) {
38
- return {
39
- actual,
40
- code: 'invalid-plan',
41
- expected: 'positive integer plan before assertions',
42
- kind: 'test-contract',
43
- summary: 'Assertion plan must be a positive integer before assertions.'
44
- };
45
- }
46
- function createPlanMismatchFailure(actual, expected) {
47
- return {
48
- actual,
49
- code: 'plan-mismatch',
50
- expected: String(expected),
51
- kind: 'test-contract',
52
- summary: 'Assertion plan count did not match.'
53
- };
54
- }
55
- function createDeadBuilderAssertionFailure() {
56
- return {
57
- actual: 'missing recorded builder assertion',
58
- code: 'dead-builder-assertion',
59
- expected: 'returned assertions include every recorded builder assertion',
60
- kind: 'test-contract',
61
- summary: 'Returned assertions must include every recorded builder assertion.'
62
- };
63
- }
64
- function createPendingAsyncAssertionFailure() {
65
- return {
66
- actual: 'pending async assertion',
67
- code: 'pending-async-assertion',
68
- expected: 'all async assertions awaited before collect',
69
- kind: 'test-contract',
70
- summary: 'Async assertion must be awaited before scope.assert.collect().'
71
- };
72
- }
73
- function isTestContractFailure(value) {
74
- return !Array.isArray(value);
75
- }
76
- function isAssertionNode(assertionResult) {
77
- return !Array.isArray(assertionResult);
78
- }
79
- function normalizeAssertionResult(assertionResult) {
80
- const assertions = isAssertionNode(assertionResult) ? [assertionResult] : assertionResult;
81
- assertNonEmptyItems(assertions, 'Expected returned assertions to be non-empty.');
82
- return assertions;
83
- }
84
- function builderAssertionsInReturnedOrder(builderAssertions, returnedAssertions) {
85
- let returnedIndex = 0;
86
- return builderAssertions.every(function builderAssertionReturned(builderAssertion) {
87
- while (returnedIndex < returnedAssertions.length) {
88
- const returnedAssertion = returnedAssertions[returnedIndex];
89
- returnedIndex += 1;
90
- if (returnedAssertion === builderAssertion) {
91
- return true;
92
- }
93
- }
94
- return false;
95
- });
96
- }
97
- function recordContainsBuilderAssertion(recorded, builderAssertion) {
98
- return recorded?.builderAssertion === builderAssertion;
99
- }
100
- function requireAssertionFromRecord(recorded) {
101
- if (recorded?.assertion?.source === 'require') {
102
- return recorded.assertion;
103
- }
104
- return null;
105
- }
106
- function requireAssertionsFromRecord(recorded) {
107
- const requireAssertion = requireAssertionFromRecord(recorded);
108
- if (requireAssertion !== null) {
109
- return [requireAssertion];
110
- }
111
- return [];
112
- }
113
- function appendRecordedRequiresBeforeBuilderAssertion(recordedAssertions, recordIndex, builderAssertion) {
114
- let nextRecordIndex = recordIndex;
115
- const assertions = [];
116
- while (nextRecordIndex < recordedAssertions.length) {
117
- const recorded = recordedAssertions[nextRecordIndex];
118
- if (recordContainsBuilderAssertion(recorded, builderAssertion)) {
119
- return { assertions, recordIndex: nextRecordIndex + 1 };
120
- }
121
- assertions.push(...requireAssertionsFromRecord(recorded));
122
- nextRecordIndex += 1;
123
- }
124
- return { assertions, recordIndex: nextRecordIndex };
125
- }
126
- function appendRemainingRecordedRequires(recordedAssertions, recordIndex) {
127
- const assertions = [];
128
- for (const recorded of recordedAssertions.slice(recordIndex)) {
129
- if (recorded.assertion?.source === 'require') {
130
- assertions.push(recorded.assertion);
131
- }
132
- }
133
- return assertions;
134
- }
135
- function mergeRecordedRequires(recordedAssertions, returnedAssertions) {
136
- const mergedAssertions = [];
137
- let recordIndex = 0;
138
- for (const returnedAssertion of returnedAssertions) {
139
- const step = appendRecordedRequiresBeforeBuilderAssertion(recordedAssertions, recordIndex, returnedAssertion);
140
- recordIndex = step.recordIndex;
141
- mergedAssertions.push(...step.assertions, returnedAssertion);
142
- }
143
- mergedAssertions.push(...appendRemainingRecordedRequires(recordedAssertions, recordIndex));
144
- return mergedAssertions;
145
- }
146
- function createAssertionRecorder() {
147
- const builderAssertions = [];
148
- const recordedAssertions = [];
149
- let failedRequireIndex = null;
150
- let plannedCount = null;
151
- function activeRecords() {
152
- if (failedRequireIndex === null) {
153
- return recordedAssertions;
154
- }
155
- return recordedAssertions.slice(0, failedRequireIndex + 1);
156
- }
157
- function pendingAssertionExists() {
158
- return builderAssertions.includes(null);
159
- }
160
- function ensurePlanAllowed(count) {
161
- if (!Number.isSafeInteger(count) || count <= 0 || plannedCount !== null || recordedAssertions.length > 0) {
162
- throw new TestContractSignalError(createInvalidPlanFailure(count), undefined);
163
- }
164
- }
165
- function collect() {
166
- if (builderAssertions.length === 0) {
167
- throw new TestContractSignalError(createNoAssertionsFailure(), undefined);
168
- }
169
- if (pendingAssertionExists()) {
170
- throw new TestContractSignalError(createPendingAsyncAssertionFailure(), undefined);
171
- }
172
- const resolvedAssertions = builderAssertions.filter(function resolvedAssertion(assertion) {
173
- return assertion !== null;
174
- });
175
- assertNonEmptyItems(resolvedAssertions, 'Expected builder assertions to be non-empty.');
176
- return resolvedAssertions;
177
- }
178
- function validateReturnedAssertions(assertions) {
179
- if (pendingAssertionExists()) {
180
- return createPendingAsyncAssertionFailure();
181
- }
182
- const resolvedAssertions = builderAssertions.filter(function resolvedAssertion(assertion) {
183
- return assertion !== null;
184
- });
185
- if (!builderAssertionsInReturnedOrder(resolvedAssertions, assertions)) {
186
- return createDeadBuilderAssertionFailure();
187
- }
188
- return null;
189
- }
190
- return {
191
- activeRecordedAssertions() {
192
- return activeRecords().flatMap(function toAssertion(recorded) {
193
- return recorded.assertion === null ? [] : [recorded.assertion];
194
- });
195
- },
196
- collect,
197
- failContract(failure) {
198
- throw new TestContractSignalError(failure, undefined);
199
- },
200
- plan(count) {
201
- ensurePlanAllowed(count);
202
- plannedCount = count;
203
- },
204
- recordAssert(assertion) {
205
- builderAssertions.push(assertion);
206
- recordedAssertions.push({ assertion, builderAssertion: assertion });
207
- },
208
- recordPendingAssert() {
209
- const builderIndex = builderAssertions.length;
210
- const recordIndex = recordedAssertions.length;
211
- builderAssertions.push(null);
212
- recordedAssertions.push({ assertion: null, builderAssertion: null });
213
- return {
214
- resolve(assertion) {
215
- builderAssertions[builderIndex] = assertion;
216
- recordedAssertions[recordIndex] = { assertion, builderAssertion: assertion };
217
- }
218
- };
219
- },
220
- recordRequire(assertion) {
221
- recordedAssertions.push({ assertion, builderAssertion: null });
222
- if (!assertionPasses(assertion)) {
223
- failedRequireIndex = recordedAssertions.length - 1;
224
- throw new RequireFailedSignalError();
225
- }
226
- },
227
- requireFailed() {
228
- return failedRequireIndex !== null;
229
- },
230
- returnedAssertions(assertionResult) {
231
- const assertions = normalizeAssertionResult(assertionResult);
232
- const contractFailure = validateReturnedAssertions(assertions);
233
- if (contractFailure !== null) {
234
- return contractFailure;
235
- }
236
- return mergeRecordedRequires(activeRecords(), assertions);
237
- },
238
- validateAssertionCount(reachedAssertionCount) {
239
- if (plannedCount !== null && plannedCount !== reachedAssertionCount) {
240
- return createPlanMismatchFailure(reachedAssertionCount, plannedCount);
241
- }
242
- return null;
243
- }
244
- };
245
- }
246
7
  function evaluatedAssertionFailure(assertions) {
247
8
  const checks = assertions.flatMap(function evaluateRecordedAssertion(assertion, index) {
248
9
  const failedCheck = evaluateAssertion(assertion, index + 1);
@@ -269,7 +30,7 @@ function assertionContractFailure(assertions) {
269
30
  function assertionFailure(assertions) {
270
31
  return assertionContractFailure(assertions) ?? evaluatedAssertionFailure(assertions);
271
32
  }
272
- function createTestScope(recorder) {
33
+ function createTestScope(recorder, signal) {
273
34
  const assertContext = Object.assign(createRecordingAssertFacade({
274
35
  failContract(failure) {
275
36
  return recorder.failContract(failure);
@@ -297,7 +58,8 @@ function createTestScope(recorder) {
297
58
  recordRequire(assertion) {
298
59
  recorder.recordRequire(assertion);
299
60
  }
300
- }, null)
61
+ }, null),
62
+ signal
301
63
  };
302
64
  }
303
65
  function requireFailedBody(recorder) {
@@ -346,9 +108,9 @@ function failedBody(recorder, error) {
346
108
  ? contractFailedBody(recorder, error.failure())
347
109
  : bodyErrorResult(recorder, error);
348
110
  }
349
- async function runCaseBody(testCase, recorder) {
111
+ async function runCaseBody(testCase, recorder, options) {
350
112
  try {
351
- return completedBody(recorder, await testCase.body(createTestScope(recorder)));
113
+ return completedBody(recorder, await testCase.body(createTestScope(recorder, options.signal)));
352
114
  }
353
115
  catch (error) {
354
116
  return failedBody(recorder, error);
@@ -390,10 +152,32 @@ function createOutcome(recorder, executedBody) {
390
152
  kind: 'fail'
391
153
  };
392
154
  }
393
- export async function runTestCase(testCase, wallClock) {
155
+ function defaultRunTestCaseOptions() {
156
+ const controller = new AbortController();
157
+ return {
158
+ signal: controller.signal
159
+ };
160
+ }
161
+ export function timeoutFailure(deadlineMilliseconds, elapsedMilliseconds) {
162
+ return {
163
+ deadlineMilliseconds,
164
+ elapsedMilliseconds,
165
+ kind: 'timeout'
166
+ };
167
+ }
168
+ export function invalidTimeoutMetadataFailure(actual, expected) {
169
+ return {
170
+ actual,
171
+ code: 'invalid-timeout-metadata',
172
+ expected,
173
+ kind: 'test-contract',
174
+ summary: 'Timeout metadata must be a positive safe integer within the hard timeout.'
175
+ };
176
+ }
177
+ export async function runTestCase(testCase, wallClock, options = defaultRunTestCaseOptions()) {
394
178
  const recorder = createAssertionRecorder();
395
179
  const startedAt = wallClock.currentTimestampInMilliseconds;
396
- const executedBody = await runCaseBody(testCase, recorder);
180
+ const executedBody = await runCaseBody(testCase, recorder, options);
397
181
  const outcome = createOutcome(recorder, executedBody);
398
182
  const verdict = verdictFromOutcome(outcome);
399
183
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"case-execution.js","sourceRoot":"","sources":["../../../../source/engine/case-execution.ts"],"names":[],"mappings":"AACA,OAAO,EACH,eAAe,EACf,iBAAiB,EACjB,2BAA2B,EAC9B,MAAM,qCAAqC,CAAC;AAQ7C,OAAO,EAAE,uBAAuB,EAA0B,MAAM,8CAA8C,CAAC;AAC/G,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAKH,kCAAkC,EAClC,kBAAkB,EACrB,MAAM,iBAAiB,CAAC;AA6CzB,MAAM,wBAAyB,SAAQ,KAAK;IACxC;QACI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;IAC3C,CAAC;CACJ;AAED,MAAM,uBAAwB,SAAQ,KAAK;IACtB,eAAe,CAAsB;IAEtD,YAAmB,OAA4B,EAAE,OAA2C;QACxF,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;IACnC,CAAC;IAEM,OAAO;QACV,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;CACJ;AAED,SAAS,mBAAmB,CACxB,KAAsB,EACtB,OAAe;IAEf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;AACL,CAAC;AAED,SAAS,yBAAyB;IAC9B,OAAO;QACH,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,wBAAwB;QAClC,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,kCAAkC;KAC9C,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAe;IAC7C,OAAO;QACH,MAAM;QACN,IAAI,EAAE,cAAc;QACpB,QAAQ,EAAE,yCAAyC;QACnD,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,8DAA8D;KAC1E,CAAC;AACN,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc,EAAE,QAAgB;IAC/D,OAAO;QACH,MAAM;QACN,IAAI,EAAE,eAAe;QACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC1B,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,qCAAqC;KACjD,CAAC;AACN,CAAC;AAED,SAAS,iCAAiC;IACtC,OAAO;QACH,MAAM,EAAE,oCAAoC;QAC5C,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,8DAA8D;QACxE,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,oEAAoE;KAChF,CAAC;AACN,CAAC;AAED,SAAS,kCAAkC;IACvC,OAAO;QACH,MAAM,EAAE,yBAAyB;QACjC,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,6CAA6C;QACvD,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,gEAAgE;KAC5E,CAAC;AACN,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAqD;IAChF,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,eAAe,CAAC,eAAgC;IACrD,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,wBAAwB,CAAC,eAAgC;IAC9D,MAAM,UAAU,GAAG,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAE,eAAe,CAAE,CAAC,CAAC,CAAC,eAAe,CAAC;IAE5F,mBAAmB,CAAC,UAAU,EAAE,+CAA+C,CAAC,CAAC;IAEjF,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAS,gCAAgC,CACrC,iBAAiD,EACjD,kBAAkD;IAElD,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,OAAO,iBAAiB,CAAC,KAAK,CAAC,SAAS,wBAAwB,CAAC,gBAAgB;QAC7E,OAAO,aAAa,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC;YAC/C,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;YAC5D,aAAa,IAAI,CAAC,CAAC;YAEnB,IAAI,iBAAiB,KAAK,gBAAgB,EAAE,CAAC;gBACzC,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,8BAA8B,CACnC,QAAuC,EACvC,gBAAqC;IAErC,OAAO,QAAQ,EAAE,gBAAgB,KAAK,gBAAgB,CAAC;AAC3D,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAuC;IACvE,IAAI,QAAQ,EAAE,SAAS,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,QAAQ,CAAC,SAAS,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,2BAA2B,CAAC,QAAuC;IACxE,MAAM,gBAAgB,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;IAE9D,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;QAC5B,OAAO,CAAE,gBAAgB,CAAE,CAAC;IAChC,CAAC;IAED,OAAO,EAAE,CAAC;AACd,CAAC;AAED,SAAS,4CAA4C,CACjD,kBAAgD,EAChD,WAAmB,EACnB,gBAAqC;IAErC,IAAI,eAAe,GAAG,WAAW,CAAC;IAClC,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,OAAO,eAAe,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC;QACjD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAErD,IAAI,8BAA8B,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,CAAC;YAC7D,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,GAAG,CAAC,EAAE,CAAC;QAC5D,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE1D,eAAe,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,+BAA+B,CACpC,kBAAgD,EAChD,WAAmB;IAEnB,MAAM,UAAU,GAAoB,EAAE,CAAC;IAEvC,KAAK,MAAM,QAAQ,IAAI,kBAAkB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;QAC3D,IAAI,QAAQ,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAS,qBAAqB,CAC1B,kBAAgD,EAChD,kBAAkD;IAElD,MAAM,gBAAgB,GAAoB,EAAE,CAAC;IAC7C,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,KAAK,MAAM,iBAAiB,IAAI,kBAAkB,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,4CAA4C,CACrD,kBAAkB,EAClB,WAAW,EACX,iBAAiB,CACpB,CAAC;QACF,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAC/B,gBAAgB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACjE,CAAC;IAED,gBAAgB,CAAC,IAAI,CAAC,GAAG,+BAA+B,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC;IAE3F,OAAO,gBAAgB,CAAC;AAC5B,CAAC;AAED,SAAS,uBAAuB;IAC5B,MAAM,iBAAiB,GAAmC,EAAE,CAAC;IAC7D,MAAM,kBAAkB,GAAwB,EAAE,CAAC;IACnD,IAAI,kBAAkB,GAAkB,IAAI,CAAC;IAC7C,IAAI,YAAY,GAAkB,IAAI,CAAC;IAEvC,SAAS,aAAa;QAClB,IAAI,kBAAkB,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO,kBAAkB,CAAC;QAC9B,CAAC;QAED,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED,SAAS,sBAAsB;QAC3B,OAAO,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,SAAS,iBAAiB,CAAC,KAAa;QACpC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,YAAY,KAAK,IAAI,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvG,MAAM,IAAI,uBAAuB,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QAClF,CAAC;IACL,CAAC;IAED,SAAS,OAAO;QACZ,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,uBAAuB,CAAC,yBAAyB,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9E,CAAC;QAED,IAAI,sBAAsB,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,uBAAuB,CAAC,kCAAkC,EAAE,EAAE,SAAS,CAAC,CAAC;QACvF,CAAC;QAED,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,iBAAiB,CAC1E,SAAS;YAET,OAAO,SAAS,KAAK,IAAI,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,mBAAmB,CAAC,kBAAkB,EAAE,8CAA8C,CAAC,CAAC;QAExF,OAAO,kBAAkB,CAAC;IAC9B,CAAC;IAED,SAAS,0BAA0B,CAAC,UAA0C;QAC1E,IAAI,sBAAsB,EAAE,EAAE,CAAC;YAC3B,OAAO,kCAAkC,EAAE,CAAC;QAChD,CAAC;QAED,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,iBAAiB,CAC1E,SAAS;YAET,OAAO,SAAS,KAAK,IAAI,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gCAAgC,CAAC,kBAAkB,EAAE,UAAU,CAAC,EAAE,CAAC;YACpE,OAAO,iCAAiC,EAAE,CAAC;QAC/C,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,wBAAwB;YACpB,OAAO,aAAa,EAAE,CAAC,OAAO,CAAC,SAAS,WAAW,CAAC,QAAQ;gBACxD,OAAO,QAAQ,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,QAAQ,CAAC,SAAS,CAAE,CAAC;YACrE,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO;QAEP,YAAY,CAAC,OAAO;YAChB,MAAM,IAAI,uBAAuB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,KAAK;YACN,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,YAAY,GAAG,KAAK,CAAC;QACzB,CAAC;QAED,YAAY,CAAC,SAAS;YAClB,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClC,kBAAkB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,mBAAmB;YACf,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC;YAC9C,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC;YAE9C,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,kBAAkB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;YAErE,OAAO;gBACH,OAAO,CAAC,SAAS;oBACb,iBAAiB,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;oBAC5C,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;gBACjF,CAAC;aACJ,CAAC;QACN,CAAC;QAED,aAAa,CAAC,SAAS;YACnB,kBAAkB,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;YAE/D,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9B,kBAAkB,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;gBACnD,MAAM,IAAI,wBAAwB,EAAE,CAAC;YACzC,CAAC;QACL,CAAC;QAED,aAAa;YACT,OAAO,kBAAkB,KAAK,IAAI,CAAC;QACvC,CAAC;QAED,kBAAkB,CAAC,eAAe;YAC9B,MAAM,UAAU,GAAG,wBAAwB,CAAC,eAAe,CAAC,CAAC;YAC7D,MAAM,eAAe,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC;YAE/D,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;gBAC3B,OAAO,eAAe,CAAC;YAC3B,CAAC;YAED,OAAO,qBAAqB,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,CAAC;QAC9D,CAAC;QAED,sBAAsB,CAAC,qBAAqB;YACxC,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,qBAAqB,EAAE,CAAC;gBAClE,OAAO,yBAAyB,CAAC,qBAAqB,EAAE,YAAY,CAAC,CAAC;YAC1E,CAAC;YAED,OAAO,IAAI,CAAC;QAChB,CAAC;KACJ,CAAC;AACN,CAAC;AAED,SAAS,yBAAyB,CAAC,UAAoC;IACnE,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,yBAAyB,CAAC,SAAS,EAAE,KAAK;QACjF,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAE5D,OAAO,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,WAAW,CAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,mBAAmB,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;IAEvE,OAAO;QACH,MAAM;QACN,IAAI,EAAE,WAAW;KACpB,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB,CAAC,UAAoC;IAClE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAEvD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,kCAAkC,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAoC;IAC1D,OAAO,wBAAwB,CAAC,UAAU,CAAC,IAAI,yBAAyB,CAAC,UAAU,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,eAAe,CAAC,QAA2B;IAChD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAC/B,2BAA2B,CACvB;QACI,YAAY,CAAC,OAAO;YAChB,OAAO,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,YAAY,CAAC,SAAS;YAClB,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QACD,mBAAmB;YACf,OAAO,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAC1C,CAAC;KACJ,EACD,IAAI,CACP,EACD;QACI,OAAO;YACH,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;KACJ,CACJ,CAAC;IAEF,OAAO;QACH,MAAM,EAAE,aAAa;QACrB,IAAI,CAAC,KAAK;YACN,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,EAAE,4BAA4B,CACjC;YACI,YAAY,CAAC,OAAO;gBAChB,OAAO,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;YACD,aAAa,CAAC,SAAS;gBACnB,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;SACJ,EACD,IAAI,CACP;KACJ,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB,CAAC,QAA2B;IAClD,OAAO;QACH,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,IAAI;QACnB,kBAAkB,EAAE,QAAQ,CAAC,wBAAwB,EAAE;KAC1D,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,QAA2B,EAAE,eAAoC;IACzF,OAAO;QACH,SAAS,EAAE,IAAI;QACf,eAAe;QACf,aAAa,EAAE,KAAK;QACpB,kBAAkB,EAAE,QAAQ,CAAC,wBAAwB,EAAE;KAC1D,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,QAA2B,EAAE,KAAc;IAChE,OAAO;QACH,SAAS,EAAE,uBAAuB,CAAC,KAAK,CAAC;QACzC,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,KAAK;QACpB,kBAAkB,EAAE,QAAQ,CAAC,wBAAwB,EAAE;KAC1D,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,QAA2B,EAAE,eAAgC;IAChF,IAAI,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC;QAC3B,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAExE,OAAO,qBAAqB,CAAC,kBAAkB,CAAC;QAC5C,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,CAAC;QAClD,CAAC,CAAC;YACE,SAAS,EAAE,IAAI;YACf,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,KAAK;YACpB,kBAAkB;SACrB,CAAC;AACV,CAAC;AAED,SAAS,UAAU,CAAC,QAA2B,EAAE,KAAc;IAC3D,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;QAC5C,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,YAAY,uBAAuB;QAC3C,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,QAAsB,EAAE,QAA2B;IAC1E,IAAI,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,YAA0B;IAC3C,IAAI,YAAY,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC,eAAe,CAAC;IACxC,CAAC;IAED,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAClC,OAAO;YACH,KAAK,EAAE,YAAY,CAAC,SAAS;YAC7B,IAAI,EAAE,YAAY;SACrB,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,QAA2B,EAAE,YAA0B;IACxE,IAAI,YAAY,CAAC,aAAa,IAAI,YAAY,CAAC,eAAe,KAAK,IAAI,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QACzG,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,QAAQ,CAAC,sBAAsB,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,aAAa,CAAC,QAA2B,EAAE,YAA0B;IAC1E,MAAM,QAAQ,GAAG;QACb,gBAAgB,CAAC,YAAY,CAAC,kBAAkB,CAAC;QACjD,WAAW,CAAC,YAAY,CAAC;QACzB,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC;KACtC;SACI,MAAM,CAAC,SAAS,aAAa,CAAC,OAAO;QAClC,OAAO,OAAO,KAAK,IAAI,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEP,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,QAAQ,EAAE,yCAAyC,CAAC,CAAC;IAEzE,OAAO;QACH,QAAQ;QACR,IAAI,EAAE,MAAM;KACf,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAsB,EAAE,SAAoB;IAC1E,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,8BAA8B,CAAC;IAE3D,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE5C,OAAO;QACH,MAAM,EAAE;YACJ,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,OAAO;YACP,OAAO;SACV;QACD,UAAU,EAAE,SAAS,CAAC,8BAA8B,GAAG,SAAS;KACnE,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"case-execution.js","sourceRoot":"","sources":["../../../../source/engine/case-execution.ts"],"names":[],"mappings":"AACA,OAAO,EACH,iBAAiB,EACjB,2BAA2B,EAC9B,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAAE,uBAAuB,EAA0B,MAAM,8CAA8C,CAAC;AAC/G,OAAO,EACH,mBAAmB,EACnB,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EAE1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAKH,kCAAkC,EAClC,kBAAkB,EACrB,MAAM,iBAAiB,CAAC;AAsBzB,SAAS,yBAAyB,CAAC,UAAoC;IACnE,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,SAAS,yBAAyB,CAAC,SAAS,EAAE,KAAK;QACjF,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QAE5D,OAAO,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,WAAW,CAAE,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,mBAAmB,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC;IAEvE,OAAO;QACH,MAAM;QACN,IAAI,EAAE,WAAW;KACpB,CAAC;AACN,CAAC;AAED,SAAS,wBAAwB,CAAC,UAAoC;IAClE,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,2BAA2B,CAAC,SAAS,CAAC,CAAC;QAEvD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,kCAAkC,CAAC,OAAO,CAAC,CAAC;QACvD,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAoC;IAC1D,OAAO,wBAAwB,CAAC,UAAU,CAAC,IAAI,yBAAyB,CAAC,UAAU,CAAC,CAAC;AACzF,CAAC;AAED,SAAS,eAAe,CAAC,QAA2B,EAAE,MAAmB;IACrE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAC/B,2BAA2B,CACvB;QACI,YAAY,CAAC,OAAO;YAChB,OAAO,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,YAAY,CAAC,SAAS;YAClB,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QACD,mBAAmB;YACf,OAAO,QAAQ,CAAC,mBAAmB,EAAE,CAAC;QAC1C,CAAC;KACJ,EACD,IAAI,CACP,EACD;QACI,OAAO;YACH,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;KACJ,CACJ,CAAC;IAEF,OAAO;QACH,MAAM,EAAE,aAAa;QACrB,IAAI,CAAC,KAAK;YACN,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,EAAE,4BAA4B,CACjC;YACI,YAAY,CAAC,OAAO;gBAChB,OAAO,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;YACD,aAAa,CAAC,SAAS;gBACnB,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACtC,CAAC;SACJ,EACD,IAAI,CACP;QACD,MAAM;KACT,CAAC;AACN,CAAC;AAED,SAAS,iBAAiB,CAAC,QAA2B;IAClD,OAAO;QACH,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,IAAI;QACnB,kBAAkB,EAAE,QAAQ,CAAC,wBAAwB,EAAE;KAC1D,CAAC;AACN,CAAC;AAED,SAAS,kBAAkB,CAAC,QAA2B,EAAE,eAAoC;IACzF,OAAO;QACH,SAAS,EAAE,IAAI;QACf,eAAe;QACf,aAAa,EAAE,KAAK;QACpB,kBAAkB,EAAE,QAAQ,CAAC,wBAAwB,EAAE;KAC1D,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,QAA2B,EAAE,KAAc;IAChE,OAAO;QACH,SAAS,EAAE,uBAAuB,CAAC,KAAK,CAAC;QACzC,eAAe,EAAE,IAAI;QACrB,aAAa,EAAE,KAAK;QACpB,kBAAkB,EAAE,QAAQ,CAAC,wBAAwB,EAAE;KAC1D,CAAC;AACN,CAAC;AAED,SAAS,aAAa,CAAC,QAA2B,EAAE,eAAgC;IAChF,IAAI,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC;QAC3B,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IAExE,OAAO,qBAAqB,CAAC,kBAAkB,CAAC;QAC5C,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,CAAC;QAClD,CAAC,CAAC;YACE,SAAS,EAAE,IAAI;YACf,eAAe,EAAE,IAAI;YACrB,aAAa,EAAE,KAAK;YACpB,kBAAkB;SACrB,CAAC;AACV,CAAC;AAED,SAAS,UAAU,CAAC,QAA2B,EAAE,KAAc;IAC3D,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;QAC5C,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,YAAY,uBAAuB;QAC3C,CAAC,CAAC,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,KAAK,UAAU,WAAW,CACtB,QAAsB,EACtB,QAA2B,EAC3B,OAA2B;IAE3B,IAAI,CAAC;QACD,OAAO,aAAa,CAAC,QAAQ,EAAE,MAAM,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACnG,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACtB,OAAO,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,YAA0B;IAC3C,IAAI,YAAY,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,YAAY,CAAC,eAAe,CAAC;IACxC,CAAC;IAED,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAClC,OAAO;YACH,KAAK,EAAE,YAAY,CAAC,SAAS;YAC7B,IAAI,EAAE,YAAY;SACrB,CAAC;IACN,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,QAA2B,EAAE,YAA0B;IACxE,IAAI,YAAY,CAAC,aAAa,IAAI,YAAY,CAAC,eAAe,KAAK,IAAI,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QACzG,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,QAAQ,CAAC,sBAAsB,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,aAAa,CAAC,QAA2B,EAAE,YAA0B;IAC1E,MAAM,QAAQ,GAAG;QACb,gBAAgB,CAAC,YAAY,CAAC,kBAAkB,CAAC;QACjD,WAAW,CAAC,YAAY,CAAC;QACzB,WAAW,CAAC,QAAQ,EAAE,YAAY,CAAC;KACtC;SACI,MAAM,CAAC,SAAS,aAAa,CAAC,OAAO;QAClC,OAAO,OAAO,KAAK,IAAI,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEP,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,mBAAmB,CAAC,QAAQ,EAAE,yCAAyC,CAAC,CAAC;IAEzE,OAAO;QACH,QAAQ;QACR,IAAI,EAAE,MAAM;KACf,CAAC;AACN,CAAC;AAED,SAAS,yBAAyB;IAC9B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,OAAO;QACH,MAAM,EAAE,UAAU,CAAC,MAAM;KAC5B,CAAC;AACN,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,oBAA4B,EAAE,mBAA2B;IACpF,OAAO;QACH,oBAAoB;QACpB,mBAAmB;QACnB,IAAI,EAAE,SAAS;KAClB,CAAC;AACN,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAAe,EAAE,QAAgB;IAC3E,OAAO;QACH,MAAM;QACN,IAAI,EAAE,0BAA0B;QAChC,QAAQ;QACR,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,2EAA2E;KACvF,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC7B,QAAsB,EACtB,SAAoB,EACpB,UAA8B,yBAAyB,EAAE;IAEzD,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,8BAA8B,CAAC;IAE3D,MAAM,YAAY,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE5C,OAAO;QACH,MAAM,EAAE;YACJ,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,OAAO;YACP,OAAO;SACV;QACD,UAAU,EAAE,SAAS,CAAC,8BAA8B,GAAG,SAAS;KACnE,CAAC;AACN,CAAC"}