@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.
Files changed (189) hide show
  1. package/dist/cli/coverage/aggregate.d.ts +24 -0
  2. package/dist/cli/coverage/aggregate.d.ts.map +1 -0
  3. package/dist/cli/coverage/aggregate.js +215 -0
  4. package/dist/cli/coverage/aggregate.js.map +1 -0
  5. package/dist/cli/coverage/collect.d.ts +13 -0
  6. package/dist/cli/coverage/collect.d.ts.map +1 -0
  7. package/dist/cli/coverage/collect.js +66 -0
  8. package/dist/cli/coverage/collect.js.map +1 -0
  9. package/dist/cli/coverage/diff/base.d.ts +17 -0
  10. package/dist/cli/coverage/diff/base.d.ts.map +1 -0
  11. package/dist/cli/coverage/diff/base.js +44 -0
  12. package/dist/cli/coverage/diff/base.js.map +1 -0
  13. package/dist/cli/coverage/diff/index.d.ts +25 -0
  14. package/dist/cli/coverage/diff/index.d.ts.map +1 -0
  15. package/dist/cli/coverage/diff/index.js +119 -0
  16. package/dist/cli/coverage/diff/index.js.map +1 -0
  17. package/dist/cli/coverage/diff/overlay.d.ts +19 -0
  18. package/dist/cli/coverage/diff/overlay.d.ts.map +1 -0
  19. package/dist/cli/coverage/diff/overlay.js +58 -0
  20. package/dist/cli/coverage/diff/overlay.js.map +1 -0
  21. package/dist/cli/coverage/diff/parse.d.ts +27 -0
  22. package/dist/cli/coverage/diff/parse.d.ts.map +1 -0
  23. package/dist/cli/coverage/diff/parse.js +105 -0
  24. package/dist/cli/coverage/diff/parse.js.map +1 -0
  25. package/dist/cli/coverage/diff/reporters.d.ts +12 -0
  26. package/dist/cli/coverage/diff/reporters.d.ts.map +1 -0
  27. package/dist/cli/coverage/diff/reporters.js +59 -0
  28. package/dist/cli/coverage/diff/reporters.js.map +1 -0
  29. package/dist/cli/coverage/diff/types.d.ts +46 -0
  30. package/dist/cli/coverage/diff/types.d.ts.map +1 -0
  31. package/dist/cli/coverage/diff/types.js +15 -0
  32. package/dist/cli/coverage/diff/types.js.map +1 -0
  33. package/dist/cli/coverage/filter.d.ts +13 -0
  34. package/dist/cli/coverage/filter.d.ts.map +1 -0
  35. package/dist/cli/coverage/filter.js +60 -0
  36. package/dist/cli/coverage/filter.js.map +1 -0
  37. package/dist/cli/coverage/glob.d.ts +4 -0
  38. package/dist/cli/coverage/glob.d.ts.map +1 -0
  39. package/dist/cli/coverage/glob.js +0 -0
  40. package/dist/cli/coverage/glob.js.map +1 -0
  41. package/dist/cli/coverage/index.d.ts +40 -0
  42. package/dist/cli/coverage/index.d.ts.map +1 -0
  43. package/dist/cli/coverage/index.js +85 -0
  44. package/dist/cli/coverage/index.js.map +1 -0
  45. package/dist/cli/coverage/reporters/json.d.ts +13 -0
  46. package/dist/cli/coverage/reporters/json.d.ts.map +1 -0
  47. package/dist/cli/coverage/reporters/json.js +37 -0
  48. package/dist/cli/coverage/reporters/json.js.map +1 -0
  49. package/dist/cli/coverage/reporters/lcov.d.ts +13 -0
  50. package/dist/cli/coverage/reporters/lcov.d.ts.map +1 -0
  51. package/dist/cli/coverage/reporters/lcov.js +51 -0
  52. package/dist/cli/coverage/reporters/lcov.js.map +1 -0
  53. package/dist/cli/coverage/reporters/text.d.ts +8 -0
  54. package/dist/cli/coverage/reporters/text.d.ts.map +1 -0
  55. package/dist/cli/coverage/reporters/text.js +39 -0
  56. package/dist/cli/coverage/reporters/text.js.map +1 -0
  57. package/dist/cli/coverage/thresholds.d.ts +14 -0
  58. package/dist/cli/coverage/thresholds.d.ts.map +1 -0
  59. package/dist/cli/coverage/thresholds.js +58 -0
  60. package/dist/cli/coverage/thresholds.js.map +1 -0
  61. package/dist/cli/coverage/types.d.ts +118 -0
  62. package/dist/cli/coverage/types.d.ts.map +1 -0
  63. package/dist/cli/coverage/types.js +8 -0
  64. package/dist/cli/coverage/types.js.map +1 -0
  65. package/dist/cli/discover.d.ts +27 -0
  66. package/dist/cli/discover.d.ts.map +1 -0
  67. package/dist/cli/discover.js +142 -0
  68. package/dist/cli/discover.js.map +1 -0
  69. package/dist/cli/native.d.ts +43 -0
  70. package/dist/cli/native.d.ts.map +1 -0
  71. package/dist/cli/native.js +64 -0
  72. package/dist/cli/native.js.map +1 -0
  73. package/dist/cli/pool.d.ts +55 -0
  74. package/dist/cli/pool.d.ts.map +1 -0
  75. package/dist/cli/pool.js +404 -0
  76. package/dist/cli/pool.js.map +1 -0
  77. package/dist/cli/reporter.d.ts +51 -0
  78. package/dist/cli/reporter.d.ts.map +1 -0
  79. package/dist/cli/reporter.js +124 -0
  80. package/dist/cli/reporter.js.map +1 -0
  81. package/dist/cli/run.d.ts +61 -0
  82. package/dist/cli/run.d.ts.map +1 -0
  83. package/dist/cli/run.js +302 -0
  84. package/dist/cli/run.js.map +1 -0
  85. package/dist/cli/summary.d.ts +18 -0
  86. package/dist/cli/summary.d.ts.map +1 -0
  87. package/dist/cli/summary.js +20 -0
  88. package/dist/cli/summary.js.map +1 -0
  89. package/dist/cli/watch/loop.d.ts +26 -0
  90. package/dist/cli/watch/loop.d.ts.map +1 -0
  91. package/dist/cli/watch/loop.js +133 -0
  92. package/dist/cli/watch/loop.js.map +1 -0
  93. package/dist/cli/watch/types.d.ts +22 -0
  94. package/dist/cli/watch/types.d.ts.map +1 -0
  95. package/dist/cli/watch/types.js +6 -0
  96. package/dist/cli/watch/types.js.map +1 -0
  97. package/dist/cli/watch/watcher.d.ts +25 -0
  98. package/dist/cli/watch/watcher.d.ts.map +1 -0
  99. package/dist/cli/watch/watcher.js +122 -0
  100. package/dist/cli/watch/watcher.js.map +1 -0
  101. package/dist/container/index.d.ts +7 -0
  102. package/dist/container/index.d.ts.map +1 -0
  103. package/dist/container/index.js +6 -0
  104. package/dist/container/index.js.map +1 -0
  105. package/dist/container/override.d.ts +46 -0
  106. package/dist/container/override.d.ts.map +1 -0
  107. package/dist/container/override.js +67 -0
  108. package/dist/container/override.js.map +1 -0
  109. package/dist/container/spy.d.ts +21 -0
  110. package/dist/container/spy.d.ts.map +1 -0
  111. package/dist/container/spy.js +23 -0
  112. package/dist/container/spy.js.map +1 -0
  113. package/dist/index.d.ts +20 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +19 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/runtime/assertion-error.d.ts +20 -0
  118. package/dist/runtime/assertion-error.d.ts.map +1 -0
  119. package/dist/runtime/assertion-error.js +23 -0
  120. package/dist/runtime/assertion-error.js.map +1 -0
  121. package/dist/runtime/cli-worker.d.ts +25 -0
  122. package/dist/runtime/cli-worker.d.ts.map +1 -0
  123. package/dist/runtime/cli-worker.js +128 -0
  124. package/dist/runtime/cli-worker.js.map +1 -0
  125. package/dist/runtime/equals.d.ts +25 -0
  126. package/dist/runtime/equals.d.ts.map +1 -0
  127. package/dist/runtime/equals.js +343 -0
  128. package/dist/runtime/equals.js.map +1 -0
  129. package/dist/runtime/expect.d.ts +32 -0
  130. package/dist/runtime/expect.d.ts.map +1 -0
  131. package/dist/runtime/expect.js +121 -0
  132. package/dist/runtime/expect.js.map +1 -0
  133. package/dist/runtime/index.d.ts +28 -0
  134. package/dist/runtime/index.d.ts.map +1 -0
  135. package/dist/runtime/index.js +17 -0
  136. package/dist/runtime/index.js.map +1 -0
  137. package/dist/runtime/lifecycle.d.ts +11 -0
  138. package/dist/runtime/lifecycle.d.ts.map +1 -0
  139. package/dist/runtime/lifecycle.js +10 -0
  140. package/dist/runtime/lifecycle.js.map +1 -0
  141. package/dist/runtime/matchers.d.ts +42 -0
  142. package/dist/runtime/matchers.d.ts.map +1 -0
  143. package/dist/runtime/matchers.js +375 -0
  144. package/dist/runtime/matchers.js.map +1 -0
  145. package/dist/runtime/run.d.ts +55 -0
  146. package/dist/runtime/run.d.ts.map +1 -0
  147. package/dist/runtime/run.js +456 -0
  148. package/dist/runtime/run.js.map +1 -0
  149. package/dist/runtime/suite.d.ts +65 -0
  150. package/dist/runtime/suite.d.ts.map +1 -0
  151. package/dist/runtime/suite.js +203 -0
  152. package/dist/runtime/suite.js.map +1 -0
  153. package/dist/runtime/test-context.d.ts +25 -0
  154. package/dist/runtime/test-context.d.ts.map +1 -0
  155. package/dist/runtime/test-context.js +52 -0
  156. package/dist/runtime/test-context.js.map +1 -0
  157. package/dist/runtime/vi/fake-timers.d.ts +48 -0
  158. package/dist/runtime/vi/fake-timers.d.ts.map +1 -0
  159. package/dist/runtime/vi/fake-timers.js +317 -0
  160. package/dist/runtime/vi/fake-timers.js.map +1 -0
  161. package/dist/runtime/vi/index.d.ts +70 -0
  162. package/dist/runtime/vi/index.d.ts.map +1 -0
  163. package/dist/runtime/vi/index.js +209 -0
  164. package/dist/runtime/vi/index.js.map +1 -0
  165. package/dist/runtime/vi/spy.d.ts +54 -0
  166. package/dist/runtime/vi/spy.d.ts.map +1 -0
  167. package/dist/runtime/vi/spy.js +159 -0
  168. package/dist/runtime/vi/spy.js.map +1 -0
  169. package/dist/runtime/vi/spyOn.d.ts +28 -0
  170. package/dist/runtime/vi/spyOn.d.ts.map +1 -0
  171. package/dist/runtime/vi/spyOn.js +121 -0
  172. package/dist/runtime/vi/spyOn.js.map +1 -0
  173. package/dist/runtime/vi/system-time.d.ts +30 -0
  174. package/dist/runtime/vi/system-time.d.ts.map +1 -0
  175. package/dist/runtime/vi/system-time.js +100 -0
  176. package/dist/runtime/vi/system-time.js.map +1 -0
  177. package/dist/runtime/worker.d.ts +26 -0
  178. package/dist/runtime/worker.d.ts.map +1 -0
  179. package/dist/runtime/worker.js +195 -0
  180. package/dist/runtime/worker.js.map +1 -0
  181. package/dist/time/freeze.d.ts +80 -0
  182. package/dist/time/freeze.d.ts.map +1 -0
  183. package/dist/time/freeze.js +184 -0
  184. package/dist/time/freeze.js.map +1 -0
  185. package/dist/time/index.d.ts +16 -0
  186. package/dist/time/index.d.ts.map +1 -0
  187. package/dist/time/index.js +15 -0
  188. package/dist/time/index.js.map +1 -0
  189. package/package.json +1 -1
@@ -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"}