@cloudflare/vite-plugin 1.30.0 → 1.30.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  //#region package.json
2
2
  var package_default = {
3
3
  name: "@cloudflare/vite-plugin",
4
- version: "1.30.0",
4
+ version: "1.30.2",
5
5
  description: "Cloudflare plugin for Vite",
6
6
  keywords: [
7
7
  "cloudflare",
@@ -52,7 +52,7 @@ var package_default = {
52
52
  "@cloudflare/workers-types": "catalog:default",
53
53
  "@cloudflare/workers-utils": "workspace:*",
54
54
  "@remix-run/node-fetch-server": "^0.8.0",
55
- "@types/node": "catalog:vite-plugin",
55
+ "@types/node": "catalog:default",
56
56
  "@types/semver": "^7.5.1",
57
57
  "@types/ws": "^8.5.13",
58
58
  "defu": "^6.1.4",
@@ -65,9 +65,9 @@ var package_default = {
65
65
  "tree-kill": "catalog:default",
66
66
  "tsdown": "0.16.3",
67
67
  "typescript": "catalog:default",
68
- "vite": "catalog:vite-plugin",
68
+ "vite": "catalog:default",
69
69
  "vite-legacy": "npm:vite@7.1.12",
70
- "vitest": "catalog:vitest-3"
70
+ "vitest": "catalog:default"
71
71
  },
72
72
  peerDependencies: {
73
73
  "vite": "^6.1.0 || ^7.0.0 || ^8.0.0",
@@ -78,4 +78,4 @@ var package_default = {
78
78
 
79
79
  //#endregion
80
80
  export { package_default as default };
81
- //# sourceMappingURL=package--uDsBjBd.mjs.map
81
+ //# sourceMappingURL=package-DrJ1WABg.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"package--uDsBjBd.mjs","names":[],"sources":["../package.json"],"sourcesContent":["{\n\t\"name\": \"@cloudflare/vite-plugin\",\n\t\"version\": \"1.30.0\",\n\t\"description\": \"Cloudflare plugin for Vite\",\n\t\"keywords\": [\n\t\t\"cloudflare\",\n\t\t\"cloudflare-workers\",\n\t\t\"vite\",\n\t\t\"vite-plugin\",\n\t\t\"workers\"\n\t],\n\t\"homepage\": \"https://github.com/cloudflare/workers-sdk/tree/main/packages/vite-plugin-cloudflare#readme\",\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/cloudflare/workers-sdk/issues\"\n\t},\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/cloudflare/workers-sdk.git\",\n\t\t\"directory\": \"packages/vite-plugin-cloudflare\"\n\t},\n\t\"files\": [\n\t\t\"dist\"\n\t],\n\t\"type\": \"module\",\n\t\"sideEffects\": false,\n\t\"main\": \"./dist/index.mjs\",\n\t\"types\": \"./dist/index.d.mts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.mts\",\n\t\t\t\"import\": \"./dist/index.mjs\"\n\t\t}\n\t},\n\t\"publishConfig\": {\n\t\t\"access\": \"public\"\n\t},\n\t\"scripts\": {\n\t\t\"build\": \"tsdown\",\n\t\t\"check:type\": \"tsc --build\",\n\t\t\"dev\": \"tsdown --watch\",\n\t\t\"test\": \"vitest run\",\n\t\t\"test:ci\": \"pnpm test\",\n\t\t\"test:e2e\": \"vitest run -c e2e/vitest.config.ts\",\n\t\t\"test:watch\": \"vitest\"\n\t},\n\t\"dependencies\": {\n\t\t\"@cloudflare/unenv-preset\": \"workspace:*\",\n\t\t\"miniflare\": \"workspace:*\",\n\t\t\"unenv\": \"2.0.0-rc.24\",\n\t\t\"wrangler\": \"workspace:*\",\n\t\t\"ws\": \"catalog:default\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@cloudflare/containers-shared\": \"workspace:*\",\n\t\t\"@cloudflare/mock-npm-registry\": \"workspace:*\",\n\t\t\"@cloudflare/workers-shared\": \"workspace:*\",\n\t\t\"@cloudflare/workers-tsconfig\": \"workspace:*\",\n\t\t\"@cloudflare/workers-types\": \"catalog:default\",\n\t\t\"@cloudflare/workers-utils\": \"workspace:*\",\n\t\t\"@remix-run/node-fetch-server\": \"^0.8.0\",\n\t\t\"@types/node\": \"catalog:vite-plugin\",\n\t\t\"@types/semver\": \"^7.5.1\",\n\t\t\"@types/ws\": \"^8.5.13\",\n\t\t\"defu\": \"^6.1.4\",\n\t\t\"get-port\": \"^7.1.0\",\n\t\t\"magic-string\": \"^0.30.12\",\n\t\t\"mlly\": \"^1.7.4\",\n\t\t\"picocolors\": \"^1.1.1\",\n\t\t\"semver\": \"^7.7.1\",\n\t\t\"tinyglobby\": \"^0.2.12\",\n\t\t\"tree-kill\": \"catalog:default\",\n\t\t\"tsdown\": \"0.16.3\",\n\t\t\"typescript\": \"catalog:default\",\n\t\t\"vite\": \"catalog:vite-plugin\",\n\t\t\"vite-legacy\": \"npm:vite@7.1.12\",\n\t\t\"vitest\": \"catalog:vitest-3\"\n\t},\n\t\"peerDependencies\": {\n\t\t\"vite\": \"^6.1.0 || ^7.0.0 || ^8.0.0\",\n\t\t\"wrangler\": \"workspace:^\"\n\t},\n\t\"workers-sdk\": {\n\t\t\"prerelease\": true\n\t}\n}\n"],"mappings":";sBAAA;OACS;UACG;cACI;WACH;EACX;EACA;EACA;EACA;EACA;EACA;WACW;OACJ,EACP,OAAO,oDACP;UACU;aACG;EACb,QAAQ;EACR,OAAO;EACP,aAAa;EACb;QACQ,CACR,OACA;OACO;cACO;OACP;QACC;UACE,EACV,KAAK;EACJ,SAAS;EACT,UAAU;EACV,EACD;gBACgB,EAChB,UAAU,UACV;UACU;EACV,SAAS;EACT,cAAc;EACd,OAAO;EACP,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,cAAc;EACd;eACe;EACf,4BAA4B;EAC5B,aAAa;EACb,SAAS;EACT,YAAY;EACZ,MAAM;EACN;kBACkB;EAClB,iCAAiC;EACjC,iCAAiC;EACjC,8BAA8B;EAC9B,gCAAgC;EAChC,6BAA6B;EAC7B,6BAA6B;EAC7B,gCAAgC;EAChC,eAAe;EACf,iBAAiB;EACjB,aAAa;EACb,QAAQ;EACR,YAAY;EACZ,gBAAgB;EAChB,QAAQ;EACR,cAAc;EACd,UAAU;EACV,cAAc;EACd,aAAa;EACb,UAAU;EACV,cAAc;EACd,QAAQ;EACR,eAAe;EACf,UAAU;EACV;mBACmB;EACnB,QAAQ;EACR,YAAY;EACZ;CACD,eAAe,EACd,cAAc,MACd;CACD"}
1
+ {"version":3,"file":"package-DrJ1WABg.mjs","names":[],"sources":["../package.json"],"sourcesContent":["{\n\t\"name\": \"@cloudflare/vite-plugin\",\n\t\"version\": \"1.30.2\",\n\t\"description\": \"Cloudflare plugin for Vite\",\n\t\"keywords\": [\n\t\t\"cloudflare\",\n\t\t\"cloudflare-workers\",\n\t\t\"vite\",\n\t\t\"vite-plugin\",\n\t\t\"workers\"\n\t],\n\t\"homepage\": \"https://github.com/cloudflare/workers-sdk/tree/main/packages/vite-plugin-cloudflare#readme\",\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/cloudflare/workers-sdk/issues\"\n\t},\n\t\"license\": \"MIT\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/cloudflare/workers-sdk.git\",\n\t\t\"directory\": \"packages/vite-plugin-cloudflare\"\n\t},\n\t\"files\": [\n\t\t\"dist\"\n\t],\n\t\"type\": \"module\",\n\t\"sideEffects\": false,\n\t\"main\": \"./dist/index.mjs\",\n\t\"types\": \"./dist/index.d.mts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.mts\",\n\t\t\t\"import\": \"./dist/index.mjs\"\n\t\t}\n\t},\n\t\"publishConfig\": {\n\t\t\"access\": \"public\"\n\t},\n\t\"scripts\": {\n\t\t\"build\": \"tsdown\",\n\t\t\"check:type\": \"tsc --build\",\n\t\t\"dev\": \"tsdown --watch\",\n\t\t\"test\": \"vitest run\",\n\t\t\"test:ci\": \"pnpm test\",\n\t\t\"test:e2e\": \"vitest run -c e2e/vitest.config.ts\",\n\t\t\"test:watch\": \"vitest\"\n\t},\n\t\"dependencies\": {\n\t\t\"@cloudflare/unenv-preset\": \"workspace:*\",\n\t\t\"miniflare\": \"workspace:*\",\n\t\t\"unenv\": \"2.0.0-rc.24\",\n\t\t\"wrangler\": \"workspace:*\",\n\t\t\"ws\": \"catalog:default\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@cloudflare/containers-shared\": \"workspace:*\",\n\t\t\"@cloudflare/mock-npm-registry\": \"workspace:*\",\n\t\t\"@cloudflare/workers-shared\": \"workspace:*\",\n\t\t\"@cloudflare/workers-tsconfig\": \"workspace:*\",\n\t\t\"@cloudflare/workers-types\": \"catalog:default\",\n\t\t\"@cloudflare/workers-utils\": \"workspace:*\",\n\t\t\"@remix-run/node-fetch-server\": \"^0.8.0\",\n\t\t\"@types/node\": \"catalog:default\",\n\t\t\"@types/semver\": \"^7.5.1\",\n\t\t\"@types/ws\": \"^8.5.13\",\n\t\t\"defu\": \"^6.1.4\",\n\t\t\"get-port\": \"^7.1.0\",\n\t\t\"magic-string\": \"^0.30.12\",\n\t\t\"mlly\": \"^1.7.4\",\n\t\t\"picocolors\": \"^1.1.1\",\n\t\t\"semver\": \"^7.7.1\",\n\t\t\"tinyglobby\": \"^0.2.12\",\n\t\t\"tree-kill\": \"catalog:default\",\n\t\t\"tsdown\": \"0.16.3\",\n\t\t\"typescript\": \"catalog:default\",\n\t\t\"vite\": \"catalog:default\",\n\t\t\"vite-legacy\": \"npm:vite@7.1.12\",\n\t\t\"vitest\": \"catalog:default\"\n\t},\n\t\"peerDependencies\": {\n\t\t\"vite\": \"^6.1.0 || ^7.0.0 || ^8.0.0\",\n\t\t\"wrangler\": \"workspace:^\"\n\t},\n\t\"workers-sdk\": {\n\t\t\"prerelease\": true\n\t}\n}\n"],"mappings":";sBAAA;OACS;UACG;cACI;WACH;EACX;EACA;EACA;EACA;EACA;EACA;WACW;OACJ,EACP,OAAO,oDACP;UACU;aACG;EACb,QAAQ;EACR,OAAO;EACP,aAAa;EACb;QACQ,CACR,OACA;OACO;cACO;OACP;QACC;UACE,EACV,KAAK;EACJ,SAAS;EACT,UAAU;EACV,EACD;gBACgB,EAChB,UAAU,UACV;UACU;EACV,SAAS;EACT,cAAc;EACd,OAAO;EACP,QAAQ;EACR,WAAW;EACX,YAAY;EACZ,cAAc;EACd;eACe;EACf,4BAA4B;EAC5B,aAAa;EACb,SAAS;EACT,YAAY;EACZ,MAAM;EACN;kBACkB;EAClB,iCAAiC;EACjC,iCAAiC;EACjC,8BAA8B;EAC9B,gCAAgC;EAChC,6BAA6B;EAC7B,6BAA6B;EAC7B,gCAAgC;EAChC,eAAe;EACf,iBAAiB;EACjB,aAAa;EACb,QAAQ;EACR,YAAY;EACZ,gBAAgB;EAChB,QAAQ;EACR,cAAc;EACd,UAAU;EACV,cAAc;EACd,aAAa;EACb,UAAU;EACV,cAAc;EACd,QAAQ;EACR,eAAe;EACf,UAAU;EACV;mBACmB;EACnB,QAAQ;EACR,YAAY;EACZ;CACD,eAAe,EACd,cAAc,MACd;CACD"}
@@ -1,5 +1,5 @@
1
1
  import { DurableObject, WorkerEntrypoint, WorkflowEntrypoint } from "cloudflare:workers";
2
- import { ModuleRunner, ssrModuleExportsKey } from "vite/module-runner";
2
+ import { ModuleRunner, ssrDynamicImportKey, ssrModuleExportsKey } from "vite/module-runner";
3
3
 
4
4
  //#region src/shared.ts
5
5
  const UNKNOWN_HOST = "http://localhost";
@@ -84,41 +84,43 @@ const WORKFLOW_ENTRYPOINT_KEYS = ["run"];
84
84
 
85
85
  //#endregion
86
86
  //#region src/workers/runner-worker/module-runner.ts
87
- /**
88
- * Custom `ModuleRunner`.
89
- * The `cachedModule` method is overridden to ensure compatibility with the Workers runtime.
90
- */
91
- var CustomModuleRunner = class extends ModuleRunner {
92
- #env;
93
- #environmentName;
94
- constructor(options, evaluator, env, environmentName) {
95
- super(options, evaluator);
96
- this.#env = env;
97
- this.#environmentName = environmentName;
98
- }
99
- async cachedModule(url, importer) {
100
- const moduleId = await this.#env.__VITE_RUNNER_OBJECT__.get("singleton").getFetchedModuleId(this.#environmentName, url, importer);
101
- const module = this.evaluatedModules.getModuleById(moduleId);
102
- if (!module) throw new Error(`Module "${moduleId}" is undefined`);
103
- return module;
104
- }
105
- };
106
87
  /** Module runner instances keyed by environment name */
107
88
  const moduleRunners = /* @__PURE__ */ new Map();
108
89
  /** The parent environment name (set explicitly via IS_PARENT_ENVIRONMENT_HEADER) */
109
90
  let parentEnvironmentName;
91
+ let nextCallbackId = 0;
92
+ const pendingCallbacks = /* @__PURE__ */ new Map();
93
+ const callbackResults = /* @__PURE__ */ new Map();
94
+ /**
95
+ * Executes a callback in the runner Durable Object's IoContext via RPC + shared memory.
96
+ * The callback function is stored in a module-scope map (shared with the DO
97
+ * since both run in the same V8 isolate). Only a numeric ID crosses the RPC
98
+ * boundary.
99
+ */
100
+ async function runInRunnerObject(env, callback) {
101
+ const id = nextCallbackId++;
102
+ pendingCallbacks.set(id, callback);
103
+ try {
104
+ await env.__VITE_RUNNER_OBJECT__.get("singleton").executeCallback(id);
105
+ return callbackResults.get(id);
106
+ } finally {
107
+ pendingCallbacks.delete(id);
108
+ callbackResults.delete(id);
109
+ }
110
+ }
110
111
  /**
111
- * Durable Object that creates the module runner and handles WebSocket communication with the Vite dev server.
112
+ * Durable Object that provides an IoContext for module evaluation and handles
113
+ * WebSocket communication with the Vite dev server.
114
+ *
115
+ * In workerd, a Durable Object has a single shared IoContext across all
116
+ * incoming events, so promises are freely shareable within the DO without
117
+ * cross-context issues.
112
118
  */
113
119
  var __VITE_RUNNER_OBJECT__ = class extends DurableObject {
114
- /** Per-environment state containing WebSocket and concurrent module node promises */
115
- #environments = /* @__PURE__ */ new Map();
120
+ /** Per-environment WebSockets */
121
+ #webSockets = /* @__PURE__ */ new Map();
116
122
  /**
117
- * Handles fetch requests to initialize a module runner for an environment.
118
123
  * Creates a WebSocket pair for communication with the Vite dev server and initializes the ModuleRunner.
119
- * @param request - The incoming fetch request
120
- * @returns Response with WebSocket
121
- * @throws Error if the path is invalid or the module runner is already initialized
122
124
  */
123
125
  async fetch(request) {
124
126
  const { pathname } = new URL(request.url);
@@ -126,16 +128,19 @@ var __VITE_RUNNER_OBJECT__ = class extends DurableObject {
126
128
  const environmentName = request.headers.get(ENVIRONMENT_NAME_HEADER);
127
129
  if (!environmentName) throw new Error(`__VITE_RUNNER_OBJECT__ received request without "${ENVIRONMENT_NAME_HEADER}" header`);
128
130
  if (moduleRunners.has(environmentName)) throw new Error(`Module runner already initialized for environment: "${environmentName}"`);
129
- if (request.headers.get(IS_PARENT_ENVIRONMENT_HEADER) === "true") parentEnvironmentName = environmentName;
131
+ if (request.headers.get(IS_PARENT_ENVIRONMENT_HEADER) === "true") {
132
+ parentEnvironmentName = environmentName;
133
+ globalThis.__VITE_ENVIRONMENT_RUNNER_IMPORT__ = async (envName, id) => {
134
+ const runner = moduleRunners.get(envName);
135
+ if (!runner) throw new Error(`Module runner not initialized for environment: "${envName}". Do you need to set \`childEnvironments: ["${envName}"]\` in the plugin config?`);
136
+ return runInRunnerObject(this.env, () => runner.import(id));
137
+ };
138
+ }
130
139
  const { 0: client, 1: server } = new WebSocketPair();
131
140
  server.accept();
132
- const environmentState = {
133
- webSocket: server,
134
- concurrentModuleNodePromises: /* @__PURE__ */ new Map()
135
- };
136
- this.#environments.set(environmentName, environmentState);
137
- const moduleRunner = await createModuleRunner(this.env, environmentState.webSocket, environmentName);
141
+ const moduleRunner = await createModuleRunner(this.env, server, environmentName);
138
142
  moduleRunners.set(environmentName, moduleRunner);
143
+ this.#webSockets.set(environmentName, server);
139
144
  return new Response(null, {
140
145
  status: 101,
141
146
  webSocket: client
@@ -143,37 +148,22 @@ var __VITE_RUNNER_OBJECT__ = class extends DurableObject {
143
148
  }
144
149
  /**
145
150
  * Sends data to the Vite dev server via the WebSocket for a specific environment.
146
- * @param environmentName - The environment name
147
- * @param data - The data to send as a string
148
- * @throws Error if the WebSocket is not initialized
149
151
  */
150
152
  send(environmentName, data) {
151
- const environmentState = this.#environments.get(environmentName);
152
- if (!environmentState) throw new Error(`Module runner WebSocket not initialized for environment: "${environmentName}"`);
153
- environmentState.webSocket.send(data);
153
+ const webSocket = this.#webSockets.get(environmentName);
154
+ if (!webSocket) throw new Error(`Module runner not initialized for environment: "${environmentName}"`);
155
+ webSocket.send(data);
154
156
  }
155
157
  /**
156
- * Based on the implementation of `cachedModule` from Vite's `ModuleRunner`.
157
- * Running this in the DO enables us to share promises across invocations.
158
- * @param environmentName - The environment name
159
- * @param url - The module URL
160
- * @param importer - The module's importer
161
- * @returns The ID of the fetched module
158
+ * Executes a callback stored in the module-scope `pendingCallbacks` map.
159
+ * The callback runs in the DO's IoContext, ensuring all promises created
160
+ * during execution belong to the DO's shared context.
162
161
  */
163
- async getFetchedModuleId(environmentName, url, importer) {
164
- const moduleRunner = moduleRunners.get(environmentName);
165
- if (!moduleRunner) throw new Error(`Module runner not initialized for environment: "${environmentName}"`);
166
- const environmentState = this.#environments.get(environmentName);
167
- if (!environmentState) throw new Error(`Environment state not found for environment: "${environmentName}"`);
168
- let cached = environmentState.concurrentModuleNodePromises.get(url);
169
- if (!cached) {
170
- const cachedModule = moduleRunner.evaluatedModules.getModuleByUrl(url);
171
- cached = moduleRunner.getModuleInformation(url, importer, cachedModule).finally(() => {
172
- environmentState.concurrentModuleNodePromises.delete(url);
173
- });
174
- environmentState.concurrentModuleNodePromises.set(url, cached);
175
- } else moduleRunner.debug?.("[module runner] using cached module info for", url);
176
- return (await cached).id;
162
+ async executeCallback(id) {
163
+ const callback = pendingCallbacks.get(id);
164
+ if (!callback) throw new Error(`No pending callback with id ${id}`);
165
+ const result = await callback();
166
+ callbackResults.set(id, result);
177
167
  }
178
168
  };
179
169
  /**
@@ -184,7 +174,7 @@ var __VITE_RUNNER_OBJECT__ = class extends DurableObject {
184
174
  * @returns Configured module runner instance
185
175
  */
186
176
  async function createModuleRunner(env, webSocket, environmentName) {
187
- return new CustomModuleRunner({
177
+ return new ModuleRunner({
188
178
  sourcemapInterceptor: "prepareStackTrace",
189
179
  transport: {
190
180
  connect({ onMessage }) {
@@ -214,6 +204,10 @@ async function createModuleRunner(env, webSocket, environmentName) {
214
204
  hmr: true
215
205
  }, {
216
206
  async runInlinedModule(context, transformed, module) {
207
+ const originalDynamicImport = context[ssrDynamicImportKey];
208
+ context[ssrDynamicImportKey] = (dep) => {
209
+ return runInRunnerObject(env, () => originalDynamicImport(dep));
210
+ };
217
211
  const code = `"use strict";async (${Object.keys(context).join(",")})=>{${transformed}}`;
218
212
  await env.__VITE_UNSAFE_EVAL__.eval(code, module.id)(...Object.values(context));
219
213
  Object.seal(context[ssrModuleExportsKey]);
@@ -228,44 +222,26 @@ async function createModuleRunner(env, webSocket, environmentName) {
228
222
  }
229
223
  return import(filepath);
230
224
  }
231
- }, env, environmentName);
225
+ });
232
226
  }
233
227
  /**
234
228
  * Retrieves a specific export from a Worker entry module using the module runner.
235
- * @param workerEntryPath - Path to the Worker entry module
236
- * @param exportName - Name of the export to retrieve
237
- * @returns The requested export value
238
- * @throws Error if the module runner has not been initialized or the module does not define the requested export
239
229
  */
240
230
  async function getWorkerEntryExport(workerEntryPath$1, exportName) {
241
231
  if (!parentEnvironmentName) throw new Error(`Parent environment not initialized`);
242
- const moduleRunner = moduleRunners.get(parentEnvironmentName);
243
- if (!moduleRunner) throw new Error(`Module runner not initialized`);
244
- const module = await moduleRunner.import(VIRTUAL_WORKER_ENTRY);
232
+ const module = await globalThis.__VITE_ENVIRONMENT_RUNNER_IMPORT__(parentEnvironmentName, VIRTUAL_WORKER_ENTRY);
245
233
  const exportValue = typeof module === "object" && module !== null && exportName in module && module[exportName];
246
234
  if (!exportValue) throw new Error(`"${workerEntryPath$1}" does not define a "${exportName}" export.`);
247
235
  return exportValue;
248
236
  }
249
- async function getWorkerEntryExportTypes() {
250
- if (!parentEnvironmentName) throw new Error(`Parent environment not initialized`);
251
- const moduleRunner = moduleRunners.get(parentEnvironmentName);
252
- if (!moduleRunner) throw new Error(`Module runner not initialized`);
253
- const { getExportTypes } = await moduleRunner.import(VIRTUAL_EXPORT_TYPES);
254
- return getExportTypes(await moduleRunner.import(VIRTUAL_WORKER_ENTRY));
255
- }
256
237
  /**
257
- * Imports a module from a specific environment's module runner.
258
- * @param environmentName - The name of the environment to import from
259
- * @param id - The module ID to import
260
- * @returns The imported module
261
- * @throws Error if the environment's module runner has not been initialized
238
+ * Retrieves the export types of the Worker entry module.
262
239
  */
263
- async function importFromEnvironment(environmentName, id) {
264
- const moduleRunner = moduleRunners.get(environmentName);
265
- if (!moduleRunner) throw new Error(`Module runner not initialized for environment: "${environmentName}". Do you need to set \`childEnvironments: ["${environmentName}"]\` in the plugin config?`);
266
- return moduleRunner.import(id);
240
+ async function getWorkerEntryExportTypes() {
241
+ if (!parentEnvironmentName) throw new Error(`Parent environment not initialized`);
242
+ const { getExportTypes } = await globalThis.__VITE_ENVIRONMENT_RUNNER_IMPORT__(parentEnvironmentName, VIRTUAL_EXPORT_TYPES);
243
+ return getExportTypes(await globalThis.__VITE_ENVIRONMENT_RUNNER_IMPORT__(parentEnvironmentName, VIRTUAL_WORKER_ENTRY));
267
244
  }
268
- globalThis.__VITE_ENVIRONMENT_RUNNER_IMPORT__ = importFromEnvironment;
269
245
 
270
246
  //#endregion
271
247
  //#region src/workers/runner-worker/index.ts
@@ -1,4 +1,4 @@
1
- //#region ../../node_modules/.pnpm/vite@7.1.12_@types+node@20.19.9_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.8.1/node_modules/vite/dist/node/module-runner.js
1
+ //#region ../../node_modules/.pnpm/vite@7.1.12_@types+node@22.15.17_jiti@2.6.1_lightningcss@1.32.0_tsx@4.21.0_yaml@2.8.1/node_modules/vite/dist/node/module-runner.js
2
2
  let SOURCEMAPPING_URL = "sourceMa";
3
3
  SOURCEMAPPING_URL += "ppingURL";
4
4
  const isWindows = typeof process < "u" && process.platform === "win32";
@@ -1,4 +1,4 @@
1
- //#region ../../node_modules/.pnpm/vite@8.0.0_@types+node@20.19.9_esbuild@0.27.3_jiti@2.6.1_tsx@4.21.0_yaml@2.8.1/node_modules/vite/dist/node/module-runner.js
1
+ //#region ../../node_modules/.pnpm/vite@8.0.1_@types+node@22.15.17_esbuild@0.27.3_jiti@2.6.1_tsx@4.21.0_yaml@2.8.1/node_modules/vite/dist/node/module-runner.js
2
2
  let SOURCEMAPPING_URL = "sourceMa";
3
3
  SOURCEMAPPING_URL += "ppingURL";
4
4
  const isWindows = typeof process < "u" && process.platform === "win32";
@@ -500,7 +500,7 @@ function analyzeImportedModDifference(mod, rawId, moduleType, metadata) {
500
500
  let missingBindings = metadata.importedNames.filter((s) => !(s in mod));
501
501
  if (missingBindings.length) {
502
502
  let lastBinding = missingBindings[missingBindings.length - 1];
503
- throw moduleType === "module" ? SyntaxError(`[vite] The requested module '${rawId}' does not provide an export named '${lastBinding}'`) : SyntaxError(`\
503
+ throw SyntaxError(moduleType === "module" ? `[vite] The requested module '${rawId}' does not provide an export named '${lastBinding}'` : `\
504
504
  [vite] Named export '${lastBinding}' not found. The requested module '${rawId}' is a CommonJS module, which may not support all module.exports as named exports.
505
505
  CommonJS modules can always be imported via the default export, for example using:
506
506
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudflare/vite-plugin",
3
- "version": "1.30.0",
3
+ "version": "1.30.2",
4
4
  "description": "Cloudflare plugin for Vite",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -39,8 +39,8 @@
39
39
  "unenv": "2.0.0-rc.24",
40
40
  "ws": "8.18.0",
41
41
  "@cloudflare/unenv-preset": "2.16.0",
42
- "miniflare": "4.20260317.1",
43
- "wrangler": "4.76.0"
42
+ "miniflare": "4.20260317.3",
43
+ "wrangler": "4.78.0"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@cloudflare/workers-types": "^4.20260317.1",
@@ -60,16 +60,16 @@
60
60
  "typescript": "~5.8.3",
61
61
  "vite": "^8.0.0",
62
62
  "vite-legacy": "npm:vite@7.1.12",
63
- "vitest": "3.2.4",
64
- "@cloudflare/containers-shared": "0.13.0",
63
+ "vitest": "4.1.0",
64
+ "@cloudflare/containers-shared": "0.13.1",
65
65
  "@cloudflare/workers-shared": "0.19.1",
66
+ "@cloudflare/mock-npm-registry": "0.0.0",
66
67
  "@cloudflare/workers-tsconfig": "0.0.0",
67
- "@cloudflare/workers-utils": "0.13.0",
68
- "@cloudflare/mock-npm-registry": "0.0.0"
68
+ "@cloudflare/workers-utils": "0.14.0"
69
69
  },
70
70
  "peerDependencies": {
71
71
  "vite": "^6.1.0 || ^7.0.0 || ^8.0.0",
72
- "wrangler": "^4.76.0"
72
+ "wrangler": "^4.78.0"
73
73
  },
74
74
  "workers-sdk": {
75
75
  "prerelease": true