@c9up/helix 0.1.3 → 0.1.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.
- 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/{src/container/override.ts → dist/container/override.d.ts} +6 -46
- 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/{src/container/spy.ts → dist/container/spy.d.ts} +2 -6
- 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/{src/index.ts → dist/index.js} +2 -25
- 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/{src/runtime/index.ts → dist/runtime/index.d.ts} +5 -27
- 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/{src/runtime/lifecycle.ts → dist/runtime/lifecycle.d.ts} +2 -8
- 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 +91 -0
- package/dist/runtime/suite.d.ts.map +1 -0
- package/dist/runtime/suite.js +206 -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/{src/time/index.ts → dist/time/index.d.ts} +1 -1
- 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/index.darwin-arm64.node +0 -0
- package/index.darwin-x64.node +0 -0
- package/index.linux-arm64-gnu.node +0 -0
- package/index.linux-x64-gnu.node +0 -0
- package/index.win32-x64-msvc.node +0 -0
- package/package.json +2 -2
- package/src/cli/coverage/aggregate.ts +0 -231
- package/src/cli/coverage/collect.ts +0 -63
- package/src/cli/coverage/diff/base.ts +0 -46
- package/src/cli/coverage/diff/index.ts +0 -160
- package/src/cli/coverage/diff/overlay.ts +0 -62
- package/src/cli/coverage/diff/parse.ts +0 -121
- package/src/cli/coverage/diff/reporters.ts +0 -82
- package/src/cli/coverage/diff/types.ts +0 -46
- package/src/cli/coverage/filter.ts +0 -71
- package/src/cli/coverage/glob.ts +0 -0
- package/src/cli/coverage/index.ts +0 -126
- package/src/cli/coverage/reporters/json.ts +0 -40
- package/src/cli/coverage/reporters/lcov.ts +0 -54
- package/src/cli/coverage/reporters/text.ts +0 -48
- package/src/cli/coverage/thresholds.ts +0 -73
- package/src/cli/coverage/types.ts +0 -93
- package/src/cli/discover.ts +0 -174
- package/src/cli/native.ts +0 -104
- package/src/cli/pool.ts +0 -486
- package/src/cli/reporter.ts +0 -155
- package/src/cli/run.ts +0 -440
- package/src/cli/summary.ts +0 -42
- package/src/cli/watch/loop.ts +0 -159
- package/src/cli/watch/types.ts +0 -22
- package/src/cli/watch/watcher.ts +0 -145
- package/src/container/index.ts +0 -16
- package/src/runtime/assertion-error.ts +0 -38
- package/src/runtime/cli-worker.ts +0 -140
- package/src/runtime/equals.ts +0 -400
- package/src/runtime/expect.ts +0 -173
- package/src/runtime/matchers.ts +0 -452
- package/src/runtime/run.ts +0 -573
- package/src/runtime/suite.ts +0 -310
- package/src/runtime/test-context.ts +0 -59
- package/src/runtime/vi/fake-timers.ts +0 -410
- package/src/runtime/vi/index.ts +0 -254
- package/src/runtime/vi/spy.ts +0 -224
- package/src/runtime/vi/spyOn.ts +0 -155
- package/src/runtime/vi/system-time.ts +0 -121
- package/src/runtime/worker.ts +0 -239
- package/src/time/freeze.ts +0 -229
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fake-timers.js","sourceRoot":"","sources":["../../../src/runtime/vi/fake-timers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `vi` — Vitest-compatible facade wiring together `vi.fn`, `vi.spyOn`,
|
|
3
|
+
* fake timers, and system-time overrides.
|
|
4
|
+
*
|
|
5
|
+
* State isolation via `AsyncLocalStorage`: each `runTestFile` enters a
|
|
6
|
+
* fresh `ViState`. Concurrent runs never share spies, timer queues, or
|
|
7
|
+
* system-clock pins. A forgotten `useRealTimers()` / `useRealSystemTime()`
|
|
8
|
+
* is cleaned up by `withViContext`'s finally block.
|
|
9
|
+
*/
|
|
10
|
+
import { type AnyFn, isSpy, type Spy } from "./spy.js";
|
|
11
|
+
import { type SpyOnOptions } from "./spyOn.js";
|
|
12
|
+
/** Minimal surface helix's container facade depends on. Lives here
|
|
13
|
+
* rather than under `container/` so the runtime stays peer-dep-light
|
|
14
|
+
* (no import of `@c9up/ream`'s Container type). */
|
|
15
|
+
export interface ContainerLike {
|
|
16
|
+
restore(token: ContainerToken): void;
|
|
17
|
+
}
|
|
18
|
+
export type ContainerToken = (new (...args: never[]) => unknown) | string | symbol;
|
|
19
|
+
/**
|
|
20
|
+
* Exposed for unit tests that run outside `withViContext`: reset the
|
|
21
|
+
* module-level fallback state so a forgotten `vi.fn()` or pinned clock
|
|
22
|
+
* from a prior test doesn't bleed into the next.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resetFallbackState(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Run `body` under its own `vi` state. `runTestFile` in `worker.ts` wraps
|
|
27
|
+
* each file in this scope so fake timers and spy registrations don't leak
|
|
28
|
+
* between concurrent runs.
|
|
29
|
+
*/
|
|
30
|
+
export declare function withViContext<T>(body: () => Promise<T>): Promise<T>;
|
|
31
|
+
declare function fn<Fn extends AnyFn>(implementation?: Fn): Spy<Fn>;
|
|
32
|
+
declare function viSpyOn<Obj extends object, Key extends keyof Obj>(obj: Obj, key: Key, options?: SpyOnOptions): Spy;
|
|
33
|
+
declare function useFakeTimers(options?: {
|
|
34
|
+
now?: number | Date;
|
|
35
|
+
}): typeof vi;
|
|
36
|
+
declare function useRealTimers(): typeof vi;
|
|
37
|
+
declare function advanceTimersByTime(ms: number): typeof vi;
|
|
38
|
+
declare function runAllTimers(): typeof vi;
|
|
39
|
+
declare function runOnlyPendingTimers(): typeof vi;
|
|
40
|
+
declare function getTimerCount(): number;
|
|
41
|
+
declare function clearAllMocks(): typeof vi;
|
|
42
|
+
declare function resetAllMocks(): typeof vi;
|
|
43
|
+
/**
|
|
44
|
+
* Restore every `spyOn`-created spy in the current context to its
|
|
45
|
+
* original. `vi.fn()`-created spies are left as-is (they have nothing to
|
|
46
|
+
* restore — spec AC 5).
|
|
47
|
+
*/
|
|
48
|
+
declare function restoreAllMocks(): typeof vi;
|
|
49
|
+
export declare const vi: {
|
|
50
|
+
fn: typeof fn;
|
|
51
|
+
spyOn: typeof viSpyOn;
|
|
52
|
+
isMockFunction: typeof isSpy;
|
|
53
|
+
useFakeTimers: typeof useFakeTimers;
|
|
54
|
+
useRealTimers: typeof useRealTimers;
|
|
55
|
+
advanceTimersByTime: typeof advanceTimersByTime;
|
|
56
|
+
runAllTimers: typeof runAllTimers;
|
|
57
|
+
runOnlyPendingTimers: typeof runOnlyPendingTimers;
|
|
58
|
+
getTimerCount: typeof getTimerCount;
|
|
59
|
+
setSystemTime: (time: Date | number) => /*elided*/ any;
|
|
60
|
+
getMockedSystemTime: () => number | null;
|
|
61
|
+
clearAllTimers: () => /*elided*/ any;
|
|
62
|
+
clearAllMocks: typeof clearAllMocks;
|
|
63
|
+
resetAllMocks: typeof resetAllMocks;
|
|
64
|
+
restoreAllMocks: typeof restoreAllMocks;
|
|
65
|
+
/** Escape hatch: clear the pinned system time. */
|
|
66
|
+
useRealSystemTime: () => /*elided*/ any;
|
|
67
|
+
};
|
|
68
|
+
export type Vi = typeof vi;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/vi/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,EAAE,KAAK,KAAK,EAAa,KAAK,EAAE,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAClE,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,YAAY,CAAC;AAStD;;oDAEoD;AACpD,MAAM,WAAW,aAAa;IAC7B,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;CACrC;AACD,MAAM,MAAM,cAAc,GACvB,CAAC,KACD,GAAG,IAAI,EAAE,KAAK,EAAE,KACX,OAAO,CAAC,GACb,MAAM,GACN,MAAM,CAAC;AA4BV;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAWzC;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAqBzE;AAED,iBAAS,EAAE,CAAC,EAAE,SAAS,KAAK,EAAE,cAAc,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAO1D;AAKD,iBAAS,OAAO,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,GAAG,EACzD,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,OAAO,GAAE,YAAiB,GACxB,GAAG,CAIL;AAED,iBAAS,aAAa,CAAC,OAAO,GAAE;IAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAAG,OAAO,EAAE,CAcvE;AAED,iBAAS,aAAa,IAAI,OAAO,EAAE,CAKlC;AAQD,iBAAS,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,EAAE,CASlD;AAED,iBAAS,YAAY,IAAI,OAAO,EAAE,CAQjC;AAED,iBAAS,oBAAoB,IAAI,OAAO,EAAE,CAQzC;AAED,iBAAS,aAAa,IAAI,MAAM,CAE/B;AAED,iBAAS,aAAa,IAAI,OAAO,EAAE,CAGlC;AAED,iBAAS,aAAa,IAAI,OAAO,EAAE,CAGlC;AAED;;;;GAIG;AACH,iBAAS,eAAe,IAAI,OAAO,EAAE,CAWpC;AAED,eAAO,MAAM,EAAE;;;;;;;;;;0BAUQ,IAAI,GAAG,MAAM;;;;;;IAYnC,kDAAkD;;CAKlD,CAAC;AAEF,MAAM,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `vi` — Vitest-compatible facade wiring together `vi.fn`, `vi.spyOn`,
|
|
3
|
+
* fake timers, and system-time overrides.
|
|
4
|
+
*
|
|
5
|
+
* State isolation via `AsyncLocalStorage`: each `runTestFile` enters a
|
|
6
|
+
* fresh `ViState`. Concurrent runs never share spies, timer queues, or
|
|
7
|
+
* system-clock pins. A forgotten `useRealTimers()` / `useRealSystemTime()`
|
|
8
|
+
* is cleaned up by `withViContext`'s finally block.
|
|
9
|
+
*/
|
|
10
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
11
|
+
import { createFakeTimerController, } from "./fake-timers.js";
|
|
12
|
+
import { createSpy, isSpy } from "./spy.js";
|
|
13
|
+
import { spyOn } from "./spyOn.js";
|
|
14
|
+
import { clearFakeEpoch, createSystemClock, registerSystemClockContext, setFakeEpoch, } from "./system-time.js";
|
|
15
|
+
function createViState() {
|
|
16
|
+
const clock = createSystemClock();
|
|
17
|
+
const unregisterClock = registerSystemClockContext(() => clock);
|
|
18
|
+
return {
|
|
19
|
+
spies: new Set(),
|
|
20
|
+
timers: createFakeTimerController(),
|
|
21
|
+
clock,
|
|
22
|
+
unregisterClock,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
const storage = new AsyncLocalStorage();
|
|
26
|
+
let fallbackState = createViState();
|
|
27
|
+
function currentState() {
|
|
28
|
+
return storage.getStore() ?? fallbackState;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Exposed for unit tests that run outside `withViContext`: reset the
|
|
32
|
+
* module-level fallback state so a forgotten `vi.fn()` or pinned clock
|
|
33
|
+
* from a prior test doesn't bleed into the next.
|
|
34
|
+
*/
|
|
35
|
+
export function resetFallbackState() {
|
|
36
|
+
fallbackState.unregisterClock();
|
|
37
|
+
fallbackState.timers.uninstall();
|
|
38
|
+
for (const spy of fallbackState.spies) {
|
|
39
|
+
try {
|
|
40
|
+
spy.mockRestore();
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
/* best-effort cleanup — ignore failures */
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
fallbackState = createViState();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Run `body` under its own `vi` state. `runTestFile` in `worker.ts` wraps
|
|
50
|
+
* each file in this scope so fake timers and spy registrations don't leak
|
|
51
|
+
* between concurrent runs.
|
|
52
|
+
*/
|
|
53
|
+
export async function withViContext(body) {
|
|
54
|
+
const state = createViState();
|
|
55
|
+
try {
|
|
56
|
+
return await storage.run(state, body);
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
// Tear down in reverse: spies first (so restored methods work under
|
|
60
|
+
// real timers), then timers, then system clock.
|
|
61
|
+
// (Per-test container overrides drain in `withTestContext`'s
|
|
62
|
+
// finally — see `runtime/test-context.ts`.)
|
|
63
|
+
const spiesReversed = [...state.spies].reverse();
|
|
64
|
+
for (const spy of spiesReversed) {
|
|
65
|
+
try {
|
|
66
|
+
spy.mockRestore();
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// One spy's restore failing must not block the others.
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (state.timers.isActive())
|
|
73
|
+
state.timers.uninstall();
|
|
74
|
+
clearFakeEpoch(state.clock);
|
|
75
|
+
state.unregisterClock();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function fn(implementation) {
|
|
79
|
+
const spy = createSpy({
|
|
80
|
+
name: "spy",
|
|
81
|
+
defaultImplementation: implementation,
|
|
82
|
+
});
|
|
83
|
+
currentState().spies.add(spy);
|
|
84
|
+
return spy;
|
|
85
|
+
}
|
|
86
|
+
/** Identical semantics to `matchers.isSpy` — re-exported so both surfaces agree. */
|
|
87
|
+
const isMockFunction = isSpy;
|
|
88
|
+
function viSpyOn(obj, key, options = {}) {
|
|
89
|
+
const spy = spyOn(obj, key, options);
|
|
90
|
+
currentState().spies.add(spy);
|
|
91
|
+
return spy;
|
|
92
|
+
}
|
|
93
|
+
function useFakeTimers(options = {}) {
|
|
94
|
+
const s = currentState();
|
|
95
|
+
const pin = options.now instanceof Date
|
|
96
|
+
? options.now.getTime()
|
|
97
|
+
: typeof options.now === "number"
|
|
98
|
+
? options.now
|
|
99
|
+
: Date.now();
|
|
100
|
+
s.timers.install(pin);
|
|
101
|
+
// Fake timers also pin `Date.now()` / `new Date()` (per spec AC 4) via
|
|
102
|
+
// the same epoch — writing to the context's system clock so the shim
|
|
103
|
+
// returns the pinned value.
|
|
104
|
+
setFakeEpoch(s.clock, pin);
|
|
105
|
+
return vi;
|
|
106
|
+
}
|
|
107
|
+
function useRealTimers() {
|
|
108
|
+
const s = currentState();
|
|
109
|
+
s.timers.uninstall();
|
|
110
|
+
clearFakeEpoch(s.clock);
|
|
111
|
+
return vi;
|
|
112
|
+
}
|
|
113
|
+
function syncClockFromTimers(s) {
|
|
114
|
+
if (s.clock.fakeEpoch !== null) {
|
|
115
|
+
setFakeEpoch(s.clock, s.timers.now());
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function advanceTimersByTime(ms) {
|
|
119
|
+
const s = currentState();
|
|
120
|
+
try {
|
|
121
|
+
s.timers.advanceBy(ms);
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
// Sync even on throw so the clock reflects the attempted advance.
|
|
125
|
+
syncClockFromTimers(s);
|
|
126
|
+
}
|
|
127
|
+
return vi;
|
|
128
|
+
}
|
|
129
|
+
function runAllTimers() {
|
|
130
|
+
const s = currentState();
|
|
131
|
+
try {
|
|
132
|
+
s.timers.runAll();
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
syncClockFromTimers(s);
|
|
136
|
+
}
|
|
137
|
+
return vi;
|
|
138
|
+
}
|
|
139
|
+
function runOnlyPendingTimers() {
|
|
140
|
+
const s = currentState();
|
|
141
|
+
try {
|
|
142
|
+
s.timers.runOnlyPending();
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
syncClockFromTimers(s);
|
|
146
|
+
}
|
|
147
|
+
return vi;
|
|
148
|
+
}
|
|
149
|
+
function getTimerCount() {
|
|
150
|
+
return currentState().timers.pending();
|
|
151
|
+
}
|
|
152
|
+
function clearAllMocks() {
|
|
153
|
+
for (const spy of currentState().spies)
|
|
154
|
+
spy.mockClear();
|
|
155
|
+
return vi;
|
|
156
|
+
}
|
|
157
|
+
function resetAllMocks() {
|
|
158
|
+
for (const spy of currentState().spies)
|
|
159
|
+
spy.mockReset();
|
|
160
|
+
return vi;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Restore every `spyOn`-created spy in the current context to its
|
|
164
|
+
* original. `vi.fn()`-created spies are left as-is (they have nothing to
|
|
165
|
+
* restore — spec AC 5).
|
|
166
|
+
*/
|
|
167
|
+
function restoreAllMocks() {
|
|
168
|
+
const spies = [...currentState().spies].reverse();
|
|
169
|
+
for (const spy of spies) {
|
|
170
|
+
if (!spy.__isSpyOn)
|
|
171
|
+
continue;
|
|
172
|
+
try {
|
|
173
|
+
spy.mockRestore();
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Continue even if one restore throws so the rest still run.
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return vi;
|
|
180
|
+
}
|
|
181
|
+
export const vi = {
|
|
182
|
+
fn,
|
|
183
|
+
spyOn: viSpyOn,
|
|
184
|
+
isMockFunction,
|
|
185
|
+
useFakeTimers,
|
|
186
|
+
useRealTimers,
|
|
187
|
+
advanceTimersByTime,
|
|
188
|
+
runAllTimers,
|
|
189
|
+
runOnlyPendingTimers,
|
|
190
|
+
getTimerCount,
|
|
191
|
+
setSystemTime: (time) => {
|
|
192
|
+
setFakeEpoch(currentState().clock, time);
|
|
193
|
+
return vi;
|
|
194
|
+
},
|
|
195
|
+
getMockedSystemTime: () => currentState().clock.fakeEpoch,
|
|
196
|
+
clearAllTimers: () => {
|
|
197
|
+
currentState().timers.clear();
|
|
198
|
+
return vi;
|
|
199
|
+
},
|
|
200
|
+
clearAllMocks,
|
|
201
|
+
resetAllMocks,
|
|
202
|
+
restoreAllMocks,
|
|
203
|
+
/** Escape hatch: clear the pinned system time. */
|
|
204
|
+
useRealSystemTime: () => {
|
|
205
|
+
clearFakeEpoch(currentState().clock);
|
|
206
|
+
return vi;
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/vi/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spy core — a callable function that records every call and exposes a
|
|
3
|
+
* Vitest-shape `.mock` surface. Wears the `__helixIsSpy` brand so the
|
|
4
|
+
* matchers in `matchers.ts` (`toHaveBeenCalled*`) recognise it.
|
|
5
|
+
*/
|
|
6
|
+
export interface MockCallResult<Return = unknown> {
|
|
7
|
+
/** `"incomplete"` is pushed synchronously at call entry and patched when the call resolves — matches Vitest so `mock.results.length === mock.calls.length` even for in-flight async. */
|
|
8
|
+
type: "return" | "throw" | "incomplete";
|
|
9
|
+
value: Return;
|
|
10
|
+
}
|
|
11
|
+
export interface MockInternals<Args extends readonly unknown[] = readonly unknown[], Return = unknown> {
|
|
12
|
+
calls: Args[];
|
|
13
|
+
results: MockCallResult<Return>[];
|
|
14
|
+
/** The most recent call's arguments. Mirrors Vitest. */
|
|
15
|
+
lastCall: Args | undefined;
|
|
16
|
+
}
|
|
17
|
+
export type AnyFn = (...args: unknown[]) => unknown;
|
|
18
|
+
type CallSignature<Fn extends AnyFn> = (...args: Parameters<Fn>) => ReturnType<Fn>;
|
|
19
|
+
interface SpyMethods<Fn extends AnyFn> {
|
|
20
|
+
readonly __helixIsSpy: true;
|
|
21
|
+
readonly mock: MockInternals<Parameters<Fn>, ReturnType<Fn>>;
|
|
22
|
+
readonly calls: Parameters<Fn>[];
|
|
23
|
+
readonly callCount: number;
|
|
24
|
+
mockImplementation(fn: Impl<Fn>): Spy<Fn>;
|
|
25
|
+
mockImplementationOnce(fn: Impl<Fn>): Spy<Fn>;
|
|
26
|
+
mockReturnValue(value: ReturnType<Fn>): Spy<Fn>;
|
|
27
|
+
mockReturnValueOnce(value: ReturnType<Fn>): Spy<Fn>;
|
|
28
|
+
mockResolvedValue(value: Awaited<ReturnType<Fn>>): Spy<Fn>;
|
|
29
|
+
mockResolvedValueOnce(value: Awaited<ReturnType<Fn>>): Spy<Fn>;
|
|
30
|
+
mockRejectedValue(reason: unknown): Spy<Fn>;
|
|
31
|
+
mockRejectedValueOnce(reason: unknown): Spy<Fn>;
|
|
32
|
+
mockClear(): Spy<Fn>;
|
|
33
|
+
mockReset(): Spy<Fn>;
|
|
34
|
+
mockRestore(): Spy<Fn>;
|
|
35
|
+
/** Internal: spyOn installs a restore callback here. Undefined for `vi.fn`. */
|
|
36
|
+
__setRestore(fn: () => void): void;
|
|
37
|
+
/** Internal: true iff `__setRestore` was called (= created by spyOn). */
|
|
38
|
+
readonly __isSpyOn: boolean;
|
|
39
|
+
}
|
|
40
|
+
export type Spy<Fn extends AnyFn = AnyFn> = CallSignature<Fn> & SpyMethods<Fn>;
|
|
41
|
+
type Impl<Fn extends AnyFn> = (...args: Parameters<Fn>) => ReturnType<Fn>;
|
|
42
|
+
export interface CreateSpyOptions<Fn extends AnyFn> {
|
|
43
|
+
name?: string;
|
|
44
|
+
defaultImplementation?: Fn;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Factory used by `vi.fn` and `vi.spyOn`. The returned function is both
|
|
48
|
+
* callable (executing the current implementation) and an object carrying
|
|
49
|
+
* `.mock`, the Helix brand, and the `mockFoo()` mutators.
|
|
50
|
+
*/
|
|
51
|
+
export declare function createSpy<Fn extends AnyFn = AnyFn>(options?: CreateSpyOptions<Fn>): Spy<Fn>;
|
|
52
|
+
export declare function isSpy(value: unknown): value is Spy;
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=spy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spy.d.ts","sourceRoot":"","sources":["../../../src/runtime/vi/spy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spy core — a callable function that records every call and exposes a
|
|
3
|
+
* Vitest-shape `.mock` surface. Wears the `__helixIsSpy` brand so the
|
|
4
|
+
* matchers in `matchers.ts` (`toHaveBeenCalled*`) recognise it.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Factory used by `vi.fn` and `vi.spyOn`. The returned function is both
|
|
8
|
+
* callable (executing the current implementation) and an object carrying
|
|
9
|
+
* `.mock`, the Helix brand, and the `mockFoo()` mutators.
|
|
10
|
+
*/
|
|
11
|
+
export function createSpy(options = {}) {
|
|
12
|
+
const onceQueue = [];
|
|
13
|
+
let currentImpl = options.defaultImplementation;
|
|
14
|
+
let restoreFn;
|
|
15
|
+
const mock = {
|
|
16
|
+
calls: [],
|
|
17
|
+
results: [],
|
|
18
|
+
lastCall: undefined,
|
|
19
|
+
};
|
|
20
|
+
const call = function (...args) {
|
|
21
|
+
mock.calls.push(args);
|
|
22
|
+
mock.lastCall = args;
|
|
23
|
+
// Push an incomplete result synchronously so `mock.results.length`
|
|
24
|
+
// always matches `mock.calls.length` (Vitest parity).
|
|
25
|
+
const result = {
|
|
26
|
+
type: "incomplete",
|
|
27
|
+
value: undefined,
|
|
28
|
+
};
|
|
29
|
+
mock.results.push(result);
|
|
30
|
+
const impl = onceQueue.shift() ?? currentImpl;
|
|
31
|
+
if (!impl) {
|
|
32
|
+
result.type = "return";
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const value = impl.apply(this, args);
|
|
37
|
+
result.type = "return";
|
|
38
|
+
result.value = value;
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
result.type = "throw";
|
|
43
|
+
result.value = err;
|
|
44
|
+
throw err;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
// `calls` and `callCount` must be LIVE accessors. Defining them in an
|
|
48
|
+
// object literal and passing through `Object.assign` would snapshot the
|
|
49
|
+
// getter's current value (Object.assign invokes [[Get]] on the source).
|
|
50
|
+
const methods = {
|
|
51
|
+
__helixIsSpy: true,
|
|
52
|
+
mock,
|
|
53
|
+
mockImplementation(fn) {
|
|
54
|
+
currentImpl = fn;
|
|
55
|
+
return spy;
|
|
56
|
+
},
|
|
57
|
+
mockImplementationOnce(fn) {
|
|
58
|
+
onceQueue.push(fn);
|
|
59
|
+
return spy;
|
|
60
|
+
},
|
|
61
|
+
mockReturnValue(value) {
|
|
62
|
+
currentImpl = () => value;
|
|
63
|
+
return spy;
|
|
64
|
+
},
|
|
65
|
+
mockReturnValueOnce(value) {
|
|
66
|
+
onceQueue.push(() => value);
|
|
67
|
+
return spy;
|
|
68
|
+
},
|
|
69
|
+
mockResolvedValue(value) {
|
|
70
|
+
currentImpl = () => Promise.resolve(value);
|
|
71
|
+
return spy;
|
|
72
|
+
},
|
|
73
|
+
mockResolvedValueOnce(value) {
|
|
74
|
+
onceQueue.push(() => Promise.resolve(value));
|
|
75
|
+
return spy;
|
|
76
|
+
},
|
|
77
|
+
mockRejectedValue(reason) {
|
|
78
|
+
currentImpl = () => Promise.reject(reason);
|
|
79
|
+
return spy;
|
|
80
|
+
},
|
|
81
|
+
mockRejectedValueOnce(reason) {
|
|
82
|
+
onceQueue.push(() => Promise.reject(reason));
|
|
83
|
+
return spy;
|
|
84
|
+
},
|
|
85
|
+
mockClear() {
|
|
86
|
+
mock.calls.length = 0;
|
|
87
|
+
mock.results.length = 0;
|
|
88
|
+
mock.lastCall = undefined;
|
|
89
|
+
return spy;
|
|
90
|
+
},
|
|
91
|
+
mockReset() {
|
|
92
|
+
spy.mockClear();
|
|
93
|
+
onceQueue.length = 0;
|
|
94
|
+
// On a `vi.fn` (no `restoreFn`) Vitest clears the implementation
|
|
95
|
+
// entirely. On a `spyOn` spy, restoring to the call-through
|
|
96
|
+
// `defaultImplementation` is the right behaviour.
|
|
97
|
+
currentImpl = restoreFn ? options.defaultImplementation : undefined;
|
|
98
|
+
return spy;
|
|
99
|
+
},
|
|
100
|
+
mockRestore() {
|
|
101
|
+
// Atomic order: swap `restoreFn` out of the closure BEFORE calling
|
|
102
|
+
// it, so a re-entrant `mockRestore` during the user's restore hook
|
|
103
|
+
// doesn't double-fire. If the hook throws, the spy is considered
|
|
104
|
+
// restored (best we can do) and the error propagates.
|
|
105
|
+
const hook = restoreFn;
|
|
106
|
+
restoreFn = undefined;
|
|
107
|
+
spy.mockReset();
|
|
108
|
+
hook?.();
|
|
109
|
+
return spy;
|
|
110
|
+
},
|
|
111
|
+
__setRestore(fn) {
|
|
112
|
+
restoreFn = fn;
|
|
113
|
+
isSpyOn = true;
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
// Sticky flag: once a spy is created via spyOn (`__setRestore` called),
|
|
117
|
+
// it stays "spyOn-flavoured" even after `mockRestore()` clears
|
|
118
|
+
// `restoreFn`. This matters for `restoreAllMocks` which must distinguish
|
|
119
|
+
// pass-through spies from bare `vi.fn` spies independently of their
|
|
120
|
+
// restoration state.
|
|
121
|
+
let isSpyOn = false;
|
|
122
|
+
const withMethods = Object.assign(call, methods);
|
|
123
|
+
Object.defineProperties(withMethods, {
|
|
124
|
+
calls: {
|
|
125
|
+
configurable: true,
|
|
126
|
+
enumerable: false,
|
|
127
|
+
get() {
|
|
128
|
+
return mock.calls;
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
callCount: {
|
|
132
|
+
configurable: true,
|
|
133
|
+
enumerable: false,
|
|
134
|
+
get() {
|
|
135
|
+
return mock.calls.length;
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
__isSpyOn: {
|
|
139
|
+
configurable: true,
|
|
140
|
+
enumerable: false,
|
|
141
|
+
get() {
|
|
142
|
+
return isSpyOn;
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
const spy = withMethods;
|
|
147
|
+
Object.defineProperty(spy, "name", {
|
|
148
|
+
value: options.name ?? "spy",
|
|
149
|
+
configurable: true,
|
|
150
|
+
});
|
|
151
|
+
return spy;
|
|
152
|
+
}
|
|
153
|
+
export function isSpy(value) {
|
|
154
|
+
if (!value || (typeof value !== "function" && typeof value !== "object")) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
return value.__helixIsSpy === true;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=spy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spy.js","sourceRoot":"","sources":["../../../src/runtime/vi/spy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `vi.spyOn(obj, key)` — replaces `obj[key]` with a spy that calls through
|
|
3
|
+
* to the original. `spy.mockRestore()` puts the original back.
|
|
4
|
+
*
|
|
5
|
+
* Supports:
|
|
6
|
+
* - data properties whose value is a function (most methods);
|
|
7
|
+
* - accessor properties (`get` / `set`);
|
|
8
|
+
* - methods inherited via the prototype chain (the spy is installed as an
|
|
9
|
+
* own property on the target, and `mockRestore()` deletes the own
|
|
10
|
+
* property so inheritance resumes).
|
|
11
|
+
*
|
|
12
|
+
* `this` binding: the spy's default implementation uses a `function` form
|
|
13
|
+
* (not arrow) so the caller's receiver is forwarded to the original. This
|
|
14
|
+
* is essential when spying on a prototype method that depends on `this`.
|
|
15
|
+
*
|
|
16
|
+
* Double-spy detection: throws if the property is already a Helix spy, to
|
|
17
|
+
* avoid the subtle double-counting bug where the inner spy's `calls` is
|
|
18
|
+
* incremented by pass-through from the outer one.
|
|
19
|
+
*/
|
|
20
|
+
import { type Spy } from "./spy.js";
|
|
21
|
+
type AccessorKind = "get" | "set";
|
|
22
|
+
export interface SpyOnOptions {
|
|
23
|
+
/** For accessor properties, which side to spy on. Default: `"get"`. */
|
|
24
|
+
accessor?: AccessorKind;
|
|
25
|
+
}
|
|
26
|
+
export declare function spyOn<Obj extends object, Key extends keyof Obj>(obj: Obj, key: Key, options?: SpyOnOptions): Spy;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=spyOn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spyOn.d.ts","sourceRoot":"","sources":["../../../src/runtime/vi/spyOn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAgC,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAElE,KAAK,YAAY,GAAG,KAAK,GAAG,KAAK,CAAC;AAElC,MAAM,WAAW,YAAY;IAC5B,uEAAuE;IACvE,QAAQ,CAAC,EAAE,YAAY,CAAC;CACxB;AAoCD,wBAAgB,KAAK,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,MAAM,GAAG,EAC9D,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,OAAO,GAAE,YAAiB,GACxB,GAAG,CAuFL"}
|