@cloudflare/vite-plugin 1.2.4 → 1.3.1

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.
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
@@ -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,59 @@ 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
+ }
13560
+ );
13561
+ const { externalWorkers: externalWorkers2 } = miniflareWorkerOptions;
13562
+ const { ratelimits, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13563
+ return {
13564
+ externalWorkers: externalWorkers2,
13565
+ worker: {
13566
+ ...workerOptions,
13567
+ name: workerOptions.name ?? workerConfig.name,
13568
+ unsafeInspectorProxy: inspectorPort !== false,
13569
+ modulesRoot: miniflareModulesRoot,
13570
+ unsafeEvalBinding: "__VITE_UNSAFE_EVAL__",
13571
+ serviceBindings: {
13572
+ ...workerOptions.serviceBindings,
13573
+ ...environmentName === resolvedPluginConfig.entryWorkerEnvironmentName && workerConfig.assets?.binding ? {
13574
+ [workerConfig.assets.binding]: ASSET_WORKER_NAME
13575
+ } : {},
13576
+ __VITE_INVOKE_MODULE__: async (request) => {
13577
+ const payload = await request.json();
13578
+ const invokePayloadData = payload.data;
13579
+ assert6(
13580
+ invokePayloadData.name === "fetchModule",
13581
+ `Invalid invoke event: ${invokePayloadData.name}`
13582
+ );
13583
+ const [moduleId] = invokePayloadData.data;
13584
+ if (additionalModuleRE.test(moduleId)) {
13585
+ const result2 = {
13586
+ externalize: moduleId,
13587
+ type: "module"
13588
+ };
13589
+ return MiniflareResponse.json({ result: result2 });
13590
+ }
13591
+ const devEnvironment = viteDevServer.environments[environmentName];
13592
+ const result = await devEnvironment.hot.handleInvoke(payload);
13593
+ return MiniflareResponse.json(result);
13587
13594
  }
13588
- const devEnvironment = viteDevServer.environments[environmentName];
13589
- const result = await devEnvironment.hot.handleInvoke(payload);
13590
- return MiniflareResponse.json(result);
13591
13595
  }
13592
13596
  }
13593
- }
13594
- };
13595
- }
13597
+ };
13598
+ }
13599
+ )
13596
13600
  ) : [];
13597
13601
  const userWorkers = workersFromConfig.map((options) => options.worker);
13598
13602
  const externalWorkers = workersFromConfig.flatMap(
@@ -13604,6 +13608,7 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13604
13608
  const logger = new ViteMiniflareLogger(resolvedViteConfig);
13605
13609
  return {
13606
13610
  log: logger,
13611
+ logRequests: false,
13607
13612
  inspectorPort: inspectorPort === false ? void 0 : inspectorPort,
13608
13613
  unsafeInspectorProxy: inspectorPort !== false,
13609
13614
  handleRuntimeStdio(stdout, stderr) {
@@ -13613,7 +13618,7 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13613
13618
  (error) => logger.logWithLevel(LogLevel.ERROR, decoder.decode(error))
13614
13619
  );
13615
13620
  },
13616
- ...getPersistence(
13621
+ defaultPersistRoot: getPersistenceRoot(
13617
13622
  resolvedViteConfig.root,
13618
13623
  resolvedPluginConfig.persistState
13619
13624
  ),
@@ -13747,27 +13752,36 @@ function getPreviewModules(main, modulesRules) {
13747
13752
  ]
13748
13753
  };
13749
13754
  }
13750
- function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistState, inspectorPort) {
13755
+ async function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistState, mixedModeEnabled, inspectorPort) {
13751
13756
  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
- });
13757
+ const workers = (await Promise.all(
13758
+ workerConfigs.map(async (workerConfig) => {
13759
+ const mixedModeSession = mixedModeEnabled ? await maybeStartOrUpdateMixedModeSession(workerConfig) : void 0;
13760
+ const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(
13761
+ workerConfig,
13762
+ void 0,
13763
+ {
13764
+ mixedModeConnectionString: mixedModeSession?.mixedModeConnectionString
13765
+ }
13766
+ );
13767
+ const { externalWorkers } = miniflareWorkerOptions;
13768
+ const { ratelimits, modulesRules, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13769
+ return [
13770
+ {
13771
+ ...workerOptions,
13772
+ tails: filterTails(
13773
+ workerOptions.tails,
13774
+ workerConfigs,
13775
+ vitePreviewServer.config.logger.warn
13776
+ ),
13777
+ name: workerOptions.name ?? workerConfig.name,
13778
+ unsafeInspectorProxy: inspectorPort !== false,
13779
+ ...miniflareWorkerOptions.main ? getPreviewModules(miniflareWorkerOptions.main, modulesRules) : { modules: true, script: "" }
13780
+ },
13781
+ ...externalWorkers
13782
+ ];
13783
+ })
13784
+ )).flat();
13771
13785
  const logger = new ViteMiniflareLogger(resolvedViteConfig);
13772
13786
  return {
13773
13787
  log: logger,
@@ -13780,11 +13794,13 @@ function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistSta
13780
13794
  (error) => logger.logWithLevel(LogLevel.ERROR, decoder.decode(error))
13781
13795
  );
13782
13796
  },
13783
- ...getPersistence(resolvedViteConfig.root, persistState),
13797
+ defaultPersistRoot: getPersistenceRoot(
13798
+ resolvedViteConfig.root,
13799
+ persistState
13800
+ ),
13784
13801
  workers
13785
13802
  };
13786
13803
  }
13787
- var removedMessages = [/^Ready on http/, /^Updated and ready on http/];
13788
13804
  var ViteMiniflareLogger = class extends Log {
13789
13805
  logger;
13790
13806
  constructor(config) {
@@ -13792,11 +13808,6 @@ var ViteMiniflareLogger = class extends Log {
13792
13808
  this.logger = config.logger;
13793
13809
  }
13794
13810
  logWithLevel(level, message) {
13795
- for (const removedMessage of removedMessages) {
13796
- if (removedMessage.test(message)) {
13797
- return;
13798
- }
13799
- }
13800
13811
  switch (level) {
13801
13812
  case LogLevel.ERROR:
13802
13813
  return this.logger.error(message);
@@ -13806,6 +13817,8 @@ var ViteMiniflareLogger = class extends Log {
13806
13817
  return this.logger.info(message);
13807
13818
  }
13808
13819
  }
13820
+ logReady() {
13821
+ }
13809
13822
  };
13810
13823
  function miniflareLogLevelFromViteLogLevel(level = "info") {
13811
13824
  switch (level) {
@@ -13819,6 +13832,24 @@ function miniflareLogLevelFromViteLogLevel(level = "info") {
13819
13832
  return LogLevel.NONE;
13820
13833
  }
13821
13834
  }
13835
+ var mixedModeSessionsMap = /* @__PURE__ */ new Map();
13836
+ async function maybeStartOrUpdateMixedModeSession(workerConfig) {
13837
+ const workerRemoteBindings = experimental_pickRemoteBindings(
13838
+ unstable_convertConfigBindingsToStartWorkerBindings(workerConfig) ?? {}
13839
+ );
13840
+ assert6(workerConfig.name, "Found workerConfig without a name");
13841
+ let mixedModeSession = mixedModeSessionsMap.get(workerConfig.name);
13842
+ if (mixedModeSession === void 0) {
13843
+ if (Object.keys(workerRemoteBindings).length > 0) {
13844
+ mixedModeSession = await experimental_startMixedModeSession(workerRemoteBindings);
13845
+ mixedModeSessionsMap.set(workerConfig.name, mixedModeSession);
13846
+ }
13847
+ } else {
13848
+ await mixedModeSession.updateBindings(workerRemoteBindings);
13849
+ }
13850
+ await mixedModeSession?.ready;
13851
+ return mixedModeSession;
13852
+ }
13822
13853
 
13823
13854
  // src/plugin-config.ts
13824
13855
  import assert8 from "node:assert";
@@ -14452,22 +14483,15 @@ function cloudflare2(pluginConfig = {}) {
14452
14483
  pluginConfig,
14453
14484
  viteDevServer
14454
14485
  );
14486
+ const miniflareDevOptions = await getDevMiniflareOptions(
14487
+ resolvedPluginConfig,
14488
+ viteDevServer,
14489
+ inputInspectorPort
14490
+ );
14455
14491
  if (!miniflare) {
14456
- miniflare = new Miniflare(
14457
- getDevMiniflareOptions(
14458
- resolvedPluginConfig,
14459
- viteDevServer,
14460
- inputInspectorPort
14461
- )
14462
- );
14492
+ miniflare = new Miniflare(miniflareDevOptions);
14463
14493
  } else {
14464
- await miniflare.setOptions(
14465
- getDevMiniflareOptions(
14466
- resolvedPluginConfig,
14467
- viteDevServer,
14468
- inputInspectorPort
14469
- )
14470
- );
14494
+ await miniflare.setOptions(miniflareDevOptions);
14471
14495
  }
14472
14496
  await initRunners(resolvedPluginConfig, viteDevServer, miniflare);
14473
14497
  if (viteDevServer.httpServer) {
@@ -14506,10 +14530,11 @@ function cloudflare2(pluginConfig = {}) {
14506
14530
  vitePreviewServer
14507
14531
  );
14508
14532
  const miniflare2 = new Miniflare(
14509
- getPreviewMiniflareOptions(
14533
+ await getPreviewMiniflareOptions(
14510
14534
  vitePreviewServer,
14511
14535
  workerConfigs,
14512
14536
  pluginConfig.persistState ?? true,
14537
+ !!pluginConfig.experimental?.mixedMode,
14513
14538
  inputInspectorPort
14514
14539
  )
14515
14540
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudflare/vite-plugin",
3
- "version": "1.2.4",
3
+ "version": "1.3.1",
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": "4.20250508.3",
45
- "wrangler": "4.16.1"
44
+ "miniflare": "4.20250525.0",
45
+ "wrangler": "4.18.0"
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",