From 1beea21776ab8217d88aed4e40ec4cceb6d86764 Mon Sep 17 00:00:00 2001 From: Pete Bacon Darwin Date: Fri, 6 Mar 2026 14:29:55 +0000 Subject: [PATCH 1/7] Replace public EBI Postgres database with local mock server in tests (#12784) --- .../nodejs-hybrid-app/tests/index.test.ts | 25 ++- .../worker-configuration.d.ts | 13 +- fixtures/nodejs-hybrid-app/wrangler.jsonc | 15 +- fixtures/shared/src/mock-postgres-server.ts | 212 ++++++++++++++++++ .../worker-postgres/postgres.spec.ts | 27 +-- .../__tests__/worker-postgres/serve.ts | 25 +++ .../playground/node-compat/package.json | 1 + .../vite.config.worker-postgres.ts | 14 ++ .../worker-postgres/wrangler.jsonc | 11 +- .../node-compat/worker-random/wrangler.jsonc | 7 - .../playground/vitest-setup.ts | 8 + pnpm-lock.yaml | 3 + 12 files changed, 307 insertions(+), 54 deletions(-) create mode 100644 fixtures/shared/src/mock-postgres-server.ts create mode 100644 packages/vite-plugin-cloudflare/playground/node-compat/__tests__/worker-postgres/serve.ts diff --git a/fixtures/nodejs-hybrid-app/tests/index.test.ts b/fixtures/nodejs-hybrid-app/tests/index.test.ts index 728b7b52512e..f5d444847e21 100644 --- a/fixtures/nodejs-hybrid-app/tests/index.test.ts +++ b/fixtures/nodejs-hybrid-app/tests/index.test.ts @@ -1,21 +1,32 @@ import { resolve } from "node:path"; import { fetch } from "undici"; import { afterAll, beforeAll, describe, it, test } from "vitest"; +import { createMockPostgresServer } from "../../shared/src/mock-postgres-server"; import { runWranglerDev } from "../../shared/src/run-wrangler-long-lived"; describe("nodejs compat", () => { let wrangler: Awaited>; + let mockPg: Awaited>; beforeAll(async () => { + // Start a local mock Postgres server that returns canned results + mockPg = await createMockPostgresServer({ + rows: [{ id: "1", name: "test-row" }], + }); + wrangler = await runWranglerDev(resolve(__dirname, "../src"), [ "--port=0", "--inspector-port=0", + `--var`, + `DB_PORT:${mockPg.port}`, ]); }); afterAll(async () => { await wrangler.stop(); + await mockPg.stop(); }); + it("should work when running code requiring polyfills", async ({ expect, }) => { @@ -23,14 +34,6 @@ describe("nodejs compat", () => { const response = await fetch(`http://${ip}:${port}/test-process`); const body = await response.text(); expect(body).toMatchInlineSnapshot(`"OK!"`); - - // Disabling actually querying the database since we are getting this error: - // > too many connections for role 'reader' - // const response = await fetch(`http://${ip}:${port}/query`); - // const body = await response.text(); - // console.log(body); - // const result = JSON.parse(body) as { id: string }; - // expect(result.id).toEqual("1"); }); it("should be able to call `getRandomValues()` bound to any object", async ({ @@ -113,7 +116,7 @@ describe("nodejs compat", () => { const { ip, port } = wrangler; const response = await fetch(`http://${ip}:${port}/process-env`); await expect(response.json()).resolves.toMatchObject({ - DB_HOSTNAME: "hh-pgsql-public.ebi.ac.uk", + DB_HOSTNAME: "127.0.0.1", DEV_VAR_FROM_DOT_ENV: "dev-var-from-dot-env", }); }); @@ -122,7 +125,7 @@ describe("nodejs compat", () => { const { ip, port } = wrangler; const response = await fetch(`http://${ip}:${port}/env`); await expect(response.json()).resolves.toMatchObject({ - DB_HOSTNAME: "hh-pgsql-public.ebi.ac.uk", + DB_HOSTNAME: "127.0.0.1", DEV_VAR_FROM_DOT_ENV: "dev-var-from-dot-env", }); }); @@ -131,5 +134,7 @@ describe("nodejs compat", () => { const { ip, port } = wrangler; const response = await fetch(`http://${ip}:${port}/query`); expect(response.status).toBe(200); + const body = await response.json(); + expect(body).toMatchObject({ id: "1" }); }); }); diff --git a/fixtures/nodejs-hybrid-app/worker-configuration.d.ts b/fixtures/nodejs-hybrid-app/worker-configuration.d.ts index b6b7d77d04cd..f7c75b2d00b1 100644 --- a/fixtures/nodejs-hybrid-app/worker-configuration.d.ts +++ b/fixtures/nodejs-hybrid-app/worker-configuration.d.ts @@ -1,10 +1,9 @@ -// Generated by Wrangler on Tue Mar 05 2024 16:04:07 GMT+0000 (Greenwich Mean Time) -// by running `wrangler types` +// Generated by Wrangler by running `wrangler types` interface Env { - DB_HOSTNAME: "hh-pgsql-public.ebi.ac.uk"; - DB_PORT: "5432"; - DB_NAME: "pfmegrnargs"; - DB_USERNAME: "reader"; - DB_PASSWORD: "NWDMCE5xdipIjRrp"; + DB_HOSTNAME: string; + DB_PORT: string; + DB_NAME: string; + DB_USERNAME: string; + DB_PASSWORD: string; } diff --git a/fixtures/nodejs-hybrid-app/wrangler.jsonc b/fixtures/nodejs-hybrid-app/wrangler.jsonc index 3e7c57d0517c..6bbdccf82656 100644 --- a/fixtures/nodejs-hybrid-app/wrangler.jsonc +++ b/fixtures/nodejs-hybrid-app/wrangler.jsonc @@ -5,17 +5,14 @@ // Setting compat date after 2025/04/01 means we don't need to use `nodejs_compat_populate_process_env` "compatibility_date": "2025-07-01", "compatibility_flags": ["nodejs_compat"], - /* - These DB connection values are to a public database containing information about - RNA, genes, etc. See https://rnacentral.org/help/public-database. - In case GitGuardian complains in future PRs, this is public information so a false positive. - */ + // Default DB connection values point at 127.0.0.1. + // Tests override DB_PORT at runtime to point at a local mock Postgres server. "vars": { - "DB_HOSTNAME": "hh-pgsql-public.ebi.ac.uk", + "DB_HOSTNAME": "127.0.0.1", "DB_PORT": "5432", - "DB_NAME": "pfmegrnargs", - "DB_USERNAME": "reader", - "DB_PASSWORD": "NWDMCE5xdipIjRrp", + "DB_NAME": "testdb", + "DB_USERNAME": "testuser", + "DB_PASSWORD": "testpassword", "DEBUG": "example:*,test", }, } diff --git a/fixtures/shared/src/mock-postgres-server.ts b/fixtures/shared/src/mock-postgres-server.ts new file mode 100644 index 000000000000..511ac1953438 --- /dev/null +++ b/fixtures/shared/src/mock-postgres-server.ts @@ -0,0 +1,212 @@ +import assert from "node:assert"; +import events from "node:events"; +import net from "node:net"; +import util from "node:util"; + +/** + * The 8-byte Postgres SSLRequest packet. + * Length=8, Code=80877103 (0x04D2162F). + */ +export const POSTGRES_SSL_REQUEST_PACKET = Buffer.from([ + 0x00, 0x00, 0x00, 0x08, 0x04, 0xd2, 0x16, 0x2f, +]); + +// ── Postgres wire protocol helper functions ────────────────────────────────── + +/** Build a single Postgres backend message: type (1 byte) + int32 length + payload. */ +function pgMsg(type: string, payload: Buffer): Buffer { + const len = 4 + payload.length; // length field includes itself but not the type byte + const buf = Buffer.alloc(1 + 4 + payload.length); + buf.write(type, 0, 1, "ascii"); + buf.writeInt32BE(len, 1); + payload.copy(buf, 5); + return buf; +} + +/** AuthenticationOk — type 'R', auth status 0. */ +function authenticationOk(): Buffer { + const payload = Buffer.alloc(4); + payload.writeInt32BE(0, 0); // auth type 0 = OK + return pgMsg("R", payload); +} + +/** ParameterStatus — type 'S', name + value (both null-terminated). */ +function parameterStatus(name: string, value: string): Buffer { + const payload = Buffer.from(`${name}\0${value}\0`, "utf8"); + return pgMsg("S", payload); +} + +/** BackendKeyData — type 'K', process ID + secret key. */ +function backendKeyData(pid: number, key: number): Buffer { + const payload = Buffer.alloc(8); + payload.writeInt32BE(pid, 0); + payload.writeInt32BE(key, 4); + return pgMsg("K", payload); +} + +/** ReadyForQuery — type 'Z', transaction status indicator. */ +function readyForQuery(status: "I" | "T" | "E" = "I"): Buffer { + return pgMsg("Z", Buffer.from(status, "ascii")); +} + +/** RowDescription — type 'T', field definitions for one or more columns. */ +function rowDescription(columns: string[]): Buffer { + // int16 field count, then for each field: + // name (null-terminated), table OID (int32), column attr (int16), + // type OID (int32), type size (int16), type modifier (int32), format code (int16) + const parts: Buffer[] = []; + const fieldCount = Buffer.alloc(2); + fieldCount.writeInt16BE(columns.length, 0); + parts.push(fieldCount); + + for (const col of columns) { + const name = Buffer.from(`${col}\0`, "utf8"); + const meta = Buffer.alloc(18); + meta.writeInt32BE(0, 0); // table OID + meta.writeInt16BE(0, 4); // column attribute number + meta.writeInt32BE(25, 6); // type OID: 25 = text + meta.writeInt16BE(-1, 10); // type size: -1 = variable length + meta.writeInt32BE(-1, 12); // type modifier + meta.writeInt16BE(0, 16); // format code: 0 = text + parts.push(name, meta); + } + + return pgMsg("T", Buffer.concat(parts)); +} + +/** DataRow — type 'D', column values as text. */ +function dataRow(values: string[]): Buffer { + const parts: Buffer[] = []; + const colCount = Buffer.alloc(2); + colCount.writeInt16BE(values.length, 0); + parts.push(colCount); + + for (const val of values) { + const valBuf = Buffer.from(val, "utf8"); + const lenBuf = Buffer.alloc(4); + lenBuf.writeInt32BE(valBuf.length, 0); + parts.push(lenBuf, valBuf); + } + + return pgMsg("D", Buffer.concat(parts)); +} + +/** CommandComplete — type 'C', command tag (null-terminated). */ +function commandComplete(tag: string): Buffer { + return pgMsg("C", Buffer.from(`${tag}\0`, "utf8")); +} + +// ── Mock server ────────────────────────────────────────────────────────────── + +export interface MockPgServerOptions { + /** Canned rows to return for any query. Defaults to [{ id: "1" }]. */ + rows?: Record[]; +} + +/** + * Creates a minimal mock Postgres server that speaks enough of the wire protocol + * for the `pg` (node-postgres) library to successfully connect, authenticate, + * and execute simple queries. + * + * Handles: SSLRequest, StartupMessage, SimpleQuery (Q), Terminate (X). + * Returns canned result rows for any query. + */ +export async function createMockPostgresServer( + options?: MockPgServerOptions +): Promise<{ server: net.Server; port: number; stop: () => Promise }> { + const rows = options?.rows ?? [{ id: "1" }]; + + const server = net.createServer((socket) => { + let startupHandled = false; + + socket.on("data", (chunk: Buffer) => { + // 1. SSLRequest — respond with 'N' (no SSL) + if (POSTGRES_SSL_REQUEST_PACKET.equals(chunk)) { + socket.write("N"); + return; + } + + // 2. StartupMessage — no type byte prefix; starts with int32 length + int32 version (196608 = 3.0) + if (!startupHandled) { + // Validate it looks like a StartupMessage (version 3.0) + if (chunk.length >= 8) { + const version = chunk.readInt32BE(4); + if (version === 196608) { + startupHandled = true; + socket.write( + Buffer.concat([ + authenticationOk(), + parameterStatus("server_version", "15.0"), + parameterStatus("client_encoding", "UTF8"), + backendKeyData(1, 1), + readyForQuery("I"), + ]) + ); + return; + } + } + } + + // 3. Parse typed messages (first byte = type, next 4 bytes = length) + let offset = 0; + while (offset < chunk.length) { + const typeByte = chunk[offset]; + if (typeByte === undefined || offset + 5 > chunk.length) { + break; + } + const msgType = String.fromCharCode(typeByte); + const msgLen = chunk.readInt32BE(offset + 1); + // Total message size = 1 (type) + msgLen + const msgEnd = offset + 1 + msgLen; + + switch (msgType) { + case "Q": { + // SimpleQuery — return canned rows + const firstRow = rows[0]; + const columns = firstRow ? Object.keys(firstRow) : []; + const parts: Buffer[] = [rowDescription(columns)]; + + for (const row of rows) { + parts.push(dataRow(columns.map((col) => row[col] ?? ""))); + } + + parts.push(commandComplete(`SELECT ${rows.length}`)); + parts.push(readyForQuery("I")); + socket.write(Buffer.concat(parts)); + break; + } + case "X": { + // Terminate + socket.end(); + return; + } + default: { + // Unknown message — ignore + break; + } + } + + offset = msgEnd; + } + }); + + // Prevent socket errors (e.g. ECONNRESET from abrupt client disconnects) + // from becoming uncaught exceptions — Node.js EventEmitters throw if an + // 'error' event fires with no listener attached. + socket.on("error", () => {}); + }); + + const listeningPromise = events.once(server, "listening"); + server.listen(0, "127.0.0.1"); + await listeningPromise; + + const address = server.address(); + assert(typeof address === "object" && address !== null); + const port = address.port; + + const stop = async () => { + await util.promisify(server.close.bind(server))(); + }; + + return { server, port, stop }; +} diff --git a/packages/vite-plugin-cloudflare/playground/node-compat/__tests__/worker-postgres/postgres.spec.ts b/packages/vite-plugin-cloudflare/playground/node-compat/__tests__/worker-postgres/postgres.spec.ts index cbd4425263bd..00d95769d10c 100644 --- a/packages/vite-plugin-cloudflare/playground/node-compat/__tests__/worker-postgres/postgres.spec.ts +++ b/packages/vite-plugin-cloudflare/playground/node-compat/__tests__/worker-postgres/postgres.spec.ts @@ -8,24 +8,17 @@ import { test("should be able to create a pg Client", async ({ expect }) => { await vi.waitFor( async () => - expect(await getTextResponse()).toMatchInlineSnapshot( - `"hh-pgsql-public.ebi.ac.uk"` - ), + expect(await getTextResponse()).toMatchInlineSnapshot(`"127.0.0.1"`), WAIT_FOR_OPTIONS ); }); -// Disabling actually querying the database in CI since we are getting this error: -// > too many connections for role 'reader' -test.runIf(!process.env.CI)( - "should be able to use pg library to send a query", - async ({ expect }) => { - await vi.waitFor( - async () => - expect(await getJsonResponse("/send-query")).toEqual( - expect.objectContaining({ id: "21" }) - ), - WAIT_FOR_OPTIONS - ); - } -); +test("should be able to use pg library to send a query", async ({ expect }) => { + await vi.waitFor( + async () => + expect(await getJsonResponse("/send-query")).toEqual( + expect.objectContaining({ id: "21" }) + ), + WAIT_FOR_OPTIONS + ); +}); diff --git a/packages/vite-plugin-cloudflare/playground/node-compat/__tests__/worker-postgres/serve.ts b/packages/vite-plugin-cloudflare/playground/node-compat/__tests__/worker-postgres/serve.ts new file mode 100644 index 000000000000..4e6d36ece793 --- /dev/null +++ b/packages/vite-plugin-cloudflare/playground/node-compat/__tests__/worker-postgres/serve.ts @@ -0,0 +1,25 @@ +import { createMockPostgresServer } from "@fixture/shared/src/mock-postgres-server"; +import { startDefaultServe } from "../../../vitest-setup"; + +let mockPg: Awaited>; + +/** + * Start a local mock Postgres server before the Vite dev server starts. + * The mock port is passed to the worker via the vite config customizer + * (see vite.config.worker-postgres.ts). + */ +export async function preServe() { + mockPg = await createMockPostgresServer({ + rows: [{ id: "21", name: "mock-row" }], + }); + // eslint-disable-next-line turbo/no-undeclared-env-vars + process.env.MOCK_PG_PORT = String(mockPg.port); +} + +export async function postServe() { + await mockPg?.stop(); +} + +export async function serve() { + return startDefaultServe(); +} diff --git a/packages/vite-plugin-cloudflare/playground/node-compat/package.json b/packages/vite-plugin-cloudflare/playground/node-compat/package.json index 5a76acc7e8fc..e1a1ede25d80 100644 --- a/packages/vite-plugin-cloudflare/playground/node-compat/package.json +++ b/packages/vite-plugin-cloudflare/playground/node-compat/package.json @@ -52,6 +52,7 @@ "@cloudflare/vite-plugin": "workspace:*", "@cloudflare/workers-tsconfig": "workspace:*", "@cloudflare/workers-types": "catalog:default", + "@fixture/shared": "workspace:*", "@types/debug": "^4.1.12", "@types/node": "catalog:vite-plugin", "@types/pg": "^8.15.4", diff --git a/packages/vite-plugin-cloudflare/playground/node-compat/vite.config.worker-postgres.ts b/packages/vite-plugin-cloudflare/playground/node-compat/vite.config.worker-postgres.ts index e8b8d20370f5..834290ba3853 100644 --- a/packages/vite-plugin-cloudflare/playground/node-compat/vite.config.worker-postgres.ts +++ b/packages/vite-plugin-cloudflare/playground/node-compat/vite.config.worker-postgres.ts @@ -8,6 +8,20 @@ export default defineConfig({ plugins: [ cloudflare({ configPath: "./worker-postgres/wrangler.jsonc", + // Inject the mock Postgres server port set by serve.ts preServe() + config: () => { + // eslint-disable-next-line turbo/no-undeclared-env-vars + const mockPgPort = process.env.MOCK_PG_PORT; + if (mockPgPort) { + return { + vars: { + DB_HOSTNAME: "127.0.0.1", + DB_PORT: mockPgPort, + }, + }; + } + return {}; + }, inspectorPort: false, persistState: false, }), diff --git a/packages/vite-plugin-cloudflare/playground/node-compat/worker-postgres/wrangler.jsonc b/packages/vite-plugin-cloudflare/playground/node-compat/worker-postgres/wrangler.jsonc index 7cc3f9a4d917..9ac8cdf0b601 100644 --- a/packages/vite-plugin-cloudflare/playground/node-compat/worker-postgres/wrangler.jsonc +++ b/packages/vite-plugin-cloudflare/playground/node-compat/worker-postgres/wrangler.jsonc @@ -3,11 +3,14 @@ "main": "./index.ts", "compatibility_date": "2024-12-30", "compatibility_flags": ["nodejs_compat"], + // Default DB connection values point at 127.0.0.1. + // Tests override DB_HOSTNAME and DB_PORT at runtime via the vite config + // customizer to point at a local mock Postgres server. "vars": { - "DB_HOSTNAME": "hh-pgsql-public.ebi.ac.uk", + "DB_HOSTNAME": "127.0.0.1", "DB_PORT": "5432", - "DB_NAME": "pfmegrnargs", - "DB_USERNAME": "reader", - "DB_PASSWORD": "NWDMCE5xdipIjRrp", + "DB_NAME": "testdb", + "DB_USERNAME": "testuser", + "DB_PASSWORD": "testpassword", }, } diff --git a/packages/vite-plugin-cloudflare/playground/node-compat/worker-random/wrangler.jsonc b/packages/vite-plugin-cloudflare/playground/node-compat/worker-random/wrangler.jsonc index 7cc3f9a4d917..cd5109139bac 100644 --- a/packages/vite-plugin-cloudflare/playground/node-compat/worker-random/wrangler.jsonc +++ b/packages/vite-plugin-cloudflare/playground/node-compat/worker-random/wrangler.jsonc @@ -3,11 +3,4 @@ "main": "./index.ts", "compatibility_date": "2024-12-30", "compatibility_flags": ["nodejs_compat"], - "vars": { - "DB_HOSTNAME": "hh-pgsql-public.ebi.ac.uk", - "DB_PORT": "5432", - "DB_NAME": "pfmegrnargs", - "DB_USERNAME": "reader", - "DB_PASSWORD": "NWDMCE5xdipIjRrp", - }, } diff --git a/packages/vite-plugin-cloudflare/playground/vitest-setup.ts b/packages/vite-plugin-cloudflare/playground/vitest-setup.ts index 72cc192245c2..fd4a69f7b67f 100644 --- a/packages/vite-plugin-cloudflare/playground/vitest-setup.ts +++ b/packages/vite-plugin-cloudflare/playground/vitest-setup.ts @@ -91,6 +91,7 @@ export function resetServerLogs() { beforeAll(async (s) => { let server: ViteDevServer | PreviewServer | undefined; + let postServe: (() => Promise) | undefined; const suite = s as RunnerTestFile; @@ -172,6 +173,7 @@ beforeAll(async (s) => { const mod = await import(testCustomServe); const serve = mod.serve || mod.default?.serve; const preServe = mod.preServe || mod.default?.preServe; + postServe = mod.postServe || mod.default?.postServe; if (preServe) { await preServe(); } @@ -193,6 +195,9 @@ beforeAll(async (s) => { // a timeout with an exception that hides the real error in the console. await page.close(); await server?.close(); + if (postServe) { + await postServe(); + } throw e; } @@ -204,6 +209,9 @@ beforeAll(async (s) => { // @ts-expect-error TODO: fix await watcher?.close(); await browser?.close(); + if (postServe) { + await postServe(); + } }; }, 40_000); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 837919b5bedc..a93e018a2a16 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3339,6 +3339,9 @@ importers: '@cloudflare/workers-types': specifier: catalog:default version: 4.20260305.0 + '@fixture/shared': + specifier: workspace:* + version: link:../../../../fixtures/shared '@types/debug': specifier: ^4.1.12 version: 4.1.12 From 5451a7fbf9e08cdc7731aaed43de1e0e241c944f Mon Sep 17 00:00:00 2001 From: Pete Bacon Darwin Date: Fri, 6 Mar 2026 15:27:42 +0000 Subject: [PATCH 2/7] fix: bump vulnerable direct dependencies (#12790) --- .../bump-vulnerable-deps-create-cloudflare.md | 5 + .changeset/bump-vulnerable-deps-miniflare.md | 7 + .../bump-vulnerable-deps-pages-shared.md | 5 + ...ump-vulnerable-deps-vitest-pool-workers.md | 7 + .changeset/bump-vulnerable-deps-wrangler.md | 7 + package.json | 2 +- packages/create-cloudflare/package.json | 2 +- packages/miniflare/package.json | 4 +- .../workers/local-explorer/resources/d1.ts | 3 + .../workers/local-explorer/resources/kv.ts | 15 ++ packages/pages-shared/package.json | 2 +- .../playground-preview-worker/package.json | 2 +- packages/turbo-r2-archive/package.json | 2 +- packages/vitest-pool-workers/package.json | 2 +- packages/wrangler/package.json | 2 +- pnpm-lock.yaml | 194 +++++++++--------- pnpm-workspace.yaml | 2 +- 17 files changed, 151 insertions(+), 112 deletions(-) create mode 100644 .changeset/bump-vulnerable-deps-create-cloudflare.md create mode 100644 .changeset/bump-vulnerable-deps-miniflare.md create mode 100644 .changeset/bump-vulnerable-deps-pages-shared.md create mode 100644 .changeset/bump-vulnerable-deps-vitest-pool-workers.md create mode 100644 .changeset/bump-vulnerable-deps-wrangler.md diff --git a/.changeset/bump-vulnerable-deps-create-cloudflare.md b/.changeset/bump-vulnerable-deps-create-cloudflare.md new file mode 100644 index 000000000000..db589591f4fa --- /dev/null +++ b/.changeset/bump-vulnerable-deps-create-cloudflare.md @@ -0,0 +1,5 @@ +--- +"create-cloudflare": patch +--- + +Bump glob to ^10.5.0 to address command injection vulnerability in glob CLI diff --git a/.changeset/bump-vulnerable-deps-miniflare.md b/.changeset/bump-vulnerable-deps-miniflare.md new file mode 100644 index 000000000000..cf821c06dfc1 --- /dev/null +++ b/.changeset/bump-vulnerable-deps-miniflare.md @@ -0,0 +1,7 @@ +--- +"miniflare": patch +--- + +Bump hono to ^4.12.5 and devalue to ^5.6.3 to address security vulnerabilities + +Hono had multiple advisories including arbitrary file access via serveStatic, JWT algorithm confusion, and XSS through ErrorBoundary. Devalue had denial of service vulnerabilities in devalue.parse. These are bundled dependencies so the fix is delivered via this patch. diff --git a/.changeset/bump-vulnerable-deps-pages-shared.md b/.changeset/bump-vulnerable-deps-pages-shared.md new file mode 100644 index 000000000000..ce537b85d775 --- /dev/null +++ b/.changeset/bump-vulnerable-deps-pages-shared.md @@ -0,0 +1,5 @@ +--- +"@cloudflare/pages-shared": patch +--- + +Bump glob to ^10.5.0 to address command injection vulnerability in glob CLI diff --git a/.changeset/bump-vulnerable-deps-vitest-pool-workers.md b/.changeset/bump-vulnerable-deps-vitest-pool-workers.md new file mode 100644 index 000000000000..9895c4d31dd1 --- /dev/null +++ b/.changeset/bump-vulnerable-deps-vitest-pool-workers.md @@ -0,0 +1,7 @@ +--- +"@cloudflare/vitest-pool-workers": patch +--- + +Bump devalue to ^5.6.3 to address security vulnerabilities + +Devalue had denial of service and prototype pollution vulnerabilities. This is a bundled dependency. diff --git a/.changeset/bump-vulnerable-deps-wrangler.md b/.changeset/bump-vulnerable-deps-wrangler.md new file mode 100644 index 000000000000..c674145e1476 --- /dev/null +++ b/.changeset/bump-vulnerable-deps-wrangler.md @@ -0,0 +1,7 @@ +--- +"wrangler": patch +--- + +Bump node-forge to ^1.3.2 to address security vulnerabilities + +node-forge had ASN.1 unbounded recursion, OID integer truncation, and ASN.1 validator desynchronization vulnerabilities. This is a bundled dependency used for local HTTPS certificate handling. diff --git a/package.json b/package.json index 1c93ca4bed7c..52aebdb5d6c6 100644 --- a/package.json +++ b/package.json @@ -74,7 +74,7 @@ "@types/react-transition-group>@types/react": "^18", "@cloudflare/elements>@types/react": "^18", "@types/node": "$@types/node", - "vitest>vite": "^5.0.0", + "vitest>vite": "catalog:default", "@types/node>undici-types": "catalog:default" }, "patchedDependencies": { diff --git a/packages/create-cloudflare/package.json b/packages/create-cloudflare/package.json index 4e81708da68c..e8d7eb539259 100644 --- a/packages/create-cloudflare/package.json +++ b/packages/create-cloudflare/package.json @@ -70,7 +70,7 @@ "execa": "^7.1.1", "exit-hook": "2.2.1", "get-port": "^7.1.0", - "glob": "^10.3.3", + "glob": "^10.5.0", "haikunator": "^2.1.2", "indent-string": "^5.0.0", "jsonc-parser": "catalog:default", diff --git a/packages/miniflare/package.json b/packages/miniflare/package.json index cbf77d04f6a8..3e04a907edad 100644 --- a/packages/miniflare/package.json +++ b/packages/miniflare/package.json @@ -83,7 +83,7 @@ "chokidar": "^4.0.1", "ci-info": "catalog:default", "concurrently": "^8.2.2", - "devalue": "^5.3.2", + "devalue": "^5.6.3", "devtools-protocol": "^0.0.1182435", "esbuild": "catalog:default", "eslint": "catalog:default", @@ -92,7 +92,7 @@ "get-port": "^7.1.0", "glob-to-regexp": "0.4.1", "heap-js": "^2.5.0", - "hono": "^4.11.5", + "hono": "^4.12.5", "http-cache-semantics": "^4.1.0", "jsonc-parser": "catalog:default", "kleur": "^4.1.5", diff --git a/packages/miniflare/src/workers/local-explorer/resources/d1.ts b/packages/miniflare/src/workers/local-explorer/resources/d1.ts index c5e715ece2d3..43fa40bc0d5d 100644 --- a/packages/miniflare/src/workers/local-explorer/resources/d1.ts +++ b/packages/miniflare/src/workers/local-explorer/resources/d1.ts @@ -138,6 +138,9 @@ export async function rawD1Database( body: RawDatabaseBody ): Promise { const databaseId = c.req.param("database_id"); + if (!databaseId) { + return errorResponse(400, 10000, "Missing database_id parameter"); + } const db = getD1Binding(c.env, databaseId); if (!db) { diff --git a/packages/miniflare/src/workers/local-explorer/resources/kv.ts b/packages/miniflare/src/workers/local-explorer/resources/kv.ts index 3b77382ebb50..26811b511c98 100644 --- a/packages/miniflare/src/workers/local-explorer/resources/kv.ts +++ b/packages/miniflare/src/workers/local-explorer/resources/kv.ts @@ -78,6 +78,9 @@ type ListKeysQuery = NonNullable< */ export async function listKVKeys(c: AppContext, query: ListKeysQuery) { const namespace_id = c.req.param("namespace_id"); + if (!namespace_id) { + return errorResponse(400, 10000, "Missing namespace_id parameter"); + } const cursor = query.cursor; const limit = query.limit; const prefix = query.prefix; @@ -112,6 +115,9 @@ export async function listKVKeys(c: AppContext, query: ListKeysQuery) { export async function getKVValue(c: AppContext) { const namespace_id = c.req.param("namespace_id"); const key_name = c.req.param("key_name"); + if (!namespace_id || !key_name) { + return errorResponse(400, 10000, "Missing required path parameters"); + } const kv = getKVBinding(c.env, namespace_id); if (!kv) { @@ -134,6 +140,9 @@ export async function getKVValue(c: AppContext) { export async function putKVValue(c: AppContext) { const namespace_id = c.req.param("namespace_id"); const key_name = c.req.param("key_name"); + if (!namespace_id || !key_name) { + return errorResponse(400, 10000, "Missing required path parameters"); + } const kv = getKVBinding(c.env, namespace_id); if (!kv) { @@ -195,6 +204,9 @@ export async function putKVValue(c: AppContext) { export async function deleteKVValue(c: AppContext) { const namespace_id = c.req.param("namespace_id"); const key_name = c.req.param("key_name"); + if (!namespace_id || !key_name) { + return errorResponse(400, 10000, "Missing required path parameters"); + } const kv = getKVBinding(c.env, namespace_id); if (!kv) { @@ -214,6 +226,9 @@ type BulkGetBody = NonNullable< */ export async function bulkGetKVValues(c: AppContext, body: BulkGetBody) { const namespace_id = c.req.param("namespace_id"); + if (!namespace_id) { + return errorResponse(400, 10000, "Missing namespace_id parameter"); + } const { keys } = body; const kv = getKVBinding(c.env, namespace_id); diff --git a/packages/pages-shared/package.json b/packages/pages-shared/package.json index c4ee4ade5b86..4ffe91b4015c 100644 --- a/packages/pages-shared/package.json +++ b/packages/pages-shared/package.json @@ -33,7 +33,7 @@ "concurrently": "^8.2.2", "esbuild": "catalog:default", "eslint": "catalog:default", - "glob": "^10.4.5", + "glob": "^10.5.0", "html-rewriter-wasm": "^0.4.1", "typescript": "catalog:default", "vitest": "catalog:default" diff --git a/packages/playground-preview-worker/package.json b/packages/playground-preview-worker/package.json index 162115fa1e11..37bfce945d31 100644 --- a/packages/playground-preview-worker/package.json +++ b/packages/playground-preview-worker/package.json @@ -14,7 +14,7 @@ "test:e2e": "vitest run --test-timeout 30000" }, "dependencies": { - "hono": "^4.7.0", + "hono": "^4.12.5", "zod": "^3.22.3" }, "devDependencies": { diff --git a/packages/turbo-r2-archive/package.json b/packages/turbo-r2-archive/package.json index 4000b28c537b..e762dd41b6ed 100644 --- a/packages/turbo-r2-archive/package.json +++ b/packages/turbo-r2-archive/package.json @@ -19,7 +19,7 @@ }, "dependencies": { "@hono/zod-validator": "^0.4.2", - "hono": "^4.7.0", + "hono": "^4.12.5", "zod": "^3.22.3" }, "devDependencies": { diff --git a/packages/vitest-pool-workers/package.json b/packages/vitest-pool-workers/package.json index 6dc2c6631ea3..7a2e6de10622 100644 --- a/packages/vitest-pool-workers/package.json +++ b/packages/vitest-pool-workers/package.json @@ -71,7 +71,7 @@ "@vitest/snapshot": "catalog:default", "birpc": "0.2.14", "capnp-es": "catalog:default", - "devalue": "^5.3.2", + "devalue": "^5.6.3", "eslint": "catalog:default", "get-port": "^7.1.0", "semver": "^7.7.1", diff --git a/packages/wrangler/package.json b/packages/wrangler/package.json index 4ae7a547808c..cf64373d32cc 100644 --- a/packages/wrangler/package.json +++ b/packages/wrangler/package.json @@ -143,7 +143,7 @@ "minimatch": "^5.1.0", "mock-socket": "^9.3.1", "msw": "2.12.0", - "node-forge": "^1.3.1", + "node-forge": "^1.3.2", "open": "^8.4.0", "p-queue": "^9.0.0", "patch-console": "^1.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a93e018a2a16..f65d2c104bc4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -61,8 +61,8 @@ catalogs: specifier: 7.18.2 version: 7.18.2 vite: - specifier: ^5.4.14 - version: 5.4.14 + specifier: ^5.4.21 + version: 5.4.21 vitest: specifier: ~3.2.0 version: 3.2.3 @@ -80,7 +80,7 @@ overrides: '@types/react-transition-group>@types/react': ^18 '@cloudflare/elements>@types/react': ^18 '@types/node': ^20.19.9 - vitest>vite: ^5.0.0 + vitest>vite: ^5.4.21 '@types/node>undici-types': 7.18.2 patchedDependencies: @@ -157,7 +157,7 @@ importers: version: 5.8.3 vite: specifier: catalog:default - version: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + version: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) vitest: specifier: catalog:default version: 3.2.3(@types/debug@4.1.12)(@types/node@20.19.9)(@vitest/ui@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(supports-color@9.2.2)(tsx@4.21.0)(yaml@2.8.1) @@ -1344,7 +1344,7 @@ importers: version: 5.8.3 vite: specifier: catalog:default - version: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + version: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) vitest: specifier: catalog:default version: 3.2.3(@types/debug@4.1.12)(@types/node@20.19.9)(@vitest/ui@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(supports-color@9.2.2)(tsx@4.21.0)(yaml@2.8.1) @@ -1890,8 +1890,8 @@ importers: specifier: ^7.1.0 version: 7.1.0 glob: - specifier: ^10.3.3 - version: 10.4.5 + specifier: ^10.5.0 + version: 10.5.0 haikunator: specifier: ^2.1.2 version: 2.1.2 @@ -1927,10 +1927,10 @@ importers: version: 7.18.2 vite: specifier: catalog:default - version: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + version: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) vite-tsconfig-paths: specifier: ^4.0.8 - version: 4.2.0(typescript@5.8.3)(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + version: 4.2.0(typescript@5.8.3)(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) vitest: specifier: catalog:default version: 3.2.3(@types/debug@4.1.12)(@types/node@20.19.9)(@vitest/ui@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(supports-color@9.2.2)(tsx@4.21.0)(yaml@2.8.1) @@ -2158,7 +2158,7 @@ importers: version: 2.1.10(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tailwindcss/vite': specifier: ^4.0.15 - version: 4.1.18(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + version: 4.1.18(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) '@tanstack/react-router': specifier: ^1.158.0 version: 1.159.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -2189,7 +2189,7 @@ importers: version: 1.159.5(@tanstack/react-router@1.159.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(@tanstack/router-core@1.159.4)(csstype@3.2.3)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) '@tanstack/router-plugin': specifier: ^1.158.0 - version: 1.159.5(@tanstack/react-router@1.159.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + version: 1.159.5(@tanstack/react-router@1.159.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) '@types/react': specifier: ^19.2.0 version: 19.2.13 @@ -2198,7 +2198,7 @@ importers: version: 19.2.3(@types/react@19.2.13) '@vitejs/plugin-react': specifier: ^4.4.1 - version: 4.7.0(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + version: 4.7.0(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) concurrently: specifier: ^9.0.0 version: 9.2.1 @@ -2207,10 +2207,10 @@ importers: version: 5.8.3 vite: specifier: catalog:default - version: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + version: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) vite-plugin-svgr: specifier: ^4.3.0 - version: 4.5.0(rollup@4.57.1)(typescript@5.8.3)(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + version: 4.5.0(rollup@4.57.1)(typescript@5.8.3)(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) vitest: specifier: catalog:default version: 3.2.3(@types/debug@4.1.12)(@types/node@20.19.9)(@vitest/ui@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(supports-color@9.2.2)(tsx@4.21.0)(yaml@2.8.1) @@ -2321,8 +2321,8 @@ importers: specifier: ^8.2.2 version: 8.2.2 devalue: - specifier: ^5.3.2 - version: 5.3.2 + specifier: ^5.6.3 + version: 5.6.3 devtools-protocol: specifier: ^0.0.1182435 version: 0.0.1182435 @@ -2348,8 +2348,8 @@ importers: specifier: ^2.5.0 version: 2.5.0 hono: - specifier: ^4.11.5 - version: 4.11.5 + specifier: ^4.12.5 + version: 4.12.5 http-cache-semantics: specifier: ^4.1.0 version: 4.1.1 @@ -2457,8 +2457,8 @@ importers: specifier: catalog:default version: 9.39.1(jiti@2.6.1) glob: - specifier: ^10.4.5 - version: 10.4.5 + specifier: ^10.5.0 + version: 10.5.0 html-rewriter-wasm: specifier: ^0.4.1 version: 0.4.1 @@ -2472,8 +2472,8 @@ importers: packages/playground-preview-worker: dependencies: hono: - specifier: ^4.7.0 - version: 4.7.1 + specifier: ^4.12.5 + version: 4.12.5 zod: specifier: ^3.22.3 version: 3.22.3 @@ -2570,10 +2570,10 @@ importers: dependencies: '@hono/zod-validator': specifier: ^0.4.2 - version: 0.4.2(hono@4.7.1)(zod@3.22.3) + version: 0.4.2(hono@4.12.5)(zod@3.22.3) hono: - specifier: ^4.7.0 - version: 4.7.1 + specifier: ^4.12.5 + version: 4.12.5 zod: specifier: ^3.22.3 version: 3.22.3 @@ -3831,8 +3831,8 @@ importers: specifier: catalog:default version: 0.0.14(typescript@5.8.3) devalue: - specifier: ^5.3.2 - version: 5.3.2 + specifier: ^5.6.3 + version: 5.6.3 eslint: specifier: catalog:default version: 9.39.1(jiti@2.6.1) @@ -3884,7 +3884,7 @@ importers: version: 18.3.3 '@vitejs/plugin-react': specifier: ^4.3.3 - version: 4.3.3(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + version: 4.3.3(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) eslint: specifier: catalog:default version: 9.39.1(jiti@2.6.1) @@ -3899,10 +3899,10 @@ importers: version: 5.8.3 vite: specifier: catalog:default - version: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + version: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) vite-plugin-dts: specifier: ^4.0.1 - version: 4.0.1(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.8.3)(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + version: 4.0.1(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.8.3)(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) packages/workers-playground: dependencies: @@ -4005,7 +4005,7 @@ importers: version: 9.0.4 '@vitejs/plugin-react': specifier: ^4.3.3 - version: 4.3.3(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + version: 4.3.3(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) eslint: specifier: catalog:default version: 9.39.1(jiti@2.6.1) @@ -4020,7 +4020,7 @@ importers: version: 7.18.2 vite: specifier: catalog:default - version: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + version: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) wrangler: specifier: workspace:^ version: link:../wrangler @@ -4405,8 +4405,8 @@ importers: specifier: 2.12.0 version: 2.12.0(@types/node@20.19.9)(typescript@5.8.3) node-forge: - specifier: ^1.3.1 - version: 1.3.1 + specifier: ^1.3.2 + version: 1.3.3 open: specifier: ^8.4.0 version: 8.4.0 @@ -10388,6 +10388,9 @@ packages: devalue@5.3.2: resolution: {integrity: sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==} + devalue@5.6.3: + resolution: {integrity: sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==} + devtools-protocol@0.0.1182435: resolution: {integrity: sha512-EmlkWb62wSbQNE1gRZZsi4KZYRaF5Skpp183LhRU7+sadKR06O1dHCjZmFSEG6Kv7P6S/UYLxcY3NlYwqKM99w==} @@ -11057,10 +11060,6 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -11228,8 +11227,8 @@ packages: glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true @@ -11361,12 +11360,8 @@ packages: hermes-parser@0.25.1: resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} - hono@4.11.5: - resolution: {integrity: sha512-WemPi9/WfyMwZs+ZUXdiwcCh9Y+m7L+8vki9MzDw3jJ+W9Lc+12HGsd368Qc1vZi1xwW8BWMMsnK5efYKPdt4g==} - engines: {node: '>=16.9.0'} - - hono@4.7.1: - resolution: {integrity: sha512-V3eWoPkBxoNgFCkSc5Y5rpLF6YoQQx1pkYO4qrF6YfOw8RZbujUNlJLZCxh0z9gZct70+je2Ih7Zrdpv21hP9w==} + hono@4.12.5: + resolution: {integrity: sha512-3qq+FUBtlTHhtYxbxheZgY8NIFnkkC/MR8u5TTsr7YZ3wixryQ3cCwn3iZbg8p8B88iDBBAYSfZDS75t8MN7Vg==} engines: {node: '>=16.9.0'} hono@4.7.10: @@ -12601,8 +12596,8 @@ packages: encoding: optional: true - node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + node-forge@1.3.3: + resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==} engines: {node: '>= 6.13.0'} node-polyglot@2.5.0: @@ -14984,8 +14979,8 @@ packages: vite: optional: true - vite@5.4.14: - resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==} + vite@5.4.21: + resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -17648,9 +17643,9 @@ snapshots: dependencies: hono: 4.7.10 - '@hono/zod-validator@0.4.2(hono@4.7.1)(zod@3.22.3)': + '@hono/zod-validator@0.4.2(hono@4.12.5)(zod@3.22.3)': dependencies: - hono: 4.7.1 + hono: 4.12.5 zod: 3.22.3 '@humanfs/core@0.19.1': {} @@ -19666,12 +19661,12 @@ snapshots: tailwindcss: 4.0.15 vite: 7.1.12(@types/node@20.19.9)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.1) - '@tailwindcss/vite@4.1.18(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2))': + '@tailwindcss/vite@4.1.18(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2))': dependencies: '@tailwindcss/node': 4.1.18 '@tailwindcss/oxide': 4.1.18 tailwindcss: 4.1.18 - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) '@tanstack/history@1.154.14': {} @@ -19736,7 +19731,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@tanstack/router-plugin@1.159.5(@tanstack/react-router@1.159.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2))': + '@tanstack/router-plugin@1.159.5(@tanstack/react-router@1.159.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) @@ -19753,7 +19748,7 @@ snapshots: zod: 3.25.76 optionalDependencies: '@tanstack/react-router': 1.159.5(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) transitivePeerDependencies: - supports-color @@ -20335,18 +20330,18 @@ snapshots: dependencies: vite: 7.1.12(@types/node@20.19.9)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.1) - '@vitejs/plugin-react@4.3.3(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2))': + '@vitejs/plugin-react@4.3.3(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.7.0(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2))': + '@vitejs/plugin-react@4.7.0(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2))': dependencies: '@babel/core': 7.29.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.29.0) @@ -20354,7 +20349,7 @@ snapshots: '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) transitivePeerDependencies: - supports-color @@ -20385,50 +20380,50 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/mocker@2.1.9(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2))': + '@vitest/mocker@2.1.9(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2))': dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.0(@types/node@20.19.9)(typescript@5.8.3) - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) - '@vitest/mocker@2.1.9(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2))': + '@vitest/mocker@2.1.9(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2))': dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.0(@types/node@20.19.9)(typescript@5.9.3) - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) - '@vitest/mocker@3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.2))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2))': + '@vitest/mocker@3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.2))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2))': dependencies: '@vitest/spy': 3.2.3 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.0(@types/node@20.19.9)(typescript@5.8.2) - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) - '@vitest/mocker@3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2))': + '@vitest/mocker@3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2))': dependencies: '@vitest/spy': 3.2.3 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.0(@types/node@20.19.9)(typescript@5.8.3) - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) - '@vitest/mocker@3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2))': + '@vitest/mocker@3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2))': dependencies: '@vitest/spy': 3.2.3 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: msw: 2.12.0(@types/node@20.19.9)(typescript@5.9.3) - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) '@vitest/pretty-format@2.1.8': dependencies: @@ -21702,6 +21697,8 @@ snapshots: devalue@5.3.2: {} + devalue@5.6.3: {} + devtools-protocol@0.0.1182435: {} devtools-protocol@0.0.1273771: {} @@ -22819,11 +22816,6 @@ snapshots: dependencies: is-callable: 1.2.7 - foreground-child@3.1.1: - dependencies: - cross-spawn: 7.0.6 - signal-exit: 4.1.0 - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -23004,9 +22996,9 @@ snapshots: glob-to-regexp@0.4.1: {} - glob@10.4.5: + glob@10.5.0: dependencies: - foreground-child: 3.1.1 + foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 @@ -23152,9 +23144,7 @@ snapshots: dependencies: hermes-estree: 0.25.1 - hono@4.11.5: {} - - hono@4.7.1: {} + hono@4.12.5: {} hono@4.7.10: {} @@ -24309,7 +24299,7 @@ snapshots: optionalDependencies: encoding: 0.1.13 - node-forge@1.3.1: {} + node-forge@1.3.3: {} node-polyglot@2.5.0: dependencies: @@ -26256,7 +26246,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 - glob: 10.4.5 + glob: 10.5.0 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -27044,7 +27034,7 @@ snapshots: debug: 4.4.1(supports-color@9.2.2) es-module-lexer: 1.7.0 pathe: 1.1.2 - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) transitivePeerDependencies: - '@types/node' - less @@ -27077,7 +27067,7 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.0.1(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.8.3)(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)): + vite-plugin-dts@4.0.1(@types/node@20.19.9)(rollup@4.57.1)(typescript@5.8.3)(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)): dependencies: '@microsoft/api-extractor': 7.47.4(@types/node@20.19.9) '@rollup/pluginutils': 5.1.0(rollup@4.57.1) @@ -27091,35 +27081,35 @@ snapshots: typescript: 5.8.3 vue-tsc: 2.0.29(typescript@5.8.3) optionalDependencies: - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) transitivePeerDependencies: - '@types/node' - rollup - supports-color - vite-plugin-svgr@4.5.0(rollup@4.57.1)(typescript@5.8.3)(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)): + vite-plugin-svgr@4.5.0(rollup@4.57.1)(typescript@5.8.3)(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)): dependencies: '@rollup/pluginutils': 5.3.0(rollup@4.57.1) '@svgr/core': 8.1.0(typescript@5.8.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.8.3)) - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) transitivePeerDependencies: - rollup - supports-color - typescript - vite-tsconfig-paths@4.2.0(typescript@5.8.3)(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)): + vite-tsconfig-paths@4.2.0(typescript@5.8.3)(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)): dependencies: debug: 4.4.1(supports-color@9.2.2) globrex: 0.1.2 tsconfck: 2.1.1(typescript@5.8.3) optionalDependencies: - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) transitivePeerDependencies: - supports-color - typescript - vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2): + vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2): dependencies: esbuild: 0.21.5 postcss: 8.5.6 @@ -27170,7 +27160,7 @@ snapshots: vitest@2.1.9(@types/node@20.19.9)(@vitest/ui@2.1.9)(lightningcss@1.30.2)(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3)): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + '@vitest/mocker': 2.1.9(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -27186,7 +27176,7 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) vite-node: 2.1.9(@types/node@20.19.9)(lightningcss@1.30.2) why-is-node-running: 2.3.0 optionalDependencies: @@ -27206,7 +27196,7 @@ snapshots: vitest@2.1.9(@types/node@20.19.9)(@vitest/ui@2.1.9)(lightningcss@1.30.2)(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3)): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + '@vitest/mocker': 2.1.9(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -27222,7 +27212,7 @@ snapshots: tinyexec: 0.3.1 tinypool: 1.0.1 tinyrainbow: 1.2.0 - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) vite-node: 2.1.9(@types/node@20.19.9)(lightningcss@1.30.2) why-is-node-running: 2.3.0 optionalDependencies: @@ -27243,7 +27233,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.3 - '@vitest/mocker': 3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.2))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + '@vitest/mocker': 3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.2))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) '@vitest/pretty-format': 3.2.3 '@vitest/runner': 3.2.3 '@vitest/snapshot': 3.2.3 @@ -27261,7 +27251,7 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.0 tinyrainbow: 2.0.0 - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) vite-node: 3.2.3(@types/node@20.19.9)(jiti@2.6.1)(lightningcss@1.30.2)(supports-color@9.2.2)(tsx@4.21.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: @@ -27286,7 +27276,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.3 - '@vitest/mocker': 3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + '@vitest/mocker': 3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) '@vitest/pretty-format': 3.2.3 '@vitest/runner': 3.2.3 '@vitest/snapshot': 3.2.3 @@ -27304,7 +27294,7 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.0 tinyrainbow: 2.0.0 - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) vite-node: 3.2.3(@types/node@20.19.9)(jiti@2.6.1)(lightningcss@1.30.2)(supports-color@9.2.2)(tsx@4.21.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: @@ -27329,7 +27319,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.3 - '@vitest/mocker': 3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + '@vitest/mocker': 3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) '@vitest/pretty-format': 3.2.3 '@vitest/runner': 3.2.3 '@vitest/snapshot': 3.2.3 @@ -27347,7 +27337,7 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.0 tinyrainbow: 2.0.0 - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) vite-node: 3.2.3(@types/node@20.19.9)(jiti@2.6.1)(lightningcss@1.30.2)(supports-color@9.2.2)(tsx@4.21.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: @@ -27372,7 +27362,7 @@ snapshots: dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.3 - '@vitest/mocker': 3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(vite@5.4.14(@types/node@20.19.9)(lightningcss@1.30.2)) + '@vitest/mocker': 3.2.3(msw@2.12.0(@types/node@20.19.9)(typescript@5.8.3))(vite@5.4.21(@types/node@20.19.9)(lightningcss@1.30.2)) '@vitest/pretty-format': 3.2.3 '@vitest/runner': 3.2.3 '@vitest/snapshot': 3.2.3 @@ -27390,7 +27380,7 @@ snapshots: tinyglobby: 0.2.15 tinypool: 1.1.0 tinyrainbow: 2.0.0 - vite: 5.4.14(@types/node@20.19.9)(lightningcss@1.30.2) + vite: 5.4.21(@types/node@20.19.9)(lightningcss@1.30.2) vite-node: 3.2.3(@types/node@20.19.9)(jiti@2.6.1)(lightningcss@1.30.2)(supports-color@9.2.2)(tsx@4.21.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7795d5cad087..e5123b037210 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -28,7 +28,7 @@ catalog: # version of Undici undici-types: "7.18.2" vitest: "~3.2.0" - vite: "^5.4.14" + vite: "^5.4.21" "ws": "8.18.0" esbuild: "0.27.3" playwright-chromium: "^1.56.1" From 5b40a25271c3366b7c3900cc90852354542e1ddf Mon Sep 17 00:00:00 2001 From: Pete Bacon Darwin Date: Fri, 6 Mar 2026 17:44:54 +0000 Subject: [PATCH 3/7] Pin all third-party GitHub Actions to commit SHAs (#12793) --- .github/actions/install-dependencies/action.yml | 2 +- .github/actions/install-python-uv/action.yml | 2 +- .github/workflows/auto-assign-issues.yml | 2 +- .github/workflows/c3-e2e.yml | 2 +- .github/workflows/changeset-review.yml | 4 ++-- .github/workflows/changesets.yml | 2 +- .github/workflows/deploy-pages-previews.yml | 4 ++-- .github/workflows/e2e.yml | 4 ++-- .github/workflows/hotfix-release.yml | 2 +- .github/workflows/test-and-check-other-node.yml | 2 +- .github/workflows/test-and-check.yml | 2 +- .github/workflows/validate-pr-description.yml | 4 ++-- .github/workflows/vite-plugin-playgrounds.yml | 2 +- 13 files changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/actions/install-dependencies/action.yml b/.github/actions/install-dependencies/action.yml index 19361679ef9f..c246c8edaff6 100644 --- a/.github/actions/install-dependencies/action.yml +++ b/.github/actions/install-dependencies/action.yml @@ -17,7 +17,7 @@ runs: using: "composite" steps: - name: Install pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4 with: version: 9.12.0 diff --git a/.github/actions/install-python-uv/action.yml b/.github/actions/install-python-uv/action.yml index ed136706db6f..53e991ae5320 100644 --- a/.github/actions/install-python-uv/action.yml +++ b/.github/actions/install-python-uv/action.yml @@ -3,7 +3,7 @@ runs: using: "composite" steps: - name: Install uv for Python - uses: astral-sh/setup-uv@v6 + uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6 with: version: "0.9.3" enable-cache: false diff --git a/.github/workflows/auto-assign-issues.yml b/.github/workflows/auto-assign-issues.yml index c1bb7f7a56b6..5283fb0c06a7 100644 --- a/.github/workflows/auto-assign-issues.yml +++ b/.github/workflows/auto-assign-issues.yml @@ -22,7 +22,7 @@ jobs: node-version: 22 # need this version for `Set` methods - name: Install pnpm - uses: pnpm/action-setup@v4 + uses: pnpm/action-setup@41ff72655975bd51cab0327fa583b6e92b6d3061 # v4 with: version: 9.12.0 diff --git a/.github/workflows/c3-e2e.yml b/.github/workflows/c3-e2e.yml index 99c4e87bb141..7c228674c5ff 100644 --- a/.github/workflows/c3-e2e.yml +++ b/.github/workflows/c3-e2e.yml @@ -38,7 +38,7 @@ jobs: with: fetch-depth: 0 - - uses: dorny/paths-filter@v3 + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3 id: changes with: filters: | diff --git a/.github/workflows/changeset-review.yml b/.github/workflows/changeset-review.yml index 1d26f703d7b4..172c9334d3e5 100644 --- a/.github/workflows/changeset-review.yml +++ b/.github/workflows/changeset-review.yml @@ -35,7 +35,7 @@ jobs: - name: Get changed changeset files id: changed-changesets - uses: tj-actions/changed-files@v45 + uses: tj-actions/changed-files@48d8f15b2aaa3d255ca5af3eba4870f807ce6b3c # v45 with: files: | .changeset/*.md @@ -79,7 +79,7 @@ jobs: - name: Post review comment if: steps.opencode-review.outcome == 'success' - uses: marocchino/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2 with: header: changeset-review path: changeset-review.md diff --git a/.github/workflows/changesets.yml b/.github/workflows/changesets.yml index 23673caaf18c..9bd868518885 100644 --- a/.github/workflows/changesets.yml +++ b/.github/workflows/changesets.yml @@ -54,7 +54,7 @@ jobs: - name: Create Version PR or Publish to NPM id: changesets - uses: changesets/action@v1 + uses: changesets/action@6a0a831ff30acef54f2c6aa1cbbc1096b066edaf # v1 with: version: node .github/changeset-version.js publish: pnpm exec changeset publish diff --git a/.github/workflows/deploy-pages-previews.yml b/.github/workflows/deploy-pages-previews.yml index 842901527e22..1618aaaa9fc6 100644 --- a/.github/workflows/deploy-pages-previews.yml +++ b/.github/workflows/deploy-pages-previews.yml @@ -83,7 +83,7 @@ jobs: - name: "Comment on PR with Devtools Link" if: contains(github.event.*.labels.*.name, 'preview:chrome-devtools-patches') - uses: marocchino/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2 with: header: ${{ steps.finder.outputs.pr }} message: | @@ -102,7 +102,7 @@ jobs: - name: "Comment on PR with Combined Link" if: contains(github.event.*.labels.*.name, 'preview:chrome-devtools-patches') && contains(github.event.*.labels.*.name, 'preview:workers-playground') - uses: marocchino/sticky-pull-request-comment@v2 + uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 # v2 with: header: ${{ steps.finder.outputs.pr }} append: true diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 8bd33719d371..547cbc12017e 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -32,7 +32,7 @@ jobs: with: fetch-depth: 0 - - uses: dorny/paths-filter@v3 + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3 id: changes with: filters: | @@ -106,7 +106,7 @@ jobs: with: fetch-depth: 0 - - uses: dorny/paths-filter@v3 + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3 id: changes with: filters: | diff --git a/.github/workflows/hotfix-release.yml b/.github/workflows/hotfix-release.yml index 91fd66ccb7a2..8808e4b2c7ff 100644 --- a/.github/workflows/hotfix-release.yml +++ b/.github/workflows/hotfix-release.yml @@ -31,7 +31,7 @@ jobs: fetch-depth: 0 - name: Check user for team affiliation - uses: tspascoal/get-user-teams-membership@v2 + uses: tspascoal/get-user-teams-membership@ba78054988f58bea69b7c6136d563236f8ed2fc0 # v2 id: teamAffiliation with: GITHUB_TOKEN: ${{ secrets.READ_ONLY_ORG_GITHUB_TOKEN }} diff --git a/.github/workflows/test-and-check-other-node.yml b/.github/workflows/test-and-check-other-node.yml index 3745213b0e75..189a20391522 100644 --- a/.github/workflows/test-and-check-other-node.yml +++ b/.github/workflows/test-and-check-other-node.yml @@ -35,7 +35,7 @@ jobs: fetch-depth: 1 - name: Filter changed paths - uses: dorny/paths-filter@v3 + uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3 id: changes with: filters: | diff --git a/.github/workflows/test-and-check.yml b/.github/workflows/test-and-check.yml index 0df567fb2c9d..d61a8f91d507 100644 --- a/.github/workflows/test-and-check.yml +++ b/.github/workflows/test-and-check.yml @@ -98,7 +98,7 @@ jobs: fetch-depth: 0 - name: Filter changed paths - uses: dorny/paths-filter@v3 + uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3 id: changes with: filters: | diff --git a/.github/workflows/validate-pr-description.yml b/.github/workflows/validate-pr-description.yml index ba71bf93c16c..88a380b6689a 100644 --- a/.github/workflows/validate-pr-description.yml +++ b/.github/workflows/validate-pr-description.yml @@ -33,7 +33,7 @@ jobs: with: fetch-depth: 1 - - uses: dorny/paths-filter@v3 + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3 id: changes with: filters: | @@ -52,7 +52,7 @@ jobs: - name: List changed files if: steps.changes.outputs.everything_but_markdown == 'true' id: files - uses: Ana06/get-changed-files@v2.3.0 + uses: Ana06/get-changed-files@25f79e676e7ea1868813e21465014798211fad8c # v2.3.0 with: format: "json" diff --git a/.github/workflows/vite-plugin-playgrounds.yml b/.github/workflows/vite-plugin-playgrounds.yml index fefee48b5593..bd973038d9bf 100644 --- a/.github/workflows/vite-plugin-playgrounds.yml +++ b/.github/workflows/vite-plugin-playgrounds.yml @@ -34,7 +34,7 @@ jobs: - name: Checkout Repo uses: actions/checkout@v4 - name: Filter changed paths - uses: dorny/paths-filter@v3 + uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3 id: changes with: filters: | From b2f8b47b19ef2a2235130a681da002206ef4c4e6 Mon Sep 17 00:00:00 2001 From: Ben <4991309+NuroDev@users.noreply.github.com> Date: Fri, 6 Mar 2026 19:10:33 +0000 Subject: [PATCH 4/7] chore(local-explorer-ui): Refactor KV & sidebar to use route loaders (#12779) Co-authored-by: Pete Bacon Darwin --- .changeset/thirty-mammals-live.md | 7 ++ .../src/components/Sidebar.tsx | 17 +-- .../local-explorer-ui/src/routes/__root.tsx | 103 ++++++++---------- .../src/routes/do/$className/index.tsx | 38 +++++-- .../src/routes/kv/$namespaceId.tsx | 80 +++++++++++--- 5 files changed, 147 insertions(+), 98 deletions(-) create mode 100644 .changeset/thirty-mammals-live.md diff --git a/.changeset/thirty-mammals-live.md b/.changeset/thirty-mammals-live.md new file mode 100644 index 000000000000..0d540a9ff013 --- /dev/null +++ b/.changeset/thirty-mammals-live.md @@ -0,0 +1,7 @@ +--- +"@cloudflare/local-explorer-ui": patch +--- + +Refactors KV & sidebar to use route loaders. + +This change improves the user experience of the Local Explorer dashboard by ensuring that the data used for the initial render is fetched server-side and passed down to the client. This avoids the initial flicker when loading in. Both D1 & Durable Object routes already incorporate this system. diff --git a/packages/local-explorer-ui/src/components/Sidebar.tsx b/packages/local-explorer-ui/src/components/Sidebar.tsx index 3c6025c7dfa9..830f1c38e51f 100644 --- a/packages/local-explorer-ui/src/components/Sidebar.tsx +++ b/packages/local-explorer-ui/src/components/Sidebar.tsx @@ -26,7 +26,6 @@ interface SidebarItemGroupProps { to: FileRouteTypes["to"]; }; }>; - loading: boolean; title: string; } @@ -35,7 +34,6 @@ function SidebarItemGroup({ error, icon: Icon, items, - loading, title, }: SidebarItemGroupProps): JSX.Element { return ( @@ -51,17 +49,11 @@ function SidebarItemGroup({
    - {loading ? ( -
  • - Loading... -
  • - ) : null} - {error ? (
  • {error}
  • ) : null} - {!loading && !error + {!error ? items.map((item) => (
  • {emptyLabel}
  • @@ -100,7 +92,6 @@ interface SidebarProps { doNamespaces: WorkersNamespace[]; kvError: string | null; kvNamespaces: WorkersKvNamespace[]; - loading: boolean; } export function Sidebar({ @@ -111,7 +102,6 @@ export function Sidebar({ doNamespaces, kvError, kvNamespaces, - loading, }: SidebarProps) { return ( diff --git a/packages/local-explorer-ui/src/routes/__root.tsx b/packages/local-explorer-ui/src/routes/__root.tsx index 50cd4927df16..2d0b36f57e37 100644 --- a/packages/local-explorer-ui/src/routes/__root.tsx +++ b/packages/local-explorer-ui/src/routes/__root.tsx @@ -3,7 +3,6 @@ import { Outlet, useRouterState, } from "@tanstack/react-router"; -import { useEffect, useState } from "react"; import { cloudflareD1ListDatabases, durableObjectsNamespaceListNamespaces, @@ -18,73 +17,65 @@ import type { export const Route = createRootRoute({ component: RootLayout, -}); + loader: async () => { + const [kvResponse, d1Response, doResponse] = await Promise.allSettled([ + workersKvNamespaceListNamespaces(), + cloudflareD1ListDatabases(), + durableObjectsNamespaceListNamespaces(), + ]); -function RootLayout() { - const [loading, setLoading] = useState(true); + let kvNamespaces = new Array(); + let kvError: string | null = null; + if (kvResponse.status === "fulfilled") { + kvNamespaces = kvResponse.value.data?.result ?? []; + } else { + kvError = `KV Error: ${kvResponse.reason instanceof Error ? kvResponse.reason.message : JSON.stringify(kvResponse.reason)}`; + } - const [kvNamespaces, setKvNamespaces] = useState([]); - const [kvError, setKvError] = useState(null); + let databases = new Array(); + let d1Error: string | null = null; + if (d1Response.status === "fulfilled") { + databases = d1Response.value.data?.result ?? []; + } else { + d1Error = `D1 Error: ${d1Response.reason instanceof Error ? d1Response.reason.message : JSON.stringify(d1Response.reason)}`; + } - const [d1Error, setD1Error] = useState(null); - const [databases, setDatabases] = useState([]); + let doNamespaces = new Array(); + let doError: string | null = null; + if (doResponse.status === "fulfilled") { + // Only show namespaces that use SQLite storage + const allDoNamespaces = doResponse.value.data?.result ?? []; + doNamespaces = allDoNamespaces.filter((ns) => ns.use_sqlite === true); + } else { + doError = `DO Error: ${doResponse.reason instanceof Error ? doResponse.reason.message : JSON.stringify(doResponse.reason)}`; + } - const [doNamespaces, setDoNamespaces] = useState([]); - const [doError, setDoError] = useState(null); + return { + d1Error, + databases, + doError, + doNamespaces, + kvError, + kvNamespaces, + }; + }, +}); +function RootLayout() { + const loaderData = Route.useLoaderData(); const routerState = useRouterState(); const currentPath = routerState.location.pathname; - useEffect(() => { - async function fetchData() { - const [kvResponse, d1Response, doResponse] = await Promise.allSettled([ - workersKvNamespaceListNamespaces(), - cloudflareD1ListDatabases(), - durableObjectsNamespaceListNamespaces(), - ]); - - if (kvResponse.status === "fulfilled") { - setKvNamespaces(kvResponse.value.data?.result ?? []); - } else { - setKvError( - `KV Error: ${kvResponse.reason instanceof Error ? kvResponse.reason.message : JSON.stringify(kvResponse.reason)}` - ); - } - - if (d1Response.status === "fulfilled") { - setDatabases(d1Response.value.data?.result ?? []); - } else { - setD1Error( - `D1 Error: ${d1Response.reason instanceof Error ? d1Response.reason.message : JSON.stringify(d1Response.reason)}` - ); - } - - if (doResponse.status === "fulfilled") { - // Only show namespaces that use SQLite storage - const allDoNamespaces = doResponse.value.data?.result ?? []; - setDoNamespaces(allDoNamespaces.filter((ns) => ns.use_sqlite === true)); - } else { - setDoError( - `DO Error: ${doResponse.reason instanceof Error ? doResponse.reason.message : JSON.stringify(doResponse.reason)}` - ); - } - - setLoading(false); - } - void fetchData(); - }, []); - return (
    diff --git a/packages/local-explorer-ui/src/routes/do/$className/index.tsx b/packages/local-explorer-ui/src/routes/do/$className/index.tsx index 2ad10ecb26df..d79e32deea8e 100644 --- a/packages/local-explorer-ui/src/routes/do/$className/index.tsx +++ b/packages/local-explorer-ui/src/routes/do/$className/index.tsx @@ -12,7 +12,6 @@ import type { WorkersObject } from "../../../api"; export const Route = createFileRoute("/do/$className/")({ component: NamespaceView, loader: async ({ params }) => { - // Resolve className to namespaceId const response = await durableObjectsNamespaceListNamespaces(); const namespaces = response.data?.result ?? []; const namespace = namespaces.find( @@ -25,8 +24,23 @@ export const Route = createFileRoute("/do/$className/")({ throw new Error(`Durable Object class "${params.className}" not found`); } + const objectsResponse = await durableObjectsNamespaceListObjects({ + path: { + id: namespace.id, + }, + query: { + limit: 50, + }, + }); + + const objects = objectsResponse.data?.result ?? []; + const cursor = objectsResponse.data?.result_info?.cursor ?? null; + return { + cursor, + hasMore: !!cursor, namespaceId: namespace.id, + objects, }; }, }); @@ -36,12 +50,21 @@ function NamespaceView() { const loaderData = Route.useLoaderData(); const { namespaceId } = loaderData; - const [cursor, setCursor] = useState(null); + const [cursor, setCursor] = useState(loaderData.cursor); const [error, setError] = useState(null); - const [hasMore, setHasMore] = useState(false); - const [loading, setLoading] = useState(true); + const [hasMore, setHasMore] = useState(loaderData.hasMore); + const [loading, setLoading] = useState(false); const [loadingMore, setLoadingMore] = useState(false); - const [objects, setObjects] = useState([]); + const [objects, setObjects] = useState(loaderData.objects); + + useEffect((): void => { + setObjects(loaderData.objects); + setCursor(loaderData.cursor); + setHasMore(loaderData.hasMore); + setError(null); + setLoading(false); + setLoadingMore(false); + }, [loaderData]); const fetchObjects = useCallback( async (nextCursor?: string): Promise => { @@ -87,11 +110,6 @@ function NamespaceView() { [namespaceId] ); - useEffect((): void => { - setError(null); - void fetchObjects(); - }, [namespaceId, fetchObjects]); - function handleLoadMore(): void { if (cursor && !loadingMore) { void fetchObjects(cursor); diff --git a/packages/local-explorer-ui/src/routes/kv/$namespaceId.tsx b/packages/local-explorer-ui/src/routes/kv/$namespaceId.tsx index 0a6092e70da9..c48d5165aed0 100644 --- a/packages/local-explorer-ui/src/routes/kv/$namespaceId.tsx +++ b/packages/local-explorer-ui/src/routes/kv/$namespaceId.tsx @@ -18,6 +18,43 @@ import type { KVEntry } from "../../api"; export const Route = createFileRoute("/kv/$namespaceId")({ component: NamespaceView, + loader: async ({ params }) => { + const keysResponse = await workersKvNamespaceListANamespace_SKeys({ + path: { namespace_id: params.namespaceId }, + query: { limit: 50 }, + }); + const keys = keysResponse.data?.result ?? []; + + let values: Record = {}; + if (keys.length > 0) { + const valuesResponse = await workersKvNamespaceGetMultipleKeyValuePairs({ + path: { + namespace_id: params.namespaceId, + }, + body: { + keys: keys.map((k) => k.name), + }, + }); + values = (valuesResponse.data?.result?.values ?? {}) as Record< + string, + string | null + >; + } + + const cursor = keysResponse.data?.result_info?.cursor ?? null; + const entries = keys.map( + (key): KVEntry => ({ + key, + value: values[key.name] ?? null, + }) + ); + + return { + cursor, + entries, + hasMore: !!cursor, + }; + }, }); // Helper functions for optimistic entry state updates @@ -41,29 +78,46 @@ const entryVisible = (entries: KVEntry[], key: string): boolean => function NamespaceView() { const { namespaceId } = Route.useParams(); - const [entries, setEntries] = useState([]); - const [loading, setLoading] = useState(true); + const loaderData = Route.useLoaderData(); + + const [entries, setEntries] = useState(loaderData.entries); + const [cursor, setCursor] = useState(loaderData.cursor); + const [hasMore, setHasMore] = useState(loaderData.hasMore); + // Global (not individal validation) errors like fetch failures, shown in a // banner. Set by fetchEntries, handleAdd, handleEditSave, // handleConfirmOverwrite, handleConfirmDelete - const [error, setError] = useState(null); - const [cursor, setCursor] = useState(null); - const [hasMore, setHasMore] = useState(false); - const [loadingMore, setLoadingMore] = useState(false); const [deleteTarget, setDeleteTarget] = useState(null); - const [deleting, setDeleting] = useState(false); + const [deleting, setDeleting] = useState(false); + const [error, setError] = useState(null); + const [loading, setLoading] = useState(false); + const [loadingMore, setLoadingMore] = useState(false); // State for overwrite confirmation dialog const [overwriteConfirm, setOverwriteConfirm] = useState<{ key: string; value: string; originalKey?: string; // undefined for add, set for edit } | null>(null); - const [overwriting, setOverwriting] = useState(false); + const [overwriting, setOverwriting] = useState(false); // Signal to clear AddKVForm after successful overwrite - const [clearAddForm, setClearAddForm] = useState(0); + const [clearAddForm, setClearAddForm] = useState(0); // Search prefix filter const [prefix, setPrefix] = useState(undefined); + useEffect(() => { + setEntries(loaderData.entries); + setCursor(loaderData.cursor); + setHasMore(loaderData.hasMore); + setDeleteTarget(null); + setDeleting(false); + setOverwriteConfirm(null); + setOverwriting(false); + setError(null); + setPrefix(undefined); + setLoading(false); + setLoadingMore(false); + }, [loaderData]); + const fetchEntries = useCallback( async (nextCursor?: string, prefixParam?: string) => { try { @@ -120,14 +174,6 @@ function NamespaceView() { [namespaceId] ); - useEffect(() => { - setDeleteTarget(null); - setOverwriteConfirm(null); - setError(null); - setPrefix(undefined); - void fetchEntries(undefined, undefined); - }, [namespaceId, fetchEntries]); - const handleLoadMore = () => { if (cursor && !loadingMore) { void fetchEntries(cursor, prefix); From 211d75d6f5e611f86ff9b62d4e280b8baaa842b7 Mon Sep 17 00:00:00 2001 From: Ben <4991309+NuroDev@users.noreply.github.com> Date: Fri, 6 Mar 2026 19:10:57 +0000 Subject: [PATCH 5/7] fix(wrangler): Fix type generation inheritable bindings (#12746) Co-authored-by: James Opstad <13586373+jamesopstad@users.noreply.github.com> --- .changeset/evil-rivers-draw.md | 24 ++ .../src/__tests__/type-generation.test.ts | 236 ++++++++++++++++++ .../wrangler/src/type-generation/index.ts | 86 +++++++ 3 files changed, 346 insertions(+) create mode 100644 .changeset/evil-rivers-draw.md diff --git a/.changeset/evil-rivers-draw.md b/.changeset/evil-rivers-draw.md new file mode 100644 index 000000000000..1fdaee9ca344 --- /dev/null +++ b/.changeset/evil-rivers-draw.md @@ -0,0 +1,24 @@ +--- +"wrangler": minor +--- + +Add support for inheritable bindings in type generation + +When using `wrangler types` with multiple environments, bindings from inheritable config properties (like `assets`) are now correctly inherited from the top-level config in all named environments. Previously, if you defined `assets.binding` at the top level with named environments, the binding would be marked as optional in the generated `Env` type because the type generation didn't account for inheritance. + +Example: + +```json +{ + "assets": { + "binding": "ASSETS", + "directory": "./public" + }, + "env": { + "staging": {}, + "production": {} + } +} +``` + +Before this change, `ASSETS` would be typed as `ASSETS?: Fetcher` (optional). Now, `ASSETS` is correctly typed as `ASSETS: Fetcher` (required). This fix currently applies to the `assets` binding, with an extensible mechanism to support additional inheritable bindings in the future. diff --git a/packages/wrangler/src/__tests__/type-generation.test.ts b/packages/wrangler/src/__tests__/type-generation.test.ts index 08ffe7d8d444..2f1155d2d130 100644 --- a/packages/wrangler/src/__tests__/type-generation.test.ts +++ b/packages/wrangler/src/__tests__/type-generation.test.ts @@ -2593,6 +2593,242 @@ describe("generate types", () => { `); }); + it("should mark inheritable bindings as required when defined at top-level", async ({ + expect, + }) => { + fs.writeFileSync( + "./wrangler.jsonc", + JSON.stringify({ + assets: { + binding: "ASSETS", + directory: "/assets", + }, + env: { + staging: { + kv_namespaces: [ + { + binding: "KV_STAGING", + id: "staging-kv", + }, + ], + }, + production: { + kv_namespaces: [ + { + binding: "KV_PROD", + id: "prod-kv", + }, + ], + }, + }, + }), + "utf-8" + ); + + await runWrangler("types --include-runtime=false"); + + expect(std.out).toMatchInlineSnapshot(` + " + ⛅️ wrangler x.x.x + ────────────────── + Generating project types... + + declare namespace Cloudflare { + interface StagingEnv { + KV_STAGING: KVNamespace; + ASSETS: Fetcher; + } + interface ProductionEnv { + KV_PROD: KVNamespace; + ASSETS: Fetcher; + } + interface Env { + KV_STAGING?: KVNamespace; + ASSETS: Fetcher; + KV_PROD?: KVNamespace; + } + } + interface Env extends Cloudflare.Env {} + + ──────────────────────────────────────────────────────────── + ✨ Types written to worker-configuration.d.ts + + 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file. + " + `); + }); + + it("should allow inheritable bindings to be overridden in named environments", async ({ + expect, + }) => { + fs.writeFileSync( + "./wrangler.jsonc", + JSON.stringify({ + assets: { + binding: "ASSETS", + directory: "/assets", + }, + env: { + staging: { + assets: { + binding: "STAGING_ASSETS", + directory: "/staging-assets", + }, + }, + production: { + // Uses inherited `ASSETS` binding from top-level + }, + }, + }), + "utf-8" + ); + + await runWrangler("types --include-runtime=false"); + + expect(std.out).toMatchInlineSnapshot(` + " + ⛅️ wrangler x.x.x + ────────────────── + Generating project types... + + declare namespace Cloudflare { + interface StagingEnv { + STAGING_ASSETS: Fetcher; + } + interface ProductionEnv { + ASSETS: Fetcher; + } + interface Env { + STAGING_ASSETS?: Fetcher; + ASSETS?: Fetcher; + } + } + interface Env extends Cloudflare.Env {} + + ──────────────────────────────────────────────────────────── + ✨ Types written to worker-configuration.d.ts + + 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file. + " + `); + }); + + it("should mark inheritable bindings as optional when only defined in some environments", async ({ + expect, + }) => { + fs.writeFileSync( + "./wrangler.jsonc", + JSON.stringify({ + env: { + staging: { + assets: { + binding: "ASSETS", + directory: "/assets", + }, + }, + production: { + kv_namespaces: [ + { + binding: "KV_PROD", + id: "prod-kv", + }, + ], + }, + }, + }), + "utf-8" + ); + + await runWrangler("types --include-runtime=false"); + + expect(std.out).toMatchInlineSnapshot(` + " + ⛅️ wrangler x.x.x + ────────────────── + Generating project types... + + declare namespace Cloudflare { + interface StagingEnv { + ASSETS: Fetcher; + } + interface ProductionEnv { + KV_PROD: KVNamespace; + } + interface Env { + ASSETS?: Fetcher; + KV_PROD?: KVNamespace; + } + } + interface Env extends Cloudflare.Env {} + + ──────────────────────────────────────────────────────────── + ✨ Types written to worker-configuration.d.ts + + 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file. + " + `); + }); + + it("should not inherit top-level inheritable bindings when env defines the property without a binding", async ({ + expect, + }) => { + fs.writeFileSync( + "./wrangler.jsonc", + JSON.stringify({ + assets: { + binding: "ASSETS", + directory: "/assets", + }, + env: { + staging: { + // Defines assets but without a `binding` property - should NOT inherit top-level binding + assets: { + directory: "/staging-assets", + }, + }, + production: { + // Does NOT define `assets` at all - should inherit top-level binding + kv_namespaces: [ + { + binding: "KV_PROD", + id: "prod-kv", + }, + ], + }, + }, + }), + "utf-8" + ); + + await runWrangler("types --include-runtime=false"); + + expect(std.out).toMatchInlineSnapshot(` + " + ⛅️ wrangler x.x.x + ────────────────── + Generating project types... + + declare namespace Cloudflare { + interface StagingEnv {} + interface ProductionEnv { + KV_PROD: KVNamespace; + ASSETS: Fetcher; + } + interface Env { + KV_PROD?: KVNamespace; + ASSETS?: Fetcher; + } + } + interface Env extends Cloudflare.Env {} + + ──────────────────────────────────────────────────────────── + ✨ Types written to worker-configuration.d.ts + + 📣 Remember to rerun 'wrangler types' after you change your wrangler.jsonc file. + " + `); + }); + it("should produce union types for vars with different values across environments", async ({ expect, }) => { diff --git a/packages/wrangler/src/type-generation/index.ts b/packages/wrangler/src/type-generation/index.ts index cddbff968adf..95597b43cc21 100644 --- a/packages/wrangler/src/type-generation/index.ts +++ b/packages/wrangler/src/type-generation/index.ts @@ -2332,6 +2332,53 @@ interface PerEnvBinding { type: string; } +interface InheritableBindingDefinition { + /** + * The category name for this binding (used for identification) + */ + bindingCategory: string; + + /** + * Extract the binding name from the raw environment config + */ + getBindingName: (env: RawEnvironment | undefined) => string | undefined; + + /** + * Check if the environment defines this inheritable property at all. + * + * This is used to determine if inheritance should be skipped, even when + * the environment doesn't define a binding. + * + * For example, if an environment defines `assets: { directory: "/path" }` + * without a `binding`, this method returns `true`, indicating the property + * is defined and inheritance should be skipped. + */ + hasProperty: (env: RawEnvironment | undefined) => boolean; + + /** + * The TypeScript type for this binding + */ + type: string; +} + +/** + * List of bindings that come from inheritable config properties. + * + * These bindings, when defined at the top-level config, are inherited by + * all named environments. + * + * The type generation needs to account for this inheritance when determining + * if a binding should be required or optional in the aggregated `Env` interface. + */ +const INHERITABLE_BINDINGS = [ + { + bindingCategory: "assets", + getBindingName: (env) => env?.assets?.binding, + hasProperty: (env) => env?.assets !== undefined, + type: "Fetcher", + }, +] satisfies InheritableBindingDefinition[]; + /** * Collects vars per environment, returning a map from environment name to vars. * @@ -2823,6 +2870,26 @@ function collectCoreBindingsPerEnvironment( const { rawConfig } = experimental_readRawConfig(args); + const topLevelInheritableBindings: Array<{ + binding: PerEnvBinding; + definition: InheritableBindingDefinition; + }> = []; + for (const inheritableDef of INHERITABLE_BINDINGS) { + const bindingName = inheritableDef.getBindingName(rawConfig); + if (!bindingName) { + continue; + } + + topLevelInheritableBindings.push({ + binding: { + bindingCategory: inheritableDef.bindingCategory, + name: bindingName, + type: inheritableDef.type, + }, + definition: inheritableDef, + }); + } + const topLevelBindings = collectEnvironmentBindings( rawConfig, TOP_LEVEL_ENV_NAME @@ -2833,6 +2900,25 @@ function collectCoreBindingsPerEnvironment( for (const [envName, env] of Object.entries(rawConfig.env ?? {})) { const envBindings = collectEnvironmentBindings(env, envName); + + // Add top-level inheritable bindings if not already present in this environment + // (i.e., the environment doesn't override the inheritable property) + for (const inheritable of topLevelInheritableBindings) { + const alreadyHasBinding = envBindings.some( + (b) => b.bindingCategory === inheritable.binding.bindingCategory + ); + if (alreadyHasBinding) { + continue; + } + + // Skip inheriting if the env defines the property at all (even without a binding) + if (inheritable.definition.hasProperty(env)) { + continue; + } + + envBindings.push(inheritable.binding); + } + if (envBindings.length > 0) { result.set(envName, envBindings); } From 82cc2a8beba2b4a2c5765222858f7eb53c730a98 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Mar 2026 19:18:16 +0000 Subject: [PATCH 6/7] Bump the workerd-and-workers-types group with 2 updates (#12795) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Wrangler automated PR updater --- .changeset/dependabot-update-12795.md | 12 + packages/miniflare/package.json | 2 +- packages/wrangler/package.json | 2 +- pnpm-lock.yaml | 326 +++++++++++++++----------- pnpm-workspace.yaml | 4 +- 5 files changed, 211 insertions(+), 135 deletions(-) create mode 100644 .changeset/dependabot-update-12795.md diff --git a/.changeset/dependabot-update-12795.md b/.changeset/dependabot-update-12795.md new file mode 100644 index 000000000000..eceb8015fd98 --- /dev/null +++ b/.changeset/dependabot-update-12795.md @@ -0,0 +1,12 @@ +--- +"miniflare": patch +"wrangler": patch +--- + +Update dependencies of "miniflare", "wrangler" + +The following dependency versions have been updated: + +| Dependency | From | To | +| ---------- | ------------ | ------------ | +| workerd | 1.20260301.1 | 1.20260306.1 | diff --git a/packages/miniflare/package.json b/packages/miniflare/package.json index 3e04a907edad..f2cfa184a1d0 100644 --- a/packages/miniflare/package.json +++ b/packages/miniflare/package.json @@ -50,7 +50,7 @@ "@cspotcode/source-map-support": "0.8.1", "sharp": "^0.34.5", "undici": "catalog:default", - "workerd": "1.20260301.1", + "workerd": "1.20260306.1", "ws": "catalog:default", "youch": "4.1.0-beta.10" }, diff --git a/packages/wrangler/package.json b/packages/wrangler/package.json index cf64373d32cc..e7bb950ec998 100644 --- a/packages/wrangler/package.json +++ b/packages/wrangler/package.json @@ -73,7 +73,7 @@ "miniflare": "workspace:*", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", - "workerd": "1.20260301.1" + "workerd": "1.20260306.1" }, "devDependencies": { "@aws-sdk/client-s3": "^3.721.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f65d2c104bc4..d5ba71b66337 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,8 +10,8 @@ catalogs: specifier: ^0.10.11 version: 0.10.15 '@cloudflare/workers-types': - specifier: ^4.20260226.1 - version: 4.20260305.0 + specifier: ^4.20260306.1 + version: 4.20260306.1 '@typescript-eslint/eslint-plugin': specifier: ^8.35.1 version: 8.46.3 @@ -172,7 +172,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@fixture/shared': specifier: workspace:* version: link:../shared @@ -223,7 +223,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 ts-dedent: specifier: ^2.2.0 version: 2.2.0 @@ -244,7 +244,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -268,7 +268,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -295,7 +295,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -337,7 +337,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 undici: specifier: catalog:default version: 7.18.2 @@ -352,7 +352,7 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/mimetext': specifier: ^2.0.4 version: 2.0.4 @@ -397,7 +397,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/jest-image-snapshot': specifier: ^6.4.0 version: 6.4.0 @@ -427,7 +427,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 miniflare: specifier: workspace:* version: link:../../packages/miniflare @@ -503,7 +503,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/node': specifier: ^20.19.9 version: 20.19.9 @@ -527,7 +527,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/is-even': specifier: ^1.0.2 version: 1.0.2 @@ -570,7 +570,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -601,7 +601,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/node': specifier: ^20.19.9 version: 20.19.9 @@ -634,7 +634,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 undici: specifier: catalog:default version: 7.18.2 @@ -655,7 +655,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/debug': specifier: 4.1.12 version: 4.1.12 @@ -691,7 +691,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -715,7 +715,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -743,7 +743,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@fixture/pages-plugin': specifier: workspace:* version: link:../pages-plugin-example @@ -770,7 +770,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -815,7 +815,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -839,7 +839,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -863,7 +863,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -881,7 +881,7 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 is-odd: specifier: ^3.0.1 version: 3.0.1 @@ -903,7 +903,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@fixture/pages-plugin': specifier: workspace:* version: link:../pages-plugin-example @@ -972,7 +972,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -996,7 +996,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1200,19 +1200,19 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 fixtures/rules-app: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 fixtures/secrets-store: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 wrangler: specifier: workspace:* version: link:../../packages/wrangler @@ -1239,7 +1239,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/is-even': specifier: ^1.0.2 version: 1.0.2 @@ -1266,7 +1266,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 vitest: specifier: catalog:default version: 3.2.3(@types/debug@4.1.12)(@types/node@20.19.9)(@vitest/ui@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.1) @@ -1281,7 +1281,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 esbuild: specifier: catalog:default version: 0.27.3 @@ -1308,7 +1308,7 @@ importers: version: link:../../packages/vitest-pool-workers '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@microlabs/otel-cf-workers': specifier: 1.0.0-rc.45 version: 1.0.0-rc.45(@opentelemetry/api@1.7.0) @@ -1382,7 +1382,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@fixture/shared': specifier: workspace:* version: link:../shared @@ -1443,7 +1443,7 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 wrangler: specifier: workspace:* version: link:../../packages/wrangler @@ -1458,7 +1458,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 miniflare: specifier: workspace:* version: link:../../packages/miniflare @@ -1512,7 +1512,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 run-script-os: specifier: ^1.1.6 version: 1.1.6 @@ -1539,7 +1539,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1563,7 +1563,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1587,7 +1587,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1611,7 +1611,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1635,7 +1635,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/jest-image-snapshot': specifier: ^6.4.0 version: 6.4.0 @@ -1671,7 +1671,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 playwright-chromium: specifier: catalog:default version: 1.56.1 @@ -1698,7 +1698,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1719,7 +1719,7 @@ importers: version: link:../../packages/eslint-config-shared '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1819,7 +1819,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -1957,7 +1957,7 @@ importers: version: link:../eslint-config-shared '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@octokit/types': specifier: ^13.8.0 version: 13.8.0 @@ -1981,10 +1981,10 @@ importers: version: link:../eslint-config-shared '@cloudflare/vitest-pool-workers': specifier: catalog:default - version: 0.10.15(@cloudflare/workers-types@4.20260305.0)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@3.2.3) + version: 0.10.15(@cloudflare/workers-types@4.20260306.1)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@3.2.3) '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/cookie': specifier: ^0.6.0 version: 0.6.0 @@ -2053,7 +2053,7 @@ importers: version: link:../eslint-config-shared '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 eslint: specifier: catalog:default version: 9.39.1(jiti@2.6.1) @@ -2083,10 +2083,10 @@ importers: version: link:../eslint-config-shared '@cloudflare/vitest-pool-workers': specifier: catalog:default - version: 0.10.15(@cloudflare/workers-types@4.20260305.0)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@2.1.9) + version: 0.10.15(@cloudflare/workers-types@4.20260306.1)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@2.1.9) '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/mime': specifier: ^3.0.4 version: 3.0.4 @@ -2227,8 +2227,8 @@ importers: specifier: catalog:default version: 7.18.2 workerd: - specifier: 1.20260301.1 - version: 1.20260301.1 + specifier: 1.20260306.1 + version: 1.20260306.1 ws: specifier: catalog:default version: 8.18.0 @@ -2256,7 +2256,7 @@ importers: version: link:../workers-shared '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -2437,7 +2437,7 @@ importers: version: link:../eslint-config-shared '@cloudflare/vitest-pool-workers': specifier: catalog:default - version: 0.10.15(@cloudflare/workers-types@4.20260305.0)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@3.2.3) + version: 0.10.15(@cloudflare/workers-types@4.20260306.1)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@3.2.3) '@cloudflare/workers-shared': specifier: workspace:* version: link:../workers-shared @@ -2446,7 +2446,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 concurrently: specifier: ^8.2.2 version: 8.2.2 @@ -2483,7 +2483,7 @@ importers: version: link:../eslint-config-shared '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/cookie': specifier: ^0.6.0 version: 0.6.0 @@ -2523,7 +2523,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/node': specifier: ^20.19.9 version: 20.19.9 @@ -2553,7 +2553,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 esbuild: specifier: catalog:default version: 0.27.3 @@ -2642,7 +2642,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -2726,7 +2726,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2747,7 +2747,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2768,7 +2768,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2789,7 +2789,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2810,7 +2810,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2831,7 +2831,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2852,7 +2852,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2873,7 +2873,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2894,7 +2894,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2915,7 +2915,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2936,7 +2936,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2957,7 +2957,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2978,7 +2978,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2999,7 +2999,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3020,7 +3020,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3041,7 +3041,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3062,7 +3062,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/mimetext': specifier: ^2.0.4 version: 2.0.4 @@ -3095,7 +3095,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3116,7 +3116,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3137,7 +3137,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3158,7 +3158,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3179,7 +3179,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3200,7 +3200,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3221,7 +3221,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@playground/main-resolution-package': specifier: file:./package version: file:packages/vite-plugin-cloudflare/playground/main-resolution/package @@ -3245,7 +3245,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/express': specifier: ^5.0.1 version: 5.0.1 @@ -3272,7 +3272,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@playground/module-resolution-excludes': specifier: file:./packages/excludes version: file:packages/vite-plugin-cloudflare/playground/module-resolution/packages/excludes @@ -3284,7 +3284,7 @@ importers: version: file:packages/vite-plugin-cloudflare/playground/module-resolution/packages/requires '@remix-run/cloudflare': specifier: 2.12.0 - version: 2.12.0(@cloudflare/workers-types@4.20260305.0)(typescript@5.8.3) + version: 2.12.0(@cloudflare/workers-types@4.20260306.1)(typescript@5.8.3) '@types/react': specifier: ^18.3.11 version: 18.3.18 @@ -3317,7 +3317,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3338,7 +3338,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@fixture/shared': specifier: workspace:* version: link:../../../../fixtures/shared @@ -3390,7 +3390,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/react': specifier: 19.1.0 version: 19.1.0 @@ -3411,7 +3411,7 @@ importers: dependencies: partyserver: specifier: ^0.0.64 - version: 0.0.64(@cloudflare/workers-types@4.20260305.0) + version: 0.0.64(@cloudflare/workers-types@4.20260306.1) partysocket: specifier: ^1.0.3 version: 1.0.3 @@ -3430,7 +3430,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@tailwindcss/vite': specifier: ^4.0.15 version: 4.0.15(vite@7.1.12(@types/node@20.19.9)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.1)) @@ -3466,7 +3466,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3487,7 +3487,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../../../workers-utils @@ -3527,7 +3527,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/react': specifier: 19.1.0 version: 19.1.0 @@ -3557,7 +3557,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3578,7 +3578,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3606,7 +3606,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/react': specifier: 19.1.0 version: 19.1.0 @@ -3639,7 +3639,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3660,7 +3660,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3681,7 +3681,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@vitejs/plugin-basic-ssl': specifier: ^2.0.0 version: 2.0.0(vite@7.1.12(@types/node@20.19.9)(jiti@2.6.1)(lightningcss@1.30.2)(tsx@4.21.0)(yaml@2.8.1)) @@ -3705,7 +3705,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3726,7 +3726,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3747,7 +3747,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3768,7 +3768,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3805,7 +3805,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -4032,13 +4032,13 @@ importers: version: link:../eslint-config-shared '@cloudflare/vitest-pool-workers': specifier: catalog:default - version: 0.10.15(@cloudflare/workers-types@4.20260305.0)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@2.1.9) + version: 0.10.15(@cloudflare/workers-types@4.20260306.1)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@2.1.9) '@cloudflare/workers-tsconfig': specifier: workspace:* version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@sentry/cli': specifier: ^2.37.0 version: 2.41.1(encoding@0.1.13) @@ -4149,13 +4149,13 @@ importers: version: link:../eslint-config-shared '@cloudflare/vitest-pool-workers': specifier: catalog:default - version: 0.10.15(@cloudflare/workers-types@4.20260305.0)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@3.2.3) + version: 0.10.15(@cloudflare/workers-types@4.20260306.1)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@3.2.3) '@cloudflare/workers-tsconfig': specifier: workspace:* version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@types/mime': specifier: ^3.0.4 version: 3.0.4 @@ -4196,8 +4196,8 @@ importers: specifier: 2.0.0-rc.24 version: 2.0.0-rc.24 workerd: - specifier: 1.20260301.1 - version: 1.20260301.1 + specifier: 1.20260306.1 + version: 1.20260306.1 optionalDependencies: fsevents: specifier: ~2.3.2 @@ -4232,7 +4232,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260305.0 + version: 4.20260306.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -5304,6 +5304,12 @@ packages: cpu: [x64] os: [darwin] + '@cloudflare/workerd-darwin-64@1.20260306.1': + resolution: {integrity: sha512-+NpKFdxeCdpysFtdqjVu5jhHXBTClyLXqNKw4JTRHO0MTgem0npW6XtAthxINvoSQw3K3rTqDNjxbMOGJfcUug==} + engines: {node: '>=16'} + cpu: [x64] + os: [darwin] + '@cloudflare/workerd-darwin-arm64@1.20251210.0': resolution: {integrity: sha512-Mg8iYIZQFnbevq/ls9eW/eneWTk/EE13Pej1MwfkY5et0jVpdHnvOLywy/o+QtMJFef1AjsqXGULwAneYyBfHw==} engines: {node: '>=16'} @@ -5316,6 +5322,12 @@ packages: cpu: [arm64] os: [darwin] + '@cloudflare/workerd-darwin-arm64@1.20260306.1': + resolution: {integrity: sha512-TVGVZfm87UYeGkNrR8ssHVeU130meA5Gnbm1EHOaycYazNcDqcylA0bEiQsOb3RJyIHdwUGX0EHnoWNCYW9krA==} + engines: {node: '>=16'} + cpu: [arm64] + os: [darwin] + '@cloudflare/workerd-linux-64@1.20251210.0': resolution: {integrity: sha512-kjC2fCZhZ2Gkm1biwk2qByAYpGguK5Gf5ic8owzSCUw0FOUfQxTZUT9Lp3gApxsfTLbbnLBrX/xzWjywH9QR4g==} engines: {node: '>=16'} @@ -5328,6 +5340,12 @@ packages: cpu: [x64] os: [linux] + '@cloudflare/workerd-linux-64@1.20260306.1': + resolution: {integrity: sha512-Vm79Rhg2GFveBcwZcwsS98s4q0EoGtlaT/B5Xaf70iddPACMaQNSTAlz9mhSp/dQMlnY4bvQN5Srnc4X9rdqag==} + engines: {node: '>=16'} + cpu: [x64] + os: [linux] + '@cloudflare/workerd-linux-arm64@1.20251210.0': resolution: {integrity: sha512-2IB37nXi7PZVQLa1OCuO7/6pNxqisRSO8DmCQ5x/3sezI5op1vwOxAcb1osAnuVsVN9bbvpw70HJvhKruFJTuA==} engines: {node: '>=16'} @@ -5340,6 +5358,12 @@ packages: cpu: [arm64] os: [linux] + '@cloudflare/workerd-linux-arm64@1.20260306.1': + resolution: {integrity: sha512-i+6+wlpSQcxna576uXRT0bamJX0lppQmLkXDBJs5daMsINri58qa5cc9bt8tKQt6thO5kJ1vRZUkyKnHcUCCoQ==} + engines: {node: '>=16'} + cpu: [arm64] + os: [linux] + '@cloudflare/workerd-windows-64@1.20251210.0': resolution: {integrity: sha512-Uaz6/9XE+D6E7pCY4OvkCuJHu7HcSDzeGcCGY1HLhojXhHd7yL52c3yfiyJdS8hPatiAa0nn5qSI/42+aTdDSw==} engines: {node: '>=16'} @@ -5352,6 +5376,12 @@ packages: cpu: [x64] os: [win32] + '@cloudflare/workerd-windows-64@1.20260306.1': + resolution: {integrity: sha512-3Nro0uFHFnx0GLdb2RzA+wWXDDKkcTYvcWygQa9VHRooeVwhbf1Za2qrwtUWoji+tnFaptyf8IDbdrfagDSdIA==} + engines: {node: '>=16'} + cpu: [x64] + os: [win32] + '@cloudflare/workers-editor-shared@0.1.1': resolution: {integrity: sha512-tk7dZ3rj61o8oPL2JIfJbjAldBOJZNHHIWlkfY5X5ftw7QhAIccACz4zW7LFcMyw6HHexmHhIPlcdENqqnp28w==} peerDependencies: @@ -5360,8 +5390,8 @@ packages: react: ^17.0.2 || ^18.2.21 react-dom: ^17.0.2 || ^18.2.21 - '@cloudflare/workers-types@4.20260305.0': - resolution: {integrity: sha512-sCgPFnQ03SVpC2OVW8wysONLZW/A8hlp9Mq2ckG/h1oId4kr9NawA6vUiOmOjCWRn2hIohejBYVQ+Vu20rCdKA==} + '@cloudflare/workers-types@4.20260306.1': + resolution: {integrity: sha512-1gtiB0nm0Uji6VKHprvL1ZyFtdHZSR907lU2fbBioMurJAF4tQPoafJFJp4oeViUiMVUEqkp0Eh0dcbcKoHoow==} '@codemirror/autocomplete@6.20.0': resolution: {integrity: sha512-bOwvTOIJcG5FVo5gUUupiwYh8MioPLQ4UcqbcRf7UQ98X90tCa9E1kZ3Z7tqwpZxYyOvh1YTYbmZE9RTfTp5hg==} @@ -11056,6 +11086,9 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + flatted@3.3.4: + resolution: {integrity: sha512-3+mMldrTAPdta5kjX2G2J7iX4zxtnwpdA8Tr2ZSjkyPSanvbZAcy6flmtnXbEybHrDcU9641lxrMfFuUxVz9vA==} + for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} @@ -15236,6 +15269,11 @@ packages: engines: {node: '>=16'} hasBin: true + workerd@1.20260306.1: + resolution: {integrity: sha512-FeZAijrCXpuFvnZbxht/sAnU9NGq4S7/hG9thOInqJovaAgq8y/OPZ11JGKMkuSC9sLoeS1aOh5ZxhUDP5HEDg==} + engines: {node: '>=16'} + hasBin: true + wrangler@4.54.0: resolution: {integrity: sha512-bANFsjDwJLbprYoBK+hUDZsVbUv2SqJd8QvArLIcZk+fPq4h/Ohtj5vkKXD3k0s2bD1DXLk08D+hYmeNH+xC6A==} engines: {node: '>=20.0.0'} @@ -16753,7 +16791,7 @@ snapshots: lodash.memoize: 4.1.2 marked: 0.3.19 - '@cloudflare/vitest-pool-workers@0.10.15(@cloudflare/workers-types@4.20260305.0)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@2.1.9)': + '@cloudflare/vitest-pool-workers@0.10.15(@cloudflare/workers-types@4.20260306.1)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@2.1.9)': dependencies: '@vitest/runner': 3.2.3 '@vitest/snapshot': 3.2.3 @@ -16763,14 +16801,14 @@ snapshots: miniflare: 4.20251210.0 semver: 7.7.3 vitest: 2.1.9(@types/node@20.19.9)(@vitest/ui@2.1.9)(lightningcss@1.30.2)(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3)) - wrangler: 4.54.0(@cloudflare/workers-types@4.20260305.0) + wrangler: 4.54.0(@cloudflare/workers-types@4.20260306.1) zod: 3.25.76 transitivePeerDependencies: - '@cloudflare/workers-types' - bufferutil - utf-8-validate - '@cloudflare/vitest-pool-workers@0.10.15(@cloudflare/workers-types@4.20260305.0)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@3.2.3)': + '@cloudflare/vitest-pool-workers@0.10.15(@cloudflare/workers-types@4.20260306.1)(@vitest/runner@3.2.3)(@vitest/snapshot@3.2.3)(vitest@3.2.3)': dependencies: '@vitest/runner': 3.2.3 '@vitest/snapshot': 3.2.3 @@ -16780,7 +16818,7 @@ snapshots: miniflare: 4.20251210.0 semver: 7.7.3 vitest: 3.2.3(@types/debug@4.1.12)(@types/node@20.19.9)(@vitest/ui@3.2.3)(jiti@2.6.1)(lightningcss@1.30.2)(msw@2.12.0(@types/node@20.19.9)(typescript@5.9.3))(tsx@4.21.0)(yaml@2.8.1) - wrangler: 4.54.0(@cloudflare/workers-types@4.20260305.0) + wrangler: 4.54.0(@cloudflare/workers-types@4.20260306.1) zod: 3.25.76 transitivePeerDependencies: - '@cloudflare/workers-types' @@ -16793,30 +16831,45 @@ snapshots: '@cloudflare/workerd-darwin-64@1.20260301.1': optional: true + '@cloudflare/workerd-darwin-64@1.20260306.1': + optional: true + '@cloudflare/workerd-darwin-arm64@1.20251210.0': optional: true '@cloudflare/workerd-darwin-arm64@1.20260301.1': optional: true + '@cloudflare/workerd-darwin-arm64@1.20260306.1': + optional: true + '@cloudflare/workerd-linux-64@1.20251210.0': optional: true '@cloudflare/workerd-linux-64@1.20260301.1': optional: true + '@cloudflare/workerd-linux-64@1.20260306.1': + optional: true + '@cloudflare/workerd-linux-arm64@1.20251210.0': optional: true '@cloudflare/workerd-linux-arm64@1.20260301.1': optional: true + '@cloudflare/workerd-linux-arm64@1.20260306.1': + optional: true + '@cloudflare/workerd-windows-64@1.20251210.0': optional: true '@cloudflare/workerd-windows-64@1.20260301.1': optional: true + '@cloudflare/workerd-windows-64@1.20260306.1': + optional: true + '@cloudflare/workers-editor-shared@0.1.1(@cloudflare/style-const@6.1.3(react@19.2.4))(@cloudflare/style-container@7.12.2(@cloudflare/style-const@6.1.3(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)': dependencies: '@cloudflare/style-const': 6.1.3(react@19.2.4) @@ -16825,7 +16878,7 @@ snapshots: react-dom: 19.2.4(react@19.2.4) react-split-pane: 0.1.92(react-dom@19.2.4(react@19.2.4))(react@19.2.4) - '@cloudflare/workers-types@4.20260305.0': {} + '@cloudflare/workers-types@4.20260306.1': {} '@codemirror/autocomplete@6.20.0': dependencies: @@ -18336,7 +18389,7 @@ snapshots: '@prisma/adapter-d1@7.0.1': dependencies: - '@cloudflare/workers-types': 4.20260305.0 + '@cloudflare/workers-types': 4.20260306.1 '@prisma/driver-adapter-utils': 7.0.1 ky: 1.7.5 @@ -18563,10 +18616,10 @@ snapshots: optionalDependencies: '@types/react': 18.3.3 - '@remix-run/cloudflare@2.12.0(@cloudflare/workers-types@4.20260305.0)(typescript@5.8.3)': + '@remix-run/cloudflare@2.12.0(@cloudflare/workers-types@4.20260306.1)(typescript@5.8.3)': dependencies: '@cloudflare/kv-asset-handler': 0.1.3 - '@cloudflare/workers-types': 4.20260305.0 + '@cloudflare/workers-types': 4.20260306.1 '@remix-run/server-runtime': 2.12.0(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -20472,7 +20525,7 @@ snapshots: dependencies: '@vitest/utils': 2.1.9 fflate: 0.8.2 - flatted: 3.3.3 + flatted: 3.3.4 pathe: 1.1.2 sirv: 3.0.2 tinyglobby: 0.2.15 @@ -22812,6 +22865,9 @@ snapshots: flatted@3.3.3: {} + flatted@3.3.4: + optional: true + for-each@0.3.5: dependencies: is-callable: 1.2.7 @@ -24555,9 +24611,9 @@ snapshots: parseurl@1.3.3: {} - partyserver@0.0.64(@cloudflare/workers-types@4.20260305.0): + partyserver@0.0.64(@cloudflare/workers-types@4.20260306.1): dependencies: - '@cloudflare/workers-types': 4.20260305.0 + '@cloudflare/workers-types': 4.20260306.1 nanoid: 5.1.0 partysocket@1.0.3: @@ -27531,7 +27587,15 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20260301.1 '@cloudflare/workerd-windows-64': 1.20260301.1 - wrangler@4.54.0(@cloudflare/workers-types@4.20260305.0): + workerd@1.20260306.1: + optionalDependencies: + '@cloudflare/workerd-darwin-64': 1.20260306.1 + '@cloudflare/workerd-darwin-arm64': 1.20260306.1 + '@cloudflare/workerd-linux-64': 1.20260306.1 + '@cloudflare/workerd-linux-arm64': 1.20260306.1 + '@cloudflare/workerd-windows-64': 1.20260306.1 + + wrangler@4.54.0(@cloudflare/workers-types@4.20260306.1): dependencies: '@cloudflare/kv-asset-handler': 0.4.1 '@cloudflare/unenv-preset': 2.7.13(unenv@2.0.0-rc.24)(workerd@1.20251210.0) @@ -27542,7 +27606,7 @@ snapshots: unenv: 2.0.0-rc.24 workerd: 1.20251210.0 optionalDependencies: - '@cloudflare/workers-types': 4.20260305.0 + '@cloudflare/workers-types': 4.20260306.1 fsevents: 2.3.3 transitivePeerDependencies: - bufferutil diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e5123b037210..ade204321fcc 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -32,8 +32,8 @@ catalog: "ws": "8.18.0" esbuild: "0.27.3" playwright-chromium: "^1.56.1" - "@cloudflare/workers-types": "^4.20260226.1" - workerd: "1.20260301.1" + "@cloudflare/workers-types": "^4.20260306.1" + workerd: "1.20260306.1" eslint: "^9.39.1" jsonc-parser: "^3.2.0" smol-toml: "^1.5.2" From e3beb2edaa11d093457b7e0cb1969ba695f39175 Mon Sep 17 00:00:00 2001 From: Pete Bacon Darwin Date: Fri, 6 Mar 2026 19:21:27 +0000 Subject: [PATCH 7/7] Remove temporary block on Worker/Pages deployment changesets (#12791) --- .../__tests__/validate-changesets.test.ts | 11 ----------- tools/deployments/validate-changesets.ts | 18 ------------------ 2 files changed, 29 deletions(-) diff --git a/tools/deployments/__tests__/validate-changesets.test.ts b/tools/deployments/__tests__/validate-changesets.test.ts index b8f17b61c18b..7d18322eebd5 100644 --- a/tools/deployments/__tests__/validate-changesets.test.ts +++ b/tools/deployments/__tests__/validate-changesets.test.ts @@ -94,7 +94,6 @@ describe("validateChangesets()", () => { ["package-a", { name: "package-a" }], ["package-b", { name: "package-b" }], ["package-c", { name: "package-c" }], - ["package-d", { name: "package-d", "workers-sdk": { deploy: true } }], ]), [ { @@ -152,15 +151,6 @@ describe("validateChangesets()", () => { docs: test`, }, - { - file: "deployable-package.md", - contents: dedent` - --- - "package-d": patch - --- - - fix: test`, - }, ] ); expect(errors).toMatchInlineSnapshot(` @@ -168,7 +158,6 @@ describe("validateChangesets()", () => { "Error: could not parse changeset - invalid frontmatter: at file "invalid-frontmatter.md"", "Unknown package name "package-invalid" in changeset at "invalid-package.md".", "Invalid type "foo" for package "package-a" in changeset at "invalid-type.md".", - "Currently we are not allowing changes to package "package-d" in changeset at "deployable-package.md" since it would trigger a Worker/Pages deployment.", ] `); }); diff --git a/tools/deployments/validate-changesets.ts b/tools/deployments/validate-changesets.ts index d03d7101cffa..63f2f33d86d4 100644 --- a/tools/deployments/validate-changesets.ts +++ b/tools/deployments/validate-changesets.ts @@ -30,24 +30,6 @@ export function validateChangesets( ); } - // TEMPORARILY BLOCK PACKAGES THAT WOULD DEPLOY WORKERS - const ALLOWED_PRIVATE_PACKAGES = [ - "@cloudflare/workers-shared", - "@cloudflare/quick-edit", - "@cloudflare/devprod-status-bot", - "@cloudflare/workers-playground", - ]; - if ( - packages.get(release.name)?.["workers-sdk"]?.deploy && - // Exception: deployments for these workers are allowed now - !ALLOWED_PRIVATE_PACKAGES.includes(release.name) - ) { - errors.push( - `Currently we are not allowing changes to package "${release.name}" in changeset at "${file}" since it would trigger a Worker/Pages deployment.` - ); - } - // END TEMPORARILY BLOCK PACKAGES THAT WOULD DEPLOY WORKERS - if (release.type === "major") { errors.push( `Major version bumps are not allowed for package "${release.name}" in changeset at "${file}".`