@cloudflare/vite-plugin 1.3.0 → 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,7 +13345,12 @@ import {
13345
13345
  import colors2 from "picocolors";
13346
13346
  import { globSync } from "tinyglobby";
13347
13347
  import "vite";
13348
- import { unstable_getMiniflareWorkerOptions } from "wrangler";
13348
+ import {
13349
+ experimental_pickRemoteBindings,
13350
+ experimental_startMixedModeSession,
13351
+ unstable_convertConfigBindingsToStartWorkerBindings,
13352
+ unstable_getMiniflareWorkerOptions
13353
+ } from "wrangler";
13349
13354
  function getPersistenceRoot(root, persistState) {
13350
13355
  if (persistState === false) {
13351
13356
  return;
@@ -13463,7 +13468,7 @@ function filterTails(tails, userWorkers, log) {
13463
13468
  return found;
13464
13469
  });
13465
13470
  }
13466
- function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPort) {
13471
+ async function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPort) {
13467
13472
  const resolvedViteConfig = viteDevServer.config;
13468
13473
  const entryWorkerConfig = getEntryWorkerConfig(resolvedPluginConfig);
13469
13474
  const assetsConfig = getAssetsConfig(
@@ -13539,53 +13544,59 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13539
13544
  }
13540
13545
  }
13541
13546
  ];
13542
- const workersFromConfig = resolvedPluginConfig.type === "workers" ? Object.entries(resolvedPluginConfig.workers).map(
13543
- ([environmentName, workerConfig]) => {
13544
- const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(
13545
- {
13546
- ...workerConfig,
13547
- assets: void 0
13548
- },
13549
- resolvedPluginConfig.cloudflareEnv
13550
- );
13551
- const { externalWorkers: externalWorkers2 } = miniflareWorkerOptions;
13552
- const { ratelimits, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13553
- return {
13554
- externalWorkers: externalWorkers2,
13555
- worker: {
13556
- ...workerOptions,
13557
- name: workerOptions.name ?? workerConfig.name,
13558
- unsafeInspectorProxy: inspectorPort !== false,
13559
- modulesRoot: miniflareModulesRoot,
13560
- unsafeEvalBinding: "__VITE_UNSAFE_EVAL__",
13561
- serviceBindings: {
13562
- ...workerOptions.serviceBindings,
13563
- ...environmentName === resolvedPluginConfig.entryWorkerEnvironmentName && workerConfig.assets?.binding ? {
13564
- [workerConfig.assets.binding]: ASSET_WORKER_NAME
13565
- } : {},
13566
- __VITE_INVOKE_MODULE__: async (request) => {
13567
- const payload = await request.json();
13568
- const invokePayloadData = payload.data;
13569
- assert6(
13570
- invokePayloadData.name === "fetchModule",
13571
- `Invalid invoke event: ${invokePayloadData.name}`
13572
- );
13573
- const [moduleId] = invokePayloadData.data;
13574
- if (additionalModuleRE.test(moduleId)) {
13575
- const result2 = {
13576
- externalize: moduleId,
13577
- type: "module"
13578
- };
13579
- 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);
13580
13594
  }
13581
- const devEnvironment = viteDevServer.environments[environmentName];
13582
- const result = await devEnvironment.hot.handleInvoke(payload);
13583
- return MiniflareResponse.json(result);
13584
13595
  }
13585
13596
  }
13586
- }
13587
- };
13588
- }
13597
+ };
13598
+ }
13599
+ )
13589
13600
  ) : [];
13590
13601
  const userWorkers = workersFromConfig.map((options) => options.worker);
13591
13602
  const externalWorkers = workersFromConfig.flatMap(
@@ -13597,6 +13608,7 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13597
13608
  const logger = new ViteMiniflareLogger(resolvedViteConfig);
13598
13609
  return {
13599
13610
  log: logger,
13611
+ logRequests: false,
13600
13612
  inspectorPort: inspectorPort === false ? void 0 : inspectorPort,
13601
13613
  unsafeInspectorProxy: inspectorPort !== false,
13602
13614
  handleRuntimeStdio(stdout, stderr) {
@@ -13740,27 +13752,36 @@ function getPreviewModules(main, modulesRules) {
13740
13752
  ]
13741
13753
  };
13742
13754
  }
13743
- function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistState, inspectorPort) {
13755
+ async function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistState, mixedModeEnabled, inspectorPort) {
13744
13756
  const resolvedViteConfig = vitePreviewServer.config;
13745
- const workers = workerConfigs.flatMap((config) => {
13746
- const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(config);
13747
- const { externalWorkers } = miniflareWorkerOptions;
13748
- const { ratelimits, modulesRules, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13749
- return [
13750
- {
13751
- ...workerOptions,
13752
- tails: filterTails(
13753
- workerOptions.tails,
13754
- workerConfigs,
13755
- vitePreviewServer.config.logger.warn
13756
- ),
13757
- name: workerOptions.name ?? config.name,
13758
- unsafeInspectorProxy: inspectorPort !== false,
13759
- ...miniflareWorkerOptions.main ? getPreviewModules(miniflareWorkerOptions.main, modulesRules) : { modules: true, script: "" }
13760
- },
13761
- ...externalWorkers
13762
- ];
13763
- });
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();
13764
13785
  const logger = new ViteMiniflareLogger(resolvedViteConfig);
13765
13786
  return {
13766
13787
  log: logger,
@@ -13780,7 +13801,6 @@ function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistSta
13780
13801
  workers
13781
13802
  };
13782
13803
  }
13783
- var removedMessages = [/^Ready on http/, /^Updated and ready on http/];
13784
13804
  var ViteMiniflareLogger = class extends Log {
13785
13805
  logger;
13786
13806
  constructor(config) {
@@ -13788,11 +13808,6 @@ var ViteMiniflareLogger = class extends Log {
13788
13808
  this.logger = config.logger;
13789
13809
  }
13790
13810
  logWithLevel(level, message) {
13791
- for (const removedMessage of removedMessages) {
13792
- if (removedMessage.test(message)) {
13793
- return;
13794
- }
13795
- }
13796
13811
  switch (level) {
13797
13812
  case LogLevel.ERROR:
13798
13813
  return this.logger.error(message);
@@ -13802,6 +13817,8 @@ var ViteMiniflareLogger = class extends Log {
13802
13817
  return this.logger.info(message);
13803
13818
  }
13804
13819
  }
13820
+ logReady() {
13821
+ }
13805
13822
  };
13806
13823
  function miniflareLogLevelFromViteLogLevel(level = "info") {
13807
13824
  switch (level) {
@@ -13815,6 +13832,24 @@ function miniflareLogLevelFromViteLogLevel(level = "info") {
13815
13832
  return LogLevel.NONE;
13816
13833
  }
13817
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
+ }
13818
13853
 
13819
13854
  // src/plugin-config.ts
13820
13855
  import assert8 from "node:assert";
@@ -14448,22 +14483,15 @@ function cloudflare2(pluginConfig = {}) {
14448
14483
  pluginConfig,
14449
14484
  viteDevServer
14450
14485
  );
14486
+ const miniflareDevOptions = await getDevMiniflareOptions(
14487
+ resolvedPluginConfig,
14488
+ viteDevServer,
14489
+ inputInspectorPort
14490
+ );
14451
14491
  if (!miniflare) {
14452
- miniflare = new Miniflare(
14453
- getDevMiniflareOptions(
14454
- resolvedPluginConfig,
14455
- viteDevServer,
14456
- inputInspectorPort
14457
- )
14458
- );
14492
+ miniflare = new Miniflare(miniflareDevOptions);
14459
14493
  } else {
14460
- await miniflare.setOptions(
14461
- getDevMiniflareOptions(
14462
- resolvedPluginConfig,
14463
- viteDevServer,
14464
- inputInspectorPort
14465
- )
14466
- );
14494
+ await miniflare.setOptions(miniflareDevOptions);
14467
14495
  }
14468
14496
  await initRunners(resolvedPluginConfig, viteDevServer, miniflare);
14469
14497
  if (viteDevServer.httpServer) {
@@ -14502,10 +14530,11 @@ function cloudflare2(pluginConfig = {}) {
14502
14530
  vitePreviewServer
14503
14531
  );
14504
14532
  const miniflare2 = new Miniflare(
14505
- getPreviewMiniflareOptions(
14533
+ await getPreviewMiniflareOptions(
14506
14534
  vitePreviewServer,
14507
14535
  workerConfigs,
14508
14536
  pluginConfig.persistState ?? true,
14537
+ !!pluginConfig.experimental?.mixedMode,
14509
14538
  inputInspectorPort
14510
14539
  )
14511
14540
  );
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudflare/vite-plugin",
3
- "version": "1.3.0",
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.20250523.0",
45
- "wrangler": "4.17.0"
44
+ "miniflare": "4.20250525.0",
45
+ "wrangler": "4.18.0"
46
46
  },
47
47
  "devDependencies": {
48
- "@cloudflare/workers-types": "^4.20250523.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",