From ecd55120f491c326e3d1f9add8ede20a336bc7e9 Mon Sep 17 00:00:00 2001 From: Ashley Peacock Date: Sun, 25 Oct 2026 08:06:49 +0000 Subject: [PATCH] [vite-plugin] Treat cloudflare:durable-objects as a built-in module (#16452) --- .changeset/vite-plugin-durable-objects-module.md | 7 +++++++ .../playground/module-resolution/__tests__/base-tests.ts | 1 + .../playground/module-resolution/src/cloudflare-imports.ts | 2 ++ .../vite-plugin-cloudflare/src/cloudflare-environment.ts | 1 + 4 files changed, 11 insertions(+) create mode 100644 .changeset/vite-plugin-durable-objects-module.md diff --git a/.changeset/vite-plugin-durable-objects-module.md b/.changeset/vite-plugin-durable-objects-module.md new file mode 100644 index 00000000000..027ab0908a5 --- /dev/null +++ b/.changeset/vite-plugin-durable-objects-module.md @@ -0,0 +1,7 @@ +--- +"@cloudflare/vite-plugin": patch +--- + +Treat `cloudflare:durable-objects` as a built-in runtime module + +Workers can import `retryable()` from `cloudflare:durable-objects` to mark Durable Object methods as safe to retry. The plugin now leaves that import for the runtime to resolve, as it does for `cloudflare:workers`, instead of trying to resolve it as a package. diff --git a/packages/vite-plugin-cloudflare/playground/module-resolution/__tests__/base-tests.ts b/packages/vite-plugin-cloudflare/playground/module-resolution/__tests__/base-tests.ts index 5a73a83f19a..416daa3bd42 100644 --- a/packages/vite-plugin-cloudflare/playground/module-resolution/__tests__/base-tests.ts +++ b/packages/vite-plugin-cloudflare/playground/module-resolution/__tests__/base-tests.ts @@ -59,6 +59,7 @@ describe("module resolution", async () => { "(cloudflare:workers) WorkerEntrypoint.name": "WorkerEntrypoint", "(cloudflare:workers) DurableObject.name": durableObjectName, "(cloudflare:sockets) typeof connect": "function", + "(cloudflare:durable-objects) typeof retryable": "function", }); }); diff --git a/packages/vite-plugin-cloudflare/playground/module-resolution/src/cloudflare-imports.ts b/packages/vite-plugin-cloudflare/playground/module-resolution/src/cloudflare-imports.ts index d843ffd8170..be77ff42fb5 100644 --- a/packages/vite-plugin-cloudflare/playground/module-resolution/src/cloudflare-imports.ts +++ b/packages/vite-plugin-cloudflare/playground/module-resolution/src/cloudflare-imports.ts @@ -1,3 +1,4 @@ +import { retryable } from "cloudflare:durable-objects"; import { connect } from "cloudflare:sockets"; import { DurableObject, WorkerEntrypoint } from "cloudflare:workers"; @@ -5,4 +6,5 @@ export default { "(cloudflare:workers) WorkerEntrypoint.name": WorkerEntrypoint.name, "(cloudflare:workers) DurableObject.name": DurableObject.name, "(cloudflare:sockets) typeof connect": typeof connect, + "(cloudflare:durable-objects) typeof retryable": typeof retryable, }; diff --git a/packages/vite-plugin-cloudflare/src/cloudflare-environment.ts b/packages/vite-plugin-cloudflare/src/cloudflare-environment.ts index f6c8c09b371..f03d62a0a71 100644 --- a/packages/vite-plugin-cloudflare/src/cloudflare-environment.ts +++ b/packages/vite-plugin-cloudflare/src/cloudflare-environment.ts @@ -186,6 +186,7 @@ export class CloudflareDevEnvironment extends vite.DevEnvironment { } export const cloudflareBuiltInModules = [ + "cloudflare:durable-objects", "cloudflare:email", "cloudflare:node", "cloudflare:sockets",