@c9up/helix 0.1.3 → 0.1.4
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.
- package/dist/cli/coverage/aggregate.d.ts +24 -0
- package/dist/cli/coverage/aggregate.d.ts.map +1 -0
- package/dist/cli/coverage/aggregate.js +215 -0
- package/dist/cli/coverage/aggregate.js.map +1 -0
- package/dist/cli/coverage/collect.d.ts +13 -0
- package/dist/cli/coverage/collect.d.ts.map +1 -0
- package/dist/cli/coverage/collect.js +66 -0
- package/dist/cli/coverage/collect.js.map +1 -0
- package/dist/cli/coverage/diff/base.d.ts +17 -0
- package/dist/cli/coverage/diff/base.d.ts.map +1 -0
- package/dist/cli/coverage/diff/base.js +44 -0
- package/dist/cli/coverage/diff/base.js.map +1 -0
- package/dist/cli/coverage/diff/index.d.ts +25 -0
- package/dist/cli/coverage/diff/index.d.ts.map +1 -0
- package/dist/cli/coverage/diff/index.js +119 -0
- package/dist/cli/coverage/diff/index.js.map +1 -0
- package/dist/cli/coverage/diff/overlay.d.ts +19 -0
- package/dist/cli/coverage/diff/overlay.d.ts.map +1 -0
- package/dist/cli/coverage/diff/overlay.js +58 -0
- package/dist/cli/coverage/diff/overlay.js.map +1 -0
- package/dist/cli/coverage/diff/parse.d.ts +27 -0
- package/dist/cli/coverage/diff/parse.d.ts.map +1 -0
- package/dist/cli/coverage/diff/parse.js +105 -0
- package/dist/cli/coverage/diff/parse.js.map +1 -0
- package/dist/cli/coverage/diff/reporters.d.ts +12 -0
- package/dist/cli/coverage/diff/reporters.d.ts.map +1 -0
- package/dist/cli/coverage/diff/reporters.js +59 -0
- package/dist/cli/coverage/diff/reporters.js.map +1 -0
- package/dist/cli/coverage/diff/types.d.ts +46 -0
- package/dist/cli/coverage/diff/types.d.ts.map +1 -0
- package/dist/cli/coverage/diff/types.js +15 -0
- package/dist/cli/coverage/diff/types.js.map +1 -0
- package/dist/cli/coverage/filter.d.ts +13 -0
- package/dist/cli/coverage/filter.d.ts.map +1 -0
- package/dist/cli/coverage/filter.js +60 -0
- package/dist/cli/coverage/filter.js.map +1 -0
- package/dist/cli/coverage/glob.d.ts +4 -0
- package/dist/cli/coverage/glob.d.ts.map +1 -0
- package/dist/cli/coverage/glob.js +0 -0
- package/dist/cli/coverage/glob.js.map +1 -0
- package/dist/cli/coverage/index.d.ts +40 -0
- package/dist/cli/coverage/index.d.ts.map +1 -0
- package/dist/cli/coverage/index.js +85 -0
- package/dist/cli/coverage/index.js.map +1 -0
- package/dist/cli/coverage/reporters/json.d.ts +13 -0
- package/dist/cli/coverage/reporters/json.d.ts.map +1 -0
- package/dist/cli/coverage/reporters/json.js +37 -0
- package/dist/cli/coverage/reporters/json.js.map +1 -0
- package/dist/cli/coverage/reporters/lcov.d.ts +13 -0
- package/dist/cli/coverage/reporters/lcov.d.ts.map +1 -0
- package/dist/cli/coverage/reporters/lcov.js +51 -0
- package/dist/cli/coverage/reporters/lcov.js.map +1 -0
- package/dist/cli/coverage/reporters/text.d.ts +8 -0
- package/dist/cli/coverage/reporters/text.d.ts.map +1 -0
- package/dist/cli/coverage/reporters/text.js +39 -0
- package/dist/cli/coverage/reporters/text.js.map +1 -0
- package/dist/cli/coverage/thresholds.d.ts +14 -0
- package/dist/cli/coverage/thresholds.d.ts.map +1 -0
- package/dist/cli/coverage/thresholds.js +58 -0
- package/dist/cli/coverage/thresholds.js.map +1 -0
- package/dist/cli/coverage/types.d.ts +118 -0
- package/dist/cli/coverage/types.d.ts.map +1 -0
- package/dist/cli/coverage/types.js +8 -0
- package/dist/cli/coverage/types.js.map +1 -0
- package/dist/cli/discover.d.ts +27 -0
- package/dist/cli/discover.d.ts.map +1 -0
- package/dist/cli/discover.js +142 -0
- package/dist/cli/discover.js.map +1 -0
- package/dist/cli/native.d.ts +43 -0
- package/dist/cli/native.d.ts.map +1 -0
- package/dist/cli/native.js +64 -0
- package/dist/cli/native.js.map +1 -0
- package/dist/cli/pool.d.ts +55 -0
- package/dist/cli/pool.d.ts.map +1 -0
- package/dist/cli/pool.js +404 -0
- package/dist/cli/pool.js.map +1 -0
- package/dist/cli/reporter.d.ts +51 -0
- package/dist/cli/reporter.d.ts.map +1 -0
- package/dist/cli/reporter.js +124 -0
- package/dist/cli/reporter.js.map +1 -0
- package/dist/cli/run.d.ts +61 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +302 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/summary.d.ts +18 -0
- package/dist/cli/summary.d.ts.map +1 -0
- package/dist/cli/summary.js +20 -0
- package/dist/cli/summary.js.map +1 -0
- package/dist/cli/watch/loop.d.ts +26 -0
- package/dist/cli/watch/loop.d.ts.map +1 -0
- package/dist/cli/watch/loop.js +133 -0
- package/dist/cli/watch/loop.js.map +1 -0
- package/dist/cli/watch/types.d.ts +22 -0
- package/dist/cli/watch/types.d.ts.map +1 -0
- package/dist/cli/watch/types.js +6 -0
- package/dist/cli/watch/types.js.map +1 -0
- package/dist/cli/watch/watcher.d.ts +25 -0
- package/dist/cli/watch/watcher.d.ts.map +1 -0
- package/dist/cli/watch/watcher.js +122 -0
- package/dist/cli/watch/watcher.js.map +1 -0
- package/dist/container/index.d.ts +7 -0
- package/dist/container/index.d.ts.map +1 -0
- package/dist/container/index.js +6 -0
- package/dist/container/index.js.map +1 -0
- package/dist/container/override.d.ts +46 -0
- package/dist/container/override.d.ts.map +1 -0
- package/dist/container/override.js +67 -0
- package/dist/container/override.js.map +1 -0
- package/dist/container/spy.d.ts +21 -0
- package/dist/container/spy.d.ts.map +1 -0
- package/dist/container/spy.js +23 -0
- package/dist/container/spy.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/assertion-error.d.ts +20 -0
- package/dist/runtime/assertion-error.d.ts.map +1 -0
- package/dist/runtime/assertion-error.js +23 -0
- package/dist/runtime/assertion-error.js.map +1 -0
- package/dist/runtime/cli-worker.d.ts +25 -0
- package/dist/runtime/cli-worker.d.ts.map +1 -0
- package/dist/runtime/cli-worker.js +128 -0
- package/dist/runtime/cli-worker.js.map +1 -0
- package/dist/runtime/equals.d.ts +25 -0
- package/dist/runtime/equals.d.ts.map +1 -0
- package/dist/runtime/equals.js +343 -0
- package/dist/runtime/equals.js.map +1 -0
- package/dist/runtime/expect.d.ts +32 -0
- package/dist/runtime/expect.d.ts.map +1 -0
- package/dist/runtime/expect.js +121 -0
- package/dist/runtime/expect.js.map +1 -0
- package/dist/runtime/index.d.ts +28 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +17 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/lifecycle.d.ts +11 -0
- package/dist/runtime/lifecycle.d.ts.map +1 -0
- package/dist/runtime/lifecycle.js +10 -0
- package/dist/runtime/lifecycle.js.map +1 -0
- package/dist/runtime/matchers.d.ts +42 -0
- package/dist/runtime/matchers.d.ts.map +1 -0
- package/dist/runtime/matchers.js +375 -0
- package/dist/runtime/matchers.js.map +1 -0
- package/dist/runtime/run.d.ts +55 -0
- package/dist/runtime/run.d.ts.map +1 -0
- package/dist/runtime/run.js +456 -0
- package/dist/runtime/run.js.map +1 -0
- package/dist/runtime/suite.d.ts +65 -0
- package/dist/runtime/suite.d.ts.map +1 -0
- package/dist/runtime/suite.js +203 -0
- package/dist/runtime/suite.js.map +1 -0
- package/dist/runtime/test-context.d.ts +25 -0
- package/dist/runtime/test-context.d.ts.map +1 -0
- package/dist/runtime/test-context.js +52 -0
- package/dist/runtime/test-context.js.map +1 -0
- package/dist/runtime/vi/fake-timers.d.ts +48 -0
- package/dist/runtime/vi/fake-timers.d.ts.map +1 -0
- package/dist/runtime/vi/fake-timers.js +317 -0
- package/dist/runtime/vi/fake-timers.js.map +1 -0
- package/dist/runtime/vi/index.d.ts +70 -0
- package/dist/runtime/vi/index.d.ts.map +1 -0
- package/dist/runtime/vi/index.js +209 -0
- package/dist/runtime/vi/index.js.map +1 -0
- package/dist/runtime/vi/spy.d.ts +54 -0
- package/dist/runtime/vi/spy.d.ts.map +1 -0
- package/dist/runtime/vi/spy.js +159 -0
- package/dist/runtime/vi/spy.js.map +1 -0
- package/dist/runtime/vi/spyOn.d.ts +28 -0
- package/dist/runtime/vi/spyOn.d.ts.map +1 -0
- package/dist/runtime/vi/spyOn.js +121 -0
- package/dist/runtime/vi/spyOn.js.map +1 -0
- package/dist/runtime/vi/system-time.d.ts +30 -0
- package/dist/runtime/vi/system-time.d.ts.map +1 -0
- package/dist/runtime/vi/system-time.js +100 -0
- package/dist/runtime/vi/system-time.js.map +1 -0
- package/dist/runtime/worker.d.ts +26 -0
- package/dist/runtime/worker.d.ts.map +1 -0
- package/dist/runtime/worker.js +195 -0
- package/dist/runtime/worker.js.map +1 -0
- package/dist/time/freeze.d.ts +80 -0
- package/dist/time/freeze.d.ts.map +1 -0
- package/dist/time/freeze.js +184 -0
- package/dist/time/freeze.js.map +1 -0
- package/dist/time/index.d.ts +16 -0
- package/dist/time/index.d.ts.map +1 -0
- package/dist/time/index.js +15 -0
- package/dist/time/index.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI worker entry — what the orchestrator spawns as a child process.
|
|
3
|
+
*
|
|
4
|
+
* Protocol:
|
|
5
|
+
* 1. Parent writes one `{ "type":"run", "file":"...", "timeoutMs":n, "nonce":"..." }`
|
|
6
|
+
* line to stdin, then closes stdin.
|
|
7
|
+
* 2. We run the file via `runTestFile`.
|
|
8
|
+
* 3. We emit a single framed line on **stderr** prefixed with
|
|
9
|
+
* `__HELIX_RESULT__`, with the parent's `nonce` echoed back so a
|
|
10
|
+
* test that happens to print that prefix can't spoof the result.
|
|
11
|
+
* 4. Exit with code 0 on `result`, 1 on `error`.
|
|
12
|
+
*
|
|
13
|
+
* Pre-handshake errors (e.g. malformed instruction on stdin) are emitted
|
|
14
|
+
* with the `__helix_pre_handshake__` magic nonce — the parent accepts
|
|
15
|
+
* those only for `type === "error"` so a fixture can't use the magic to
|
|
16
|
+
* fake success.
|
|
17
|
+
*
|
|
18
|
+
* Flush discipline: on the happy path we await the stream drain callback
|
|
19
|
+
* before setting `process.exitCode` so the frame always reaches the
|
|
20
|
+
* parent. For the fatal `unhandledRejection` path we use `fs.writeSync`
|
|
21
|
+
* on fd 2 to guarantee the bytes hit the pipe before Node tears the
|
|
22
|
+
* process down.
|
|
23
|
+
*/
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=cli-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-worker.d.ts","sourceRoot":"","sources":["../../src/runtime/cli-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI worker entry — what the orchestrator spawns as a child process.
|
|
3
|
+
*
|
|
4
|
+
* Protocol:
|
|
5
|
+
* 1. Parent writes one `{ "type":"run", "file":"...", "timeoutMs":n, "nonce":"..." }`
|
|
6
|
+
* line to stdin, then closes stdin.
|
|
7
|
+
* 2. We run the file via `runTestFile`.
|
|
8
|
+
* 3. We emit a single framed line on **stderr** prefixed with
|
|
9
|
+
* `__HELIX_RESULT__`, with the parent's `nonce` echoed back so a
|
|
10
|
+
* test that happens to print that prefix can't spoof the result.
|
|
11
|
+
* 4. Exit with code 0 on `result`, 1 on `error`.
|
|
12
|
+
*
|
|
13
|
+
* Pre-handshake errors (e.g. malformed instruction on stdin) are emitted
|
|
14
|
+
* with the `__helix_pre_handshake__` magic nonce — the parent accepts
|
|
15
|
+
* those only for `type === "error"` so a fixture can't use the magic to
|
|
16
|
+
* fake success.
|
|
17
|
+
*
|
|
18
|
+
* Flush discipline: on the happy path we await the stream drain callback
|
|
19
|
+
* before setting `process.exitCode` so the frame always reaches the
|
|
20
|
+
* parent. For the fatal `unhandledRejection` path we use `fs.writeSync`
|
|
21
|
+
* on fd 2 to guarantee the bytes hit the pipe before Node tears the
|
|
22
|
+
* process down.
|
|
23
|
+
*/
|
|
24
|
+
import { writeSync } from "node:fs";
|
|
25
|
+
import { createInterface } from "node:readline";
|
|
26
|
+
import { runTestFile } from "./worker.js";
|
|
27
|
+
const FRAME_PREFIX = "__HELIX_RESULT__";
|
|
28
|
+
const PRE_HANDSHAKE_NONCE = "__helix_pre_handshake__";
|
|
29
|
+
async function emit(msg) {
|
|
30
|
+
const line = `${FRAME_PREFIX}${JSON.stringify(msg)}\n`;
|
|
31
|
+
await new Promise((resolve, reject) => {
|
|
32
|
+
process.stderr.write(line, (err) => {
|
|
33
|
+
if (err)
|
|
34
|
+
reject(err);
|
|
35
|
+
else
|
|
36
|
+
resolve();
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Synchronous emit used from fatal handlers (unhandledRejection) where
|
|
42
|
+
* we can't afford to lose the frame to the process tear-down racing the
|
|
43
|
+
* pipe drain. `writeSync` blocks until the kernel accepts the bytes.
|
|
44
|
+
*/
|
|
45
|
+
function emitSync(msg) {
|
|
46
|
+
try {
|
|
47
|
+
writeSync(2, `${FRAME_PREFIX}${JSON.stringify(msg)}\n`);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
/* pipe broken — nothing we can do */
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async function readInstruction() {
|
|
54
|
+
const rl = createInterface({ input: process.stdin });
|
|
55
|
+
for await (const line of rl) {
|
|
56
|
+
const trimmed = line.trim();
|
|
57
|
+
if (!trimmed)
|
|
58
|
+
continue;
|
|
59
|
+
// Parse inside try so a bad JSON line propagates as a typed error
|
|
60
|
+
// rather than leaking a SyntaxError that escapes `for await`.
|
|
61
|
+
let parsed;
|
|
62
|
+
try {
|
|
63
|
+
parsed = JSON.parse(trimmed);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
throw new Error(`malformed instruction JSON: ${err instanceof Error ? err.message : String(err)}`);
|
|
67
|
+
}
|
|
68
|
+
if (parsed &&
|
|
69
|
+
typeof parsed === "object" &&
|
|
70
|
+
parsed.type === "run" &&
|
|
71
|
+
typeof parsed.file === "string" &&
|
|
72
|
+
typeof parsed.nonce === "string") {
|
|
73
|
+
return parsed;
|
|
74
|
+
}
|
|
75
|
+
throw new Error(`invalid instruction shape: ${trimmed}`);
|
|
76
|
+
}
|
|
77
|
+
throw new Error("stdin closed before instruction arrived");
|
|
78
|
+
}
|
|
79
|
+
async function main() {
|
|
80
|
+
let instr;
|
|
81
|
+
try {
|
|
82
|
+
instr = await readInstruction();
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
// We don't know the real nonce yet — emit with the pre-handshake
|
|
86
|
+
// magic so the parent accepts this specific error path.
|
|
87
|
+
await emit({
|
|
88
|
+
type: "error",
|
|
89
|
+
file: undefined,
|
|
90
|
+
message: err instanceof Error ? err.message : String(err),
|
|
91
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
92
|
+
nonce: PRE_HANDSHAKE_NONCE,
|
|
93
|
+
}).catch(() => { });
|
|
94
|
+
process.exitCode = 1;
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Installed AFTER the instruction is read so we can echo the right nonce.
|
|
98
|
+
// Synchronous write so Node's default "crash on unhandledRejection"
|
|
99
|
+
// behaviour can't evict the frame before the parent reads it.
|
|
100
|
+
process.on("unhandledRejection", (reason) => {
|
|
101
|
+
emitSync({
|
|
102
|
+
type: "error",
|
|
103
|
+
file: instr.file,
|
|
104
|
+
message: `unhandledRejection: ${reason instanceof Error ? reason.message : String(reason)}`,
|
|
105
|
+
stack: reason instanceof Error ? reason.stack : undefined,
|
|
106
|
+
nonce: instr.nonce,
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
try {
|
|
110
|
+
const result = await runTestFile(instr.file, {
|
|
111
|
+
timeoutMs: instr.timeoutMs,
|
|
112
|
+
});
|
|
113
|
+
await emit({ type: "result", result, nonce: instr.nonce });
|
|
114
|
+
process.exitCode = result.totals.fail > 0 ? 1 : 0;
|
|
115
|
+
}
|
|
116
|
+
catch (err) {
|
|
117
|
+
await emit({
|
|
118
|
+
type: "error",
|
|
119
|
+
file: instr.file,
|
|
120
|
+
message: err instanceof Error ? err.message : String(err),
|
|
121
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
122
|
+
nonce: instr.nonce,
|
|
123
|
+
}).catch(() => { });
|
|
124
|
+
process.exitCode = 1;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
void main();
|
|
128
|
+
//# sourceMappingURL=cli-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-worker.js","sourceRoot":"","sources":["../../src/runtime/cli-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,YAAY,GAAG,kBAAkB,CAAC;AACxC,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AAStD,KAAK,UAAU,IAAI,CAAC,GAAY;IAC/B,MAAM,IAAI,GAAG,GAAG,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IACvD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;YAClC,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;gBAChB,OAAO,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,QAAQ,CAAC,GAAY;IAC7B,IAAI,CAAC;QACJ,SAAS,CAAC,CAAC,EAAE,GAAG,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACR,qCAAqC;IACtC,CAAC;AACF,CAAC;AAED,KAAK,UAAU,eAAe;IAC7B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACrD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,kEAAkE;QAClE,8DAA8D;QAC9D,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACJ,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACd,+BAA+B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACjF,CAAC;QACH,CAAC;QACD,IACC,MAAM;YACN,OAAO,MAAM,KAAK,QAAQ;YACzB,MAA6B,CAAC,IAAI,KAAK,KAAK;YAC7C,OAAQ,MAA6B,CAAC,IAAI,KAAK,QAAQ;YACvD,OAAQ,MAA8B,CAAC,KAAK,KAAK,QAAQ,EACxD,CAAC;YACF,OAAO,MAAoB,CAAC;QAC7B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;AAC5D,CAAC;AAED,KAAK,UAAU,IAAI;IAClB,IAAI,KAAiB,CAAC;IACtB,IAAI,CAAC;QACJ,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,iEAAiE;QACjE,wDAAwD;QACxD,MAAM,IAAI,CAAC;YACV,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACzD,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACnD,KAAK,EAAE,mBAAmB;SAC1B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACR,CAAC;IAED,0EAA0E;IAC1E,oEAAoE;IACpE,8DAA8D;IAC9D,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC3C,QAAQ,CAAC;YACR,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,uBAAuB,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YAC3F,KAAK,EAAE,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACzD,KAAK,EAAE,KAAK,CAAC,KAAK;SAClB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE;YAC5C,SAAS,EAAE,KAAK,CAAC,SAAS;SAC1B,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,IAAI,CAAC;YACV,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YACzD,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YACnD,KAAK,EAAE,KAAK,CAAC,KAAK;SAClB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACtB,CAAC;AACF,CAAC;AAED,KAAK,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep structural equality — Vitest-compatible semantics.
|
|
3
|
+
*
|
|
4
|
+
* Handles: primitives (Object.is for NaN; ±0 treated equal in non-strict toEqual),
|
|
5
|
+
* Date, RegExp, Map, Set, Array, Buffer, typed arrays, DataView, boxed primitives
|
|
6
|
+
* (Number/String/Boolean), Error instances, circular refs, Symbol-keyed props.
|
|
7
|
+
* Ignores prototypes for plain objects (matches Jest/Vitest `toEqual`).
|
|
8
|
+
*
|
|
9
|
+
* `toStrictEqual` semantics (checks prototype + undefined-vs-missing keys)
|
|
10
|
+
* are supported via the `strict` option.
|
|
11
|
+
*/
|
|
12
|
+
export interface EqualsOptions {
|
|
13
|
+
/** `toStrictEqual` semantics — prototypes matched, undefined keys distinguished from missing. */
|
|
14
|
+
strict?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function equals(a: unknown, b: unknown, options?: EqualsOptions): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Partial match — every key/element in `expected` must match in `actual`.
|
|
19
|
+
* Extra keys in `actual` are allowed for plain objects.
|
|
20
|
+
* Arrays must have the same length (Vitest v1+ semantics, not Jest).
|
|
21
|
+
* Date / RegExp / Error / Map / Set / TypedArray / Buffer / DataView delegate
|
|
22
|
+
* to `equals` — "partial" is ill-defined for them.
|
|
23
|
+
*/
|
|
24
|
+
export declare function partialEquals(actual: unknown, expected: unknown): boolean;
|
|
25
|
+
//# sourceMappingURL=equals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equals.d.ts","sourceRoot":"","sources":["../../src/runtime/equals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,aAAa;IAC7B,iGAAiG;IACjG,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAID,wBAAgB,MAAM,CACrB,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,OAAO,EACV,OAAO,GAAE,aAAkB,GACzB,OAAO,CAET;AA0TD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAEzE"}
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deep structural equality — Vitest-compatible semantics.
|
|
3
|
+
*
|
|
4
|
+
* Handles: primitives (Object.is for NaN; ±0 treated equal in non-strict toEqual),
|
|
5
|
+
* Date, RegExp, Map, Set, Array, Buffer, typed arrays, DataView, boxed primitives
|
|
6
|
+
* (Number/String/Boolean), Error instances, circular refs, Symbol-keyed props.
|
|
7
|
+
* Ignores prototypes for plain objects (matches Jest/Vitest `toEqual`).
|
|
8
|
+
*
|
|
9
|
+
* `toStrictEqual` semantics (checks prototype + undefined-vs-missing keys)
|
|
10
|
+
* are supported via the `strict` option.
|
|
11
|
+
*/
|
|
12
|
+
export function equals(a, b, options = {}) {
|
|
13
|
+
return eq(a, b, options, new WeakMap());
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Record a pair as "in progress" in BOTH directions so a later visit to the
|
|
17
|
+
* mirrored pair (b,a) is detected as a cycle too.
|
|
18
|
+
*/
|
|
19
|
+
function markSeen(seen, a, b) {
|
|
20
|
+
let setA = seen.get(a);
|
|
21
|
+
if (!setA) {
|
|
22
|
+
setA = new WeakSet();
|
|
23
|
+
seen.set(a, setA);
|
|
24
|
+
}
|
|
25
|
+
setA.add(b);
|
|
26
|
+
let setB = seen.get(b);
|
|
27
|
+
if (!setB) {
|
|
28
|
+
setB = new WeakSet();
|
|
29
|
+
seen.set(b, setB);
|
|
30
|
+
}
|
|
31
|
+
setB.add(a);
|
|
32
|
+
}
|
|
33
|
+
function seenPair(seen, a, b) {
|
|
34
|
+
return seen.get(a)?.has(b) ?? false;
|
|
35
|
+
}
|
|
36
|
+
function isBoxedPrimitive(v) {
|
|
37
|
+
return v instanceof Number || v instanceof String || v instanceof Boolean;
|
|
38
|
+
}
|
|
39
|
+
// Boxed primitives — unwrap so `new Number(1)` vs `new Number(2)` differ
|
|
40
|
+
// properly; a box compared against anything not the same box type is unequal.
|
|
41
|
+
function compareBoxed(a, b) {
|
|
42
|
+
if (a instanceof Number && b instanceof Number)
|
|
43
|
+
return Object.is(a.valueOf(), b.valueOf());
|
|
44
|
+
if (a instanceof String && b instanceof String)
|
|
45
|
+
return Object.is(a.valueOf(), b.valueOf());
|
|
46
|
+
if (a instanceof Boolean && b instanceof Boolean)
|
|
47
|
+
return Object.is(a.valueOf(), b.valueOf());
|
|
48
|
+
if (isBoxedPrimitive(a) || isBoxedPrimitive(b))
|
|
49
|
+
return false;
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
function compareDate(a, b) {
|
|
53
|
+
if (!(a instanceof Date) && !(b instanceof Date))
|
|
54
|
+
return undefined;
|
|
55
|
+
return a instanceof Date && b instanceof Date && a.getTime() === b.getTime();
|
|
56
|
+
}
|
|
57
|
+
function compareRegExp(a, b) {
|
|
58
|
+
if (!(a instanceof RegExp) && !(b instanceof RegExp))
|
|
59
|
+
return undefined;
|
|
60
|
+
return (a instanceof RegExp &&
|
|
61
|
+
b instanceof RegExp &&
|
|
62
|
+
a.source === b.source &&
|
|
63
|
+
a.flags === b.flags);
|
|
64
|
+
}
|
|
65
|
+
// Error instances — compare name + message + own enumerable keys. The built-in
|
|
66
|
+
// fields are non-enumerable so plain-keys comparison alone would report any two
|
|
67
|
+
// Errors as equal.
|
|
68
|
+
function compareError(a, b, opts, seen) {
|
|
69
|
+
if (!(a instanceof Error) && !(b instanceof Error))
|
|
70
|
+
return undefined;
|
|
71
|
+
if (!(a instanceof Error && b instanceof Error))
|
|
72
|
+
return false;
|
|
73
|
+
if (a.name !== b.name)
|
|
74
|
+
return false;
|
|
75
|
+
if (a.message !== b.message)
|
|
76
|
+
return false;
|
|
77
|
+
return compareOwnKeys(a, b, opts, seen);
|
|
78
|
+
}
|
|
79
|
+
// DataView — compare by byteLength + getUint8 byte-for-byte.
|
|
80
|
+
function compareDataView(a, b) {
|
|
81
|
+
if (!(a instanceof DataView) && !(b instanceof DataView))
|
|
82
|
+
return undefined;
|
|
83
|
+
if (!(a instanceof DataView && b instanceof DataView))
|
|
84
|
+
return false;
|
|
85
|
+
if (a.byteLength !== b.byteLength)
|
|
86
|
+
return false;
|
|
87
|
+
for (let i = 0; i < a.byteLength; i += 1) {
|
|
88
|
+
if (a.getUint8(i) !== b.getUint8(i))
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
// Buffer — shortcut via Buffer.equals when both are Buffers. When only one is a
|
|
94
|
+
// Buffer, return `undefined` so the typed-array comparator handles it (a Buffer
|
|
95
|
+
// is a Uint8Array): a constructor mismatch there yields the correct inequality.
|
|
96
|
+
function compareBuffer(a, b) {
|
|
97
|
+
if (typeof Buffer === "undefined")
|
|
98
|
+
return undefined;
|
|
99
|
+
if (Buffer.isBuffer(a) && Buffer.isBuffer(b))
|
|
100
|
+
return a.equals(b);
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
// Typed arrays (Uint8Array, Int16Array, Float64Array, BigInt64Array, …).
|
|
104
|
+
// Require matching constructor so Uint8Array !== Int8Array even when values coincide.
|
|
105
|
+
function compareTypedArray(a, b, opts) {
|
|
106
|
+
const viewA = asNumericTypedArray(a);
|
|
107
|
+
const viewB = asNumericTypedArray(b);
|
|
108
|
+
if (!viewA && !viewB)
|
|
109
|
+
return undefined;
|
|
110
|
+
if (!viewA || !viewB)
|
|
111
|
+
return false;
|
|
112
|
+
if (a.constructor !== b.constructor)
|
|
113
|
+
return false;
|
|
114
|
+
if (viewA.length !== viewB.length)
|
|
115
|
+
return false;
|
|
116
|
+
for (let i = 0; i < viewA.length; i += 1) {
|
|
117
|
+
const av = viewA[i];
|
|
118
|
+
const bv = viewB[i];
|
|
119
|
+
// Object.is so NaN === NaN inside Float32/64Array.
|
|
120
|
+
if (Object.is(av, bv))
|
|
121
|
+
continue;
|
|
122
|
+
if (opts.strict)
|
|
123
|
+
return false;
|
|
124
|
+
if (av !== bv)
|
|
125
|
+
return false; // non-strict: ±0 already caught by `===`.
|
|
126
|
+
}
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
function compareArray(a, b, opts, seen) {
|
|
130
|
+
if (!Array.isArray(a) && !Array.isArray(b))
|
|
131
|
+
return undefined;
|
|
132
|
+
if (!(Array.isArray(a) && Array.isArray(b)))
|
|
133
|
+
return false;
|
|
134
|
+
if (a.length !== b.length)
|
|
135
|
+
return false;
|
|
136
|
+
for (let i = 0; i < a.length; i += 1) {
|
|
137
|
+
if (!eq(a[i], b[i], opts, seen))
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
// Maps — structural key comparison supporting object keys.
|
|
143
|
+
function compareMap(a, b, opts, seen) {
|
|
144
|
+
if (!(a instanceof Map) && !(b instanceof Map))
|
|
145
|
+
return undefined;
|
|
146
|
+
if (!(a instanceof Map && b instanceof Map))
|
|
147
|
+
return false;
|
|
148
|
+
if (a.size !== b.size)
|
|
149
|
+
return false;
|
|
150
|
+
for (const [kA, vA] of a) {
|
|
151
|
+
// Fast path: identity/primitive key hit.
|
|
152
|
+
if (b.has(kA) && eq(vA, b.get(kA), opts, seen))
|
|
153
|
+
continue;
|
|
154
|
+
// Structural search across remaining entries.
|
|
155
|
+
let matched = false;
|
|
156
|
+
for (const [kB, vB] of b) {
|
|
157
|
+
if (eq(kA, kB, opts, seen) && eq(vA, vB, opts, seen)) {
|
|
158
|
+
matched = true;
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (!matched)
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
// Sets — deep structural. Use a fresh WeakMap per inner comparison so an
|
|
168
|
+
// earlier failed candidate does not poison the next one via cycle cache.
|
|
169
|
+
function compareSet(a, b, opts) {
|
|
170
|
+
if (!(a instanceof Set) && !(b instanceof Set))
|
|
171
|
+
return undefined;
|
|
172
|
+
if (!(a instanceof Set && b instanceof Set))
|
|
173
|
+
return false;
|
|
174
|
+
if (a.size !== b.size)
|
|
175
|
+
return false;
|
|
176
|
+
for (const v of a) {
|
|
177
|
+
let found = false;
|
|
178
|
+
for (const w of b) {
|
|
179
|
+
if (eq(v, w, opts, new WeakMap())) {
|
|
180
|
+
found = true;
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (!found)
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
// Order matters — mirrors the original `instanceof` ladder. Buffer sits before
|
|
190
|
+
// typed arrays so the both-Buffer fast path wins before the generic view check.
|
|
191
|
+
const STRUCTURAL_COMPARATORS = [
|
|
192
|
+
compareDate,
|
|
193
|
+
compareRegExp,
|
|
194
|
+
compareError,
|
|
195
|
+
compareDataView,
|
|
196
|
+
compareBuffer,
|
|
197
|
+
compareTypedArray,
|
|
198
|
+
compareArray,
|
|
199
|
+
compareMap,
|
|
200
|
+
compareSet,
|
|
201
|
+
];
|
|
202
|
+
function eq(a, b, opts, seen) {
|
|
203
|
+
// Identity / NaN (Object.is). In non-strict mode, ±0 are also equal.
|
|
204
|
+
if (Object.is(a, b))
|
|
205
|
+
return true;
|
|
206
|
+
if (!opts.strict && a === b)
|
|
207
|
+
return true;
|
|
208
|
+
if (a === null || b === null)
|
|
209
|
+
return false;
|
|
210
|
+
if (typeof a !== typeof b)
|
|
211
|
+
return false;
|
|
212
|
+
if (typeof a !== "object")
|
|
213
|
+
return false;
|
|
214
|
+
const objA = a;
|
|
215
|
+
const objB = b;
|
|
216
|
+
if (seenPair(seen, objA, objB))
|
|
217
|
+
return true;
|
|
218
|
+
markSeen(seen, objA, objB);
|
|
219
|
+
const boxed = compareBoxed(objA, objB);
|
|
220
|
+
if (boxed !== undefined)
|
|
221
|
+
return boxed;
|
|
222
|
+
// Strict: differing prototypes → not equal (plain `{}` vs class instance).
|
|
223
|
+
if (opts.strict &&
|
|
224
|
+
Object.getPrototypeOf(objA) !== Object.getPrototypeOf(objB)) {
|
|
225
|
+
return false;
|
|
226
|
+
}
|
|
227
|
+
for (const compare of STRUCTURAL_COMPARATORS) {
|
|
228
|
+
const result = compare(objA, objB, opts, seen);
|
|
229
|
+
if (result !== undefined)
|
|
230
|
+
return result;
|
|
231
|
+
}
|
|
232
|
+
return compareOwnKeys(objA, objB, opts, seen);
|
|
233
|
+
}
|
|
234
|
+
function getProp(obj, key) {
|
|
235
|
+
return Reflect.get(obj, key);
|
|
236
|
+
}
|
|
237
|
+
function asNumericTypedArray(v) {
|
|
238
|
+
if (v instanceof Int8Array ||
|
|
239
|
+
v instanceof Uint8Array ||
|
|
240
|
+
v instanceof Uint8ClampedArray ||
|
|
241
|
+
v instanceof Int16Array ||
|
|
242
|
+
v instanceof Uint16Array ||
|
|
243
|
+
v instanceof Int32Array ||
|
|
244
|
+
v instanceof Uint32Array ||
|
|
245
|
+
v instanceof Float32Array ||
|
|
246
|
+
v instanceof Float64Array ||
|
|
247
|
+
v instanceof BigInt64Array ||
|
|
248
|
+
v instanceof BigUint64Array) {
|
|
249
|
+
return v;
|
|
250
|
+
}
|
|
251
|
+
return undefined;
|
|
252
|
+
}
|
|
253
|
+
function compareOwnKeys(objA, objB, opts, seen) {
|
|
254
|
+
const keysA = ownEnumerableKeys(objA);
|
|
255
|
+
const keysB = ownEnumerableKeys(objB);
|
|
256
|
+
if (opts.strict) {
|
|
257
|
+
if (keysA.length !== keysB.length)
|
|
258
|
+
return false;
|
|
259
|
+
for (const k of keysA) {
|
|
260
|
+
if (!Object.prototype.propertyIsEnumerable.call(objB, k))
|
|
261
|
+
return false;
|
|
262
|
+
if (!eq(getProp(objA, k), getProp(objB, k), opts, seen))
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
return true;
|
|
266
|
+
}
|
|
267
|
+
// Non-strict: undefined value ≡ missing key.
|
|
268
|
+
const union = new Set([...keysA, ...keysB]);
|
|
269
|
+
for (const k of union) {
|
|
270
|
+
const va = getProp(objA, k);
|
|
271
|
+
const vb = getProp(objB, k);
|
|
272
|
+
if (va === undefined && vb === undefined)
|
|
273
|
+
continue;
|
|
274
|
+
if (!eq(va, vb, opts, seen))
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
return true;
|
|
278
|
+
}
|
|
279
|
+
function ownEnumerableKeys(obj) {
|
|
280
|
+
const strings = Object.keys(obj);
|
|
281
|
+
const symbols = Object.getOwnPropertySymbols(obj).filter((s) => Object.prototype.propertyIsEnumerable.call(obj, s));
|
|
282
|
+
return [...strings, ...symbols];
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Partial match — every key/element in `expected` must match in `actual`.
|
|
286
|
+
* Extra keys in `actual` are allowed for plain objects.
|
|
287
|
+
* Arrays must have the same length (Vitest v1+ semantics, not Jest).
|
|
288
|
+
* Date / RegExp / Error / Map / Set / TypedArray / Buffer / DataView delegate
|
|
289
|
+
* to `equals` — "partial" is ill-defined for them.
|
|
290
|
+
*/
|
|
291
|
+
export function partialEquals(actual, expected) {
|
|
292
|
+
return partial(actual, expected, new WeakMap());
|
|
293
|
+
}
|
|
294
|
+
function partial(actual, expected, seen) {
|
|
295
|
+
if (Object.is(actual, expected))
|
|
296
|
+
return true;
|
|
297
|
+
if (expected === null || expected === undefined) {
|
|
298
|
+
return actual === expected;
|
|
299
|
+
}
|
|
300
|
+
if (typeof expected !== "object") {
|
|
301
|
+
return equals(actual, expected);
|
|
302
|
+
}
|
|
303
|
+
if (typeof actual !== "object" || actual === null)
|
|
304
|
+
return false;
|
|
305
|
+
// Both narrowed to object by the guards above — no cast needed.
|
|
306
|
+
const objE = expected;
|
|
307
|
+
const objA = actual;
|
|
308
|
+
if (seenPair(seen, objA, objE))
|
|
309
|
+
return true;
|
|
310
|
+
markSeen(seen, objA, objE);
|
|
311
|
+
// Types with no "partial" semantics — fall through to full equality.
|
|
312
|
+
if (lacksPartialSemantics(objE)) {
|
|
313
|
+
return equals(actual, expected);
|
|
314
|
+
}
|
|
315
|
+
if (Array.isArray(expected)) {
|
|
316
|
+
if (!Array.isArray(actual))
|
|
317
|
+
return false;
|
|
318
|
+
if (actual.length !== expected.length)
|
|
319
|
+
return false;
|
|
320
|
+
for (let i = 0; i < expected.length; i += 1) {
|
|
321
|
+
if (!partial(actual[i], expected[i], seen))
|
|
322
|
+
return false;
|
|
323
|
+
}
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
for (const key of ownEnumerableKeys(objE)) {
|
|
327
|
+
if (!partial(getProp(objA, key), getProp(objE, key), seen))
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
return true;
|
|
331
|
+
}
|
|
332
|
+
/** Object kinds for which "partial" is ill-defined → fall back to full equals. */
|
|
333
|
+
function lacksPartialSemantics(value) {
|
|
334
|
+
return (value instanceof Date ||
|
|
335
|
+
value instanceof RegExp ||
|
|
336
|
+
value instanceof Error ||
|
|
337
|
+
value instanceof Map ||
|
|
338
|
+
value instanceof Set ||
|
|
339
|
+
value instanceof DataView ||
|
|
340
|
+
(typeof Buffer !== "undefined" && Buffer.isBuffer(value)) ||
|
|
341
|
+
(ArrayBuffer.isView(value) && !(value instanceof DataView)));
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=equals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"equals.js","sourceRoot":"","sources":["../../src/runtime/equals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `expect(value)` engine — chainable assertion API compatible with Vitest.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - All matchers in `./matchers.ts`
|
|
6
|
+
* - `.not.<matcher>()` — inverts pass/fail
|
|
7
|
+
* - `.resolves.<matcher>()` / `.rejects.<matcher>()` — async awaits on received
|
|
8
|
+
* - All four combinations: `.resolves.not`, `.rejects.not`, `.not.resolves`, `.not.rejects`
|
|
9
|
+
*/
|
|
10
|
+
import { type MatcherName, matchers } from "./matchers.js";
|
|
11
|
+
type MatcherArgs<Name extends MatcherName> = (typeof matchers)[Name] extends (received: unknown, ...args: infer A) => unknown ? A : never;
|
|
12
|
+
type SyncChain = {
|
|
13
|
+
[K in MatcherName]: (...args: MatcherArgs<K>) => void;
|
|
14
|
+
};
|
|
15
|
+
type AsyncChain = {
|
|
16
|
+
[K in MatcherName]: (...args: MatcherArgs<K>) => Promise<void>;
|
|
17
|
+
};
|
|
18
|
+
export type Assertion = SyncChain & {
|
|
19
|
+
not: SyncChain & {
|
|
20
|
+
resolves: AsyncChain;
|
|
21
|
+
rejects: AsyncChain;
|
|
22
|
+
};
|
|
23
|
+
resolves: AsyncChain & {
|
|
24
|
+
not: AsyncChain;
|
|
25
|
+
};
|
|
26
|
+
rejects: AsyncChain & {
|
|
27
|
+
not: AsyncChain;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
export declare function expect(received: unknown): Assertion;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=expect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expect.d.ts","sourceRoot":"","sources":["../../src/runtime/expect.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,KAAK,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE3D,KAAK,WAAW,CAAC,IAAI,SAAS,WAAW,IAAI,CAAC,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,CAC5E,QAAQ,EAAE,OAAO,EACjB,GAAG,IAAI,EAAE,MAAM,CAAC,KACZ,OAAO,GACT,CAAC,GACD,KAAK,CAAC;AAET,KAAK,SAAS,GAAG;KACf,CAAC,IAAI,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI;CACrD,CAAC;AAEF,KAAK,UAAU,GAAG;KAChB,CAAC,IAAI,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG;IACnC,GAAG,EAAE,SAAS,GAAG;QAChB,QAAQ,EAAE,UAAU,CAAC;QACrB,OAAO,EAAE,UAAU,CAAC;KACpB,CAAC;IACF,QAAQ,EAAE,UAAU,GAAG;QAAE,GAAG,EAAE,UAAU,CAAA;KAAE,CAAC;IAC3C,OAAO,EAAE,UAAU,GAAG;QAAE,GAAG,EAAE,UAAU,CAAA;KAAE,CAAC;CAC1C,CAAC;AAkHF,wBAAgB,MAAM,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAuBnD"}
|