@c9up/helix 0.2.3 → 0.2.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 (70) hide show
  1. package/README.md +25 -111
  2. package/bin/helix.js +24 -41
  3. package/dist/cli/failed-cache.d.ts +2 -2
  4. package/dist/cli/failed-cache.js +2 -2
  5. package/dist/cli/pool.d.ts +3 -3
  6. package/dist/cli/reporter.d.ts +1 -1
  7. package/dist/cli/reporter.js +2 -2
  8. package/dist/cli/run.d.ts +5 -5
  9. package/dist/cli/run.js +4 -4
  10. package/dist/cli/run.js.map +1 -1
  11. package/dist/cli/runner.d.ts +1 -1
  12. package/dist/cli/runner.js +1 -1
  13. package/dist/cli/suites.d.ts +4 -4
  14. package/dist/cli/suites.d.ts.map +1 -1
  15. package/dist/cli/suites.js +4 -4
  16. package/dist/cli/suites.js.map +1 -1
  17. package/dist/index.d.ts +1 -1
  18. package/dist/index.js +1 -1
  19. package/dist/native/generated.d.ts +2 -2
  20. package/dist/native/generated.d.ts.map +1 -1
  21. package/dist/runtime/assert.d.ts +18 -18
  22. package/dist/runtime/assert.d.ts.map +1 -1
  23. package/dist/runtime/assert.js +3 -3
  24. package/dist/runtime/assert.js.map +1 -1
  25. package/dist/runtime/bootstrap.d.ts +2 -2
  26. package/dist/runtime/bootstrap.js +3 -3
  27. package/dist/runtime/bootstrap.js.map +1 -1
  28. package/dist/runtime/cli-args.d.ts +6 -6
  29. package/dist/runtime/cli-args.d.ts.map +1 -1
  30. package/dist/runtime/cli-args.js +5 -5
  31. package/dist/runtime/cli-args.js.map +1 -1
  32. package/dist/runtime/configure.d.ts +43 -43
  33. package/dist/runtime/configure.d.ts.map +1 -1
  34. package/dist/runtime/configure.js +11 -11
  35. package/dist/runtime/configure.js.map +1 -1
  36. package/dist/runtime/context.d.ts +9 -9
  37. package/dist/runtime/context.d.ts.map +1 -1
  38. package/dist/runtime/context.js +10 -10
  39. package/dist/runtime/context.js.map +1 -1
  40. package/dist/runtime/emitter.d.ts +13 -13
  41. package/dist/runtime/emitter.d.ts.map +1 -1
  42. package/dist/runtime/emitter.js +6 -6
  43. package/dist/runtime/global-hooks.d.ts +1 -1
  44. package/dist/runtime/global-hooks.js +1 -1
  45. package/dist/runtime/run.d.ts +13 -13
  46. package/dist/runtime/run.d.ts.map +1 -1
  47. package/dist/runtime/run.js +47 -47
  48. package/dist/runtime/run.js.map +1 -1
  49. package/dist/runtime/runner.d.ts +12 -12
  50. package/dist/runtime/runner.d.ts.map +1 -1
  51. package/dist/runtime/runner.js +10 -10
  52. package/dist/runtime/runner.js.map +1 -1
  53. package/dist/runtime/suite-config.d.ts +1 -1
  54. package/dist/runtime/suite-config.js +1 -1
  55. package/dist/runtime/suite-taps.d.ts +17 -17
  56. package/dist/runtime/suite-taps.d.ts.map +1 -1
  57. package/dist/runtime/suite-taps.js +7 -7
  58. package/dist/runtime/suite-taps.js.map +1 -1
  59. package/dist/runtime/suite.d.ts +43 -43
  60. package/dist/runtime/suite.d.ts.map +1 -1
  61. package/dist/runtime/suite.js +14 -14
  62. package/dist/runtime/suite.js.map +1 -1
  63. package/dist/runtime/test-context.d.ts +8 -8
  64. package/dist/runtime/test-context.d.ts.map +1 -1
  65. package/dist/runtime/test-context.js +5 -5
  66. package/dist/runtime/test-context.js.map +1 -1
  67. package/dist/runtime/worker.js +4 -4
  68. package/dist/runtime/worker.js.map +1 -1
  69. package/index.win32-x64-msvc.node +0 -0
  70. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/runtime/emitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emitter.d.ts","sourceRoot":"","sources":["../../src/runtime/emitter.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,25 @@
1
1
  /**
2
- * Runner events — the Japa `Emitter` surface.
2
+ * Runner events — the helix `Emitter` surface.
3
3
  *
4
- * Japa's plugin/reporter topology is built on an event emitter: a plugin
4
+ * helix's plugin/reporter topology is built on an event emitter: a plugin
5
5
  * receives `{ config, cliArgs, runner, emitter }` and subscribes to
6
6
  * `runner:start`, `suite:start`, `group:start`, `test:start`, … to observe the
7
7
  * run. Helix emits the SAME event names with the SAME node shapes
8
- * (`TestStartNode`, `TestEndNode`, `GroupStartNode`, …) so a Japa reporter or
8
+ * (`TestStartNode`, `TestEndNode`, `GroupStartNode`, …) so a helix reporter or
9
9
  * plugin can be ported without rewriting its listeners.
10
10
  *
11
- * One named deviation from `@japa/core`: `suite:start` / `suite:end` carry the
11
+ * One named deviation from `helix`: `suite:start` / `suite:end` carry the
12
12
  * test FILE name. Helix runs one process per file, so the file is what a
13
13
  * worker-side listener can see of a suite.
14
14
  *
15
- * `errors[].error` is the thrown `Error` itself, as in Japa — the emitter runs
15
+ * `errors[].error` is the thrown `Error` itself, as in helix — the emitter runs
16
16
  * in the worker, where the original is still around. Only an error rebuilt from
17
17
  * an IPC frame (which can carry data only) degrades to the {@link
18
18
  * SerializedError} shape, which keeps the same `name`/`message`/`stack` fields.
19
19
  */
20
20
  /**
21
21
  * A typed event emitter over {@link RunnerEvents}. Deliberately minimal — `on`
22
- * / `once` / `off` / `emit`, the surface a Japa reporter or plugin uses. A
22
+ * / `once` / `off` / `emit`, the surface a helix reporter or plugin uses. A
23
23
  * throwing listener is reported on stderr and never fails the run.
24
24
  */
25
25
  export class Emitter {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `runnerHooks` — run ONCE for the whole run, where Japa runs them.
2
+ * `runnerHooks` — run ONCE for the whole run, where helix runs them.
3
3
  *
4
4
  * These were running per worker process, which meant a migration in
5
5
  * `runnerHooks.setup` ran once per FILE. The reason given was that a resource
@@ -1,5 +1,5 @@
1
1
  /**
2
- * `runnerHooks` — run ONCE for the whole run, where Japa runs them.
2
+ * `runnerHooks` — run ONCE for the whole run, where helix runs them.
3
3
  *
4
4
  * These were running per worker process, which meant a migration in
5
5
  * `runnerHooks.setup` ran once per FILE. The reason given was that a resource
@@ -14,7 +14,7 @@ export interface TestResult {
14
14
  status: "pass" | "fail" | "skip" | "todo";
15
15
  durationMs: number;
16
16
  error?: SerializedError;
17
- /** Lifecycle phase `error` was raised in (Japa `test:end` parity). */
17
+ /** Lifecycle phase `error` was raised in (`test:end`). */
18
18
  errorPhase?: ErrorPhase;
19
19
  }
20
20
  export interface SuiteResult {
@@ -47,7 +47,7 @@ export interface FileResult {
47
47
  durationMs: number;
48
48
  /**
49
49
  * Full names of the tests marked `.pin()` — only populated under
50
- * `--list-pinned`, where Japa collects the files, prints what is pinned, and
50
+ * `--list-pinned`, where helix collects the files, prints what is pinned, and
51
51
  * runs nothing.
52
52
  */
53
53
  pinned?: string[];
@@ -70,32 +70,32 @@ export interface ExecuteOptions {
70
70
  */
71
71
  grep?: string;
72
72
  /**
73
- * Tag filter expressions (Japa `--tags`). A `~`-prefixed tag EXCLUDES (`!` is
73
+ * Tag filter expressions (`--tags`). A `~`-prefixed tag EXCLUDES (`!` is
74
74
  * also accepted). Required tags are OR-ed by default — a test runs when it
75
75
  * carries ANY of them — unless {@link ExecuteOptions.matchAll} is set, and
76
76
  * never when it carries an excluded tag.
77
77
  */
78
78
  tags?: string[];
79
- /** Require ALL required tags instead of any (Japa `--match-all`). */
79
+ /** Require ALL required tags instead of any (`--match-all`). */
80
80
  matchAll?: boolean;
81
- /** Exact test titles to run (Japa `--tests`). A test runs only if its leaf title is listed. */
81
+ /** Exact test titles to run (`--tests`). A test runs only if its leaf title is listed. */
82
82
  tests?: string[];
83
- /** Exact group titles to run (Japa `--groups`). A test runs only if its enclosing group is listed. */
83
+ /** Exact group titles to run (`--groups`). A test runs only if its enclosing group is listed. */
84
84
  groups?: string[];
85
85
  /**
86
86
  * The suite these tests belong to — `ctx.test.options.meta.suite.name` and the
87
- * `suite:*` event payloads. Defaults to `"default"`, Japa's implicit suite.
87
+ * `suite:*` event payloads. Defaults to `"default"`, the implicit suite.
88
88
  */
89
89
  suite?: string;
90
90
  /**
91
- * Stop running once a test fails (Japa `--bail`). Everything after the
92
- * failure is reported as SKIPPED, not dropped — same as Japa, so the counts
91
+ * Stop running once a test fails (`--bail`). Everything after the
92
+ * failure is reported as SKIPPED, not dropped — not dropped, so the counts
93
93
  * still add up.
94
94
  */
95
95
  bail?: boolean;
96
96
  /**
97
- * How far a bail reaches (Japa `--bail-layer`): `"group"` stops the enclosing
98
- * group only, `"suite"` the rest of the file, `"runner"` (Japa's default,
97
+ * How far a bail reaches (`--bail-layer`): `"group"` stops the enclosing
98
+ * group only, `"suite"` the rest of the file, `"runner"` (helix's default,
99
99
  * spelled `""` on its CLI) the rest of the run — the remaining FILES are
100
100
  * dropped by the pool, since helix runs one process per file and cannot skip
101
101
  * tests it never collected.
@@ -105,9 +105,9 @@ export interface ExecuteOptions {
105
105
  /** The value a {@link SerializedError} was built from, when it is still around. */
106
106
  export declare function thrownValue(error: SerializedError): unknown;
107
107
  /**
108
- * The suite a run belongs to (Japa `meta.suite`). Helix runs one process per
108
+ * The suite a run belongs to (`meta.suite`). Helix runs one process per
109
109
  * FILE, so the suite is a name the run carries — `"default"` unless
110
- * `configure({ suite })` or `--suite` says otherwise, exactly like Japa's
110
+ * `configure({ suite })` or `--suite` says otherwise, exactly like the
111
111
  * implicit suite.
112
112
  */
113
113
  export interface SuiteIdentity {
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAGN,KAAK,UAAU,EAGf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAOX,SAAS,EAGT,MAAM,YAAY,CAAC;AAapB,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,sEAAsE;IACtE,UAAU,CAAC,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,UAAU,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACb,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+FAA+F;IAC/F,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,sGAAsG;IACtG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,EAAE,CAAC;CAC9C;AAmFD,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAE3D;AAmQD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;CACb;AAi2BD,wBAAsB,WAAW,CAChC,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC1B,OAAO,CAAC,UAAU,CAAC,CA2HrB"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/runtime/run.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAGN,KAAK,UAAU,EAGf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAOX,SAAS,EAGT,MAAM,YAAY,CAAC;AAapB,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,UAAU,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,UAAU,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,MAAM,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACb,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC9B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0FAA0F;IAC1F,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,EAAE,CAAC;CAC9C;AAmFD,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAE3D;AAmQD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;CACb;AAi2BD,wBAAsB,WAAW,CAChC,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC1B,OAAO,CAAC,UAAU,CAAC,CA2HrB"}
@@ -20,7 +20,7 @@ function compileTagFilter(tags, matchAll) {
20
20
  const t = raw.trim();
21
21
  if (!t)
22
22
  continue;
23
- // `~` is the Japa exclusion prefix; `!` is accepted too (helix legacy) so a
23
+ // `~` is the helix exclusion prefix; `!` is accepted too (legacy) so a
24
24
  // stray `!` never silently becomes an impossible required tag.
25
25
  if (t.startsWith("~") || t.startsWith("!"))
26
26
  excluded.push(t.slice(1));
@@ -55,7 +55,7 @@ function tagMatches(node, filter) {
55
55
  ? filter.required.every((r) => have.has(r))
56
56
  : filter.required.some((r) => have.has(r));
57
57
  }
58
- /** Nearest enclosing `test.group(...)` title, for the Japa `--groups` filter. */
58
+ /** Nearest enclosing `test.group(...)` title, for the helix `--groups` filter. */
59
59
  function enclosingGroupTitle(node) {
60
60
  for (let s = node.parent; s !== undefined; s = s.parent) {
61
61
  if (s.isGroup)
@@ -73,7 +73,7 @@ function isInGroups(node, groups) {
73
73
  *
74
74
  * A result crosses the worker→CLI IPC boundary, so it can only hold plain data.
75
75
  * The EMITTER, though, runs in the worker — where the thrown `Error` still
76
- * exists, and where a Japa reporter or plugin expects `errors[].error` to be an
76
+ * exists, and where a helix reporter or plugin expects `errors[].error` to be an
77
77
  * `Error` instance. A symbol key is invisible to `JSON.stringify` and to
78
78
  * `Object.keys`, so the original rides along without ever reaching the frame.
79
79
  */
@@ -89,7 +89,7 @@ function withThrown(serialized, thrown) {
89
89
  });
90
90
  return serialized;
91
91
  }
92
- /** The reason Japa attaches to a test skipped because the run bailed. */
92
+ /** The reason helix attaches to a test skipped because the run bailed. */
93
93
  const BAIL_SKIP_REASON = "Skipped due to bail mode";
94
94
  function serializeError(err) {
95
95
  if (err instanceof AssertionError) {
@@ -159,7 +159,7 @@ function collectHookChain(leaf, type) {
159
159
  * run-wide test timeout; `0` on either disables it, which is how a deliberately
160
160
  * long boot opts out.
161
161
  */
162
- /** A group hook's return that is a group-scoped cleanup (Japa parity). */
162
+ /** A group hook's return that is a group-scoped cleanup. */
163
163
  function isCleanupFn(value) {
164
164
  return typeof value === "function";
165
165
  }
@@ -167,7 +167,7 @@ function isCleanupFn(value) {
167
167
  function asHooks(fns, type) {
168
168
  return (fns ?? []).map((fn) => ({ type, fn }));
169
169
  }
170
- /** A `beforeEach` return that is a cleanup callback (Vitest/Japa parity). */
170
+ /** A `beforeEach` return that is a cleanup callback (Vitest parity). */
171
171
  function isTestCleanup(value) {
172
172
  return typeof value === "function";
173
173
  }
@@ -180,11 +180,11 @@ async function callHook(hook, subject, fallbackMs = 0) {
180
180
  async function runHooks(hooks, registerCleanups = false, subject, fallbackMs = 0) {
181
181
  for (const h of hooks) {
182
182
  try {
183
- // Japa parity: test hooks receive the Test instance, group hooks the
183
+ // test hooks receive the Test instance, group hooks the
184
184
  // Group instance. Zero-arg hooks simply ignore it.
185
185
  const ret = await callHook(h, subject, fallbackMs);
186
186
  // A `beforeEach` returning a function registers it as a test-scoped
187
- // cleanup (Vitest/Japa parity). Ignored for `afterEach`.
187
+ // cleanup (Vitest parity). Ignored for `afterEach`.
188
188
  if (registerCleanups && isTestCleanup(ret)) {
189
189
  registerTestCleanup(ret);
190
190
  }
@@ -255,7 +255,7 @@ function makeTimeoutController(ms, label) {
255
255
  };
256
256
  }
257
257
  /**
258
- * Whether a test survives the run's filters (Japa's refiner). `--grep` is a
258
+ * Whether a test survives the run's filters (helix's refiner). `--grep` is a
259
259
  * helix extra applied per resolved title, so it lives at the call sites that
260
260
  * know the interpolated name rather than here.
261
261
  */
@@ -266,7 +266,7 @@ function isFilteredOut(node, ctx) {
266
266
  (ctx.onlyActive && !pathLeadsToOnly(node)));
267
267
  }
268
268
  /**
269
- * Whether any test under this suite survives the filters — Japa's
269
+ * Whether any test under this suite survives the filters — helix's
270
270
  * `Refiner#isGroupAllowed`: a group announces itself only when it has at least
271
271
  * one runnable test, so a fully filtered-out group is invisible to reporters.
272
272
  */
@@ -284,20 +284,20 @@ function suiteHasRunnableTest(node, ctx) {
284
284
  }
285
285
  /**
286
286
  * The `meta` bag exposed as `ctx.test.options.meta` and on the test events —
287
- * Japa's `{ suite, group, fileName, abort }`.
287
+ * helix's `{ suite, group, fileName, abort }`.
288
288
  */
289
289
  function testMeta(node, ctx) {
290
290
  return {
291
291
  suite: ctx.suite,
292
292
  group: enclosingGroup(node),
293
293
  fileName: ctx.file,
294
- // Japa's escape hatch: fail the running test with a given message.
294
+ // helix's escape hatch: fail the running test with a given message.
295
295
  abort: (message) => {
296
296
  throw new Error(message);
297
297
  },
298
298
  };
299
299
  }
300
- /** Nearest enclosing `test.group(...)` instance, if any (Japa `meta.group`). */
300
+ /** Nearest enclosing `test.group(...)` instance, if any (`meta.group`). */
301
301
  function enclosingGroup(node) {
302
302
  for (let s = node.parent; s !== undefined; s = s.parent) {
303
303
  if (s.isGroup)
@@ -307,15 +307,15 @@ function enclosingGroup(node) {
307
307
  }
308
308
  /**
309
309
  * The `test:start` payload for one concrete test (a plain test, or one dataset
310
- * row). `test:end` is this object plus the outcome — exactly how Japa builds
310
+ * row). `test:end` is this object plus the outcome — exactly how helix builds
311
311
  * the two nodes.
312
312
  */
313
313
  function buildTestStartNode(node, expandedTitle, ctx, dataset, flags) {
314
- // Japa's `TestOptions`, field for field. `title`, `tags`, `timeout`, `meta`,
314
+ // helix's `TestOptions`, field for field. `title`, `tags`, `timeout`, `meta`,
315
315
  // `isPinned` — and, as its `Test` constructor initialises them, `isTodo` and
316
316
  // `retries` — always carry a value. The rest appear only when the matching
317
317
  // modifier was used, so a reporter reading `"isSkipped" in node` sees what
318
- // Japa would show it. Pinned down by the golden tests, which compare the raw
318
+ // helix would show it. Pinned down by the golden tests, which compare the raw
319
319
  // key set of both runners' nodes.
320
320
  return {
321
321
  title: { original: node.name, expanded: expandedTitle },
@@ -338,19 +338,19 @@ function buildTestStartNode(node, expandedTitle, ctx, dataset, flags) {
338
338
  function toEmittedErrors(error, phase) {
339
339
  if (error === undefined)
340
340
  return [];
341
- // Japa types `errors[].error` as `Error`; hand listeners the real one when
341
+ // helix types `errors[].error` as `Error`; hand listeners the real one when
342
342
  // this process still has it, and fall back to the serialized shape for a
343
343
  // result that was rebuilt from a frame.
344
344
  const thrown = thrownValue(error);
345
345
  return [{ phase, error: thrown instanceof Error ? thrown : error }];
346
346
  }
347
347
  /**
348
- * Emit the Japa `test:start` / `test:end` pair for a test that never runs a
348
+ * Emit the helix `test:start` / `test:end` pair for a test that never runs a
349
349
  * body — a `todo`, an explicit `.skip()`, or a test whose skip condition threw.
350
- * Japa announces those through its `DummyRunner`, back-to-back.
350
+ * helix announces those through its `DummyRunner`, back-to-back.
351
351
  *
352
352
  * Tests dropped by a FILTER (`--tags`/`--tests`/`--groups`/`--grep`/`.only`)
353
- * are deliberately NOT emitted: Japa's refiner removes them before they can
353
+ * are deliberately NOT emitted: helix's refiner removes them before they can
354
354
  * announce themselves, so a reporter never hears about them. They still show up
355
355
  * as `skip` in {@link FileResult}, which is what the (Vitest-shaped) CLI
356
356
  * reporter consumes.
@@ -370,13 +370,13 @@ function emitTestResult(node, result, ctx, dataset) {
370
370
  }
371
371
  async function runTest(node, parentFullName, ctx) {
372
372
  const baseFullName = joinName(parentFullName, node.name);
373
- // Filter gates (Japa's refiner). Computed first because a filtered-out test
373
+ // Filter gates (helix's refiner). Computed first because a filtered-out test
374
374
  // emits NOTHING — not even the `test:start`/`test:end` pair a `.skip()` or a
375
375
  // `todo` still announces. `grep` is per-name (per row for datasets), so it
376
376
  // stays below.
377
377
  const filteredOut = isFilteredOut(node, ctx);
378
378
  // A dataset test with no body (`test('x').with(rows)` and no `.run(fn)` / no
379
- // body in `test`) is a `todo` — same as a bodiless plain test (Japa parity).
379
+ // body in `test`) is a `todo` — same as a bodiless plain test.
380
380
  const datasetTodo = node.datasetFn !== undefined && node.datasetBody === undefined;
381
381
  if (node.mode === "todo" || datasetTodo) {
382
382
  const r = {
@@ -390,7 +390,7 @@ async function runTest(node, parentFullName, ctx) {
390
390
  emitTestResult(node, r, ctx);
391
391
  return [r];
392
392
  }
393
- // Deferred skip condition (Japa: a `skip(fn)` callback — possibly async — is
393
+ // Deferred skip condition (helix: a `skip(fn)` callback — possibly async — is
394
394
  // evaluated here at run time, not eagerly at collection). A throwing
395
395
  // condition fails the test rather than silently skipping it.
396
396
  let deferredSkip = false;
@@ -415,9 +415,9 @@ async function runTest(node, parentFullName, ctx) {
415
415
  }
416
416
  // Node-level gates that apply to the whole test (and every dataset row).
417
417
  // `grep` is applied per-name below (per row for datasets). A bailed run skips
418
- // what is left — Japa marks them `skip`, it does not drop them.
418
+ // what is left — helix marks them `skip`, it does not drop them.
419
419
  const nodeSkipped = node.mode === "skip" || deferredSkip || filteredOut || ctx.bailed;
420
- // Japa marks a bailed-over test with `skip(true, "Skipped due to bail mode")`,
420
+ // helix marks a bailed-over test with `skip(true, "Skipped due to bail mode")`,
421
421
  // so the reason travels on the node and reaches `skipReason` on the events.
422
422
  // Mirrored here, on the same node, for the same reason.
423
423
  if (ctx.bailed && node.reason === undefined)
@@ -430,7 +430,7 @@ async function runTest(node, parentFullName, ctx) {
430
430
  return r;
431
431
  };
432
432
  const grepOut = (fullName) => ctx.grep !== undefined && !ctx.grep.test(fullName);
433
- // Dataset expansion (Japa `test(name, fn).with(rows)`): resolve the rows at
433
+ // Dataset expansion (`test(name, fn).with(rows)`): resolve the rows at
434
434
  // run time (awaiting an async source), then run one test per row with an
435
435
  // interpolated title. The full resolved dataset is exposed as `ctx.test.dataset`.
436
436
  if (node.datasetFn !== undefined) {
@@ -496,7 +496,7 @@ async function runOneTest(node, title, fullName, ctx, dataset, row, datasetNode)
496
496
  const perTestRetries = node.retries ?? inheritedEach(node, "eachRetries") ?? ctx.retries;
497
497
  const attempts = 1 + Math.max(0, perTestRetries);
498
498
  const start = Date.now();
499
- // Japa announces the test ONCE, before the first attempt; the retry loop
499
+ // helix announces the test ONCE, before the first attempt; the retry loop
500
500
  // lives inside the start/end pair and only the final attempt is reported.
501
501
  const startNode = buildTestStartNode(node, title, ctx, datasetNode, {
502
502
  isTodo: false,
@@ -507,7 +507,7 @@ async function runOneTest(node, title, fullName, ctx, dataset, row, datasetNode)
507
507
  // afterEach) inside its own per-test frame so cleanups / outcome hooks /
508
508
  // assertion counters reset between attempts. Passes on the first success.
509
509
  let last;
510
- // 1-based number of the attempt that produced `last` (Japa counts the first
510
+ // 1-based number of the attempt that produced `last` (helix counts the first
511
511
  // run as attempt 1), and only reported when the test opted into retries.
512
512
  let attemptNumber = 1;
513
513
  for (let attempt = 0; attempt < attempts; attempt += 1) {
@@ -549,7 +549,7 @@ async function runAttempt(node, title, fullName, before, after, timeoutMs, retri
549
549
  // A re-armable body timeout so `ctx.test.resetTimeout()` can push the deadline.
550
550
  const timeoutCtl = makeTimeoutController(timeoutMs, `test "${fullName}"`);
551
551
  // The running test's instance — injected as `ctx.test`, passed to the test
552
- // hooks (Japa parity), and threaded into the frame so cleanups receive it.
552
+ // hooks, and threaded into the frame so cleanups receive it.
553
553
  const testInstance = {
554
554
  title,
555
555
  fullName,
@@ -559,8 +559,8 @@ async function runAttempt(node, title, fullName, before, after, timeoutMs, retri
559
559
  retries,
560
560
  tags: node.tags ?? [],
561
561
  isTodo: false,
562
- // `test.fails()` — a Japa plugin reads it to know an error was the
563
- // point (`@japa/assert` skips its assertion check for such a test).
562
+ // `test.fails()` — a plugin reads it to know an error was the
563
+ // point (`helix's assert` skips its assertion check for such a test).
564
564
  isFailing: node.failing === true,
565
565
  meta,
566
566
  },
@@ -573,10 +573,10 @@ async function runAttempt(node, title, fullName, before, after, timeoutMs, retri
573
573
  };
574
574
  setFrameTest(testInstance);
575
575
  // Build the injected context BEFORE the `beforeEach` chain so hooks can reach
576
- // it as `$test.context` (Japa parity) — the SAME context flows to the body.
576
+ // it as `$test.context` — the SAME context flows to the body.
577
577
  // Built inside the per-test frame so `ctx.cleanup` / getters bind here.
578
578
  const context = buildTestContext(testInstance);
579
- // A Japa `Test.executed` hook reads `test.context` — `@japa/assert` validates
579
+ // A helix `Test.executed` hook reads `test.context` — `helix's assert` validates
580
580
  // its assertion count through it after every test.
581
581
  setFrameContext(context);
582
582
  testInstance.context = context;
@@ -594,7 +594,7 @@ async function runAttempt(node, title, fullName, before, after, timeoutMs, retri
594
594
  };
595
595
  }
596
596
  let testErr;
597
- // Which phase produced `testErr` — surfaced on `test:end` (Japa parity).
597
+ // Which phase produced `testErr` — surfaced on `test:end`.
598
598
  let errorPhase;
599
599
  // Per-test setup hooks (`test.setup`) run after the group `each.setup` chain,
600
600
  // just before the body. A failing setup fails the test without running it.
@@ -606,7 +606,7 @@ async function runAttempt(node, title, fullName, before, after, timeoutMs, retri
606
606
  }
607
607
  else {
608
608
  try {
609
- // `done` callback (Japa `waitForDone`): the test completes when the
609
+ // `done` callback (`waitForDone`): the test completes when the
610
610
  // body calls done()/done(error). Built even when unused (harmless).
611
611
  let doneResolve = noop;
612
612
  let doneReject = noop;
@@ -672,7 +672,7 @@ async function runAttempt(node, title, fullName, before, after, timeoutMs, retri
672
672
  // Record the outcome BEFORE the frame's cleanup drain (finally) fires, so
673
673
  // `ctx.cleanup((hasError, test) => …)` sees the right `hasError`.
674
674
  setFrameOutcome(finalErr !== undefined);
675
- // A `Test.executed` hook is a verdict, not a teardown: `@japa/assert`
675
+ // A `Test.executed` hook is a verdict, not a teardown: `helix's assert`
676
676
  // validates `assert.plan(n)` there. Its throw has to reach the result, or a
677
677
  // plugin's whole reason for existing passes green.
678
678
  const executedErr = await drainTestOutcomeHooks(finalErr !== undefined);
@@ -756,7 +756,7 @@ async function runSuite(node, parentFullName, ctx) {
756
756
  if (skipEntire)
757
757
  return runSkippedSuite(node, fullName, ctx);
758
758
  const hookErrors = [];
759
- // The group's instance (Japa parity) passed to group hooks, and cleanups a
759
+ // The group's instance passed to group hooks, and cleanups a
760
760
  // `group.setup()` returns — run in the afterAll phase with `(hadError, group)`.
761
761
  // For a `test.group()` this is the SAME object the body received and the call
762
762
  // returned (`self === group`); a plain `describe` suite has no group handle,
@@ -766,7 +766,7 @@ async function runSuite(node, parentFullName, ctx) {
766
766
  fullName,
767
767
  };
768
768
  const groupCleanups = [];
769
- // A group with no runnable test announces nothing — Japa's refiner drops it
769
+ // A group with no runnable test announces nothing — helix's refiner drops it
770
770
  // before `Group.exec()` runs, so a reporter never sees it.
771
771
  const groupFiltered = !suiteHasRunnableTest(node, ctx);
772
772
  if (!groupFiltered) {
@@ -786,7 +786,7 @@ async function runSuite(node, parentFullName, ctx) {
786
786
  if (!beforeAllFailed) {
787
787
  for (const child of node.children) {
788
788
  if (child.kind === "test") {
789
- // A dataset test expands to one result per row (Japa parity).
789
+ // A dataset test expands to one result per row.
790
790
  for (const r of await runTest(child, fullName, ctx))
791
791
  children.push(r);
792
792
  }
@@ -807,10 +807,10 @@ async function runSuite(node, parentFullName, ctx) {
807
807
  title: node.name,
808
808
  meta: { suite: ctx.suite, fileName: ctx.file },
809
809
  // True when ANYTHING under the group failed — a hook or a test — which
810
- // is what Japa's GroupRunner reports.
810
+ // is what helix's GroupRunner reports.
811
811
  hasError: groupHadError || hookErrors.length > 0,
812
812
  // The group's own `errors` are its hook failures only; a test's failure
813
- // travels on that test's `test:end` (Japa parity).
813
+ // travels on that test's `test:end`.
814
814
  errors: hookErrors.map((error, i) => ({
815
815
  phase: i < setupErrorCount ? "setup" : "teardown",
816
816
  error,
@@ -889,7 +889,7 @@ async function runBeforeAllHooks(node, parentFullName, ctx, hookErrors, group, g
889
889
  if (h.type !== "beforeAll")
890
890
  continue;
891
891
  try {
892
- // Japa parity: group hooks receive the Group instance; a returned
892
+ // group hooks receive the Group instance; a returned
893
893
  // function becomes a group-scoped cleanup (run in the afterAll phase).
894
894
  const ret = await callHook(h, group, ctx.timeoutMs);
895
895
  if (isCleanupFn(ret))
@@ -912,7 +912,7 @@ async function runAfterAllHooks(node, hookErrors, group, groupCleanups, hadError
912
912
  /** Run-wide default, used when the hook declares no timeout of its own. */
913
913
  fallbackMs = 0) {
914
914
  // Group-scoped cleanups (returned by `group.setup()`) run first, in reverse
915
- // insertion order, receiving `(hadError, group)` — Japa lifecycle parity.
915
+ // insertion order, receiving `(hadError, group)` — helix lifecycle parity.
916
916
  for (let i = groupCleanups.length - 1; i >= 0; i -= 1) {
917
917
  try {
918
918
  await groupCleanups[i](hadError, group);
@@ -999,16 +999,16 @@ export async function executeRoot(root, file, options = {}) {
999
999
  file,
1000
1000
  suite: { name: options.suite ?? "default" },
1001
1001
  bail: options.bail === true,
1002
- // Japa spells the runner layer as an empty string on its CLI.
1002
+ // helix spells the runner layer as an empty string on its CLI.
1003
1003
  bailLayer: options.bailLayer === undefined || options.bailLayer === ""
1004
1004
  ? "runner"
1005
1005
  : options.bailLayer,
1006
1006
  bailed: false,
1007
1007
  };
1008
1008
  const suites = [];
1009
- // Japa's runner/suite frame. Helix has no named-suite layer (one process per
1009
+ // helix's runner/suite frame. Helix has no named-suite layer (one process per
1010
1010
  // file), so the FILE is the suite — `suite:start` carries its name.
1011
- // Japa skips a suite whose every test is filtered out — the suite never
1011
+ // helix skips a suite whose every test is filtered out — the suite never
1012
1012
  // announces itself, though the runner still opens and closes the run.
1013
1013
  const suiteRunnable = suiteHasRunnableTest(root, ctx);
1014
1014
  emitter.emit("runner:start", {});
@@ -1043,7 +1043,7 @@ export async function executeRoot(root, file, options = {}) {
1043
1043
  if (!rootBeforeAllFailed) {
1044
1044
  for (const child of root.children) {
1045
1045
  if (child.kind === "test") {
1046
- // A dataset test expands to one result per row (Japa parity).
1046
+ // A dataset test expands to one result per row.
1047
1047
  const trs = await runTest(child, "", ctx);
1048
1048
  suites.push({
1049
1049
  name: "",