@overkill-dev/run 0.0.3 → 0.0.5

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 (103) hide show
  1. package/assertion-protocol/assertion-evaluation.js +6 -0
  2. package/assertion-protocol/assertion-evaluation.js.map +1 -0
  3. package/assertion-protocol/assertion-node.js +33 -0
  4. package/assertion-protocol/assertion-node.js.map +1 -0
  5. package/assertion-protocol/assertion-reference.js +49 -0
  6. package/assertion-protocol/assertion-reference.js.map +1 -0
  7. package/assertion-protocol/assertions/boolean.js +12 -0
  8. package/assertion-protocol/assertions/boolean.js.map +1 -0
  9. package/assertion-protocol/assertions/collection.js +21 -0
  10. package/assertion-protocol/assertions/collection.js.map +1 -0
  11. package/assertion-protocol/assertions/dispatch.js +47 -0
  12. package/assertion-protocol/assertions/dispatch.js.map +1 -0
  13. package/assertion-protocol/assertions/equality.js +24 -0
  14. package/assertion-protocol/assertions/equality.js.map +1 -0
  15. package/assertion-protocol/assertions/fail.js +8 -0
  16. package/assertion-protocol/assertions/fail.js.map +1 -0
  17. package/assertion-protocol/assertions/numeric.js +43 -0
  18. package/assertion-protocol/assertions/numeric.js.map +1 -0
  19. package/assertion-protocol/assertions/partial.js +17 -0
  20. package/assertion-protocol/assertions/partial.js.map +1 -0
  21. package/assertion-protocol/assertions/presence.js +20 -0
  22. package/assertion-protocol/assertions/presence.js.map +1 -0
  23. package/assertion-protocol/assertions/string.js +33 -0
  24. package/assertion-protocol/assertions/string.js.map +1 -0
  25. package/assertion-protocol/assertions/type-shape.js +43 -0
  26. package/assertion-protocol/assertions/type-shape.js.map +1 -0
  27. package/assertion-protocol/collection-count.js +42 -0
  28. package/assertion-protocol/collection-count.js.map +1 -0
  29. package/assertion-protocol/evaluation.js +170 -0
  30. package/assertion-protocol/evaluation.js.map +1 -0
  31. package/assertion-protocol/partial-matching.js +13 -0
  32. package/assertion-protocol/partial-matching.js.map +1 -0
  33. package/assertion-protocol/source-location.js +76 -0
  34. package/assertion-protocol/source-location.js.map +1 -0
  35. package/assertion-protocol/thrown-error-record.js +17 -0
  36. package/assertion-protocol/thrown-error-record.js.map +1 -0
  37. package/assertion-protocol/thrown-matcher.js +201 -0
  38. package/assertion-protocol/thrown-matcher.js.map +1 -0
  39. package/compare/comparison-result.js +47 -0
  40. package/compare/comparison-result.js.map +1 -0
  41. package/compare/comparison-state.js +20 -0
  42. package/compare/comparison-state.js.map +1 -0
  43. package/compare/comparison.js +78 -0
  44. package/compare/comparison.js.map +1 -0
  45. package/compare/diff-path.js +37 -0
  46. package/compare/diff-path.js.map +1 -0
  47. package/compare/raw-comparison.js +285 -0
  48. package/compare/raw-comparison.js.map +1 -0
  49. package/compare/serialized-value-classification.js +99 -0
  50. package/compare/serialized-value-classification.js.map +1 -0
  51. package/compare/serialized-value-shape.js +12 -0
  52. package/compare/serialized-value-shape.js.map +1 -0
  53. package/compare/serialized-value-state.js +55 -0
  54. package/compare/serialized-value-state.js.map +1 -0
  55. package/compare/serialized-value.js +387 -0
  56. package/compare/serialized-value.js.map +1 -0
  57. package/compare/structured-diff.js +382 -0
  58. package/compare/structured-diff.js.map +1 -0
  59. package/compare/value-classification.js +112 -0
  60. package/compare/value-classification.js.map +1 -0
  61. package/diff/binary-diff.js +49 -0
  62. package/diff/binary-diff.js.map +1 -0
  63. package/diff/string-diff.js +22 -0
  64. package/diff/string-diff.js.map +1 -0
  65. package/engine/assertion-facade.js +361 -0
  66. package/engine/assertion-facade.js.map +1 -0
  67. package/engine/case-execution.js +408 -0
  68. package/engine/case-execution.js.map +1 -0
  69. package/engine/custom-assertion-recording.js +175 -0
  70. package/engine/custom-assertion-recording.js.map +1 -0
  71. package/engine/execution.d.ts +20 -0
  72. package/engine/execution.d.ts.map +1 -0
  73. package/engine/execution.js +323 -0
  74. package/engine/execution.js.map +1 -0
  75. package/engine/identity.js +5 -0
  76. package/engine/identity.js.map +1 -0
  77. package/engine/reporter-event-queue.js +23 -0
  78. package/engine/reporter-event-queue.js.map +1 -0
  79. package/engine/reporter.d.ts +5 -0
  80. package/engine/reporter.d.ts.map +1 -1
  81. package/engine/reporter.js +177 -0
  82. package/engine/reporter.js.map +1 -0
  83. package/engine/require-assertion-facade.js +127 -0
  84. package/engine/require-assertion-facade.js.map +1 -0
  85. package/engine/run-result.js +13 -0
  86. package/engine/run-result.js.map +1 -0
  87. package/engine/test-node.d.ts +17 -1
  88. package/engine/test-node.d.ts.map +1 -1
  89. package/engine/test-plan.d.ts +8 -2
  90. package/engine/test-plan.d.ts.map +1 -1
  91. package/package.json +8 -3
  92. package/packages/engine/assertion-protocol.entry-point.js +4 -0
  93. package/packages/engine/assertion-protocol.entry-point.js.map +1 -0
  94. package/packages/run/run.entry-point.d.ts +2 -1
  95. package/packages/run/run.entry-point.d.ts.map +1 -1
  96. package/packages/run/run.entry-point.js +1 -0
  97. package/packages/run/run.entry-point.js.map +1 -1
  98. package/readme.md +7 -2
  99. package/run/run.d.ts +87 -36
  100. package/run/run.d.ts.map +1 -1
  101. package/run/run.js +182 -8
  102. package/run/run.js.map +1 -1
  103. package/sbom.cdx.json +22 -5
@@ -0,0 +1,382 @@
1
+ import { createBinaryDiff, shouldUseBinarySummary } from "../diff/binary-diff.js";
2
+ import { comparisonResult, emptyPath, failedResult, firstDiffPath, valueMismatch } from "./comparison-result.js";
3
+ import { bytesFrom, compareExactly, comparePartially, mapEntries, rawProperty, setValues, sortedKeys } from "./raw-comparison.js";
4
+ import { byteSegment, indexSegment, mapKeySegment, mapValueSegment, propertySegment, setValueSegment } from "./diff-path.js";
5
+ import { serializeValue } from "./serialized-value.js";
6
+ import { byteSourcePair, isByteSource, isDateValue, isErrorValue, isMapCandidate, isOpaqueIdentityValue, isRegExpValue, isSetCandidate, mapPair, prototypeOf, setPair } from "./value-classification.js";
7
+ function compareByMode(actual, expected, mode) {
8
+ return mode === 'partial' ? comparePartially(actual, expected) : compareExactly(actual, expected);
9
+ }
10
+ function objectMissingOperation(expectedKey, expectedValue, mode) {
11
+ const path = [propertySegment(expectedKey)];
12
+ return mode === 'partial'
13
+ ? { operation: 'missing-property', path, value: serializeValue(expectedValue) }
14
+ : { operation: 'remove', path, value: serializeValue(expectedValue) };
15
+ }
16
+ function objectReplacementOperation(actualValue, expectedValue, expectedKey, mode) {
17
+ return compareByMode(actualValue, expectedValue, mode)
18
+ ? null
19
+ : {
20
+ from: serializeValue(expectedValue),
21
+ operation: 'replace',
22
+ path: [propertySegment(expectedKey)],
23
+ to: serializeValue(actualValue)
24
+ };
25
+ }
26
+ function objectExpectedOperation(expectedKey, context) {
27
+ const expectedValue = rawProperty(context.expected, expectedKey).value;
28
+ if (!context.actualKeys.includes(expectedKey)) {
29
+ return objectMissingOperation(expectedKey, expectedValue, context.mode);
30
+ }
31
+ const actualValue = rawProperty(context.actual, expectedKey).value;
32
+ return objectReplacementOperation(actualValue, expectedValue, expectedKey, context.mode);
33
+ }
34
+ function objectAddedOperations(actual, actualKeys, expectedKeys, mode) {
35
+ if (mode === 'partial') {
36
+ return [];
37
+ }
38
+ return actualKeys
39
+ .filter(function missingFromExpected(actualKey) {
40
+ return !expectedKeys.includes(actualKey);
41
+ })
42
+ .map(function toAddOperation(actualKey) {
43
+ return {
44
+ operation: 'add',
45
+ path: [propertySegment(actualKey)],
46
+ value: serializeValue(rawProperty(actual, actualKey).value)
47
+ };
48
+ });
49
+ }
50
+ function objectKeyDiff(actual, expected, mode) {
51
+ const actualKeys = sortedKeys(actual);
52
+ const expectedKeys = sortedKeys(expected);
53
+ if (actualKeys === null || expectedKeys === null) {
54
+ return valueMismatch(actual, expected);
55
+ }
56
+ const context = { actual, actualKeys, expected, mode };
57
+ const operations = [
58
+ ...expectedKeys.flatMap(function operationForKey(expectedKey) {
59
+ const operation = objectExpectedOperation(expectedKey, context);
60
+ return operation === null ? [] : [operation];
61
+ }),
62
+ ...objectAddedOperations(actual, actualKeys, expectedKeys, mode)
63
+ ];
64
+ return comparisonResult({
65
+ actual,
66
+ diff: { kind: 'object', operations },
67
+ expected,
68
+ passed: operations.length === 0,
69
+ path: operations[0]?.path ?? emptyPath
70
+ });
71
+ }
72
+ function objectDiff(actual, expected, mode) {
73
+ return mode === 'exact' && prototypeOf(actual) !== prototypeOf(expected)
74
+ ? valueMismatch(actual, expected)
75
+ : objectKeyDiff(actual, expected, mode);
76
+ }
77
+ function missingArrayIndexOperation(expected, index, mode) {
78
+ return mode === 'partial'
79
+ ? { index, operation: 'missing-index', value: serializeValue(expected[index]) }
80
+ : { operation: 'remove', path: [indexSegment(index)], value: serializeValue(expected[index]) };
81
+ }
82
+ function arrayReplacementOperation(actual, expected, index, mode) {
83
+ if (compareByMode(actual[index], expected[index], mode)) {
84
+ return null;
85
+ }
86
+ return {
87
+ from: serializeValue(expected[index]),
88
+ operation: 'replace',
89
+ path: [indexSegment(index)],
90
+ to: serializeValue(actual[index])
91
+ };
92
+ }
93
+ function arrayIndexOperation(actual, expected, index, mode) {
94
+ const actualHasIndex = Object.hasOwn(actual, index);
95
+ const expectedHasIndex = Object.hasOwn(expected, index);
96
+ if (!expectedHasIndex) {
97
+ return actualHasIndex
98
+ ? { operation: 'add', path: [indexSegment(index)], value: serializeValue(actual[index]) }
99
+ : null;
100
+ }
101
+ if (!actualHasIndex) {
102
+ return missingArrayIndexOperation(expected, index, mode);
103
+ }
104
+ return arrayReplacementOperation(actual, expected, index, mode);
105
+ }
106
+ function arrayDiff(actual, expected, mode) {
107
+ const length = mode === 'partial' ? expected.length : Math.max(actual.length, expected.length);
108
+ const operations = Array
109
+ .from({ length }, function operationAtIndex(_ignoredValue, index) {
110
+ return arrayIndexOperation(actual, expected, index, mode);
111
+ })
112
+ .filter(function operationExists(operation) {
113
+ return operation !== null;
114
+ });
115
+ return comparisonResult({
116
+ actual,
117
+ diff: { kind: 'array', operations },
118
+ expected,
119
+ passed: operations.length === 0,
120
+ path: firstDiffPath({ kind: 'array', operations })
121
+ });
122
+ }
123
+ function missingMapEntryOperation(expectedEntry, mode) {
124
+ return mode === 'partial'
125
+ ? {
126
+ key: serializeValue(expectedEntry.key),
127
+ operation: 'missing-entry',
128
+ value: serializeValue(expectedEntry.value)
129
+ }
130
+ : {
131
+ operation: 'remove',
132
+ path: [mapKeySegment(expectedEntry.key)],
133
+ value: serializeValue(expectedEntry.value)
134
+ };
135
+ }
136
+ function mapExpectedOperation(expectedEntry, actualEntries, matchedActualIndexes, mode) {
137
+ const matchIndex = actualEntries.findIndex(function matchingKey(actualEntry, index) {
138
+ return !matchedActualIndexes.has(index) && compareExactly(actualEntry.key, expectedEntry.key);
139
+ });
140
+ if (matchIndex === -1) {
141
+ return { matchedIndex: null, operation: missingMapEntryOperation(expectedEntry, mode) };
142
+ }
143
+ const actualEntry = actualEntries[matchIndex];
144
+ if (actualEntry === undefined || compareByMode(actualEntry.value, expectedEntry.value, mode)) {
145
+ return { matchedIndex: matchIndex, operation: null };
146
+ }
147
+ return {
148
+ matchedIndex: matchIndex,
149
+ operation: {
150
+ from: serializeValue(expectedEntry.value),
151
+ operation: 'replace',
152
+ path: [mapValueSegment(expectedEntry.key)],
153
+ to: serializeValue(actualEntry.value)
154
+ }
155
+ };
156
+ }
157
+ function mapAddedOperations(actualEntries, matchedActualIndexes, mode) {
158
+ if (mode === 'partial') {
159
+ return [];
160
+ }
161
+ return actualEntries.flatMap(function extraEntry(actualEntry, index) {
162
+ return matchedActualIndexes.has(index)
163
+ ? []
164
+ : [{
165
+ operation: 'add',
166
+ path: [mapKeySegment(actualEntry.key)],
167
+ value: serializeValue(actualEntry.value)
168
+ }];
169
+ });
170
+ }
171
+ function mapDiff(actual, expected, mode) {
172
+ const actualEntries = mapEntries(actual);
173
+ const expectedEntries = mapEntries(expected);
174
+ const matchedActualIndexes = new Set();
175
+ const expectedOperations = expectedEntries.flatMap(function operationForEntry(expectedEntry) {
176
+ const result = mapExpectedOperation(expectedEntry, actualEntries, matchedActualIndexes, mode);
177
+ if (result.matchedIndex !== null) {
178
+ matchedActualIndexes.add(result.matchedIndex);
179
+ }
180
+ return result.operation === null ? [] : [result.operation];
181
+ });
182
+ const operations = [
183
+ ...expectedOperations,
184
+ ...mapAddedOperations(actualEntries, matchedActualIndexes, mode)
185
+ ];
186
+ return comparisonResult({
187
+ actual,
188
+ diff: { kind: 'map', operations },
189
+ expected,
190
+ passed: operations.length === 0,
191
+ path: firstDiffPath({ kind: 'map', operations })
192
+ });
193
+ }
194
+ function setMissingOperation(expectedValue, mode) {
195
+ return mode === 'partial'
196
+ ? { operation: 'missing-member', value: serializeValue(expectedValue) }
197
+ : {
198
+ operation: 'remove',
199
+ path: [setValueSegment(expectedValue)],
200
+ value: serializeValue(expectedValue)
201
+ };
202
+ }
203
+ function setAddedOperations(actualValues, matchedActualIndexes, mode) {
204
+ if (mode === 'partial') {
205
+ return [];
206
+ }
207
+ return actualValues.flatMap(function extraValue(actualValue, index) {
208
+ return matchedActualIndexes.has(index)
209
+ ? []
210
+ : [{
211
+ operation: 'add',
212
+ path: [setValueSegment(actualValue)],
213
+ value: serializeValue(actualValue)
214
+ }];
215
+ });
216
+ }
217
+ function setDiff(actual, expected, mode) {
218
+ const actualValues = setValues(actual);
219
+ const expectedValues = setValues(expected);
220
+ const matchedActualIndexes = new Set();
221
+ const missingOperations = expectedValues.flatMap(function operationForValue(expectedValue) {
222
+ const matchIndex = actualValues.findIndex(function matchingValue(actualValue, index) {
223
+ return !matchedActualIndexes.has(index) && compareByMode(actualValue, expectedValue, mode);
224
+ });
225
+ if (matchIndex === -1) {
226
+ return [setMissingOperation(expectedValue, mode)];
227
+ }
228
+ matchedActualIndexes.add(matchIndex);
229
+ return [];
230
+ });
231
+ const operations = [
232
+ ...missingOperations,
233
+ ...setAddedOperations(actualValues, matchedActualIndexes, mode)
234
+ ];
235
+ return comparisonResult({
236
+ actual,
237
+ diff: { kind: 'set', operations },
238
+ expected,
239
+ passed: operations.length === 0,
240
+ path: firstDiffPath({ kind: 'set', operations })
241
+ });
242
+ }
243
+ function byteOperation(actualBytes, expectedBytes, offset) {
244
+ return actualBytes[offset] === expectedBytes[offset]
245
+ ? null
246
+ : {
247
+ from: serializeValue(expectedBytes[offset]),
248
+ operation: 'replace',
249
+ path: [byteSegment(offset)],
250
+ to: serializeValue(actualBytes[offset])
251
+ };
252
+ }
253
+ function byteDiff(actual, expected) {
254
+ const actualBytes = bytesFrom(actual);
255
+ const expectedBytes = bytesFrom(expected);
256
+ if (shouldUseBinarySummary(expectedBytes, actualBytes)) {
257
+ return failedResult(actual, expected, createBinaryDiff(expectedBytes, actualBytes));
258
+ }
259
+ const length = Math.max(actualBytes.length, expectedBytes.length);
260
+ const operations = Array
261
+ .from({ length }, function operationForOffset(_ignoredValue, offset) {
262
+ return byteOperation(actualBytes, expectedBytes, offset);
263
+ })
264
+ .filter(function operationExists(operation) {
265
+ return operation !== null;
266
+ });
267
+ return comparisonResult({
268
+ actual,
269
+ diff: { kind: 'array', operations },
270
+ expected,
271
+ passed: operations.length === 0,
272
+ path: firstDiffPath({ kind: 'array', operations })
273
+ });
274
+ }
275
+ function errorHeaderOperations(actual, expected) {
276
+ const operations = [];
277
+ if (actual.name !== expected.name) {
278
+ operations.push({
279
+ from: serializeValue(expected.name),
280
+ operation: 'replace',
281
+ path: [propertySegment('name')],
282
+ to: serializeValue(actual.name)
283
+ });
284
+ }
285
+ if (actual.message !== expected.message) {
286
+ operations.push({
287
+ from: serializeValue(expected.message),
288
+ operation: 'replace',
289
+ path: [propertySegment('message')],
290
+ to: serializeValue(actual.message)
291
+ });
292
+ }
293
+ return operations;
294
+ }
295
+ function errorDiff(actual, expected, mode) {
296
+ const enumerableDiff = objectDiff(actual, expected, mode);
297
+ const enumerableOperations = enumerableDiff.diff?.kind === 'object' ? enumerableDiff.diff.operations : [];
298
+ const operations = [
299
+ ...errorHeaderOperations(actual, expected),
300
+ ...enumerableOperations
301
+ ];
302
+ return comparisonResult({
303
+ actual,
304
+ diff: { kind: 'object', operations },
305
+ expected,
306
+ passed: operations.length === 0,
307
+ path: operations[0]?.path ?? emptyPath
308
+ });
309
+ }
310
+ function unsupportedSpecialObjectDiff(actual, expected) {
311
+ const unsupported = [
312
+ isDateValue(actual),
313
+ isDateValue(expected),
314
+ isRegExpValue(actual),
315
+ isRegExpValue(expected),
316
+ isOpaqueIdentityValue(actual),
317
+ isOpaqueIdentityValue(expected)
318
+ ]
319
+ .some(Boolean);
320
+ return unsupported
321
+ ? valueMismatch(actual, expected)
322
+ : null;
323
+ }
324
+ function errorObjectDiff(actual, expected, mode) {
325
+ if (!isErrorValue(actual) && !isErrorValue(expected)) {
326
+ return null;
327
+ }
328
+ return isErrorValue(actual) && isErrorValue(expected) && prototypeOf(actual) === prototypeOf(expected)
329
+ ? errorDiff(actual, expected, mode)
330
+ : valueMismatch(actual, expected);
331
+ }
332
+ function mapObjectDiff(actual, expected, mode) {
333
+ const matchedMapPair = mapPair(actual, expected);
334
+ if (matchedMapPair !== null) {
335
+ return mapDiff(matchedMapPair.actual, matchedMapPair.expected, mode);
336
+ }
337
+ return isMapCandidate(actual) || isMapCandidate(expected) ? valueMismatch(actual, expected) : null;
338
+ }
339
+ function setObjectDiff(actual, expected, mode) {
340
+ const matchedSetPair = setPair(actual, expected);
341
+ if (matchedSetPair !== null) {
342
+ return setDiff(matchedSetPair.actual, matchedSetPair.expected, mode);
343
+ }
344
+ return isSetCandidate(actual) || isSetCandidate(expected) ? valueMismatch(actual, expected) : null;
345
+ }
346
+ function objectPairDiff(actual, expected, mode) {
347
+ return unsupportedSpecialObjectDiff(actual, expected) ??
348
+ errorObjectDiff(actual, expected, mode) ??
349
+ mapObjectDiff(actual, expected, mode) ??
350
+ setObjectDiff(actual, expected, mode) ??
351
+ objectDiff(actual, expected, mode);
352
+ }
353
+ function arrayDiffRule(actual, expected, mode) {
354
+ return Array.isArray(actual) && Array.isArray(expected) ? arrayDiff(actual, expected, mode) : null;
355
+ }
356
+ function byteDiffRule(actual, expected, mode) {
357
+ const matchedBytes = byteSourcePair(actual, expected);
358
+ return mode === 'exact' && matchedBytes !== null ? byteDiff(matchedBytes.actual, matchedBytes.expected) : null;
359
+ }
360
+ function byteMismatchRule(actual, expected) {
361
+ return isByteSource(actual) || isByteSource(expected) ? valueMismatch(actual, expected) : null;
362
+ }
363
+ function isReferenceValue(value) {
364
+ return value !== null && typeof value === 'object';
365
+ }
366
+ function referenceDiffRule(actual, expected, mode) {
367
+ return isReferenceValue(actual) && isReferenceValue(expected) ? objectPairDiff(actual, expected, mode) : null;
368
+ }
369
+ function diffFor(actual, expected, mode) {
370
+ return arrayDiffRule(actual, expected, mode) ??
371
+ byteDiffRule(actual, expected, mode) ??
372
+ byteMismatchRule(actual, expected) ??
373
+ referenceDiffRule(actual, expected, mode) ??
374
+ valueMismatch(actual, expected);
375
+ }
376
+ export function exactStructuredDiff(actual, expected) {
377
+ return diffFor(actual, expected, 'exact');
378
+ }
379
+ export function partialStructuredDiff(actual, expected) {
380
+ return diffFor(actual, expected, 'partial');
381
+ }
382
+ //# sourceMappingURL=structured-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-diff.js","sourceRoot":"","sources":["../../../../source/compare/structured-diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ function isArrayBufferValue(value) {
2
+ try {
3
+ return value instanceof ArrayBuffer;
4
+ }
5
+ catch {
6
+ return false;
7
+ }
8
+ }
9
+ function isArrayBufferView(value) {
10
+ try {
11
+ return ArrayBuffer.isView(value);
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }
17
+ export function isByteSource(value) {
18
+ return isArrayBufferValue(value) || isArrayBufferView(value);
19
+ }
20
+ export function byteSourcePair(actual, expected) {
21
+ if (isArrayBufferValue(actual) && isArrayBufferValue(expected)) {
22
+ return { actual, expected };
23
+ }
24
+ return isArrayBufferView(actual) && isArrayBufferView(expected) && actual.constructor === expected.constructor
25
+ ? { actual, expected }
26
+ : null;
27
+ }
28
+ export function isDateValue(value) {
29
+ try {
30
+ return value instanceof Date;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ export function isRegExpValue(value) {
37
+ try {
38
+ return value instanceof RegExp;
39
+ }
40
+ catch {
41
+ return false;
42
+ }
43
+ }
44
+ export function isErrorValue(value) {
45
+ try {
46
+ return value instanceof Error;
47
+ }
48
+ catch {
49
+ return false;
50
+ }
51
+ }
52
+ function isMapValue(value) {
53
+ try {
54
+ return Object.getPrototypeOf(value) === Map.prototype;
55
+ }
56
+ catch {
57
+ return false;
58
+ }
59
+ }
60
+ function isSetValue(value) {
61
+ try {
62
+ return Object.getPrototypeOf(value) === Set.prototype;
63
+ }
64
+ catch {
65
+ return false;
66
+ }
67
+ }
68
+ export function mapPair(actual, expected) {
69
+ return isMapValue(actual) && isMapValue(expected) ? { actual, expected } : null;
70
+ }
71
+ export function setPair(actual, expected) {
72
+ return isSetValue(actual) && isSetValue(expected) ? { actual, expected } : null;
73
+ }
74
+ export const isMapCandidate = isMapValue;
75
+ export const isSetCandidate = isSetValue;
76
+ function isPromiseValue(value) {
77
+ try {
78
+ return value instanceof Promise;
79
+ }
80
+ catch {
81
+ return false;
82
+ }
83
+ }
84
+ function isWeakMapValue(value) {
85
+ try {
86
+ return value instanceof WeakMap;
87
+ }
88
+ catch {
89
+ return false;
90
+ }
91
+ }
92
+ function isWeakSetValue(value) {
93
+ try {
94
+ return value instanceof WeakSet;
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ export function isOpaqueIdentityValue(value) {
101
+ return isPromiseValue(value) || isWeakMapValue(value) || isWeakSetValue(value);
102
+ }
103
+ export function prototypeOf(value) {
104
+ try {
105
+ const prototype = Object.getPrototypeOf(value);
106
+ return prototype;
107
+ }
108
+ catch {
109
+ return null;
110
+ }
111
+ }
112
+ //# sourceMappingURL=value-classification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value-classification.js","sourceRoot":"","sources":["../../../../source/compare/value-classification.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { createHash } from 'node:crypto';
2
+ const byteArrayDiffLimit = 100;
3
+ const binaryRangeLimit = 5;
4
+ const binaryRangeSize = 8;
5
+ function hashBytes(bytes) {
6
+ return createHash('sha256').update(Uint8Array.from(bytes)).digest('hex');
7
+ }
8
+ function nextDifferentOffset(expected, actual, offset, length) {
9
+ let nextOffset = offset;
10
+ while (nextOffset < length && expected[nextOffset] === actual[nextOffset]) {
11
+ nextOffset += 1;
12
+ }
13
+ return nextOffset;
14
+ }
15
+ function diffRange(expected, actual, offset, length) {
16
+ const rangeEnd = Math.min(length, offset + binaryRangeSize);
17
+ return {
18
+ actual: actual.slice(offset, rangeEnd),
19
+ expected: expected.slice(offset, rangeEnd),
20
+ offset
21
+ };
22
+ }
23
+ function differingRanges(expected, actual) {
24
+ const ranges = [];
25
+ const length = Math.max(expected.length, actual.length);
26
+ let offset = 0;
27
+ while (offset < length && ranges.length < binaryRangeLimit) {
28
+ const rangeOffset = nextDifferentOffset(expected, actual, offset, length);
29
+ if (rangeOffset < length) {
30
+ ranges.push(diffRange(expected, actual, rangeOffset, length));
31
+ }
32
+ offset = rangeOffset + binaryRangeSize;
33
+ }
34
+ return ranges;
35
+ }
36
+ export function createBinaryDiff(expected, actual) {
37
+ return {
38
+ actualHash: hashBytes(actual),
39
+ actualSize: actual.length,
40
+ expectedHash: hashBytes(expected),
41
+ expectedSize: expected.length,
42
+ kind: 'binary',
43
+ ranges: differingRanges(expected, actual)
44
+ };
45
+ }
46
+ export function shouldUseBinarySummary(expected, actual) {
47
+ return expected.length > byteArrayDiffLimit || actual.length > byteArrayDiffLimit;
48
+ }
49
+ //# sourceMappingURL=binary-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-diff.js","sourceRoot":"","sources":["../../../../source/diff/binary-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,SAAS,SAAS,CAAC,KAAwB;IACvC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,mBAAmB,CACxB,QAA2B,EAC3B,MAAyB,EACzB,MAAc,EACd,MAAc;IAEd,IAAI,UAAU,GAAG,MAAM,CAAC;IAExB,OAAO,UAAU,GAAG,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QACxE,UAAU,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAS,SAAS,CACd,QAA2B,EAC3B,MAAyB,EACzB,MAAc,EACd,MAAc;IAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC,CAAC;IAE5D,OAAO;QACH,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;QACtC,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC1C,MAAM;KACT,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,QAA2B,EAAE,MAAyB;IAC3E,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACxD,IAAI,MAAM,GAAG,CAAC,CAAC;IAEf,OAAO,MAAM,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;QACzD,MAAM,WAAW,GAAG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAE1E,IAAI,WAAW,GAAG,MAAM,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,GAAG,WAAW,GAAG,eAAe,CAAC;IAC3C,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAA2B,EAAE,MAAyB;IACnF,OAAO;QACH,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC;QAC7B,UAAU,EAAE,MAAM,CAAC,MAAM;QACzB,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC;QACjC,YAAY,EAAE,QAAQ,CAAC,MAAM;QAC7B,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC5C,CAAC;AACN,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAA2B,EAAE,MAAyB;IACzF,OAAO,QAAQ,CAAC,MAAM,GAAG,kBAAkB,IAAI,MAAM,CAAC,MAAM,GAAG,kBAAkB,CAAC;AACtF,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { structuredPatch } from 'diff';
2
+ function addedLines(lines) {
3
+ return lines.flatMap(function added(line) {
4
+ return line.startsWith('+') && !line.startsWith('+++') ? [line.slice(1)] : [];
5
+ });
6
+ }
7
+ function removedLines(lines) {
8
+ return lines.flatMap(function removed(line) {
9
+ return line.startsWith('-') && !line.startsWith('---') ? [line.slice(1)] : [];
10
+ });
11
+ }
12
+ export function createStringHunks(expected, actual) {
13
+ return structuredPatch('expected', 'actual', expected, actual, '', '', { context: 2 }).hunks.map(function toHunk(hunk) {
14
+ return {
15
+ actualStart: hunk.newStart,
16
+ added: addedLines(hunk.lines),
17
+ expectedStart: hunk.oldStart,
18
+ removed: removedLines(hunk.lines)
19
+ };
20
+ });
21
+ }
22
+ //# sourceMappingURL=string-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-diff.js","sourceRoot":"","sources":["../../../../source/diff/string-diff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAGvC,SAAS,UAAU,CAAC,KAAwB;IACxC,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,YAAY,CAAC,KAAwB;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,SAAS,OAAO,CAAC,IAAI;QACtC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,MAAc;IAC9D,OAAO,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAC5F,SAAS,MAAM,CAAC,IAAI;QAChB,OAAO;YACH,WAAW,EAAE,IAAI,CAAC,QAAQ;YAC1B,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YAC7B,aAAa,EAAE,IAAI,CAAC,QAAQ;YAC5B,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;SACpC,CAAC;IACN,CAAC,CACJ,CAAC;AACN,CAAC"}