diff --git a/.changeset/dependabot-update-13993.md b/.changeset/dependabot-update-13993.md new file mode 100644 index 0000000000..025beb1d8f --- /dev/null +++ b/.changeset/dependabot-update-13993.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.20260520.1 | 1.20260521.1 | diff --git a/.changeset/include-column-names-d1-export.md b/.changeset/include-column-names-d1-export.md new file mode 100644 index 0000000000..8afd2008c1 --- /dev/null +++ b/.changeset/include-column-names-d1-export.md @@ -0,0 +1,7 @@ +--- +"wrangler": patch +--- + +Include column names in D1 SQL export INSERT statements + +D1 SQL exports now include column names in INSERT statements (e.g., `INSERT INTO "table" ("col1","col2") VALUES(...)`). This ensures that exported SQL can be successfully imported even when the target table has columns in a different order than the original, which commonly occurs during iterative development when schemas evolve. diff --git a/.changeset/workflows-schedule.md b/.changeset/workflows-schedule.md new file mode 100644 index 0000000000..91e780b247 --- /dev/null +++ b/.changeset/workflows-schedule.md @@ -0,0 +1,40 @@ +--- +"wrangler": minor +--- + +Add `schedule` property to Workflow bindings for cron-based triggering + +> **Note:** This is a configuration-only change. Scheduled triggering of Workflow instances is not yet available — adding `schedule` to a Workflow binding will not result in scheduled invocations at this time. This change lays the groundwork for an upcoming feature. + +Workflow bindings in `wrangler.json` now accept an optional `schedule` field that configures one or more cron expressions to automatically trigger new workflow instances on a schedule. + +```jsonc +// wrangler.json +{ + "workflows": [ + { + "binding": "MY_WORKFLOW", + "name": "my-workflow", + "class_name": "MyWorkflow", + "schedule": "0 9 * * 1", + }, + ], +} +``` + +Multiple schedules can be provided as an array: + +```jsonc +{ + "workflows": [ + { + "binding": "MY_WORKFLOW", + "name": "my-workflow", + "class_name": "MyWorkflow", + "schedule": ["0 9 * * 1", "0 17 * * 5"], + }, + ], +} +``` + +The schedule is sent to the Workflows control plane on `wrangler deploy`. Configuring `schedule` on a workflow binding that references an external `script_name` is an error — the schedule must be configured on the worker that defines the workflow. diff --git a/.github/workflows/dependabot-auto-merge.yml b/.github/workflows/dependabot-auto-merge.yml new file mode 100644 index 0000000000..157a9afa0d --- /dev/null +++ b/.github/workflows/dependabot-auto-merge.yml @@ -0,0 +1,138 @@ +name: "Dependabot - auto-merge workerd updates" + +# workerd ships a release every weekday, so the workerd-and-workers-types +# Dependabot group produces a steady stream of mechanical PRs that bump +# `workerd`, `@cloudflare/workers-types`, and miniflare's pinned version in +# lockstep (see .github/dependabot.yml). When CI is green these PRs require +# no human review, so we enable GitHub auto-merge on them — required status +# checks remain the gate, and a failing build still parks the PR for a human. +# +# Security model: this workflow effectively bypasses the human-review +# requirement on PRs whose head branch matches the Dependabot naming pattern, +# so we have to be paranoid about exactly what we're auto-merging. Before +# enabling auto-merge we verify that the PR contains exactly the two commits +# we expect (one from Dependabot, one from `miniflare-dependabot-versioning-prs.yml`) +# and that nothing outside the expected fileset has been touched. If any +# subsequent push violates those invariants we actively *disable* auto-merge, +# so a maintainer pushing a follow-up commit cancels rather than rides the +# auto-merge. +# +# DO NOT add `actions/checkout` to this workflow — `pull_request_target` +# grants write-scoped tokens, and checking out PR-controlled code with +# those tokens is the standard pwn vector. + +on: + pull_request_target: + types: [opened, reopened, synchronize, ready_for_review] + +permissions: + contents: write + pull-requests: write + +jobs: + enable-auto-merge: + if: github.event.pull_request.user.login == 'dependabot[bot]' + runs-on: ubuntu-slim + steps: + - name: Fetch Dependabot metadata + id: meta + uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7 # v2.3.0 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Verify PR matches expected workerd-bump shape + id: verify + if: steps.meta.outputs.dependency-group == 'workerd-and-workers-types' + env: + PR_NUMBER: ${{ github.event.pull_request.number }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + set -euo pipefail + + # Pull commits and changed files via the GitHub API. + commits_json=$(gh pr view "$PR_NUMBER" --json commits) + files_json=$(gh pr view "$PR_NUMBER" --json files) + + fail() { + echo "verified=false" >> "$GITHUB_OUTPUT" + echo "reason=$1" >> "$GITHUB_OUTPUT" + echo "::warning::Refusing to enable auto-merge: $1" + exit 0 + } + + # --- Commit shape --------------------------------------------------- + # Expected: exactly two commits. + # 1. dependabot[bot] author, with a verified GitHub signature. + # 2. The changeset commit pushed by miniflare-dependabot-versioning-prs.yml, + # authored as `Wrangler automated PR updater `. + # + # We can't require a signature on the second commit (it's pushed via + # GH_ACCESS_TOKEN, which doesn't sign), so we lean on path/content + # checks below to constrain what that commit can do. + + commit_count=$(echo "$commits_json" | jq '.commits | length') + if [ "$commit_count" -ne 2 ]; then + fail "expected exactly 2 commits, found $commit_count" + fi + + first_author=$(echo "$commits_json" | jq -r '.commits[0].authors[0].login') + first_oid=$(echo "$commits_json" | jq -r '.commits[0].oid') + if [ "$first_author" != "dependabot[bot]" ]; then + fail "first commit author is '$first_author', expected 'dependabot[bot]'" + fi + + # `gh pr view --json commits` doesn't expose signature info, so look + # it up via the REST commit endpoint. + first_verified=$(gh api "repos/${{ github.repository }}/commits/$first_oid" --jq '.commit.verification.verified') + if [ "$first_verified" != "true" ]; then + fail "first commit (Dependabot) does not have a verified signature" + fi + + second_email=$(echo "$commits_json" | jq -r '.commits[1].authors[0].email // ""') + second_message=$(echo "$commits_json" | jq -r '.commits[1].messageHeadline // ""') + if [ "$second_email" != "wrangler@cloudflare.com" ]; then + fail "second commit author email is '$second_email', expected 'wrangler@cloudflare.com'" + fi + if ! echo "$second_message" | grep -qE '^Update dependencies of '; then + fail "second commit message '$second_message' does not match expected changeset commit shape" + fi + + # --- Changed files allowlist --------------------------------------- + # The only paths a workerd bump should touch: + # - .changeset/dependabot-update-*.md (added by the changeset job) + # - packages/*/package.json (workerd, workers-types pins) + # - pnpm-lock.yaml + # - pnpm-workspace.yaml (catalog entries) + allowed='^(\.changeset/dependabot-update-.*\.md|packages/[^/]+/package\.json|pnpm-lock\.yaml|pnpm-workspace\.yaml)$' + + unexpected=$(echo "$files_json" | jq -r '.files[].path' | grep -vE "$allowed" || true) + if [ -n "$unexpected" ]; then + fail "PR touches unexpected files:$(echo "$unexpected" | sed 's/^/ /' | tr '\n' ',')" + fi + + # Make sure the changeset is actually present — the changeset job + # may not have run yet, in which case we bail and wait for the + # `synchronize` event from its push. + if ! echo "$files_json" | jq -e '.files[] | select(.path | startswith(".changeset/dependabot-update-"))' > /dev/null; then + fail "changeset file not yet present; waiting for changeset job to push it" + fi + + echo "verified=true" >> "$GITHUB_OUTPUT" + + - name: Enable auto-merge + if: steps.meta.outputs.dependency-group == 'workerd-and-workers-types' && steps.verify.outputs.verified == 'true' + run: gh pr merge --auto --squash "$PR_URL" + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Disable auto-merge if verification failed + # If a previous run enabled auto-merge but a later push broke the + # invariants, actively cancel auto-merge so the bad commit can't ride. + # `gh pr merge --disable-auto` is a no-op (and exits 0) if auto-merge + # was never enabled, so this is safe to always run on the failure path. + if: always() && steps.meta.outputs.dependency-group == 'workerd-and-workers-types' && steps.verify.outputs.verified != 'true' + run: gh pr merge --disable-auto "$PR_URL" || true + env: + PR_URL: ${{ github.event.pull_request.html_url }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/packages/miniflare/package.json b/packages/miniflare/package.json index c65bcb79b8..d180350d31 100644 --- a/packages/miniflare/package.json +++ b/packages/miniflare/package.json @@ -52,7 +52,7 @@ "@cspotcode/source-map-support": "0.8.1", "sharp": "^0.34.5", "undici": "catalog:default", - "workerd": "1.20260520.1", + "workerd": "1.20260521.1", "ws": "catalog:default", "youch": "4.1.0-beta.10" }, diff --git a/packages/miniflare/src/workers/d1/dumpSql.ts b/packages/miniflare/src/workers/d1/dumpSql.ts index 2a027f8677..8624e5a979 100644 --- a/packages/miniflare/src/workers/d1/dumpSql.ts +++ b/packages/miniflare/src/workers/d1/dumpSql.ts @@ -5,6 +5,23 @@ // as possible, with any deviations noted. import type { SqlStorage } from "@cloudflare/workers-types/experimental"; +/** Stats tracking for dumpSql. Will be mutated in place if provided. */ +export interface DumpSqlStats { + rows_read: number; + rows_written: number; + // Stats for tracking INSERT statement sizes (column names are always included) + /** Number of INSERT statements over 100KB (current size, with column names) */ + inserts_over_100kb_with_column_names: number; + /** Number of INSERT statements that would be over 100KB without column names (for backward comparison) */ + inserts_already_over_100kb: number; + /** Total number of INSERT statements generated */ + total_inserts: number; + /** Maximum INSERT statement size without column names (hypothetical, for backward comparison) */ + max_insert_size: number; + /** Maximum INSERT statement size (current size, with column names) */ + max_insert_size_with_column_names: number; +} + export function* dumpSql( db: SqlStorage, options?: { @@ -13,7 +30,7 @@ export function* dumpSql( tables?: string[]; }, /** Optional stats tracking. Will be mutated in place if provided */ - stats?: { rows_read: number; rows_written: number } + stats?: DumpSqlStats ) { // WARNING: the caller in D1 assumes non-empty exports, so think carefully before removing this initial yield. yield `PRAGMA defer_foreign_keys=TRUE;`; @@ -83,6 +100,9 @@ export function* dumpSql( const select = `SELECT ${columns.map((c) => escapeId(c.name)).join(", ")} FROM ${escapeId(table)};`; const rows_cursor = db.exec(select); + const columnNames = columns.map((c) => escapeId(c.name)).join(","); + // The column names portion is: " (" + columnNames + ")" = 3 + columnNames.length + const columnNamesOverhead = 3 + columnNames.length; for (const dataRow of rows_cursor.raw()) { const formattedCells = dataRow.map((cell: unknown, i: number) => { const colType = columns[i].type; @@ -109,7 +129,31 @@ export function* dumpSql( } }); - yield `INSERT INTO ${escapeId(table)} VALUES(${formattedCells.join(",")});`; + const insertStmt = `INSERT INTO ${escapeId(table)} (${columnNames}) VALUES(${formattedCells.join(",")});`; + + // Track stats for INSERT statement sizes + if (stats) { + const currentSize = insertStmt.length; + // Calculate what the size would be without column names (for comparison) + const sizeWithoutColumnNames = currentSize - columnNamesOverhead; + const LIMIT = 100 * 1024; // 100KB + + stats.total_inserts++; + if (sizeWithoutColumnNames > LIMIT) { + stats.inserts_already_over_100kb++; + } + if (currentSize > LIMIT) { + stats.inserts_over_100kb_with_column_names++; + } + if (sizeWithoutColumnNames > stats.max_insert_size) { + stats.max_insert_size = sizeWithoutColumnNames; + } + if (currentSize > stats.max_insert_size_with_column_names) { + stats.max_insert_size_with_column_names = currentSize; + } + } + + yield insertStmt; } if (stats) { stats.rows_read += rows_cursor.rowsRead; diff --git a/packages/workers-utils/src/config/environment.ts b/packages/workers-utils/src/config/environment.ts index f5577461aa..c309049a65 100644 --- a/packages/workers-utils/src/config/environment.ts +++ b/packages/workers-utils/src/config/environment.ts @@ -728,6 +728,8 @@ export type WorkflowBinding = { /** Maximum number of steps a Workflow instance can execute */ steps?: number; }; + /** Optional cron schedule(s) for automatically triggering workflow instances */ + schedule?: string | string[]; }; /** diff --git a/packages/workers-utils/src/config/validation.ts b/packages/workers-utils/src/config/validation.ts index 9774be5620..410a61b1b3 100644 --- a/packages/workers-utils/src/config/validation.ts +++ b/packages/workers-utils/src/config/validation.ts @@ -2699,6 +2699,43 @@ const validateWorkflowBinding: ValidatorFn = (diagnostics, field, value) => { isValid = false; } + if (hasProperty(value, "schedule") && value.schedule !== undefined) { + if (typeof value.schedule === "string") { + if (value.schedule.length === 0) { + diagnostics.errors.push( + `"${field}" bindings "schedule" field must not be an empty string.` + ); + isValid = false; + } + } else if (Array.isArray(value.schedule)) { + if (value.schedule.length === 0) { + diagnostics.errors.push( + `"${field}" bindings "schedule" field must not be an empty array.` + ); + isValid = false; + } else if (!value.schedule.every((s: unknown) => typeof s === "string")) { + diagnostics.errors.push( + `"${field}" bindings should, optionally, have a string or array of strings "schedule" field but got ${JSON.stringify( + value + )}.` + ); + isValid = false; + } else if (value.schedule.some((s: unknown) => s === "")) { + diagnostics.errors.push( + `"${field}" bindings "schedule" field must not contain empty strings.` + ); + isValid = false; + } + } else { + diagnostics.errors.push( + `"${field}" bindings should, optionally, have a string or array of strings "schedule" field but got ${JSON.stringify( + value + )}.` + ); + isValid = false; + } + } + if (hasProperty(value, "limits") && value.limits !== undefined) { if ( typeof value.limits !== "object" || @@ -2747,6 +2784,7 @@ const validateWorkflowBinding: ValidatorFn = (diagnostics, field, value) => { "script_name", "remote", "limits", + "schedule", ]); return isValid; diff --git a/packages/workers-utils/src/worker.ts b/packages/workers-utils/src/worker.ts index 06925fe971..f9604abd6d 100644 --- a/packages/workers-utils/src/worker.ts +++ b/packages/workers-utils/src/worker.ts @@ -192,6 +192,7 @@ export interface CfWorkflow { limits?: { steps?: number; }; + schedule?: string | string[]; } export interface CfQueue { diff --git a/packages/workers-utils/tests/config/validation/normalize-and-validate-config.test.ts b/packages/workers-utils/tests/config/validation/normalize-and-validate-config.test.ts index 578ddb15b6..946e0e8b2c 100644 --- a/packages/workers-utils/tests/config/validation/normalize-and-validate-config.test.ts +++ b/packages/workers-utils/tests/config/validation/normalize-and-validate-config.test.ts @@ -5204,6 +5204,52 @@ describe("normalizeAndValidateConfig()", () => { expect(diagnostics.hasWarnings()).toBe(false); }); + it("should accept valid workflow bindings with schedule as a string", ({ + expect, + }) => { + const { diagnostics } = normalizeAndValidateConfig( + { + workflows: [ + { + binding: "MY_WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + schedule: "*/5 * * * *", + }, + ], + } as unknown as RawConfig, + undefined, + undefined, + { env: undefined } + ); + + expect(diagnostics.hasErrors()).toBe(false); + expect(diagnostics.hasWarnings()).toBe(false); + }); + + it("should accept valid workflow bindings with schedule as an array of strings", ({ + expect, + }) => { + const { diagnostics } = normalizeAndValidateConfig( + { + workflows: [ + { + binding: "MY_WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + schedule: ["*/5 * * * *", "0 9 * * 1"], + }, + ], + } as unknown as RawConfig, + undefined, + undefined, + { env: undefined } + ); + + expect(diagnostics.hasErrors()).toBe(false); + expect(diagnostics.hasWarnings()).toBe(false); + }); + it("should error if workflow bindings are not valid", ({ expect }) => { const { diagnostics } = normalizeAndValidateConfig( { @@ -5284,6 +5330,130 @@ describe("normalizeAndValidateConfig()", () => { `); }); + it("should error if schedule has wrong type", ({ expect }) => { + const { diagnostics } = normalizeAndValidateConfig( + { + workflows: [ + { + binding: "MY_WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + schedule: 123, + }, + ], + } as unknown as RawConfig, + undefined, + undefined, + { env: undefined } + ); + + expect(diagnostics.hasErrors()).toBe(true); + expect(diagnostics.renderErrors()).toMatchInlineSnapshot(` + "Processing wrangler configuration: + - "workflows[0]" bindings should, optionally, have a string or array of strings "schedule" field but got {"binding":"MY_WORKFLOW","name":"my-workflow","class_name":"MyWorkflow","schedule":123}." + `); + }); + + it("should error if schedule is an empty string", ({ expect }) => { + const { diagnostics } = normalizeAndValidateConfig( + { + workflows: [ + { + binding: "MY_WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + schedule: "", + }, + ], + } as unknown as RawConfig, + undefined, + undefined, + { env: undefined } + ); + + expect(diagnostics.hasErrors()).toBe(true); + expect(diagnostics.renderErrors()).toMatchInlineSnapshot(` + "Processing wrangler configuration: + - "workflows[0]" bindings "schedule" field must not be an empty string." + `); + }); + + it("should error if schedule is an empty array", ({ expect }) => { + const { diagnostics } = normalizeAndValidateConfig( + { + workflows: [ + { + binding: "MY_WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + schedule: [], + }, + ], + } as unknown as RawConfig, + undefined, + undefined, + { env: undefined } + ); + + expect(diagnostics.hasErrors()).toBe(true); + expect(diagnostics.renderErrors()).toMatchInlineSnapshot(` + "Processing wrangler configuration: + - "workflows[0]" bindings "schedule" field must not be an empty array." + `); + }); + + it("should error if schedule is an array containing non-strings", ({ + expect, + }) => { + const { diagnostics } = normalizeAndValidateConfig( + { + workflows: [ + { + binding: "MY_WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + schedule: ["*/5 * * * *", 123], + }, + ], + } as unknown as RawConfig, + undefined, + undefined, + { env: undefined } + ); + + expect(diagnostics.hasErrors()).toBe(true); + expect(diagnostics.renderErrors()).toMatchInlineSnapshot(` + "Processing wrangler configuration: + - "workflows[0]" bindings should, optionally, have a string or array of strings "schedule" field but got {"binding":"MY_WORKFLOW","name":"my-workflow","class_name":"MyWorkflow","schedule":["*/5 * * * *",123]}." + `); + }); + + it("should error if schedule is an array containing empty strings", ({ + expect, + }) => { + const { diagnostics } = normalizeAndValidateConfig( + { + workflows: [ + { + binding: "MY_WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + schedule: ["*/5 * * * *", ""], + }, + ], + } as unknown as RawConfig, + undefined, + undefined, + { env: undefined } + ); + + expect(diagnostics.hasErrors()).toBe(true); + expect(diagnostics.renderErrors()).toMatchInlineSnapshot(` + "Processing wrangler configuration: + - "workflows[0]" bindings "schedule" field must not contain empty strings." + `); + }); + it("should error if limits is not an object", ({ expect }) => { const { diagnostics } = normalizeAndValidateConfig( { diff --git a/packages/wrangler/package.json b/packages/wrangler/package.json index cd722c66e6..e71fe13f2b 100644 --- a/packages/wrangler/package.json +++ b/packages/wrangler/package.json @@ -72,7 +72,7 @@ "miniflare": "workspace:*", "path-to-regexp": "6.3.0", "unenv": "2.0.0-rc.24", - "workerd": "1.20260520.1" + "workerd": "1.20260521.1" }, "devDependencies": { "@aws-sdk/client-s3": "^3.721.0", diff --git a/packages/wrangler/src/__tests__/d1/export.test.ts b/packages/wrangler/src/__tests__/d1/export.test.ts index c52818e18d..6c73b3df99 100644 --- a/packages/wrangler/src/__tests__/d1/export.test.ts +++ b/packages/wrangler/src/__tests__/d1/export.test.ts @@ -73,14 +73,14 @@ describe("export", () => { const create_foo = "CREATE TABLE foo(id INTEGER PRIMARY KEY, value TEXT);"; const create_bar = "CREATE TABLE bar(id INTEGER PRIMARY KEY, value TEXT);"; const insert_foo = [ - `INSERT INTO "foo" VALUES(1,'xxx');`, - `INSERT INTO "foo" VALUES(2,'yyy');`, - `INSERT INTO "foo" VALUES(3,'zzz');`, + `INSERT INTO "foo" ("id","value") VALUES(1,'xxx');`, + `INSERT INTO "foo" ("id","value") VALUES(2,'yyy');`, + `INSERT INTO "foo" ("id","value") VALUES(3,'zzz');`, ]; const insert_bar = [ - `INSERT INTO "bar" VALUES(1,'aaa');`, - `INSERT INTO "bar" VALUES(2,'bbb');`, - `INSERT INTO "bar" VALUES(3,'ccc');`, + `INSERT INTO "bar" ("id","value") VALUES(1,'aaa');`, + `INSERT INTO "bar" ("id","value") VALUES(2,'bbb');`, + `INSERT INTO "bar" ("id","value") VALUES(3,'ccc');`, ]; // Full export @@ -311,13 +311,13 @@ describe("export", () => { [ "PRAGMA defer_foreign_keys=TRUE;", "CREATE TABLE foo(id INTEGER PRIMARY KEY, value TEXT);", - "INSERT INTO \"foo\" VALUES(1,'xxx');", - "INSERT INTO \"foo\" VALUES(2,'yyy');", - "INSERT INTO \"foo\" VALUES(3,'zzz');", + 'INSERT INTO "foo" ("id","value") VALUES(1,\'xxx\');', + 'INSERT INTO "foo" ("id","value") VALUES(2,\'yyy\');', + 'INSERT INTO "foo" ("id","value") VALUES(3,\'zzz\');', "CREATE TABLE baz(id INTEGER PRIMARY KEY, value TEXT);", - "INSERT INTO \"baz\" VALUES(1,'111');", - "INSERT INTO \"baz\" VALUES(2,'222');", - "INSERT INTO \"baz\" VALUES(3,'333');", + 'INSERT INTO "baz" ("id","value") VALUES(1,\'111\');', + 'INSERT INTO "baz" ("id","value") VALUES(2,\'222\');', + 'INSERT INTO "baz" ("id","value") VALUES(3,\'333\');', ].join("\n") ); }); diff --git a/packages/wrangler/src/__tests__/deploy/workflows.test.ts b/packages/wrangler/src/__tests__/deploy/workflows.test.ts index b0ce09d65e..5d4c1b5dea 100644 --- a/packages/wrangler/src/__tests__/deploy/workflows.test.ts +++ b/packages/wrangler/src/__tests__/deploy/workflows.test.ts @@ -289,6 +289,177 @@ describe("deploy", () => { expect(std.out).toContain("workflow: my-workflow"); }); + it("should deploy a workflow with schedule", async ({ expect }) => { + writeWranglerConfig({ + main: "index.js", + workflows: [ + { + binding: "WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + schedule: "0 * * * *", + }, + ], + }); + await fs.promises.writeFile( + "index.js", + ` + import { WorkflowEntrypoint } from 'cloudflare:workers'; + export default {}; + export class MyWorkflow extends WorkflowEntrypoint {}; + ` + ); + + const handler = http.put( + "*/accounts/:accountId/workflows/:workflowName", + async ({ params, request }) => { + expect(params.workflowName).toBe("my-workflow"); + const body = (await request.json()) as Record; + expect(body).toEqual({ + script_name: "test-name", + class_name: "MyWorkflow", + schedule: "0 * * * *", + }); + return HttpResponse.json( + createFetchResult({ id: "mock-new-workflow-id" }) + ); + } + ); + msw.use(handler); + mockSubDomainRequest(); + mockUploadWorkerRequest({ + expectedBindings: [ + { + type: "workflow", + name: "WORKFLOW", + workflow_name: "my-workflow", + class_name: "MyWorkflow", + }, + ], + }); + + await runWrangler("deploy"); + + expect(std.warn).toMatchInlineSnapshot(`""`); + expect(std.out).toContain("workflow: my-workflow"); + }); + + it("should deploy a workflow with schedule as an array of cron expressions", async ({ + expect, + }) => { + writeWranglerConfig({ + main: "index.js", + workflows: [ + { + binding: "WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + schedule: ["0 * * * *", "0 9 * * 1"], + }, + ], + }); + await fs.promises.writeFile( + "index.js", + ` + import { WorkflowEntrypoint } from 'cloudflare:workers'; + export default {}; + export class MyWorkflow extends WorkflowEntrypoint {}; + ` + ); + + const handler = http.put( + "*/accounts/:accountId/workflows/:workflowName", + async ({ params, request }) => { + expect(params.workflowName).toBe("my-workflow"); + const body = (await request.json()) as Record; + expect(body).toEqual({ + script_name: "test-name", + class_name: "MyWorkflow", + schedule: ["0 * * * *", "0 9 * * 1"], + }); + return HttpResponse.json( + createFetchResult({ id: "mock-new-workflow-id" }) + ); + } + ); + msw.use(handler); + mockSubDomainRequest(); + mockUploadWorkerRequest({ + expectedBindings: [ + { + type: "workflow", + name: "WORKFLOW", + workflow_name: "my-workflow", + class_name: "MyWorkflow", + }, + ], + }); + + await runWrangler("deploy"); + + expect(std.warn).toMatchInlineSnapshot(`""`); + expect(std.out).toContain("workflow: my-workflow"); + }); + + it("should deploy a workflow with both limits and schedule", async ({ + expect, + }) => { + writeWranglerConfig({ + main: "index.js", + workflows: [ + { + binding: "WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + limits: { steps: 5000 }, + schedule: "*/15 * * * *", + }, + ], + }); + await fs.promises.writeFile( + "index.js", + ` + import { WorkflowEntrypoint } from 'cloudflare:workers'; + export default {}; + export class MyWorkflow extends WorkflowEntrypoint {}; + ` + ); + + const handler = http.put( + "*/accounts/:accountId/workflows/:workflowName", + async ({ params, request }) => { + expect(params.workflowName).toBe("my-workflow"); + const body = (await request.json()) as Record; + expect(body).toEqual({ + script_name: "test-name", + class_name: "MyWorkflow", + limits: { steps: 5000 }, + schedule: "*/15 * * * *", + }); + return HttpResponse.json( + createFetchResult({ id: "mock-new-workflow-id" }) + ); + } + ); + msw.use(handler); + mockSubDomainRequest(); + mockUploadWorkerRequest({ + expectedBindings: [ + { + type: "workflow", + name: "WORKFLOW", + workflow_name: "my-workflow", + class_name: "MyWorkflow", + }, + ], + }); + + await runWrangler("deploy"); + + expect(std.warn).toMatchInlineSnapshot(`""`); + expect(std.out).toContain("workflow: my-workflow"); + }); + it("should not call Workflow's API if the workflow binds to another script", async ({ expect, }) => { @@ -397,6 +568,48 @@ describe("deploy", () => { ); }); + it("should error when deploying a workflow with schedule that references an external script", async ({ + expect, + }) => { + writeWranglerConfig({ + main: "index.js", + name: "this-script", + workflows: [ + { + binding: "WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + script_name: "another-script", + schedule: "0 * * * *", + }, + ], + }); + + mockSubDomainRequest(); + mockUploadWorkerRequest({ + expectedScriptName: "this-script", + expectedBindings: [ + { + type: "workflow", + name: "WORKFLOW", + workflow_name: "my-workflow", + class_name: "MyWorkflow", + script_name: "another-script", + }, + ], + }); + await fs.promises.writeFile( + "index.js", + ` + export default {}; + ` + ); + + await expect(runWrangler("deploy")).rejects.toThrow( + 'Workflow "my-workflow" has "schedule" configured but references external script "another-script"' + ); + }); + describe("workflow script_name validation with environments", () => { it("should error when script_name matches top-level name but not env-suffixed name and limits are set", async ({ expect, @@ -535,6 +748,144 @@ describe("deploy", () => { expect(std.out).toContain("Uploaded my-app-staging"); }); + + it("should error when script_name matches top-level name but not env-suffixed name and schedule is set", async ({ + expect, + }) => { + writeWranglerConfig({ + main: "index.js", + name: "my-app", + env: { + staging: { + workflows: [ + { + binding: "WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + script_name: "my-app", + schedule: "0 * * * *", + }, + ], + }, + }, + }); + await fs.promises.writeFile("index.js", `export default {};`); + + mockSubDomainRequest(); + mockUploadWorkerRequest({ + expectedScriptName: "my-app-staging", + }); + + await expect(runWrangler("deploy --env staging")).rejects.toThrow( + 'Workflow "my-workflow" has "schedule" configured but references external script "my-app"' + ); + }); + + it("should allow schedule when script_name matches the env-suffixed name", async ({ + expect, + }) => { + writeWranglerConfig({ + main: "index.js", + name: "my-app", + env: { + staging: { + workflows: [ + { + binding: "WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + script_name: "my-app-staging", + schedule: "0 * * * *", + }, + ], + }, + }, + }); + await fs.promises.writeFile( + "index.js", + ` + import { WorkflowEntrypoint } from 'cloudflare:workers'; + export default {}; + export class MyWorkflow extends WorkflowEntrypoint {}; + ` + ); + + const handler = http.put( + "*/accounts/:accountId/workflows/:workflowName", + async ({ params, request }) => { + expect(params.workflowName).toBe("my-workflow"); + const body = (await request.json()) as Record; + expect(body).toEqual({ + script_name: "my-app-staging", + class_name: "MyWorkflow", + schedule: "0 * * * *", + }); + return HttpResponse.json( + createFetchResult({ id: "mock-new-workflow-id" }) + ); + } + ); + msw.use(handler); + mockSubDomainRequest(); + mockUploadWorkerRequest({ + expectedScriptName: "my-app-staging", + }); + + await runWrangler("deploy --env staging"); + + expect(std.warn).toMatchInlineSnapshot(`""`); + expect(std.out).toContain("workflow: my-workflow"); + }); + + it("should deploy external script_name under env without schedule", async ({ + expect, + }) => { + writeWranglerConfig({ + main: "index.js", + name: "my-app", + env: { + staging: { + workflows: [ + { + binding: "WORKFLOW", + name: "my-workflow", + class_name: "MyWorkflow", + script_name: "another-script", + }, + ], + }, + }, + }); + await fs.promises.writeFile("index.js", `export default {};`); + + const handler = http.put( + "*/accounts/:accountId/workflows/:workflowName", + () => { + expect( + false, + "Workflows API should not be called for external bindings." + ); + } + ); + msw.use(handler); + mockSubDomainRequest(); + mockUploadWorkerRequest({ + expectedScriptName: "my-app-staging", + expectedBindings: [ + { + type: "workflow", + name: "WORKFLOW", + workflow_name: "my-workflow", + class_name: "MyWorkflow", + script_name: "another-script", + }, + ], + }); + + await runWrangler("deploy --env staging"); + + expect(std.out).toContain("Uploaded my-app-staging"); + }); }); describe("workflow conflict detection", () => { diff --git a/packages/wrangler/src/dev/miniflare/index.ts b/packages/wrangler/src/dev/miniflare/index.ts index c37dbee64a..1818dd3c3d 100644 --- a/packages/wrangler/src/dev/miniflare/index.ts +++ b/packages/wrangler/src/dev/miniflare/index.ts @@ -789,14 +789,22 @@ export function buildMiniflareBindingOptions( workflows.map((workflow) => { if ( workflow.script_name !== undefined && - workflow.script_name !== config.name && - workflow.limits + workflow.script_name !== config.name ) { - throw new UserError( - `Workflow "${workflow.name}" has "limits" configured but references external script "${workflow.script_name}". ` + - `Configure limits on the worker that defines the workflow.`, - { telemetryMessage: "workflow limits on external script" } - ); + if (workflow.limits) { + throw new UserError( + `Workflow "${workflow.name}" has "limits" configured but references external script "${workflow.script_name}". ` + + `Configure limits on the worker that defines the workflow.`, + { telemetryMessage: "workflow limits on external script" } + ); + } + if (workflow.schedule) { + throw new UserError( + `Workflow "${workflow.name}" has "schedule" configured but references external script "${workflow.script_name}". ` + + `Configure schedule on the worker that defines the workflow.`, + { telemetryMessage: "workflow schedule on external script" } + ); + } } return workflowEntry( workflow, diff --git a/packages/wrangler/src/triggers/deploy.ts b/packages/wrangler/src/triggers/deploy.ts index ac89715a19..3db53ec49c 100644 --- a/packages/wrangler/src/triggers/deploy.ts +++ b/packages/wrangler/src/triggers/deploy.ts @@ -280,6 +280,16 @@ export default async function triggersDeploy( } ); } + if (workflow.schedule) { + throw new UserError( + `Workflow "${workflow.name}" has "schedule" configured but references external script "${workflow.script_name}". ` + + `Configure schedule on the worker that defines the workflow.`, + { + telemetryMessage: + "triggers deploy workflow schedule external script", + } + ); + } continue; } @@ -293,6 +303,7 @@ export default async function triggersDeploy( script_name: scriptName, class_name: workflow.class_name, ...(workflow.limits && { limits: workflow.limits }), + ...(workflow.schedule && { schedule: workflow.schedule }), }), headers: { "Content-Type": "application/json", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d2742c1413..81e7274594 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,8 +10,8 @@ catalogs: specifier: ^0.13.0 version: 0.13.3 '@cloudflare/workers-types': - specifier: ^4.20260520.1 - version: 4.20260520.1 + specifier: ^4.20260521.1 + version: 4.20260521.1 '@hey-api/openapi-ts': specifier: ^0.94.0 version: 0.94.0 @@ -170,7 +170,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@fixture/shared': specifier: workspace:* version: link:../shared @@ -218,7 +218,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 ts-dedent: specifier: ^2.2.0 version: 2.2.0 @@ -236,7 +236,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -257,7 +257,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -281,7 +281,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -317,7 +317,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 undici: specifier: catalog:default version: 7.24.8 @@ -332,7 +332,7 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/mimetext': specifier: ^2.0.4 version: 2.0.4 @@ -371,7 +371,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/jest-image-snapshot': specifier: ^6.4.0 version: 6.4.0 @@ -398,7 +398,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 miniflare: specifier: workspace:* version: link:../../packages/miniflare @@ -468,7 +468,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/is-even': specifier: ^1.0.2 version: 1.0.2 @@ -486,11 +486,11 @@ importers: dependencies: '@sentry/cloudflare': specifier: ^10 - version: 10.50.0(@cloudflare/workers-types@4.20260520.1) + version: 10.50.0(@cloudflare/workers-types@4.20260521.1) devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 vitest: specifier: catalog:default version: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(@vitest/ui@4.1.0)(msw@2.12.4(@types/node@22.15.17)(typescript@5.9.3))(vite@8.0.13(@types/node@22.15.17)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.1)) @@ -521,7 +521,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -549,7 +549,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/node': specifier: ^22.10.1 version: 22.15.17 @@ -579,7 +579,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 undici: specifier: catalog:default version: 7.24.8 @@ -597,7 +597,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/debug': specifier: 4.1.12 version: 4.1.12 @@ -630,7 +630,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -655,7 +655,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@fixture/pages-plugin': specifier: workspace:* version: link:../pages-plugin-example @@ -679,7 +679,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -718,7 +718,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -739,7 +739,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -760,7 +760,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -778,7 +778,7 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 is-odd: specifier: ^3.0.1 version: 3.0.1 @@ -797,7 +797,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@fixture/pages-plugin': specifier: workspace:* version: link:../pages-plugin-example @@ -857,7 +857,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -878,7 +878,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1034,19 +1034,19 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 fixtures/rules-app: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 fixtures/secrets-store: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 wrangler: specifier: workspace:* version: link:../../packages/wrangler @@ -1073,7 +1073,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/is-even': specifier: ^1.0.2 version: 1.0.2 @@ -1097,7 +1097,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 vitest: specifier: catalog:default version: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(@vitest/ui@4.1.0)(msw@2.12.4(@types/node@22.15.17)(typescript@5.9.3))(vite@8.0.13(@types/node@22.15.17)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.1)) @@ -1112,7 +1112,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 esbuild: specifier: catalog:default version: 0.27.3 @@ -1130,7 +1130,7 @@ importers: devDependencies: '@better-auth/stripe': specifier: ^1.4.6 - version: 1.5.4(f44cee3efbbc3b54b0d1ff52ad7de49a) + version: 1.5.4(a19b563f2d07928c2a8ae9aafe44b9fb) '@cloudflare/containers': specifier: ^0.2.2 version: 0.2.2 @@ -1139,7 +1139,7 @@ importers: version: link:../../packages/vitest-pool-workers '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@microlabs/otel-cf-workers': specifier: 1.0.0-rc.45 version: 1.0.0-rc.45(@opentelemetry/api@1.9.1) @@ -1154,7 +1154,7 @@ importers: version: 3.2.6 better-auth: specifier: ^1.4.6 - version: 1.5.4(@cloudflare/workers-types@4.20260520.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260520.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)))(mongodb@7.1.0)(mysql2@3.15.3)(pg@8.16.3)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0) + version: 1.5.4(@cloudflare/workers-types@4.20260521.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260521.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)))(mongodb@7.1.0)(mysql2@3.15.3)(pg@8.16.3)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0) discord-api-types: specifier: 0.37.98 version: 0.37.98 @@ -1225,7 +1225,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@fixture/shared': specifier: workspace:* version: link:../shared @@ -1280,7 +1280,7 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 wrangler: specifier: workspace:* version: link:../../packages/wrangler @@ -1292,7 +1292,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 miniflare: specifier: workspace:* version: link:../../packages/miniflare @@ -1340,7 +1340,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 run-script-os: specifier: ^1.1.6 version: 1.1.6 @@ -1364,7 +1364,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1385,7 +1385,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1406,7 +1406,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1427,7 +1427,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1448,7 +1448,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/jest-image-snapshot': specifier: ^6.4.0 version: 6.4.0 @@ -1481,7 +1481,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/node': specifier: ^22.10.1 version: 22.15.17 @@ -1508,7 +1508,7 @@ importers: version: link:../../packages/workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1526,7 +1526,7 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -1656,7 +1656,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -1788,7 +1788,7 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@octokit/types': specifier: ^13.8.0 version: 13.8.0 @@ -1809,7 +1809,7 @@ importers: version: link:../vitest-pool-workers '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -1833,7 +1833,7 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -1860,10 +1860,10 @@ importers: devDependencies: '@cloudflare/vitest-pool-workers': specifier: catalog:default - version: 0.13.3(@cloudflare/workers-types@4.20260520.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0) + version: 0.13.3(@cloudflare/workers-types@4.20260521.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0) '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/mime': specifier: ^3.0.4 version: 3.0.4 @@ -2013,8 +2013,8 @@ importers: specifier: catalog:default version: 7.24.8 workerd: - specifier: 1.20260520.1 - version: 1.20260520.1 + specifier: 1.20260521.1 + version: 1.20260521.1 ws: specifier: catalog:default version: 8.20.1 @@ -2039,7 +2039,7 @@ importers: version: link:../workers-shared '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -2205,7 +2205,7 @@ importers: devDependencies: '@cloudflare/vitest-pool-workers': specifier: catalog:default - version: 0.13.3(@cloudflare/workers-types@4.20260520.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0) + version: 0.13.3(@cloudflare/workers-types@4.20260521.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0) '@cloudflare/workers-shared': specifier: workspace:* version: link:../workers-shared @@ -2214,7 +2214,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 concurrently: specifier: ^8.2.2 version: 8.2.2 @@ -2242,7 +2242,7 @@ importers: devDependencies: '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -2276,7 +2276,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/node': specifier: ^22.10.1 version: 22.15.17 @@ -2300,7 +2300,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 esbuild: specifier: catalog:default version: 0.27.3 @@ -2380,7 +2380,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -2473,7 +2473,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2494,7 +2494,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2515,7 +2515,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2536,7 +2536,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2557,7 +2557,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2578,7 +2578,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2599,7 +2599,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2620,7 +2620,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2641,7 +2641,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2662,7 +2662,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2683,7 +2683,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2704,7 +2704,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2725,7 +2725,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2746,7 +2746,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2767,7 +2767,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2788,7 +2788,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2809,7 +2809,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/mimetext': specifier: ^2.0.4 version: 2.0.4 @@ -2842,7 +2842,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2863,7 +2863,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2884,7 +2884,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2905,7 +2905,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2926,7 +2926,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2947,7 +2947,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -2968,7 +2968,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@playground/main-resolution-package': specifier: file:./package version: file:packages/vite-plugin-cloudflare/playground/main-resolution/package @@ -2992,7 +2992,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/express': specifier: ^5.0.1 version: 5.0.1 @@ -3019,7 +3019,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@playground/module-resolution-excludes': specifier: file:./packages/excludes version: file:packages/vite-plugin-cloudflare/playground/module-resolution/packages/excludes @@ -3031,7 +3031,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.20260520.1)(typescript@5.8.3) + version: 2.12.0(@cloudflare/workers-types@4.20260521.1)(typescript@5.8.3) '@types/react': specifier: ^18.3.11 version: 18.3.18 @@ -3064,7 +3064,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3085,7 +3085,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@fixture/shared': specifier: workspace:* version: link:../../../../fixtures/shared @@ -3137,7 +3137,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/react': specifier: 19.1.0 version: 19.1.0 @@ -3158,7 +3158,7 @@ importers: dependencies: partyserver: specifier: ^0.3.3 - version: 0.3.3(@cloudflare/workers-types@4.20260520.1) + version: 0.3.3(@cloudflare/workers-types@4.20260521.1) partysocket: specifier: ^1.1.16 version: 1.1.16(react@19.2.1) @@ -3177,7 +3177,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@tailwindcss/vite': specifier: ^4.2.1 version: 4.2.2(vite@8.0.13(@types/node@22.15.17)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.1)) @@ -3213,7 +3213,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3234,7 +3234,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../../../workers-utils @@ -3274,7 +3274,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/react': specifier: 19.1.0 version: 19.1.0 @@ -3304,7 +3304,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3325,7 +3325,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3353,7 +3353,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/react': specifier: 19.1.0 version: 19.1.0 @@ -3386,7 +3386,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3407,7 +3407,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3428,7 +3428,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3449,7 +3449,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@vitejs/plugin-basic-ssl': specifier: ^2.2.0 version: 2.2.0(vite@8.0.13(@types/node@22.15.17)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.1)) @@ -3473,7 +3473,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3494,7 +3494,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3515,7 +3515,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3536,7 +3536,7 @@ importers: version: link:../../../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 typescript: specifier: catalog:default version: 5.8.3 @@ -3573,7 +3573,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -3788,13 +3788,13 @@ importers: devDependencies: '@cloudflare/vitest-pool-workers': specifier: catalog:default - version: 0.13.3(@cloudflare/workers-types@4.20260520.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0) + version: 0.13.3(@cloudflare/workers-types@4.20260521.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0) '@cloudflare/workers-tsconfig': specifier: workspace:* version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@sentry/cli': specifier: ^2.37.0 version: 2.41.1(encoding@0.1.13) @@ -3903,13 +3903,13 @@ importers: devDependencies: '@cloudflare/vitest-pool-workers': specifier: catalog:default - version: 0.13.3(@cloudflare/workers-types@4.20260520.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0) + version: 0.13.3(@cloudflare/workers-types@4.20260521.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0) '@cloudflare/workers-tsconfig': specifier: workspace:* version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@types/mime': specifier: ^3.0.4 version: 3.0.4 @@ -3947,8 +3947,8 @@ importers: specifier: 2.0.0-rc.24 version: 2.0.0-rc.24 workerd: - specifier: 1.20260520.1 - version: 1.20260520.1 + specifier: 1.20260521.1 + version: 1.20260521.1 devDependencies: '@aws-sdk/client-s3': specifier: ^3.721.0 @@ -3979,7 +3979,7 @@ importers: version: link:../workers-tsconfig '@cloudflare/workers-types': specifier: catalog:default - version: 4.20260520.1 + version: 4.20260521.1 '@cloudflare/workers-utils': specifier: workspace:* version: link:../workers-utils @@ -5144,8 +5144,8 @@ packages: cpu: [x64] os: [darwin] - '@cloudflare/workerd-darwin-64@1.20260520.1': - resolution: {integrity: sha512-7ilR8QUWpFO2RdulPuYkrwRYZxi7iuX8+11G9z97bdS7wCSFuetBsgsr2ISK7l/qzCiG5zshnfIwcdlYWD01Ag==} + '@cloudflare/workerd-darwin-64@1.20260521.1': + resolution: {integrity: sha512-aiNdXmxlhwGjTSajL3I7uQPpN4lAOcXjvg5ZOlJKIywnevr798n9XCS6lvuqgniM3KjurBNWRRypMJntg/eSLg==} engines: {node: '>=16'} cpu: [x64] os: [darwin] @@ -5162,8 +5162,8 @@ packages: cpu: [arm64] os: [darwin] - '@cloudflare/workerd-darwin-arm64@1.20260520.1': - resolution: {integrity: sha512-6LVIEI0Tx3hfcXiEM+eHsIQVsOz1IAAoAMMsRlrx+7YaNiuHMib7yWfyzAlZPhiAg1BgiS5oB8iDn7Ws1amG+Q==} + '@cloudflare/workerd-darwin-arm64@1.20260521.1': + resolution: {integrity: sha512-ikN8aKSi4Ak28ndOkuSO5rq6lmV6wwDQu9F9Vu6J7EkwAOth74J/Hjn4j4EuFceW/npw2Ws0Y/muzA6WKHl4TA==} engines: {node: '>=16'} cpu: [arm64] os: [darwin] @@ -5180,8 +5180,8 @@ packages: cpu: [x64] os: [linux] - '@cloudflare/workerd-linux-64@1.20260520.1': - resolution: {integrity: sha512-7oV9YK7o63aiHnpBeKlxOIA3nK4sKxuwhnklCwJFb0LirkSemSG1LQlVvtVInoWSYDCTCoUeGkiPsS8WsZqcEw==} + '@cloudflare/workerd-linux-64@1.20260521.1': + resolution: {integrity: sha512-D/gUhvQcG0pJr5aJl6yUoi2JxbFpjVtDq9xUJHPjfkAjL28TUVgCR/e5r8YGirepv4I1DK7ihuii9LZ2GGMJbw==} engines: {node: '>=16'} cpu: [x64] os: [linux] @@ -5198,8 +5198,8 @@ packages: cpu: [arm64] os: [linux] - '@cloudflare/workerd-linux-arm64@1.20260520.1': - resolution: {integrity: sha512-hzc/UKzw1/z+iTptBZVX7XYZTmJXsgn6RC9uKtQGUQxENxkoO1teba8qxVlKZT0AbPCQs5rg63Lsk0/eQhteqQ==} + '@cloudflare/workerd-linux-arm64@1.20260521.1': + resolution: {integrity: sha512-vhjWPIHenczegTakhRPwEmTeaavCpNqsuo3RlLCkUdU47HrwLvy/4QersGggs4+kF4Do+IE/EznCGyT40xYcLA==} engines: {node: '>=16'} cpu: [arm64] os: [linux] @@ -5216,8 +5216,8 @@ packages: cpu: [x64] os: [win32] - '@cloudflare/workerd-windows-64@1.20260520.1': - resolution: {integrity: sha512-BjMBhXqlEPaVc68tXihFI+YcU/5T4Jmj4ELDJaEa6NuCcbUMORESgO4OJZIDS4+rC2Lkv37telOktQxEOkqY3g==} + '@cloudflare/workerd-windows-64@1.20260521.1': + resolution: {integrity: sha512-wBolYC/+lnGIEbkkPdzFtjTOWip2uQH6maeAP1ZV0kyxi5SGpsa83+wD5rH5OOle+sHE5qJMdwCKjwRwj+FKJg==} engines: {node: '>=16'} cpu: [x64] os: [win32] @@ -5230,8 +5230,8 @@ packages: react: ^17.0.2 || ^18.2.21 react-dom: ^17.0.2 || ^18.2.21 - '@cloudflare/workers-types@4.20260520.1': - resolution: {integrity: sha512-wdmf9Fwabp06OgK9ZyCl8Q77GZ94k9J7OA9qA65FbgxZ/hd3hYRkVNiY7Bvsx4tKim+sWmKqGOblecZInAvoRg==} + '@cloudflare/workers-types@4.20260521.1': + resolution: {integrity: sha512-cerUUdckXWiNm0x0XEIomBkr58xja5hn/1F9wzzDfJTE96L98L/Ra0ToTxKfzsXLklPflOagce8Vhg0vx8Ytgw==} '@codemirror/autocomplete@6.20.0': resolution: {integrity: sha512-bOwvTOIJcG5FVo5gUUupiwYh8MioPLQ4UcqbcRf7UQ98X90tCa9E1kZ3Z7tqwpZxYyOvh1YTYbmZE9RTfTp5hg==} @@ -14907,8 +14907,8 @@ packages: engines: {node: '>=16'} hasBin: true - workerd@1.20260520.1: - resolution: {integrity: sha512-mwW6H/NEKObeBVd0qkq91EGyOIC3TaNJBxp7kj5uChif/+qYD7nM5HE8ZYruwvEd15pRwUet+V8r21DCXCGDQQ==} + workerd@1.20260521.1: + resolution: {integrity: sha512-HzIThcZ0ZVEuzVxpY2IYZ3yssSrTjtrWXAVfmOl5rVwyqcu7aeZXGMiwrEmi9MOcC3wjy+BNv+hFrMMY5OrjQQ==} engines: {node: '>=16'} hasBin: true @@ -15930,7 +15930,7 @@ snapshots: optionalDependencies: '@types/react': 19.2.13 - '@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1)': + '@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1)': dependencies: '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 @@ -15941,9 +15941,9 @@ snapshots: nanostores: 1.1.1 zod: 4.3.6 optionalDependencies: - '@cloudflare/workers-types': 4.20260520.1 + '@cloudflare/workers-types': 4.20260521.1 - '@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1)': + '@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1)': dependencies: '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 @@ -15954,50 +15954,50 @@ snapshots: nanostores: 1.1.1 zod: 4.3.6 optionalDependencies: - '@cloudflare/workers-types': 4.20260520.1 + '@cloudflare/workers-types': 4.20260521.1 - '@better-auth/drizzle-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260520.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)))': + '@better-auth/drizzle-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260521.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)))': dependencies: - '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/utils': 0.3.1 - drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260520.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)) + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260521.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)) - '@better-auth/kysely-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(kysely@0.28.11)': + '@better-auth/kysely-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(kysely@0.28.11)': dependencies: - '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/utils': 0.3.1 kysely: 0.28.11 - '@better-auth/memory-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)': + '@better-auth/memory-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)': dependencies: - '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/utils': 0.3.1 - '@better-auth/mongo-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(mongodb@7.1.0)': + '@better-auth/mongo-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(mongodb@7.1.0)': dependencies: - '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/utils': 0.3.1 mongodb: 7.1.0 - '@better-auth/prisma-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))': + '@better-auth/prisma-adapter@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))': dependencies: - '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/utils': 0.3.1 '@prisma/client': 7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3) prisma: 7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3) - '@better-auth/stripe@1.5.4(f44cee3efbbc3b54b0d1ff52ad7de49a)': + '@better-auth/stripe@1.5.4(a19b563f2d07928c2a8ae9aafe44b9fb)': dependencies: - '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) - better-auth: 1.5.4(@cloudflare/workers-types@4.20260520.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260520.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)))(mongodb@7.1.0)(mysql2@3.15.3)(pg@8.16.3)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0) + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) + better-auth: 1.5.4(@cloudflare/workers-types@4.20260521.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260521.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)))(mongodb@7.1.0)(mysql2@3.15.3)(pg@8.16.3)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0) better-call: 1.3.2(zod@4.3.6) defu: 6.1.4 stripe: 20.4.1(@types/node@22.15.17) zod: 4.3.6 - '@better-auth/telemetry@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))': + '@better-auth/telemetry@1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))': dependencies: - '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1) '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 @@ -16562,7 +16562,7 @@ snapshots: lodash.memoize: 4.1.2 marked: 0.3.19 - '@cloudflare/vitest-pool-workers@0.13.3(@cloudflare/workers-types@4.20260520.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0)': + '@cloudflare/vitest-pool-workers@0.13.3(@cloudflare/workers-types@4.20260521.1)(@vitest/runner@4.1.0)(@vitest/snapshot@4.1.0)(vitest@4.1.0)': dependencies: '@vitest/runner': 4.1.0 '@vitest/snapshot': 4.1.0 @@ -16570,7 +16570,7 @@ snapshots: esbuild: 0.27.3 miniflare: 4.20260317.1 vitest: 4.1.0(@opentelemetry/api@1.9.1)(@types/node@22.15.17)(@vitest/ui@4.1.0)(msw@2.12.4(@types/node@22.15.17)(typescript@5.9.3))(vite@8.0.13(@types/node@22.15.17)(esbuild@0.27.3)(jiti@2.6.1)(tsx@4.21.0)(yaml@2.8.1)) - wrangler: 4.76.0(@cloudflare/workers-types@4.20260520.1) + wrangler: 4.76.0(@cloudflare/workers-types@4.20260521.1) zod: 3.25.76 transitivePeerDependencies: - '@cloudflare/workers-types' @@ -16583,7 +16583,7 @@ snapshots: '@cloudflare/workerd-darwin-64@1.20260423.1': optional: true - '@cloudflare/workerd-darwin-64@1.20260520.1': + '@cloudflare/workerd-darwin-64@1.20260521.1': optional: true '@cloudflare/workerd-darwin-arm64@1.20260317.1': @@ -16592,7 +16592,7 @@ snapshots: '@cloudflare/workerd-darwin-arm64@1.20260423.1': optional: true - '@cloudflare/workerd-darwin-arm64@1.20260520.1': + '@cloudflare/workerd-darwin-arm64@1.20260521.1': optional: true '@cloudflare/workerd-linux-64@1.20260317.1': @@ -16601,7 +16601,7 @@ snapshots: '@cloudflare/workerd-linux-64@1.20260423.1': optional: true - '@cloudflare/workerd-linux-64@1.20260520.1': + '@cloudflare/workerd-linux-64@1.20260521.1': optional: true '@cloudflare/workerd-linux-arm64@1.20260317.1': @@ -16610,7 +16610,7 @@ snapshots: '@cloudflare/workerd-linux-arm64@1.20260423.1': optional: true - '@cloudflare/workerd-linux-arm64@1.20260520.1': + '@cloudflare/workerd-linux-arm64@1.20260521.1': optional: true '@cloudflare/workerd-windows-64@1.20260317.1': @@ -16619,7 +16619,7 @@ snapshots: '@cloudflare/workerd-windows-64@1.20260423.1': optional: true - '@cloudflare/workerd-windows-64@1.20260520.1': + '@cloudflare/workerd-windows-64@1.20260521.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)': @@ -16630,7 +16630,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.20260520.1': {} + '@cloudflare/workers-types@4.20260521.1': {} '@codemirror/autocomplete@6.20.0': dependencies: @@ -18041,7 +18041,7 @@ snapshots: '@prisma/adapter-d1@7.0.1': dependencies: - '@cloudflare/workers-types': 4.20260520.1 + '@cloudflare/workers-types': 4.20260521.1 '@prisma/driver-adapter-utils': 7.0.1 ky: 1.7.5 @@ -18268,10 +18268,10 @@ snapshots: optionalDependencies: '@types/react': 18.3.3 - '@remix-run/cloudflare@2.12.0(@cloudflare/workers-types@4.20260520.1)(typescript@5.8.3)': + '@remix-run/cloudflare@2.12.0(@cloudflare/workers-types@4.20260521.1)(typescript@5.8.3)': dependencies: '@cloudflare/kv-asset-handler': 0.1.3 - '@cloudflare/workers-types': 4.20260520.1 + '@cloudflare/workers-types': 4.20260521.1 '@remix-run/server-runtime': 2.12.0(typescript@5.8.3) optionalDependencies: typescript: 5.8.3 @@ -18801,12 +18801,12 @@ snapshots: - encoding - supports-color - '@sentry/cloudflare@10.50.0(@cloudflare/workers-types@4.20260520.1)': + '@sentry/cloudflare@10.50.0(@cloudflare/workers-types@4.20260521.1)': dependencies: '@opentelemetry/api': 1.9.1 '@sentry/core': 10.50.0 optionalDependencies: - '@cloudflare/workers-types': 4.20260520.1 + '@cloudflare/workers-types': 4.20260521.1 '@sentry/core@10.50.0': {} @@ -20444,15 +20444,15 @@ snapshots: before-after-hook@2.2.3: {} - better-auth@1.5.4(@cloudflare/workers-types@4.20260520.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260520.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)))(mongodb@7.1.0)(mysql2@3.15.3)(pg@8.16.3)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0): + better-auth@1.5.4(@cloudflare/workers-types@4.20260521.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260521.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)))(mongodb@7.1.0)(mysql2@3.15.3)(pg@8.16.3)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(vitest@4.1.0): dependencies: - '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1) - '@better-auth/drizzle-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260520.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))) - '@better-auth/kysely-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(kysely@0.28.11) - '@better-auth/memory-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1) - '@better-auth/mongo-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(mongodb@7.1.0) - '@better-auth/prisma-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)) - '@better-auth/telemetry': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260520.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1)) + '@better-auth/core': 1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@6.2.1)(kysely@0.28.11)(nanostores@1.1.1) + '@better-auth/drizzle-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260521.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))) + '@better-auth/kysely-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(kysely@0.28.11) + '@better-auth/memory-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1) + '@better-auth/mongo-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(mongodb@7.1.0) + '@better-auth/prisma-adapter': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1))(@better-auth/utils@0.3.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)) + '@better-auth/telemetry': 1.5.4(@better-auth/core@1.5.4(@better-auth/utils@0.3.1)(@better-fetch/fetch@1.1.21)(@cloudflare/workers-types@4.20260521.1)(better-call@1.3.2(zod@4.3.6))(jose@5.9.3)(kysely@0.28.11)(nanostores@1.1.1)) '@better-auth/utils': 0.3.1 '@better-fetch/fetch': 1.1.21 '@noble/ciphers': 2.1.1 @@ -20465,7 +20465,7 @@ snapshots: zod: 4.3.6 optionalDependencies: '@prisma/client': 7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3) - drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260520.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)) + drizzle-orm: 0.45.1(@cloudflare/workers-types@4.20260521.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)) mongodb: 7.1.0 mysql2: 3.15.3 pg: 8.16.3 @@ -21276,9 +21276,9 @@ snapshots: dependencies: wordwrap: 1.0.0 - drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260520.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)): + drizzle-orm@0.45.1(@cloudflare/workers-types@4.20260521.1)(@electric-sql/pglite@0.3.2)(@opentelemetry/api@1.9.1)(@prisma/client@7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3))(@types/pg@8.15.4)(kysely@0.28.11)(mysql2@3.15.3)(pg@8.16.3)(postgres@3.4.7)(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3)): optionalDependencies: - '@cloudflare/workers-types': 4.20260520.1 + '@cloudflare/workers-types': 4.20260521.1 '@electric-sql/pglite': 0.3.2 '@opentelemetry/api': 1.9.1 '@prisma/client': 7.0.1(prisma@7.0.1(@types/react@19.2.13)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(typescript@5.8.3))(typescript@5.8.3) @@ -23726,9 +23726,9 @@ snapshots: parseurl@1.3.3: {} - partyserver@0.3.3(@cloudflare/workers-types@4.20260520.1): + partyserver@0.3.3(@cloudflare/workers-types@4.20260521.1): dependencies: - '@cloudflare/workers-types': 4.20260520.1 + '@cloudflare/workers-types': 4.20260521.1 nanoid: 5.1.7 partysocket@1.1.16(react@19.2.1): @@ -26523,15 +26523,15 @@ snapshots: '@cloudflare/workerd-linux-arm64': 1.20260423.1 '@cloudflare/workerd-windows-64': 1.20260423.1 - workerd@1.20260520.1: + workerd@1.20260521.1: optionalDependencies: - '@cloudflare/workerd-darwin-64': 1.20260520.1 - '@cloudflare/workerd-darwin-arm64': 1.20260520.1 - '@cloudflare/workerd-linux-64': 1.20260520.1 - '@cloudflare/workerd-linux-arm64': 1.20260520.1 - '@cloudflare/workerd-windows-64': 1.20260520.1 + '@cloudflare/workerd-darwin-64': 1.20260521.1 + '@cloudflare/workerd-darwin-arm64': 1.20260521.1 + '@cloudflare/workerd-linux-64': 1.20260521.1 + '@cloudflare/workerd-linux-arm64': 1.20260521.1 + '@cloudflare/workerd-windows-64': 1.20260521.1 - wrangler@4.76.0(@cloudflare/workers-types@4.20260520.1): + wrangler@4.76.0(@cloudflare/workers-types@4.20260521.1): dependencies: '@cloudflare/kv-asset-handler': 0.4.2 '@cloudflare/unenv-preset': 2.16.0(unenv@2.0.0-rc.24)(workerd@1.20260317.1) @@ -26542,7 +26542,7 @@ snapshots: unenv: 2.0.0-rc.24 workerd: 1.20260317.1 optionalDependencies: - '@cloudflare/workers-types': 4.20260520.1 + '@cloudflare/workers-types': 4.20260521.1 fsevents: 2.3.3 transitivePeerDependencies: - bufferutil diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2bd26d7f41..fa0f999933 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -97,8 +97,8 @@ catalog: "ws": "8.20.1" esbuild: "0.27.3" playwright-chromium: "^1.56.1" - "@cloudflare/workers-types": "^4.20260520.1" - workerd: "1.20260520.1" + "@cloudflare/workers-types": "^4.20260521.1" + workerd: "1.20260521.1" jsonc-parser: "^3.2.0" smol-toml: "^1.5.2" msw: 2.12.4