@alchemy.run/test 0.0.0 → 2.0.0-beta.85

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 (119) hide show
  1. package/LICENSE +201 -0
  2. package/bin/alchemy-test.ts +2 -0
  3. package/lib/Alchemy.d.ts +78 -0
  4. package/lib/Alchemy.d.ts.map +1 -0
  5. package/lib/Alchemy.js +194 -0
  6. package/lib/Alchemy.js.map +1 -0
  7. package/lib/Api.d.ts +134 -0
  8. package/lib/Api.d.ts.map +1 -0
  9. package/lib/Api.js +245 -0
  10. package/lib/Api.js.map +1 -0
  11. package/lib/Bun.d.ts +67 -0
  12. package/lib/Bun.d.ts.map +1 -0
  13. package/lib/Bun.js +143 -0
  14. package/lib/Bun.js.map +1 -0
  15. package/lib/Capture.d.ts +10 -0
  16. package/lib/Capture.d.ts.map +1 -0
  17. package/lib/Capture.js +68 -0
  18. package/lib/Capture.js.map +1 -0
  19. package/lib/Core.d.ts +287 -0
  20. package/lib/Core.d.ts.map +1 -0
  21. package/lib/Core.js +429 -0
  22. package/lib/Core.js.map +1 -0
  23. package/lib/DevCli.d.ts +47 -0
  24. package/lib/DevCli.d.ts.map +1 -0
  25. package/lib/DevCli.js +181 -0
  26. package/lib/DevCli.js.map +1 -0
  27. package/lib/Expect.d.ts +84 -0
  28. package/lib/Expect.d.ts.map +1 -0
  29. package/lib/Expect.js +518 -0
  30. package/lib/Expect.js.map +1 -0
  31. package/lib/FileLog.d.ts +27 -0
  32. package/lib/FileLog.d.ts.map +1 -0
  33. package/lib/FileLog.js +136 -0
  34. package/lib/FileLog.js.map +1 -0
  35. package/lib/Http.d.ts +109 -0
  36. package/lib/Http.d.ts.map +1 -0
  37. package/lib/Http.js +123 -0
  38. package/lib/Http.js.map +1 -0
  39. package/lib/Model.d.ts +98 -0
  40. package/lib/Model.d.ts.map +1 -0
  41. package/lib/Model.js +59 -0
  42. package/lib/Model.js.map +1 -0
  43. package/lib/PlainReporter.d.ts +19 -0
  44. package/lib/PlainReporter.d.ts.map +1 -0
  45. package/lib/PlainReporter.js +348 -0
  46. package/lib/PlainReporter.js.map +1 -0
  47. package/lib/Plan.d.ts +19 -0
  48. package/lib/Plan.d.ts.map +1 -0
  49. package/lib/Plan.js +32 -0
  50. package/lib/Plan.js.map +1 -0
  51. package/lib/Registry.d.ts +34 -0
  52. package/lib/Registry.d.ts.map +1 -0
  53. package/lib/Registry.js +80 -0
  54. package/lib/Registry.js.map +1 -0
  55. package/lib/Reporter.d.ts +160 -0
  56. package/lib/Reporter.d.ts.map +1 -0
  57. package/lib/Reporter.js +9 -0
  58. package/lib/Reporter.js.map +1 -0
  59. package/lib/Runner.d.ts +51 -0
  60. package/lib/Runner.d.ts.map +1 -0
  61. package/lib/Runner.js +1052 -0
  62. package/lib/Runner.js.map +1 -0
  63. package/lib/StrayOutput.d.ts +8 -0
  64. package/lib/StrayOutput.d.ts.map +1 -0
  65. package/lib/StrayOutput.js +259 -0
  66. package/lib/StrayOutput.js.map +1 -0
  67. package/lib/Tags.d.ts +17 -0
  68. package/lib/Tags.d.ts.map +1 -0
  69. package/lib/Tags.js +84 -0
  70. package/lib/Tags.js.map +1 -0
  71. package/lib/TestState.d.ts +12 -0
  72. package/lib/TestState.d.ts.map +1 -0
  73. package/lib/TestState.js +15 -0
  74. package/lib/TestState.js.map +1 -0
  75. package/lib/Tui.d.ts +4 -0
  76. package/lib/Tui.d.ts.map +1 -0
  77. package/lib/Tui.js +1137 -0
  78. package/lib/Tui.js.map +1 -0
  79. package/lib/Vitest.d.ts +58 -0
  80. package/lib/Vitest.d.ts.map +1 -0
  81. package/lib/Vitest.js +132 -0
  82. package/lib/Vitest.js.map +1 -0
  83. package/lib/WorktreeStage.d.ts +17 -0
  84. package/lib/WorktreeStage.d.ts.map +1 -0
  85. package/lib/WorktreeStage.js +48 -0
  86. package/lib/WorktreeStage.js.map +1 -0
  87. package/lib/cli.d.ts +2 -0
  88. package/lib/cli.d.ts.map +1 -0
  89. package/lib/cli.js +222 -0
  90. package/lib/cli.js.map +1 -0
  91. package/lib/index.d.ts +14 -0
  92. package/lib/index.d.ts.map +1 -0
  93. package/lib/index.js +12 -0
  94. package/lib/index.js.map +1 -0
  95. package/package.json +73 -3
  96. package/src/Alchemy.ts +335 -0
  97. package/src/Api.ts +521 -0
  98. package/src/Bun.ts +256 -0
  99. package/src/Capture.ts +72 -0
  100. package/src/Core.ts +872 -0
  101. package/src/DevCli.ts +229 -0
  102. package/src/Expect.ts +763 -0
  103. package/src/FileLog.ts +158 -0
  104. package/src/Http.ts +201 -0
  105. package/src/Model.ts +160 -0
  106. package/src/PlainReporter.ts +426 -0
  107. package/src/Plan.ts +45 -0
  108. package/src/Registry.ts +101 -0
  109. package/src/Reporter.ts +171 -0
  110. package/src/Runner.ts +1341 -0
  111. package/src/StrayOutput.ts +283 -0
  112. package/src/Tags.ts +100 -0
  113. package/src/TestState.ts +35 -0
  114. package/src/Tui.ts +1272 -0
  115. package/src/Vitest.ts +239 -0
  116. package/src/WorktreeStage.ts +45 -0
  117. package/src/cli.ts +330 -0
  118. package/src/index.ts +57 -0
  119. package/README.md +0 -9
@@ -0,0 +1,160 @@
1
+ /**
2
+ * The Reporter is an Effect service the runner emits structured events into.
3
+ * Two implementations ship with the CLI: a plain line-oriented reporter for
4
+ * non-interactive terminals / CI, and an opentui TUI for interactive use.
5
+ */
6
+ import * as Context from "effect/Context";
7
+ import type * as Effect from "effect/Effect";
8
+ import type { LogEntry } from "./Model.ts";
9
+ export type TestStatus = "pass" | "fail" | "skip" | "todo";
10
+ export interface TestMeta {
11
+ readonly tags: ReadonlyArray<string>;
12
+ readonly optInTags: ReadonlyArray<string>;
13
+ /** Unique test identity, stable across retries; use titlePath for display. */
14
+ readonly id: string;
15
+ readonly file: string;
16
+ readonly titlePath: ReadonlyArray<string>;
17
+ readonly name: string;
18
+ }
19
+ export interface TestResult {
20
+ readonly status: TestStatus;
21
+ readonly durationMs: number;
22
+ /** Pretty-printed failure (message + relevant stack), if failed. */
23
+ readonly error?: string | undefined;
24
+ /** Buffered Effect log / Console output captured during the test. */
25
+ readonly logs: ReadonlyArray<LogEntry>;
26
+ /** Number of retries that were attempted before this result. */
27
+ readonly retries: number;
28
+ }
29
+ export interface RunSummary {
30
+ readonly dryRun?: boolean;
31
+ /** Coverage within the command's path, name, .only and global tag filters. */
32
+ readonly plan?: {
33
+ readonly found: number;
34
+ readonly selected: number;
35
+ readonly excluded: number;
36
+ } | undefined;
37
+ readonly files: number;
38
+ readonly passed: number;
39
+ readonly failed: number;
40
+ readonly skipped: number;
41
+ readonly todo: number;
42
+ readonly durationMs: number;
43
+ readonly failures: ReadonlyArray<{
44
+ meta: TestMeta;
45
+ result: TestResult;
46
+ }>;
47
+ /**
48
+ * Files that failed as a whole (import error, or a `beforeAll`/`afterAll`
49
+ * hook failure) rather than through an individual test. Counted in
50
+ * {@link failed} alongside `failures`.
51
+ */
52
+ readonly fileFailures: ReadonlyArray<{
53
+ file: string;
54
+ error: string;
55
+ }>;
56
+ }
57
+ export type TestEvent = {
58
+ readonly _tag: "PlanPreview";
59
+ readonly phases: ReadonlyArray<ReadonlyArray<{
60
+ readonly tags: ReadonlyArray<string>;
61
+ readonly concurrency: number | "unbounded";
62
+ readonly tests: number;
63
+ readonly files: number;
64
+ readonly skipped: number;
65
+ }>>;
66
+ } | {
67
+ readonly _tag: "PlanPhaseStart";
68
+ readonly phase: number;
69
+ readonly phases: number;
70
+ readonly tests: number;
71
+ } | {
72
+ readonly _tag: "CollectStart";
73
+ readonly files: ReadonlyArray<string>;
74
+ } | {
75
+ /** Import progress: one per file during the collection phase. */
76
+ readonly _tag: "FileCollected";
77
+ readonly file: string;
78
+ } | {
79
+ /**
80
+ * Collection is complete; execution is about to begin. Carries the
81
+ * full (filtered) test list for the whole run.
82
+ */
83
+ readonly _tag: "RunStart";
84
+ readonly files: number;
85
+ readonly tests: ReadonlyArray<TestMeta>;
86
+ } | {
87
+ readonly _tag: "FileStart";
88
+ readonly file: string;
89
+ /**
90
+ * LIVE reference to the file's hook log buffer (deploy/destroy). The
91
+ * runner appends to it as hooks execute — single-process, so reporters
92
+ * may read it incrementally (e.g. the TUI tailing a detail pane).
93
+ */
94
+ readonly logs?: ReadonlyArray<LogEntry>;
95
+ } | {
96
+ /** A file-level hook (deploy/destroy) started running. */
97
+ readonly _tag: "HookStart";
98
+ readonly file: string;
99
+ readonly hook: "beforeAll" | "afterAll";
100
+ } | {
101
+ readonly _tag: "HookEnd";
102
+ readonly file: string;
103
+ readonly hook: "beforeAll" | "afterAll";
104
+ } | {
105
+ readonly _tag: "FileEnd";
106
+ readonly file: string;
107
+ /** Buffered output of file-level hooks (deploy/destroy). */
108
+ readonly logs: ReadonlyArray<LogEntry>;
109
+ readonly error?: string | undefined;
110
+ } | {
111
+ readonly _tag: "TestStart";
112
+ readonly test: TestMeta;
113
+ /** LIVE reference to the test's captured-output buffer (see FileStart). */
114
+ readonly logs?: ReadonlyArray<LogEntry>;
115
+ } | {
116
+ /**
117
+ * The test holds its run lock (`exclusive`) and starts executing. Until
118
+ * then it is queued: an exclusive test can wait out a busy phase.
119
+ */
120
+ readonly _tag: "TestLocked";
121
+ readonly test: TestMeta;
122
+ } | {
123
+ readonly _tag: "TestEnd";
124
+ readonly test: TestMeta;
125
+ readonly result: TestResult;
126
+ } | {
127
+ readonly _tag: "RunEnd";
128
+ readonly summary: RunSummary;
129
+ };
130
+ /**
131
+ * Interactive control over a live (or finished) run. The runner hands this
132
+ * to the Reporter so the TUI can retry and kill tests.
133
+ *
134
+ * Retries re-run the test body as-is: for files whose state was torn down by
135
+ * `afterAll` (deploy-once suites) the retried body may fail on missing
136
+ * infrastructure — `test.provider`-style self-contained tests retry cleanly.
137
+ */
138
+ export interface RunController {
139
+ /** Re-run a finished test. No-op while the test is still running/queued. */
140
+ readonly retryTest: (id: string) => void;
141
+ /** Re-run every finished test of a file. */
142
+ readonly retryFile: (file: string) => void;
143
+ /** Interrupt a currently-running test (reported as failed/killed). */
144
+ readonly killTest: (id: string) => void;
145
+ }
146
+ export interface ReporterService {
147
+ readonly emit: (event: TestEvent) => Effect.Effect<void>;
148
+ /**
149
+ * Runs after RunEnd. The plain reporter returns immediately; the TUI blocks
150
+ * until the user quits so results can be inspected.
151
+ */
152
+ readonly waitForExit: (summary: RunSummary) => Effect.Effect<void>;
153
+ /** Called once by the runner when interactive control becomes available. */
154
+ readonly attachController?: (controller: RunController) => Effect.Effect<void>;
155
+ }
156
+ declare const Reporter_base: Context.ServiceClass<Reporter, "alchemy-test/Reporter", ReporterService>;
157
+ export declare class Reporter extends Reporter_base {
158
+ }
159
+ export {};
160
+ //# sourceMappingURL=Reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Reporter.d.ts","sourceRoot":"","sources":["../src/Reporter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The Reporter is an Effect service the runner emits structured events into.
3
+ * Two implementations ship with the CLI: a plain line-oriented reporter for
4
+ * non-interactive terminals / CI, and an opentui TUI for interactive use.
5
+ */
6
+ import * as Context from "effect/Context";
7
+ export class Reporter extends Context.Service()("alchemy-test/Reporter") {
8
+ }
9
+ //# sourceMappingURL=Reporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Reporter.js","sourceRoot":"","sources":["../src/Reporter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAmK1C,MAAM,OAAO,QAAS,SAAQ,OAAO,CAAC,OAAO,EAA6B,CACxE,uBAAuB,CACxB;CAAG"}
@@ -0,0 +1,51 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as FileSystem from "effect/FileSystem";
3
+ import * as Path from "effect/Path";
4
+ import type { FileSuite } from "./Model.ts";
5
+ import type { TestPlan } from "./Plan.ts";
6
+ import { Reporter, type RunSummary } from "./Reporter.ts";
7
+ export interface RunOptions {
8
+ /** Directory the run is rooted at (usually `packages/alchemy`). */
9
+ readonly root: string;
10
+ /**
11
+ * Positional filters. Existing files/directories are used as-is; anything
12
+ * else is a case-insensitive substring filter on test file paths (like
13
+ * vitest's positional filters). Defaults to `test`.
14
+ */
15
+ readonly paths: ReadonlyArray<string>;
16
+ /**
17
+ * Exclusion filters (`--exclude`). Existing files/directories exclude by
18
+ * path prefix; anything else is a case-insensitive substring exclusion on
19
+ * test file paths. A positional root explicitly given inside an excluded
20
+ * path overrides the exclusion (so `alchemy-test test/Railway` still works
21
+ * when the package script bakes in `--exclude test/Railway`).
22
+ */
23
+ readonly exclude?: ReadonlyArray<string> | undefined;
24
+ /**
25
+ * `-t` test-name filter, applied to the full title
26
+ * (`file > describe chain > name`).
27
+ */
28
+ readonly filter?: ((fullTitle: string) => boolean) | undefined;
29
+ /** Match the combined suite and test tags, in addition to other filters. */
30
+ readonly tagsFilter?: ReadonlyArray<string>;
31
+ readonly plan?: TestPlan | undefined;
32
+ readonly dryRun?: boolean;
33
+ /** Default per-test timeout in ms. */
34
+ readonly timeout: number;
35
+ /** Times a failing test body is re-run before being reported as failed. */
36
+ readonly retry: number;
37
+ /** Maximum number of files executing concurrently (default unbounded). */
38
+ readonly concurrency: number | "unbounded";
39
+ /** Force sequential execution within every file. */
40
+ readonly sequential: boolean;
41
+ /** Absolute path of the persistent run log (test.log). */
42
+ readonly logFile: string;
43
+ }
44
+ export declare const discover: (options: RunOptions) => Effect.Effect<string[], unknown, FileSystem.FileSystem | Path.Path>;
45
+ export interface CollectedFile {
46
+ readonly file: string;
47
+ readonly suite: FileSuite;
48
+ readonly error?: string | undefined;
49
+ }
50
+ export declare const run: (input: RunOptions) => Effect.Effect<RunSummary, never, FileSystem.FileSystem | Path.Path | Reporter | import("effect/Scope").Scope>;
51
+ //# sourceMappingURL=Runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Runner.d.ts","sourceRoot":"","sources":["../src/Runner.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAIpC,OAAO,KAAK,EAAa,SAAS,EAAmC,MAAM,YAAY,CAAC;AAExF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EACL,QAAQ,EAER,KAAK,UAAU,EAIhB,MAAM,eAAe,CAAC;AAGvB,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC;;;;;;OAMG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;IACrD;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/D,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3C,oDAAoD;IACpD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAyFD,eAAO,MAAM,QAAQ,8FA0FnB,CAAC;AAMH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAsoBD,eAAO,MAAM,GAAG,sIA6ad,CAAC"}