@shivaedev/vitest-rerun 0.11.3 → 0.12.1
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/CHANGELOG.md +12 -0
- package/dist/adapters/nodeInvocation.d.ts +6 -0
- package/dist/adapters/nodeInvocation.d.ts.map +1 -0
- package/dist/adapters/nodeInvocation.js +4 -0
- package/dist/adapters/nodeInvocation.js.map +1 -0
- package/dist/adapters/snapshotCodec.d.ts +4 -0
- package/dist/adapters/snapshotCodec.d.ts.map +1 -0
- package/dist/adapters/snapshotCodec.js +9 -0
- package/dist/adapters/snapshotCodec.js.map +1 -0
- package/dist/attempt.js +4 -3
- package/dist/attempt.js.map +1 -1
- package/dist/main.d.ts +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/rerun.d.ts +2 -2
- package/dist/rerun.d.ts.map +1 -1
- package/dist/rerun.js +12 -5
- package/dist/rerun.js.map +1 -1
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +3 -3
- package/dist/snapshot.js.map +1 -1
- package/package.json +14 -15
- package/src/adapters/nodeInvocation.ts +4 -0
- package/src/adapters/snapshotCodec.ts +10 -0
- package/src/attempt.ts +5 -3
- package/src/rerun.ts +12 -10
- package/src/snapshot.ts +3 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.12.1 - 2026-11-11
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- Align published dependency requirements with the workspace.
|
|
8
|
+
|
|
9
|
+
## 0.12.0 - 2026-11-10
|
|
10
|
+
|
|
11
|
+
### Breaking
|
|
12
|
+
|
|
13
|
+
- `rerun` in `@shivaedev/vitest-rerun/rerun.ts` now requires `Path.Path`; provide it with `NodeServices.layer`.
|
|
14
|
+
|
|
3
15
|
## 0.11.3 - 2026-11-08
|
|
4
16
|
|
|
5
17
|
### Changed
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeInvocation.d.ts","sourceRoot":"","sources":["../../src/adapters/nodeInvocation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,eAAO,MAAM,cAAc;;;gBAAkF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodeInvocation.js","sourceRoot":"","sources":["../../src/adapters/nodeInvocation.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
export declare function serializeSnapshot(snapshot: unknown): Effect.Effect<Uint8Array<ArrayBufferLike>, never, never>;
|
|
3
|
+
export declare function deserializeSnapshot(bytes: Uint8Array): Effect.Effect<unknown, unknown, never>;
|
|
4
|
+
//# sourceMappingURL=snapshotCodec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshotCodec.d.ts","sourceRoot":"","sources":["../../src/adapters/snapshotCodec.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,4DAElD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,0CAEpD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { deserialize, serialize } from "node:v8";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
export function serializeSnapshot(snapshot) {
|
|
4
|
+
return Effect.sync(() => serialize(snapshot));
|
|
5
|
+
}
|
|
6
|
+
export function deserializeSnapshot(bytes) {
|
|
7
|
+
return Effect.try({ catch: (cause) => cause, try: () => deserialize(bytes) });
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=snapshotCodec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshotCodec.js","sourceRoot":"","sources":["../../src/adapters/snapshotCodec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,UAAU,iBAAiB,CAAC,QAAiB;IAClD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAe,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAiB;IACpD,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAY,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACxF,CAAC"}
|
package/dist/attempt.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import process from "node:process";
|
|
2
|
-
import
|
|
2
|
+
import * as NodePath from "@effect/platform-node/NodePath";
|
|
3
3
|
import * as NodeRuntime from "@effect/platform-node/NodeRuntime";
|
|
4
4
|
import * as NodeServices from "@effect/platform-node/NodeServices";
|
|
5
|
-
import { Console, Effect, Exit, Runtime } from "effect";
|
|
5
|
+
import { Console, Effect, Exit, Path, Runtime } from "effect";
|
|
6
6
|
import { runAttempt } from "#runAttempt.ts";
|
|
7
7
|
import { vitestRunnerLayer } from "#vitest-runner/layer.ts";
|
|
8
|
-
|
|
8
|
+
const modulePath = Path.Path.pipe(Effect.flatMap((path) => path.fromFileUrl(new URL(import.meta.url))));
|
|
9
|
+
if (Effect.runSync(modulePath.pipe(Effect.provide(NodePath.layer))) === process.argv[1]) {
|
|
9
10
|
const [attempt = "1", outputDir = ".", ...vitestArgs] = process.argv.slice(2);
|
|
10
11
|
NodeRuntime.runMain(runAttempt({ attempt: Number(attempt), outputDir, vitestArgs }).pipe(Effect.catchTag("VitestRerunError", (error) => Effect.as(Console.error(`vitest-rerun: ${error.message}`, ...(error.cause === undefined ? [] : [error.cause])), true)), Effect.provide(vitestRunnerLayer), Effect.provide(NodeServices.layer)), { teardown: (exit, onExit) => (Exit.isSuccess(exit) ? onExit(Number(exit.value)) : Runtime.defaultTeardown(exit, onExit)) });
|
|
11
12
|
}
|
package/dist/attempt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attempt.js","sourceRoot":"","sources":["../src/attempt.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,
|
|
1
|
+
{"version":3,"file":"attempt.js","sourceRoot":"","sources":["../src/attempt.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,KAAK,QAAQ,MAAM,gCAAgC,CAAC;AAC3D,OAAO,KAAK,WAAW,MAAM,mCAAmC,CAAC;AACjE,OAAO,KAAK,YAAY,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAExG,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACzF,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,SAAS,GAAG,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9E,WAAW,CAAC,OAAO,CAClB,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC,IAAI,CACnE,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,EAAE,CAC7C,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CACrH,EACD,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EACjC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAClC,EACD,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAC3H,CAAC;AACH,CAAC"}
|
package/dist/main.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Effect } from "effect";
|
|
2
|
-
export declare function main(args: readonly string[], cwd: string): Effect.Effect<number, import("effect/PlatformError").PlatformError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/FileSystem").FileSystem>;
|
|
2
|
+
export declare function main(args: readonly string[], cwd: string): Effect.Effect<number, import("effect/PlatformError").PlatformError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/FileSystem").FileSystem | import("effect/Path").Path>;
|
|
3
3
|
//# sourceMappingURL=main.d.ts.map
|
package/dist/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIzC,wBAAgB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIzC,wBAAgB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,+MAKxD"}
|
package/dist/rerun.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Effect, FileSystem } from "effect";
|
|
1
|
+
import { Effect, FileSystem, Path } from "effect";
|
|
2
2
|
import { ChildProcessSpawner } from "effect/process";
|
|
3
3
|
import type { RerunOptions } from "#options.ts";
|
|
4
|
-
export declare const rerun: (options: RerunOptions) => Effect.Effect<number, import("effect/PlatformError").PlatformError | import("./error.ts").VitestRerunError, ChildProcessSpawner.ChildProcessSpawner | FileSystem.FileSystem>;
|
|
4
|
+
export declare const rerun: (options: RerunOptions) => Effect.Effect<number, import("effect/PlatformError").PlatformError | import("./error.ts").VitestRerunError, ChildProcessSpawner.ChildProcessSpawner | FileSystem.FileSystem | Path.Path>;
|
|
5
5
|
//# sourceMappingURL=rerun.d.ts.map
|
package/dist/rerun.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rerun.d.ts","sourceRoot":"","sources":["../src/rerun.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rerun.d.ts","sourceRoot":"","sources":["../src/rerun.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,MAAM,EAAE,UAAU,EAAU,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,EAAgB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAuDhD,eAAO,MAAM,KAAK,qNAaD,CAAC"}
|
package/dist/rerun.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
|
-
import
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
|
-
import { Console, Effect, FileSystem, Option } from "effect";
|
|
2
|
+
import { Console, Effect, FileSystem, Option, Path } from "effect";
|
|
5
3
|
import { ChildProcess, ChildProcessSpawner } from "effect/process";
|
|
4
|
+
import { nodeInvocation } from "#adapters/nodeInvocation.ts";
|
|
6
5
|
import { ATTEMPT_REPORT, attemptPaths, reportPaths } from "#reportPaths.ts";
|
|
7
6
|
import { failedFiles, readSnapshot } from "#snapshot.ts";
|
|
8
|
-
const ATTEMPT_MODULE = fileURLToPath(import.meta.resolve("#attempt.ts"));
|
|
9
7
|
const removeReports = Effect.fn("VitestRerun.removeReports")(function* (outputDir) {
|
|
10
8
|
const fs = yield* FileSystem.FileSystem;
|
|
11
9
|
yield* fs.makeDirectory(outputDir, { recursive: true });
|
|
@@ -15,7 +13,16 @@ const removeReports = Effect.fn("VitestRerun.removeReports")(function* (outputDi
|
|
|
15
13
|
});
|
|
16
14
|
const spawnAttempt = Effect.fn("VitestRerun.spawnAttempt")(function* (options, attempt) {
|
|
17
15
|
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
18
|
-
const
|
|
16
|
+
const path = yield* Path.Path;
|
|
17
|
+
const attemptModule = yield* path.fromFileUrl(new URL(import.meta.resolve("#attempt.ts"))).pipe(Effect.orDie);
|
|
18
|
+
const { execArgv, execPath } = yield* nodeInvocation;
|
|
19
|
+
const command = ChildProcess.make(execPath, [...execArgv, attemptModule, String(attempt), options.outputDir, ...options.vitestArgs], {
|
|
20
|
+
cwd: options.cwd,
|
|
21
|
+
extendEnv: true,
|
|
22
|
+
stderr: "inherit",
|
|
23
|
+
stdin: "inherit",
|
|
24
|
+
stdout: "inherit",
|
|
25
|
+
});
|
|
19
26
|
return yield* spawner.exitCode(command).pipe(Effect.map((code) => Option.some(Number(code))), Effect.catch((error) => Effect.as(Console.error(`vitest-rerun: attempt ${attempt} ended without an exit code: ${error.message}`), Option.none())));
|
|
20
27
|
});
|
|
21
28
|
const rerunnable = Effect.fn("VitestRerun.rerunnable")(function* (outputDir, attempt) {
|
package/dist/rerun.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rerun.js","sourceRoot":"","sources":["../src/rerun.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,OAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"rerun.js","sourceRoot":"","sources":["../src/rerun.ts"],"names":[],"mappings":"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"}
|
package/dist/snapshot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"snapshot.d.ts","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAK/C,QAAA,MAAM,oBAAoB;;;;EAIxB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,oBAAoB,CAAC,IAAI,CAAC;AAE9D,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBlB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC;AAOlD,eAAO,MAAM,WAAW,uJAKtB,CAAC;AAEH,wBAAgB,KAAK,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI,EAAE,CAEpD;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAElD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8FAGvB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8GAIvB,CAAC"}
|
package/dist/snapshot.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { deserialize, serialize } from "node:v8";
|
|
2
1
|
import { Effect, FileSystem, Schema } from "effect";
|
|
2
|
+
import { deserializeSnapshot, serializeSnapshot } from "#adapters/snapshotCodec.ts";
|
|
3
3
|
import { failWith } from "#error.ts";
|
|
4
4
|
import { FlakyTest } from "#flakyTests.ts";
|
|
5
5
|
import { SnapshotFiles } from "#SnapshotFiles.ts";
|
|
@@ -47,11 +47,11 @@ export function hasSuiteErrors(task) {
|
|
|
47
47
|
}
|
|
48
48
|
export const saveSnapshot = Effect.fn("VitestRerun.saveSnapshot")(function* (path, snapshot) {
|
|
49
49
|
const fs = yield* FileSystem.FileSystem;
|
|
50
|
-
yield* fs.writeFile(path,
|
|
50
|
+
yield* fs.writeFile(path, yield* serializeSnapshot(snapshot));
|
|
51
51
|
});
|
|
52
52
|
export const readSnapshot = Effect.fn("VitestRerun.readSnapshot")(function* (path) {
|
|
53
53
|
const fs = yield* FileSystem.FileSystem;
|
|
54
54
|
const bytes = yield* fs.readFile(path);
|
|
55
|
-
return yield*
|
|
55
|
+
return yield* deserializeSnapshot(bytes).pipe(Effect.flatMap(decodeSnapshot), Effect.mapError(failWith(`Could not decode snapshot ${path}`)));
|
|
56
56
|
});
|
|
57
57
|
//# sourceMappingURL=snapshot.js.map
|
package/dist/snapshot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../src/snapshot.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shivaedev/vitest-rerun",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.1",
|
|
4
4
|
"description": "Reruns failed Vitest tests in a fresh process and reports which tests were flaky",
|
|
5
5
|
"homepage": "https://github.com/ShivaeDev/platform/tree/main/packages/vitest-rerun#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -43,26 +43,25 @@
|
|
|
43
43
|
"README.md"
|
|
44
44
|
],
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@shivaedev/service": "0.9.
|
|
46
|
+
"@shivaedev/service": "0.9.1"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
|
-
"@effect/platform-node": "4.1.
|
|
50
|
-
"@effect/platform-node-shared": "4.1.
|
|
51
|
-
"@effect/vitest": "4.1.
|
|
52
|
-
"@shivaedev/quality": "0.
|
|
53
|
-
"@shivaedev/test": "0.
|
|
54
|
-
"@shivaedev/test-story": "0.45.6",
|
|
49
|
+
"@effect/platform-node": "4.1.2",
|
|
50
|
+
"@effect/platform-node-shared": "4.1.2",
|
|
51
|
+
"@effect/vitest": "4.1.2",
|
|
52
|
+
"@shivaedev/quality": "0.77.0",
|
|
53
|
+
"@shivaedev/test-story": "0.47.0",
|
|
55
54
|
"@types/node": "24.19.2",
|
|
56
|
-
"@vitest/coverage-v8": "5.0
|
|
57
|
-
"effect": "4.1.
|
|
55
|
+
"@vitest/coverage-v8": "5.1.0",
|
|
56
|
+
"effect": "4.1.2",
|
|
58
57
|
"typescript": "7.0.2",
|
|
59
|
-
"vitest": "5.0
|
|
58
|
+
"vitest": "5.1.0"
|
|
60
59
|
},
|
|
61
60
|
"peerDependencies": {
|
|
62
|
-
"@effect/platform-node": "4.1.
|
|
63
|
-
"@effect/platform-node-shared": "4.1.
|
|
64
|
-
"effect": "4.1.
|
|
65
|
-
"vitest": "5.0
|
|
61
|
+
"@effect/platform-node": "4.1.2",
|
|
62
|
+
"@effect/platform-node-shared": "4.1.2",
|
|
63
|
+
"effect": "4.1.2",
|
|
64
|
+
"vitest": "5.1.0"
|
|
66
65
|
},
|
|
67
66
|
"engines": {
|
|
68
67
|
"node": ">=24"
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { deserialize, serialize } from "node:v8";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
|
|
4
|
+
export function serializeSnapshot(snapshot: unknown) {
|
|
5
|
+
return Effect.sync((): Uint8Array => serialize(snapshot));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function deserializeSnapshot(bytes: Uint8Array) {
|
|
9
|
+
return Effect.try({ catch: (cause) => cause, try: (): unknown => deserialize(bytes) });
|
|
10
|
+
}
|
package/src/attempt.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import process from "node:process";
|
|
2
|
-
import
|
|
2
|
+
import * as NodePath from "@effect/platform-node/NodePath";
|
|
3
3
|
import * as NodeRuntime from "@effect/platform-node/NodeRuntime";
|
|
4
4
|
import * as NodeServices from "@effect/platform-node/NodeServices";
|
|
5
|
-
import { Console, Effect, Exit, Runtime } from "effect";
|
|
5
|
+
import { Console, Effect, Exit, Path, Runtime } from "effect";
|
|
6
6
|
import { runAttempt } from "#runAttempt.ts";
|
|
7
7
|
import { vitestRunnerLayer } from "#vitest-runner/layer.ts";
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
const modulePath = Path.Path.pipe(Effect.flatMap((path) => path.fromFileUrl(new URL(import.meta.url))));
|
|
10
|
+
|
|
11
|
+
if (Effect.runSync(modulePath.pipe(Effect.provide(NodePath.layer))) === process.argv[1]) {
|
|
10
12
|
const [attempt = "1", outputDir = ".", ...vitestArgs] = process.argv.slice(2);
|
|
11
13
|
NodeRuntime.runMain(
|
|
12
14
|
runAttempt({ attempt: Number(attempt), outputDir, vitestArgs }).pipe(
|
package/src/rerun.ts
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
|
-
import
|
|
3
|
-
import { fileURLToPath } from "node:url";
|
|
4
|
-
import { Console, Effect, FileSystem, Option } from "effect";
|
|
2
|
+
import { Console, Effect, FileSystem, Option, Path } from "effect";
|
|
5
3
|
import { ChildProcess, ChildProcessSpawner } from "effect/process";
|
|
4
|
+
import { nodeInvocation } from "#adapters/nodeInvocation.ts";
|
|
6
5
|
import type { RerunOptions } from "#options.ts";
|
|
7
6
|
import { ATTEMPT_REPORT, attemptPaths, reportPaths } from "#reportPaths.ts";
|
|
8
7
|
import { failedFiles, readSnapshot } from "#snapshot.ts";
|
|
9
8
|
|
|
10
|
-
const ATTEMPT_MODULE = fileURLToPath(import.meta.resolve("#attempt.ts"));
|
|
11
|
-
|
|
12
9
|
const removeReports = Effect.fn("VitestRerun.removeReports")(function* (outputDir: string) {
|
|
13
10
|
const fs = yield* FileSystem.FileSystem;
|
|
14
11
|
yield* fs.makeDirectory(outputDir, { recursive: true });
|
|
@@ -19,11 +16,16 @@ const removeReports = Effect.fn("VitestRerun.removeReports")(function* (outputDi
|
|
|
19
16
|
|
|
20
17
|
const spawnAttempt = Effect.fn("VitestRerun.spawnAttempt")(function* (options: RerunOptions, attempt: number) {
|
|
21
18
|
const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
const path = yield* Path.Path;
|
|
20
|
+
const attemptModule = yield* path.fromFileUrl(new URL(import.meta.resolve("#attempt.ts"))).pipe(Effect.orDie);
|
|
21
|
+
const { execArgv, execPath } = yield* nodeInvocation;
|
|
22
|
+
const command = ChildProcess.make(execPath, [...execArgv, attemptModule, String(attempt), options.outputDir, ...options.vitestArgs], {
|
|
23
|
+
cwd: options.cwd,
|
|
24
|
+
extendEnv: true,
|
|
25
|
+
stderr: "inherit",
|
|
26
|
+
stdin: "inherit",
|
|
27
|
+
stdout: "inherit",
|
|
28
|
+
});
|
|
27
29
|
return yield* spawner.exitCode(command).pipe(
|
|
28
30
|
Effect.map((code) => Option.some(Number(code))),
|
|
29
31
|
Effect.catch((error) => Effect.as(Console.error(`vitest-rerun: attempt ${attempt} ended without an exit code: ${error.message}`), Option.none())),
|
package/src/snapshot.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { deserialize, serialize } from "node:v8";
|
|
2
1
|
import { Effect, FileSystem, Schema } from "effect";
|
|
2
|
+
import { deserializeSnapshot, serializeSnapshot } from "#adapters/snapshotCodec.ts";
|
|
3
3
|
import type { Task } from "#adapters/tasks.ts";
|
|
4
4
|
import { failWith } from "#error.ts";
|
|
5
5
|
import { FlakyTest } from "#flakyTests.ts";
|
|
@@ -58,14 +58,11 @@ export function hasSuiteErrors(task: Task): boolean {
|
|
|
58
58
|
|
|
59
59
|
export const saveSnapshot = Effect.fn("VitestRerun.saveSnapshot")(function* (path: string, snapshot: Snapshot) {
|
|
60
60
|
const fs = yield* FileSystem.FileSystem;
|
|
61
|
-
yield* fs.writeFile(path,
|
|
61
|
+
yield* fs.writeFile(path, yield* serializeSnapshot(snapshot));
|
|
62
62
|
});
|
|
63
63
|
|
|
64
64
|
export const readSnapshot = Effect.fn("VitestRerun.readSnapshot")(function* (path: string) {
|
|
65
65
|
const fs = yield* FileSystem.FileSystem;
|
|
66
66
|
const bytes = yield* fs.readFile(path);
|
|
67
|
-
return yield* Effect.
|
|
68
|
-
Effect.flatMap(decodeSnapshot),
|
|
69
|
-
Effect.mapError(failWith(`Could not decode snapshot ${path}`)),
|
|
70
|
-
);
|
|
67
|
+
return yield* deserializeSnapshot(bytes).pipe(Effect.flatMap(decodeSnapshot), Effect.mapError(failWith(`Could not decode snapshot ${path}`)));
|
|
71
68
|
});
|