@cloudflare/vite-plugin 0.0.0-40040de6d → 0.0.0-40dd603b8

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.
@@ -2476,7 +2476,7 @@ var ADDITIONAL_MODULE_TYPES = [
2476
2476
 
2477
2477
  // src/shared.ts
2478
2478
  var UNKNOWN_HOST = "http://localhost";
2479
- var ADDITIONAL_MODULE_PATTERN = `__CLOUDFLARE_MODULE__(${ADDITIONAL_MODULE_TYPES.join("|")})__(.*?)__`;
2479
+ var ADDITIONAL_MODULE_PATTERN = `__CLOUDFLARE_MODULE__(${ADDITIONAL_MODULE_TYPES.join("|")})__(.*?)__CLOUDFLARE_MODULE__`;
2480
2480
  var additionalModuleRE = new RegExp(ADDITIONAL_MODULE_PATTERN);
2481
2481
  var additionalModuleGlobalRE = new RegExp(
2482
2482
  ADDITIONAL_MODULE_PATTERN,
package/dist/index.d.ts CHANGED
@@ -21,6 +21,8 @@ interface PluginConfig extends EntryWorkerConfig {
21
21
  experimental?: {
22
22
  /** Experimental support for handling the _headers and _redirects files during Vite dev mode. */
23
23
  headersAndRedirectsDevModeSupport?: boolean;
24
+ /** Experimental support for mixed mode (where bindings configured with `remote: true` access remote resources). */
25
+ mixedMode?: boolean;
24
26
  };
25
27
  }
26
28
 
package/dist/index.js CHANGED
@@ -1589,7 +1589,7 @@ function matchAdditionalModule(source) {
1589
1589
  return null;
1590
1590
  }
1591
1591
  function createModuleReference(type, id) {
1592
- return `__CLOUDFLARE_MODULE__${type}__${id}__`;
1592
+ return `__CLOUDFLARE_MODULE__${type}__${id}__CLOUDFLARE_MODULE__`;
1593
1593
  }
1594
1594
 
1595
1595
  // src/asset-config.ts
@@ -12993,7 +12993,7 @@ var NodeJsCompatWarnings = class {
12993
12993
  // src/shared.ts
12994
12994
  var UNKNOWN_HOST = "http://localhost";
12995
12995
  var INIT_PATH = "/__vite_plugin_cloudflare_init__";
12996
- var ADDITIONAL_MODULE_PATTERN = `__CLOUDFLARE_MODULE__(${ADDITIONAL_MODULE_TYPES.join("|")})__(.*?)__`;
12996
+ var ADDITIONAL_MODULE_PATTERN = `__CLOUDFLARE_MODULE__(${ADDITIONAL_MODULE_TYPES.join("|")})__(.*?)__CLOUDFLARE_MODULE__`;
12997
12997
  var additionalModuleRE = new RegExp(ADDITIONAL_MODULE_PATTERN);
12998
12998
  var additionalModuleGlobalRE = new RegExp(
12999
12999
  ADDITIONAL_MODULE_PATTERN,
@@ -13345,10 +13345,15 @@ import {
13345
13345
  import colors2 from "picocolors";
13346
13346
  import { globSync } from "tinyglobby";
13347
13347
  import "vite";
13348
- import { unstable_getMiniflareWorkerOptions } from "wrangler";
13349
- function getPersistence(root, persistState) {
13348
+ import {
13349
+ experimental_pickRemoteBindings,
13350
+ experimental_startMixedModeSession,
13351
+ unstable_convertConfigBindingsToStartWorkerBindings,
13352
+ unstable_getMiniflareWorkerOptions
13353
+ } from "wrangler";
13354
+ function getPersistenceRoot(root, persistState) {
13350
13355
  if (persistState === false) {
13351
- return {};
13356
+ return;
13352
13357
  }
13353
13358
  const defaultPersistPath = ".wrangler/state";
13354
13359
  const persistPath = path6.resolve(
@@ -13356,14 +13361,7 @@ function getPersistence(root, persistState) {
13356
13361
  typeof persistState === "object" ? persistState.path : defaultPersistPath,
13357
13362
  "v3"
13358
13363
  );
13359
- return {
13360
- cachePersist: path6.join(persistPath, "cache"),
13361
- d1Persist: path6.join(persistPath, "d1"),
13362
- durableObjectsPersist: path6.join(persistPath, "do"),
13363
- kvPersist: path6.join(persistPath, "kv"),
13364
- r2Persist: path6.join(persistPath, "r2"),
13365
- workflowsPersist: path6.join(persistPath, "workflows")
13366
- };
13364
+ return persistPath;
13367
13365
  }
13368
13366
  function missingWorkerErrorMessage(workerName) {
13369
13367
  return `${workerName} does not match a worker name.`;
@@ -13470,7 +13468,7 @@ function filterTails(tails, userWorkers, log) {
13470
13468
  return found;
13471
13469
  });
13472
13470
  }
13473
- function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPort) {
13471
+ async function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPort) {
13474
13472
  const resolvedViteConfig = viteDevServer.config;
13475
13473
  const entryWorkerConfig = getEntryWorkerConfig(resolvedPluginConfig);
13476
13474
  const assetsConfig = getAssetsConfig(
@@ -13546,53 +13544,60 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13546
13544
  }
13547
13545
  }
13548
13546
  ];
13549
- const workersFromConfig = resolvedPluginConfig.type === "workers" ? Object.entries(resolvedPluginConfig.workers).map(
13550
- ([environmentName, workerConfig]) => {
13551
- const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(
13552
- {
13553
- ...workerConfig,
13554
- assets: void 0
13555
- },
13556
- resolvedPluginConfig.cloudflareEnv
13557
- );
13558
- const { externalWorkers: externalWorkers2 } = miniflareWorkerOptions;
13559
- const { ratelimits, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13560
- return {
13561
- externalWorkers: externalWorkers2,
13562
- worker: {
13563
- ...workerOptions,
13564
- name: workerOptions.name ?? workerConfig.name,
13565
- unsafeInspectorProxy: inspectorPort !== false,
13566
- modulesRoot: miniflareModulesRoot,
13567
- unsafeEvalBinding: "__VITE_UNSAFE_EVAL__",
13568
- serviceBindings: {
13569
- ...workerOptions.serviceBindings,
13570
- ...environmentName === resolvedPluginConfig.entryWorkerEnvironmentName && workerConfig.assets?.binding ? {
13571
- [workerConfig.assets.binding]: ASSET_WORKER_NAME
13572
- } : {},
13573
- __VITE_INVOKE_MODULE__: async (request) => {
13574
- const payload = await request.json();
13575
- const invokePayloadData = payload.data;
13576
- assert6(
13577
- invokePayloadData.name === "fetchModule",
13578
- `Invalid invoke event: ${invokePayloadData.name}`
13579
- );
13580
- const [moduleId] = invokePayloadData.data;
13581
- if (additionalModuleRE.test(moduleId)) {
13582
- const result2 = {
13583
- externalize: moduleId,
13584
- type: "module"
13585
- };
13586
- return MiniflareResponse.json({ result: result2 });
13547
+ const workersFromConfig = resolvedPluginConfig.type === "workers" ? await Promise.all(
13548
+ Object.entries(resolvedPluginConfig.workers).map(
13549
+ async ([environmentName, workerConfig]) => {
13550
+ const mixedModeSession = resolvedPluginConfig.experimental.mixedMode ? await maybeStartOrUpdateMixedModeSession(workerConfig) : void 0;
13551
+ const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(
13552
+ {
13553
+ ...workerConfig,
13554
+ assets: void 0
13555
+ },
13556
+ resolvedPluginConfig.cloudflareEnv,
13557
+ {
13558
+ mixedModeConnectionString: mixedModeSession?.mixedModeConnectionString,
13559
+ mixedModeEnabled: resolvedPluginConfig.experimental.mixedMode
13560
+ }
13561
+ );
13562
+ const { externalWorkers: externalWorkers2 } = miniflareWorkerOptions;
13563
+ const { ratelimits, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13564
+ return {
13565
+ externalWorkers: externalWorkers2,
13566
+ worker: {
13567
+ ...workerOptions,
13568
+ name: workerOptions.name ?? workerConfig.name,
13569
+ unsafeInspectorProxy: inspectorPort !== false,
13570
+ modulesRoot: miniflareModulesRoot,
13571
+ unsafeEvalBinding: "__VITE_UNSAFE_EVAL__",
13572
+ serviceBindings: {
13573
+ ...workerOptions.serviceBindings,
13574
+ ...environmentName === resolvedPluginConfig.entryWorkerEnvironmentName && workerConfig.assets?.binding ? {
13575
+ [workerConfig.assets.binding]: ASSET_WORKER_NAME
13576
+ } : {},
13577
+ __VITE_INVOKE_MODULE__: async (request) => {
13578
+ const payload = await request.json();
13579
+ const invokePayloadData = payload.data;
13580
+ assert6(
13581
+ invokePayloadData.name === "fetchModule",
13582
+ `Invalid invoke event: ${invokePayloadData.name}`
13583
+ );
13584
+ const [moduleId] = invokePayloadData.data;
13585
+ if (additionalModuleRE.test(moduleId)) {
13586
+ const result2 = {
13587
+ externalize: moduleId,
13588
+ type: "module"
13589
+ };
13590
+ return MiniflareResponse.json({ result: result2 });
13591
+ }
13592
+ const devEnvironment = viteDevServer.environments[environmentName];
13593
+ const result = await devEnvironment.hot.handleInvoke(payload);
13594
+ return MiniflareResponse.json(result);
13587
13595
  }
13588
- const devEnvironment = viteDevServer.environments[environmentName];
13589
- const result = await devEnvironment.hot.handleInvoke(payload);
13590
- return MiniflareResponse.json(result);
13591
13596
  }
13592
13597
  }
13593
- }
13594
- };
13595
- }
13598
+ };
13599
+ }
13600
+ )
13596
13601
  ) : [];
13597
13602
  const userWorkers = workersFromConfig.map((options) => options.worker);
13598
13603
  const externalWorkers = workersFromConfig.flatMap(
@@ -13604,6 +13609,7 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13604
13609
  const logger = new ViteMiniflareLogger(resolvedViteConfig);
13605
13610
  return {
13606
13611
  log: logger,
13612
+ logRequests: false,
13607
13613
  inspectorPort: inspectorPort === false ? void 0 : inspectorPort,
13608
13614
  unsafeInspectorProxy: inspectorPort !== false,
13609
13615
  handleRuntimeStdio(stdout, stderr) {
@@ -13613,7 +13619,7 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13613
13619
  (error) => logger.logWithLevel(LogLevel.ERROR, decoder.decode(error))
13614
13620
  );
13615
13621
  },
13616
- ...getPersistence(
13622
+ defaultPersistRoot: getPersistenceRoot(
13617
13623
  resolvedViteConfig.root,
13618
13624
  resolvedPluginConfig.persistState
13619
13625
  ),
@@ -13747,27 +13753,37 @@ function getPreviewModules(main, modulesRules) {
13747
13753
  ]
13748
13754
  };
13749
13755
  }
13750
- function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistState, inspectorPort) {
13756
+ async function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistState, mixedModeEnabled, inspectorPort) {
13751
13757
  const resolvedViteConfig = vitePreviewServer.config;
13752
- const workers = workerConfigs.flatMap((config) => {
13753
- const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(config);
13754
- const { externalWorkers } = miniflareWorkerOptions;
13755
- const { ratelimits, modulesRules, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13756
- return [
13757
- {
13758
- ...workerOptions,
13759
- tails: filterTails(
13760
- workerOptions.tails,
13761
- workerConfigs,
13762
- vitePreviewServer.config.logger.warn
13763
- ),
13764
- name: workerOptions.name ?? config.name,
13765
- unsafeInspectorProxy: inspectorPort !== false,
13766
- ...miniflareWorkerOptions.main ? getPreviewModules(miniflareWorkerOptions.main, modulesRules) : { modules: true, script: "" }
13767
- },
13768
- ...externalWorkers
13769
- ];
13770
- });
13758
+ const workers = (await Promise.all(
13759
+ workerConfigs.map(async (workerConfig) => {
13760
+ const mixedModeSession = mixedModeEnabled ? await maybeStartOrUpdateMixedModeSession(workerConfig) : void 0;
13761
+ const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(
13762
+ workerConfig,
13763
+ void 0,
13764
+ {
13765
+ mixedModeConnectionString: mixedModeSession?.mixedModeConnectionString,
13766
+ mixedModeEnabled
13767
+ }
13768
+ );
13769
+ const { externalWorkers } = miniflareWorkerOptions;
13770
+ const { ratelimits, modulesRules, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13771
+ return [
13772
+ {
13773
+ ...workerOptions,
13774
+ tails: filterTails(
13775
+ workerOptions.tails,
13776
+ workerConfigs,
13777
+ vitePreviewServer.config.logger.warn
13778
+ ),
13779
+ name: workerOptions.name ?? workerConfig.name,
13780
+ unsafeInspectorProxy: inspectorPort !== false,
13781
+ ...miniflareWorkerOptions.main ? getPreviewModules(miniflareWorkerOptions.main, modulesRules) : { modules: true, script: "" }
13782
+ },
13783
+ ...externalWorkers
13784
+ ];
13785
+ })
13786
+ )).flat();
13771
13787
  const logger = new ViteMiniflareLogger(resolvedViteConfig);
13772
13788
  return {
13773
13789
  log: logger,
@@ -13780,11 +13796,13 @@ function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistSta
13780
13796
  (error) => logger.logWithLevel(LogLevel.ERROR, decoder.decode(error))
13781
13797
  );
13782
13798
  },
13783
- ...getPersistence(resolvedViteConfig.root, persistState),
13799
+ defaultPersistRoot: getPersistenceRoot(
13800
+ resolvedViteConfig.root,
13801
+ persistState
13802
+ ),
13784
13803
  workers
13785
13804
  };
13786
13805
  }
13787
- var removedMessages = [/^Ready on http/, /^Updated and ready on http/];
13788
13806
  var ViteMiniflareLogger = class extends Log {
13789
13807
  logger;
13790
13808
  constructor(config) {
@@ -13792,11 +13810,6 @@ var ViteMiniflareLogger = class extends Log {
13792
13810
  this.logger = config.logger;
13793
13811
  }
13794
13812
  logWithLevel(level, message) {
13795
- for (const removedMessage of removedMessages) {
13796
- if (removedMessage.test(message)) {
13797
- return;
13798
- }
13799
- }
13800
13813
  switch (level) {
13801
13814
  case LogLevel.ERROR:
13802
13815
  return this.logger.error(message);
@@ -13806,6 +13819,8 @@ var ViteMiniflareLogger = class extends Log {
13806
13819
  return this.logger.info(message);
13807
13820
  }
13808
13821
  }
13822
+ logReady() {
13823
+ }
13809
13824
  };
13810
13825
  function miniflareLogLevelFromViteLogLevel(level = "info") {
13811
13826
  switch (level) {
@@ -13819,6 +13834,24 @@ function miniflareLogLevelFromViteLogLevel(level = "info") {
13819
13834
  return LogLevel.NONE;
13820
13835
  }
13821
13836
  }
13837
+ var mixedModeSessionsMap = /* @__PURE__ */ new Map();
13838
+ async function maybeStartOrUpdateMixedModeSession(workerConfig) {
13839
+ const workerRemoteBindings = experimental_pickRemoteBindings(
13840
+ unstable_convertConfigBindingsToStartWorkerBindings(workerConfig) ?? {}
13841
+ );
13842
+ assert6(workerConfig.name, "Found workerConfig without a name");
13843
+ let mixedModeSession = mixedModeSessionsMap.get(workerConfig.name);
13844
+ if (mixedModeSession === void 0) {
13845
+ if (Object.keys(workerRemoteBindings).length > 0) {
13846
+ mixedModeSession = await experimental_startMixedModeSession(workerRemoteBindings);
13847
+ mixedModeSessionsMap.set(workerConfig.name, mixedModeSession);
13848
+ }
13849
+ } else {
13850
+ await mixedModeSession.updateBindings(workerRemoteBindings);
13851
+ }
13852
+ await mixedModeSession?.ready;
13853
+ return mixedModeSession;
13854
+ }
13822
13855
 
13823
13856
  // src/plugin-config.ts
13824
13857
  import assert8 from "node:assert";
@@ -14452,22 +14485,15 @@ function cloudflare2(pluginConfig = {}) {
14452
14485
  pluginConfig,
14453
14486
  viteDevServer
14454
14487
  );
14488
+ const miniflareDevOptions = await getDevMiniflareOptions(
14489
+ resolvedPluginConfig,
14490
+ viteDevServer,
14491
+ inputInspectorPort
14492
+ );
14455
14493
  if (!miniflare) {
14456
- miniflare = new Miniflare(
14457
- getDevMiniflareOptions(
14458
- resolvedPluginConfig,
14459
- viteDevServer,
14460
- inputInspectorPort
14461
- )
14462
- );
14494
+ miniflare = new Miniflare(miniflareDevOptions);
14463
14495
  } else {
14464
- await miniflare.setOptions(
14465
- getDevMiniflareOptions(
14466
- resolvedPluginConfig,
14467
- viteDevServer,
14468
- inputInspectorPort
14469
- )
14470
- );
14496
+ await miniflare.setOptions(miniflareDevOptions);
14471
14497
  }
14472
14498
  await initRunners(resolvedPluginConfig, viteDevServer, miniflare);
14473
14499
  if (viteDevServer.httpServer) {
@@ -14506,10 +14532,11 @@ function cloudflare2(pluginConfig = {}) {
14506
14532
  vitePreviewServer
14507
14533
  );
14508
14534
  const miniflare2 = new Miniflare(
14509
- getPreviewMiniflareOptions(
14535
+ await getPreviewMiniflareOptions(
14510
14536
  vitePreviewServer,
14511
14537
  workerConfigs,
14512
14538
  pluginConfig.persistState ?? true,
14539
+ !!pluginConfig.experimental?.mixedMode,
14513
14540
  inputInspectorPort
14514
14541
  )
14515
14542
  );
@@ -15,7 +15,7 @@ var ADDITIONAL_MODULE_TYPES = [
15
15
  // src/shared.ts
16
16
  var UNKNOWN_HOST = "http://localhost";
17
17
  var INIT_PATH = "/__vite_plugin_cloudflare_init__";
18
- var ADDITIONAL_MODULE_PATTERN = `__CLOUDFLARE_MODULE__(${ADDITIONAL_MODULE_TYPES.join("|")})__(.*?)__`;
18
+ var ADDITIONAL_MODULE_PATTERN = `__CLOUDFLARE_MODULE__(${ADDITIONAL_MODULE_TYPES.join("|")})__(.*?)__CLOUDFLARE_MODULE__`;
19
19
  var additionalModuleRE = new RegExp(ADDITIONAL_MODULE_PATTERN);
20
20
  var additionalModuleGlobalRE = new RegExp(
21
21
  ADDITIONAL_MODULE_PATTERN,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudflare/vite-plugin",
3
- "version": "0.0.0-40040de6d",
3
+ "version": "0.0.0-40dd603b8",
4
4
  "description": "Cloudflare plugin for Vite",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -41,11 +41,11 @@
41
41
  "tinyglobby": "^0.2.12",
42
42
  "unenv": "2.0.0-rc.17",
43
43
  "ws": "8.18.0",
44
- "miniflare": "0.0.0-40040de6d",
45
- "wrangler": "0.0.0-40040de6d"
44
+ "miniflare": "0.0.0-40dd603b8",
45
+ "wrangler": "0.0.0-40dd603b8"
46
46
  },
47
47
  "devDependencies": {
48
- "@cloudflare/workers-types": "^4.20250508.0",
48
+ "@cloudflare/workers-types": "^4.20250525.0",
49
49
  "@types/node": "^22.10.1",
50
50
  "@types/ws": "^8.5.13",
51
51
  "magic-string": "^0.30.12",
@@ -56,8 +56,8 @@
56
56
  "vite": "^6.1.0",
57
57
  "vitest": "~3.1.1",
58
58
  "@cloudflare/mock-npm-registry": "0.0.0",
59
- "@cloudflare/workers-tsconfig": "0.0.0",
60
- "@cloudflare/workers-shared": "0.0.0-40040de6d"
59
+ "@cloudflare/workers-shared": "0.0.0-40dd603b8",
60
+ "@cloudflare/workers-tsconfig": "0.0.0"
61
61
  },
62
62
  "peerDependencies": {
63
63
  "vite": "^6.1.0",