Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 35 additions & 20 deletions .yarn/patches/@effect-vitest-npm-0.29.0-1c8cf3c306.patch
Original file line number Diff line number Diff line change
@@ -1,58 +1,73 @@
diff --git a/dist/cjs/internal/internal.js b/dist/cjs/internal/internal.js
index dee6eec6cd0646708773eb9e89d4e835858b3f5c..b9ce97e9b481980ff5a9092bf09c8d3179fed495 100644
index dee6eec..14424ac 100644
--- a/dist/cjs/internal/internal.js
+++ b/dist/cjs/internal/internal.js
@@ -28,7 +28,9 @@ const defaultApi = /*#__PURE__*/Object.assign(V.it, {
@@ -28,7 +28,11 @@ const defaultApi = /*#__PURE__*/Object.assign(V.it, {
});
const runPromise = ctx => effect => Effect.gen(function* () {
const exitFiber = yield* Effect.fork(Effect.exit(effect));
- ctx?.onTestFinished(() => Fiber.interrupt(exitFiber).pipe(Effect.asVoid, Effect.runPromise));
+ // Vitest 4 moved onTestFinished off the test context. Keep Effect 3's
+ // stable @effect/vitest usable until https://github.com/Effect-TS/effect/pull/5980 is released.
+ V.onTestFinished(() => Fiber.interrupt(exitFiber).pipe(Effect.asVoid, Effect.runPromise));
+ // Register on the test's own context, which concurrent tests do not share.
+ // Vitest 4.0 contexts had no onTestFinished, so use the global hook there.
+ if (ctx) {
+ (ctx.onTestFinished ?? V.onTestFinished)(() => Fiber.interrupt(exitFiber).pipe(Effect.asVoid, Effect.runPromise));
+ }
Comment thread
indietyp marked this conversation as resolved.
const exit = yield* Fiber.join(exitFiber);
if (Exit.isSuccess(exit)) {
return () => exit.value;
diff --git a/dist/esm/internal/internal.js b/dist/esm/internal/internal.js
index adb6b213294cbbc1559f7a283b4a84df41d8342e..a04cef4d46c499aac08518abf0a99759ce800039 100644
index adb6b21..379aee7 100644
--- a/dist/esm/internal/internal.js
+++ b/dist/esm/internal/internal.js
@@ -21,7 +21,9 @@ const defaultApi = /*#__PURE__*/Object.assign(V.it, {
@@ -21,7 +21,11 @@ const defaultApi = /*#__PURE__*/Object.assign(V.it, {
});
const runPromise = ctx => effect => Effect.gen(function* () {
const exitFiber = yield* Effect.fork(Effect.exit(effect));
- ctx?.onTestFinished(() => Fiber.interrupt(exitFiber).pipe(Effect.asVoid, Effect.runPromise));
+ // Vitest 4 moved onTestFinished off the test context. Keep Effect 3's
+ // stable @effect/vitest usable until https://github.com/Effect-TS/effect/pull/5980 is released.
+ V.onTestFinished(() => Fiber.interrupt(exitFiber).pipe(Effect.asVoid, Effect.runPromise));
+ // Register on the test's own context, which concurrent tests do not share.
+ // Vitest 4.0 contexts had no onTestFinished, so use the global hook there.
+ if (ctx) {
+ (ctx.onTestFinished ?? V.onTestFinished)(() => Fiber.interrupt(exitFiber).pipe(Effect.asVoid, Effect.runPromise));
+ }
const exit = yield* Fiber.join(exitFiber);
if (Exit.isSuccess(exit)) {
return () => exit.value;
diff --git a/package.json b/package.json
index 1ceac68f8e5cfed5d014c4066414c4f8eec67a69..3c5cac8abdae6087e927fab2669b736c4a0be5c4 100644
index 1ceac68..ac43401 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
"sideEffects": [],
"homepage": "https://effect.website",
"peerDependencies": {
- "vitest": "^3.2.0",
+ "vitest": "^3.2.0 || ^4.0.0",
+ "vitest": "^3.2.0 || ^4.0.0 || ^5.0.0",
"effect": "^3.21.0"
},
"publishConfig": {
diff --git a/src/internal/internal.ts b/src/internal/internal.ts
index bd11019b8ad51bd49cc3015f8c69aac04ad18822..1d8a04e1ae3d195d75553fb3944efdd9720f64ca 100644
index bd11019..9313f73 100644
--- a/src/internal/internal.ts
+++ b/src/internal/internal.ts
@@ -29,7 +29,9 @@ const runPromise = (ctx?: Vitest.TestContext) => <E, A>(effect: Effect.Effect<A,
@@ -29,12 +29,16 @@ const runPromise = (ctx?: Vitest.TestContext) => <E, A>(effect: Effect.Effect<A,
Effect.gen(function*() {
const exitFiber = yield* Effect.fork(Effect.exit(effect))

- ctx?.onTestFinished(() =>
+ // Vitest 4 moved onTestFinished off the test context. Keep Effect 3's
+ // stable @effect/vitest usable until https://github.com/Effect-TS/effect/pull/5980 is released.
+ V.onTestFinished(() =>
Fiber.interrupt(exitFiber).pipe(
Effect.asVoid,
Effect.runPromise
- Fiber.interrupt(exitFiber).pipe(
- Effect.asVoid,
- Effect.runPromise
+ // Register on the test's own context, which concurrent tests do not share.
+ // Vitest 4.0 contexts had no onTestFinished, so use the global hook there.
+ if (ctx) {
+ ;(ctx.onTestFinished ?? V.onTestFinished)(() =>
+ Fiber.interrupt(exitFiber).pipe(
+ Effect.asVoid,
+ Effect.runPromise
+ )
)
- )
+ }

const exit = yield* Fiber.join(exitFiber)
if (Exit.isSuccess(exit)) {
5 changes: 4 additions & 1 deletion .yarnrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,10 @@ catalog:
typescript: "7.0.2"
"@typescript/typescript6": "6.0.2"
vite: "8.3.4"
vitest: "4.1.11"
vitest: "5.0.2"
"@vitest/browser-playwright": "5.0.2"
"@vitest/coverage-istanbul": "5.0.2"
"@fast-check/vitest": "0.5.0"
"@tsconfig/bases": "1.0.28"
"@types/node": "22.18.13"

Expand Down
50 changes: 28 additions & 22 deletions apps/brunch-agent/src/provider-registration.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,29 +52,36 @@ vi.mock(
};
},
);
let registeredProviders: Parameters<typeof setProvider>[0][] = [];
let instrumentations: Parameters<typeof instrument>[0][] = [];
let nativeOpenRouterProvider: Provider | undefined;

beforeAll(async () => {
await import("./app");
registeredProviders = vi
.mocked(setProvider)
.mock.calls.map(([provider]) => provider);
instrumentations = vi
.mocked(instrument)
.mock.calls.map(([instrumentation]) => instrumentation);
const { openrouterProvider } =
await import("@earendil-works/pi-ai/providers/openrouter");
const result = vi.mocked(openrouterProvider).mock.results[0];
nativeOpenRouterProvider =
result?.type === "return" ? result.value : undefined;
});

test("app registration admits the Anthropic, OpenAI and OpenRouter providers", () => {
const ids = vi
.mocked(setProvider)
.mock.calls.map(([entry]) => entry.id)
.sort();
const ids = registeredProviders.map((provider) => provider.id).sort();
expect(ids).toEqual(["anthropic", "openai", "openrouter"]);
});

test("app registration admits native OpenRouter with GPT-6.1 Sol and its API-key auth", async () => {
const { openrouterProvider } =
await import("@earendil-works/pi-ai/providers/openrouter");
const native = vi.mocked(openrouterProvider).mock.results[0]?.value as
| Provider
| undefined;
const native = nativeOpenRouterProvider;
expect(native).toBeDefined();
const provider = vi
.mocked(setProvider)
.mock.calls.map(([entry]) => entry)
.find((entry) => entry.id === "openrouter")!;
const provider = registeredProviders.find(
(provider) => provider.id === "openrouter",
)!;
expect(provider.auth).toBe(native!.auth);
// The catalogue extension keeps native streams, so a different stream is the admission wrapper.
expect(Reflect.get(provider, "streamSimple")).not.toBe(
Expand Down Expand Up @@ -108,16 +115,15 @@ const drain = async (stream: ReturnType<Provider["streamSimple"]>) => {
};

test("app registration scopes admission to the Petrinaut agent's execution, isolating concurrent agents and delegated tasks", async () => {
const registration = vi
.mocked(instrument)
.mock.calls.find(
([entry]) => entry.key === Symbol.for("brunch.buffered-tool-admission"),
)?.[0];
const registration = instrumentations.find(
(instrumentation) =>
instrumentation.key === Symbol.for("brunch.buffered-tool-admission"),
);
expect(registration).toBeDefined();
const provider = vi
.mocked(setProvider)
.mock.calls.map(([entry]) => entry)
.find((entry) => entry.id === "anthropic")!;
const provider = registeredProviders.find(
(provider) => provider.id === "anthropic",
)!;

expect(provider.auth).toBe(faux.provider.auth);
expect(provider.getModels()).toEqual(faux.provider.getModels());
const model = provider.getModels()[0]!;
Expand Down
2 changes: 1 addition & 1 deletion apps/hash-ai-worker-ts/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@
"@types/node": "catalog:",
"@types/papaparse": "5.3.16",
"@types/sanitize-html": "2.16.0",
"@vitest/coverage-istanbul": "4.1.10",
"@vitest/coverage-istanbul": "catalog:",
"eslint": "9.39.4",
"rimraf": "6.1.3",
"ts-json-schema-generator": "1.5.1",
Expand Down
3 changes: 2 additions & 1 deletion apps/hash-api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -131,10 +131,11 @@
"@types/mime-types": "2.1.4",
"@types/node": "catalog:",
"@types/sanitize-html": "2.16.0",
"@vitest/coverage-istanbul": "4.1.10",
"@vitest/coverage-istanbul": "catalog:",
"eslint": "9.39.4",
"rimraf": "6.1.3",
"typescript": "catalog:",
"vite": "catalog:",
"vitest": "catalog:",
"wait-on": "9.0.1"
}
Expand Down
1 change: 1 addition & 0 deletions apps/hash-frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@
"rimraf": "6.1.3",
"sass": "1.93.2",
"typescript": "catalog:",
"vite": "catalog:",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is vite being added as a dependency - I don't think hash-frontend uses vite? (or is it a peer dep for vitest 5)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a peer dependency, vitest requires it, but it's no longer installed since vitest 5, so we need to install it ourselves.

"vitest": "catalog:",
"wait-on": "9.0.1",
"webpack": "5.107.2"
Expand Down
2 changes: 1 addition & 1 deletion apps/petrinaut-website/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
"zod": "4.4.3"
},
"devDependencies": {
"@fast-check/vitest": "0.4.1",
"@fast-check/vitest": "catalog:",
"@local/tsconfig": "workspace:*",
"@tanstack/router-generator": "1.167.32",
"@tanstack/router-plugin": "1.168.34",
Expand Down
3 changes: 2 additions & 1 deletion libs/@blockprotocol/type-system/typescript/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,15 @@
"@types/node": "catalog:",
"@types/react": "19.2.14",
"@types/semver": "7.7.1",
"@vitest/coverage-istanbul": "4.1.10",
"@vitest/coverage-istanbul": "catalog:",
"eslint": "9.39.4",
"react": "19.2.6",
"rimraf": "6.1.3",
"rolldown": "1.2.6",
"rolldown-plugin-dts": "0.28.3",
"tslib": "2.8.1",
"typescript": "catalog:",
"vite": "catalog:",
"vite-plugin-wasm-pack": "0.1.12",
"vitest": "catalog:"
}
Expand Down
2 changes: 1 addition & 1 deletion libs/@hashintel/ds-components/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@
"@types/react": "19.2.14",
"@types/react-dom": "19.2.3",
"@vitejs/plugin-react": "6.1.1",
"@vitest/browser-playwright": "4.1.11",
"@vitest/browser-playwright": "catalog:",
"case-anything": "3.1.0",
"esbuild-plugin-svgr": "3.1.1",
"eslint": "9.39.4",
Expand Down
3 changes: 2 additions & 1 deletion libs/@local/graph/sdk/typescript/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,11 @@
"@local/eslint": "workspace:*",
"@local/tsconfig": "workspace:*",
"@tsconfig/bases": "catalog:",
"@vitest/coverage-istanbul": "4.1.10",
"@vitest/coverage-istanbul": "catalog:",
"eslint": "9.39.4",
"rimraf": "6.1.3",
"typescript": "catalog:",
"vite": "catalog:",
"vitest": "catalog:"
}
}
3 changes: 2 additions & 1 deletion libs/@local/harpc/client/typescript/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,11 @@
"@local/tsconfig": "workspace:*",
"@tsconfig/bases": "catalog:",
"@types/node": "catalog:",
"@vitest/coverage-istanbul": "4.1.10",
"@vitest/coverage-istanbul": "catalog:",
"eslint": "9.39.4",
"rimraf": "6.1.3",
"typescript": "catalog:",
"vite": "catalog:",
"vitest": "catalog:"
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Either, FastCheck, pipe } from "effect";
import { bench, describe } from "vitest";
import { describe, test } from "vitest";

import { MutableBuffer, MutableBytes } from "../../src/binary/index.js";
import { Request } from "../../src/wire-protocol/models/request/index.js";
Expand Down Expand Up @@ -35,29 +35,35 @@ const responseEncoded = pipe(
);

describe("request", () => {
bench("encode", () => {
Request.encode(MutableBuffer.makeWrite(), request[0]!).pipe(
Either.getOrThrow,
);
});
// eslint-disable-next-line vitest/expect-expect
test("codec", async ({ bench }) => {
await bench("encode", () => {
Request.encode(MutableBuffer.makeWrite(), request[0]!).pipe(
Either.getOrThrow,
);
}).run();

bench("decode", () => {
const buffer = MutableBuffer.makeRead(MutableBytes.from(requestEncoded));
await bench("decode", () => {
const buffer = MutableBuffer.makeRead(MutableBytes.from(requestEncoded));

Request.decode(buffer);
Request.decode(buffer);
}).run();
});
});

describe("response", () => {
bench("encode", () => {
Response.encode(MutableBuffer.makeWrite(), response[0]!).pipe(
Either.getOrThrow,
);
});
// eslint-disable-next-line vitest/expect-expect
test("codec", async ({ bench }) => {
await bench("encode", () => {
Response.encode(MutableBuffer.makeWrite(), response[0]!).pipe(
Either.getOrThrow,
);
}).run();

bench("decode", () => {
const buffer = MutableBuffer.makeRead(MutableBytes.from(responseEncoded));
await bench("decode", () => {
const buffer = MutableBuffer.makeRead(MutableBytes.from(responseEncoded));

Response.decode(buffer);
Response.decode(buffer);
}).run();
});
});
3 changes: 2 additions & 1 deletion libs/@local/hash-backend-utils/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,11 @@
"@types/mime-types": "2.1.4",
"@types/node": "catalog:",
"@types/wait-on": "5.3.4",
"@vitest/coverage-istanbul": "4.1.10",
"@vitest/coverage-istanbul": "catalog:",
"eslint": "9.39.4",
"rimraf": "6.1.3",
"typescript": "catalog:",
"vite": "catalog:",
"vitest": "catalog:"
}
}
3 changes: 2 additions & 1 deletion libs/@local/hash-isomorphic-utils/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,14 @@
"@types/lodash-es": "4.17.12",
"@types/node": "catalog:",
"@types/pluralize": "0.0.33",
"@vitest/coverage-istanbul": "4.1.10",
"@vitest/coverage-istanbul": "catalog:",
"eslint": "9.39.4",
"graphql": "16.11.0",
"next": "16.4.1",
"react": "19.2.6",
"rimraf": "6.1.3",
"typescript": "catalog:",
"vite": "catalog:",
"vitest": "catalog:"
}
}
1 change: 1 addition & 0 deletions libs/@local/petrinaut-arch-docs/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
"oxlint": "1.86.0",
"tsx": "catalog:",
"typescript": "catalog:",
"vite": "catalog:",
"vitest": "catalog:"
}
}
1 change: 1 addition & 0 deletions libs/@local/petrinaut-optimizer-client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
"oxfmt": "0.71.0",
"rimraf": "6.1.3",
"typescript": "catalog:",
"vite": "catalog:",
"vitest": "catalog:"
}
}
1 change: 1 addition & 0 deletions libs/@local/repo-chores/node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
"@types/node": "catalog:",
"eslint": "9.39.4",
"typescript": "catalog:",
"vite": "catalog:",
"vitest": "catalog:"
}
}
3 changes: 2 additions & 1 deletion tests/hash-backend-integration/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,11 @@
"@local/tsconfig": "workspace:*",
"@tsconfig/bases": "catalog:",
"@types/node": "catalog:",
"@vitest/coverage-istanbul": "4.1.10",
"@vitest/coverage-istanbul": "catalog:",
"eslint": "9.39.4",
"rimraf": "6.1.3",
"typescript": "catalog:",
"vite": "catalog:",
"vitest": "catalog:"
}
}
Loading
Loading