@cloudflare/vite-plugin 0.0.0-e39a45ffa → 0.0.0-e3b3ef51c

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
@@ -1571,6 +1571,7 @@ var ADDITIONAL_MODULE_TYPES = [
1571
1571
  "Text"
1572
1572
  ];
1573
1573
  var DEFAULT_INSPECTOR_PORT = 9229;
1574
+ var kRequestType = Symbol("kRequestType");
1574
1575
 
1575
1576
  // src/additional-modules.ts
1576
1577
  var moduleRules = [
@@ -12648,8 +12649,8 @@ function packageResolve(specifier, base, conditions) {
12648
12649
  let packageJsonPath = fileURLToPath$1(packageJsonUrl);
12649
12650
  let lastPath;
12650
12651
  do {
12651
- const stat = tryStatSync(packageJsonPath.slice(0, -13));
12652
- if (!stat || !stat.isDirectory()) {
12652
+ const stat2 = tryStatSync(packageJsonPath.slice(0, -13));
12653
+ if (!stat2 || !stat2.isDirectory()) {
12653
12654
  lastPath = packageJsonPath;
12654
12655
  packageJsonUrl = new URL$1(
12655
12656
  (isScoped ? "../../../../node_modules/" : "../../../node_modules/") + packageName + "/package.json",
@@ -12779,8 +12780,8 @@ function _resolve(id, options = {}) {
12779
12780
  }
12780
12781
  if (isAbsolute(id)) {
12781
12782
  try {
12782
- const stat = statSync(id);
12783
- if (stat.isFile()) {
12783
+ const stat2 = statSync(id);
12784
+ if (stat2.isFile()) {
12784
12785
  return pathToFileURL(id);
12785
12786
  }
12786
12787
  } catch (error) {
@@ -13010,9 +13011,6 @@ function getOutputDirectory(userConfig, environmentName) {
13010
13011
  const rootOutputDirectory = userConfig.build?.outDir ?? "dist";
13011
13012
  return userConfig.environments?.[environmentName]?.build?.outDir ?? path4.join(rootOutputDirectory, environmentName);
13012
13013
  }
13013
- function getRouterWorker(miniflare2) {
13014
- return miniflare2.getWorker(ROUTER_WORKER_NAME);
13015
- }
13016
13014
  function toMiniflareRequest(request) {
13017
13015
  const host = request.headers.get("Host");
13018
13016
  if (host) {
@@ -13257,7 +13255,7 @@ import { unstable_readConfig } from "wrangler";
13257
13255
  function getDeployConfigPath(root) {
13258
13256
  return path5.resolve(root, ".wrangler", "deploy", "config.json");
13259
13257
  }
13260
- function getWorkerConfigs(root) {
13258
+ function getWorkerConfigs(root, mixedModeEnabled) {
13261
13259
  const deployConfigPath = getDeployConfigPath(root);
13262
13260
  const deployConfig = JSON.parse(
13263
13261
  fs2.readFileSync(deployConfigPath, "utf-8")
@@ -13270,7 +13268,10 @@ function getWorkerConfigs(root) {
13270
13268
  path5.dirname(deployConfigPath),
13271
13269
  configPath
13272
13270
  );
13273
- return unstable_readConfig({ config: resolvedConfigPath });
13271
+ return unstable_readConfig(
13272
+ { config: resolvedConfigPath },
13273
+ { experimental: { mixedModeEnabled } }
13274
+ );
13274
13275
  });
13275
13276
  }
13276
13277
  function getRelativePathToWorkerConfig(deployConfigDirectory, root, outputDirectory) {
@@ -13337,6 +13338,7 @@ import * as fsp from "node:fs/promises";
13337
13338
  import * as path6 from "node:path";
13338
13339
  import { fileURLToPath as fileURLToPath2 } from "node:url";
13339
13340
  import {
13341
+ getDefaultDevRegistryPath,
13340
13342
  kCurrentWorker,
13341
13343
  Log,
13342
13344
  LogLevel,
@@ -13345,7 +13347,12 @@ import {
13345
13347
  import colors2 from "picocolors";
13346
13348
  import { globSync } from "tinyglobby";
13347
13349
  import "vite";
13348
- import { unstable_getMiniflareWorkerOptions } from "wrangler";
13350
+ import {
13351
+ experimental_pickRemoteBindings,
13352
+ experimental_startMixedModeSession,
13353
+ unstable_convertConfigBindingsToStartWorkerBindings,
13354
+ unstable_getMiniflareWorkerOptions
13355
+ } from "wrangler";
13349
13356
  function getPersistenceRoot(root, persistState) {
13350
13357
  if (persistState === false) {
13351
13358
  return;
@@ -13440,30 +13447,29 @@ function getEntryWorkerConfig(resolvedPluginConfig) {
13440
13447
  }
13441
13448
  return resolvedPluginConfig.workers[resolvedPluginConfig.entryWorkerEnvironmentName];
13442
13449
  }
13443
- function filterTails(tails, userWorkers, log) {
13444
- return tails?.filter((tailService) => {
13450
+ function logUnknownTails(tails, userWorkers, log) {
13451
+ for (const tailService of tails ?? []) {
13445
13452
  let name;
13446
13453
  if (typeof tailService === "string") {
13447
13454
  name = tailService;
13448
13455
  } else if (typeof tailService === "object" && "name" in tailService && typeof tailService.name === "string") {
13449
13456
  name = tailService.name;
13450
13457
  } else {
13451
- return true;
13458
+ continue;
13452
13459
  }
13453
13460
  const found = userWorkers.some((w) => w.name === name);
13454
13461
  if (!found) {
13455
13462
  log(
13456
13463
  colors2.dim(
13457
13464
  colors2.yellow(
13458
- `Tail consumer "${name}" was not found in your config. Make sure you add it if you'd like to simulate receiving tail events locally.`
13465
+ `Tail consumer "${name}" was not found in your config. Make sure you add it to the config or run it in another dev session if you'd like to simulate receiving tail events locally.`
13459
13466
  )
13460
13467
  )
13461
13468
  );
13462
13469
  }
13463
- return found;
13464
- });
13470
+ }
13465
13471
  }
13466
- function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPort) {
13472
+ async function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPort) {
13467
13473
  const resolvedViteConfig = viteDevServer.config;
13468
13474
  const entryWorkerConfig = getEntryWorkerConfig(resolvedPluginConfig);
13469
13475
  const assetsConfig = getAssetsConfig(
@@ -13514,12 +13520,14 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13514
13520
  serviceBindings: {
13515
13521
  __VITE_ASSET_EXISTS__: async (request) => {
13516
13522
  const { pathname } = new URL(request.url);
13517
- const filePath = path6.join(resolvedViteConfig.root, pathname);
13518
- let exists;
13519
- try {
13520
- exists = fs3.statSync(filePath).isFile();
13521
- } catch (error) {
13522
- exists = false;
13523
+ let exists = false;
13524
+ if (pathname.endsWith(".html")) {
13525
+ try {
13526
+ const filePath = path6.join(resolvedViteConfig.root, pathname);
13527
+ const stats = await fsp.stat(filePath);
13528
+ exists = stats.isFile();
13529
+ } catch (error) {
13530
+ }
13523
13531
  }
13524
13532
  return MiniflareResponse.json(exists);
13525
13533
  },
@@ -13533,59 +13541,75 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13533
13541
  headers: { "Content-Type": "text/html" }
13534
13542
  });
13535
13543
  } catch (error) {
13536
- throw new Error(`Unexpected error. Failed to load ${pathname}`);
13544
+ throw new Error(`Unexpected error. Failed to load "${pathname}".`);
13537
13545
  }
13538
13546
  }
13539
13547
  }
13540
13548
  }
13541
13549
  ];
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 });
13550
+ const workersFromConfig = resolvedPluginConfig.type === "workers" ? await Promise.all(
13551
+ Object.entries(resolvedPluginConfig.workers).map(
13552
+ async ([environmentName, workerConfig]) => {
13553
+ const mixedModeSession = resolvedPluginConfig.experimental.mixedMode ? await maybeStartOrUpdateMixedModeSession(workerConfig) : void 0;
13554
+ const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(
13555
+ {
13556
+ ...workerConfig,
13557
+ assets: void 0
13558
+ },
13559
+ resolvedPluginConfig.cloudflareEnv,
13560
+ {
13561
+ mixedModeConnectionString: mixedModeSession?.mixedModeConnectionString,
13562
+ mixedModeEnabled: resolvedPluginConfig.experimental.mixedMode
13563
+ }
13564
+ );
13565
+ const { externalWorkers: externalWorkers2 } = miniflareWorkerOptions;
13566
+ const { ratelimits, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13567
+ return {
13568
+ externalWorkers: externalWorkers2,
13569
+ worker: {
13570
+ ...workerOptions,
13571
+ name: workerOptions.name ?? workerConfig.name,
13572
+ unsafeInspectorProxy: inspectorPort !== false,
13573
+ unsafeDirectSockets: environmentName === resolvedPluginConfig.entryWorkerEnvironmentName ? (
13574
+ // Expose the default entrypoint of the entry worker on the dev registry
13575
+ [{ entrypoint: void 0, proxy: true }]
13576
+ ) : [],
13577
+ modulesRoot: miniflareModulesRoot,
13578
+ unsafeEvalBinding: "__VITE_UNSAFE_EVAL__",
13579
+ serviceBindings: {
13580
+ ...workerOptions.serviceBindings,
13581
+ ...environmentName === resolvedPluginConfig.entryWorkerEnvironmentName && workerConfig.assets?.binding ? {
13582
+ [workerConfig.assets.binding]: {
13583
+ node: (req, res) => {
13584
+ req[kRequestType] = "asset";
13585
+ viteDevServer.middlewares(req, res);
13586
+ }
13587
+ }
13588
+ } : {},
13589
+ __VITE_INVOKE_MODULE__: async (request) => {
13590
+ const payload = await request.json();
13591
+ const invokePayloadData = payload.data;
13592
+ assert6(
13593
+ invokePayloadData.name === "fetchModule",
13594
+ `Invalid invoke event: ${invokePayloadData.name}`
13595
+ );
13596
+ const [moduleId] = invokePayloadData.data;
13597
+ if (additionalModuleRE.test(moduleId)) {
13598
+ const result2 = {
13599
+ externalize: moduleId,
13600
+ type: "module"
13601
+ };
13602
+ return MiniflareResponse.json({ result: result2 });
13603
+ }
13604
+ const devEnvironment = viteDevServer.environments[environmentName];
13605
+ const result = await devEnvironment.hot.handleInvoke(payload);
13606
+ return MiniflareResponse.json(result);
13580
13607
  }
13581
- const devEnvironment = viteDevServer.environments[environmentName];
13582
- const result = await devEnvironment.hot.handleInvoke(payload);
13583
- return MiniflareResponse.json(result);
13584
13608
  }
13585
13609
  }
13586
- }
13587
- };
13588
- }
13610
+ };
13611
+ }
13612
+ )
13589
13613
  ) : [];
13590
13614
  const userWorkers = workersFromConfig.map((options) => options.worker);
13591
13615
  const externalWorkers = workersFromConfig.flatMap(
@@ -13600,6 +13624,7 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13600
13624
  logRequests: false,
13601
13625
  inspectorPort: inspectorPort === false ? void 0 : inspectorPort,
13602
13626
  unsafeInspectorProxy: inspectorPort !== false,
13627
+ unsafeDevRegistryPath: getDefaultDevRegistryPath(),
13603
13628
  handleRuntimeStdio(stdout, stderr) {
13604
13629
  const decoder = new TextDecoder();
13605
13630
  stdout.forEach((data2) => logger.info(decoder.decode(data2)));
@@ -13653,13 +13678,13 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13653
13678
  `export const ${className} = createWorkflowEntrypointWrapper('${className}');`
13654
13679
  );
13655
13680
  }
13681
+ logUnknownTails(
13682
+ workerOptions.tails,
13683
+ userWorkers,
13684
+ viteDevServer.config.logger.warn
13685
+ );
13656
13686
  return {
13657
13687
  ...workerOptions,
13658
- tails: filterTails(
13659
- workerOptions.tails,
13660
- userWorkers,
13661
- viteDevServer.config.logger.warn
13662
- ),
13663
13688
  modules: [
13664
13689
  {
13665
13690
  type: "ESModule",
@@ -13741,32 +13766,48 @@ function getPreviewModules(main, modulesRules) {
13741
13766
  ]
13742
13767
  };
13743
13768
  }
13744
- function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistState, inspectorPort) {
13769
+ async function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistState, mixedModeEnabled, inspectorPort) {
13745
13770
  const resolvedViteConfig = vitePreviewServer.config;
13746
- const workers = workerConfigs.flatMap((config) => {
13747
- const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(config);
13748
- const { externalWorkers } = miniflareWorkerOptions;
13749
- const { ratelimits, modulesRules, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13750
- return [
13751
- {
13752
- ...workerOptions,
13753
- tails: filterTails(
13754
- workerOptions.tails,
13755
- workerConfigs,
13756
- vitePreviewServer.config.logger.warn
13757
- ),
13758
- name: workerOptions.name ?? config.name,
13759
- unsafeInspectorProxy: inspectorPort !== false,
13760
- ...miniflareWorkerOptions.main ? getPreviewModules(miniflareWorkerOptions.main, modulesRules) : { modules: true, script: "" }
13761
- },
13762
- ...externalWorkers
13763
- ];
13764
- });
13771
+ const workers = (await Promise.all(
13772
+ workerConfigs.map(async (workerConfig, i) => {
13773
+ const mixedModeSession = mixedModeEnabled ? await maybeStartOrUpdateMixedModeSession(workerConfig) : void 0;
13774
+ const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(
13775
+ workerConfig,
13776
+ void 0,
13777
+ {
13778
+ mixedModeConnectionString: mixedModeSession?.mixedModeConnectionString,
13779
+ mixedModeEnabled
13780
+ }
13781
+ );
13782
+ const { externalWorkers } = miniflareWorkerOptions;
13783
+ const { ratelimits, modulesRules, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13784
+ logUnknownTails(
13785
+ workerOptions.tails,
13786
+ workerConfigs,
13787
+ vitePreviewServer.config.logger.warn
13788
+ );
13789
+ return [
13790
+ {
13791
+ ...workerOptions,
13792
+ name: workerOptions.name ?? workerConfig.name,
13793
+ unsafeInspectorProxy: inspectorPort !== false,
13794
+ unsafeDirectSockets: (
13795
+ // This exposes the default entrypoint of the entry worker on the dev registry
13796
+ // Assuming that the first worker config to be the entry worker.
13797
+ i === 0 ? [{ entrypoint: void 0, proxy: true }] : []
13798
+ ),
13799
+ ...miniflareWorkerOptions.main ? getPreviewModules(miniflareWorkerOptions.main, modulesRules) : { modules: true, script: "" }
13800
+ },
13801
+ ...externalWorkers
13802
+ ];
13803
+ })
13804
+ )).flat();
13765
13805
  const logger = new ViteMiniflareLogger(resolvedViteConfig);
13766
13806
  return {
13767
13807
  log: logger,
13768
13808
  inspectorPort: inspectorPort === false ? void 0 : inspectorPort,
13769
13809
  unsafeInspectorProxy: inspectorPort !== false,
13810
+ unsafeDevRegistryPath: getDefaultDevRegistryPath(),
13770
13811
  handleRuntimeStdio(stdout, stderr) {
13771
13812
  const decoder = new TextDecoder();
13772
13813
  stdout.forEach((data2) => logger.info(decoder.decode(data2)));
@@ -13812,6 +13853,24 @@ function miniflareLogLevelFromViteLogLevel(level = "info") {
13812
13853
  return LogLevel.NONE;
13813
13854
  }
13814
13855
  }
13856
+ var mixedModeSessionsMap = /* @__PURE__ */ new Map();
13857
+ async function maybeStartOrUpdateMixedModeSession(workerConfig) {
13858
+ const workerRemoteBindings = experimental_pickRemoteBindings(
13859
+ unstable_convertConfigBindingsToStartWorkerBindings(workerConfig) ?? {}
13860
+ );
13861
+ assert6(workerConfig.name, "Found workerConfig without a name");
13862
+ let mixedModeSession = mixedModeSessionsMap.get(workerConfig.name);
13863
+ if (mixedModeSession === void 0) {
13864
+ if (Object.keys(workerRemoteBindings).length > 0) {
13865
+ mixedModeSession = await experimental_startMixedModeSession(workerRemoteBindings);
13866
+ mixedModeSessionsMap.set(workerConfig.name, mixedModeSession);
13867
+ }
13868
+ } else {
13869
+ await mixedModeSession.updateBindings(workerRemoteBindings);
13870
+ }
13871
+ await mixedModeSession?.ready;
13872
+ return mixedModeSession;
13873
+ }
13815
13874
 
13816
13875
  // src/plugin-config.ts
13817
13876
  import assert8 from "node:assert";
@@ -13866,12 +13925,15 @@ var nullableNonApplicable = [
13866
13925
  "site",
13867
13926
  "tsconfig"
13868
13927
  ];
13869
- function readWorkerConfig(configPath, env2) {
13928
+ function readWorkerConfig(configPath, env2, mixedModeEnabled) {
13870
13929
  const nonApplicable = {
13871
13930
  replacedByVite: /* @__PURE__ */ new Set(),
13872
13931
  notRelevant: /* @__PURE__ */ new Set()
13873
13932
  };
13874
- const config = unstable_readConfig2({ config: configPath, env: env2 }, {});
13933
+ const config = unstable_readConfig2(
13934
+ { config: configPath, env: env2 },
13935
+ { experimental: { mixedModeEnabled } }
13936
+ );
13875
13937
  const raw = structuredClone(config);
13876
13938
  nullableNonApplicable.forEach((prop) => {
13877
13939
  if (config[prop] !== void 0) {
@@ -13966,11 +14028,15 @@ function isNotRelevant(configName) {
13966
14028
  function missingFieldErrorMessage(field, configPath, env2) {
13967
14029
  return `No ${field} field provided in '${configPath}'${env2 ? ` for '${env2}' environment` : ""}`;
13968
14030
  }
13969
- function getWorkerConfig(configPath, env2, opts) {
14031
+ function getWorkerConfig(configPath, env2, mixedModeEnabled, opts) {
13970
14032
  if (opts?.visitedConfigPaths?.has(configPath)) {
13971
14033
  throw new Error(`Duplicate Wrangler config path found: ${configPath}`);
13972
14034
  }
13973
- const { raw, config, nonApplicable } = readWorkerConfig(configPath, env2);
14035
+ const { raw, config, nonApplicable } = readWorkerConfig(
14036
+ configPath,
14037
+ env2,
14038
+ mixedModeEnabled
14039
+ );
13974
14040
  opts?.visitedConfigPaths?.add(configPath);
13975
14041
  if (!config.name) {
13976
14042
  throw new Error(missingFieldErrorMessage(`'name'`, configPath, env2));
@@ -14095,6 +14161,7 @@ function resolvePluginConfig(pluginConfig, userConfig, viteEnv) {
14095
14161
  const entryWorkerResolvedConfig = getWorkerConfig(
14096
14162
  entryWorkerConfigPath,
14097
14163
  cloudflareEnv,
14164
+ pluginConfig.experimental?.mixedMode ?? false,
14098
14165
  {
14099
14166
  visitedConfigPaths: configPaths,
14100
14167
  isEntryWorker: true
@@ -14128,6 +14195,7 @@ function resolvePluginConfig(pluginConfig, userConfig, viteEnv) {
14128
14195
  const workerResolvedConfig = getWorkerConfig(
14129
14196
  workerConfigPath,
14130
14197
  cloudflareEnv,
14198
+ pluginConfig.experimental?.mixedMode ?? false,
14131
14199
  {
14132
14200
  visitedConfigPaths: configPaths
14133
14201
  }
@@ -14445,28 +14513,21 @@ function cloudflare2(pluginConfig = {}) {
14445
14513
  pluginConfig,
14446
14514
  viteDevServer
14447
14515
  );
14516
+ const miniflareDevOptions = await getDevMiniflareOptions(
14517
+ resolvedPluginConfig,
14518
+ viteDevServer,
14519
+ inputInspectorPort
14520
+ );
14448
14521
  if (!miniflare) {
14449
- miniflare = new Miniflare(
14450
- getDevMiniflareOptions(
14451
- resolvedPluginConfig,
14452
- viteDevServer,
14453
- inputInspectorPort
14454
- )
14455
- );
14522
+ miniflare = new Miniflare(miniflareDevOptions);
14456
14523
  } else {
14457
- await miniflare.setOptions(
14458
- getDevMiniflareOptions(
14459
- resolvedPluginConfig,
14460
- viteDevServer,
14461
- inputInspectorPort
14462
- )
14463
- );
14524
+ await miniflare.setOptions(miniflareDevOptions);
14464
14525
  }
14465
14526
  await initRunners(resolvedPluginConfig, viteDevServer, miniflare);
14466
14527
  if (viteDevServer.httpServer) {
14467
14528
  handleWebSocket(viteDevServer.httpServer, async () => {
14468
14529
  assert10(miniflare, `Miniflare not defined`);
14469
- const routerWorker = await getRouterWorker(miniflare);
14530
+ const routerWorker = await miniflare.getWorker(ROUTER_WORKER_NAME);
14470
14531
  return routerWorker.fetch;
14471
14532
  });
14472
14533
  }
@@ -14474,14 +14535,21 @@ function cloudflare2(pluginConfig = {}) {
14474
14535
  viteDevServer.middlewares.use(async (req, res, next) => {
14475
14536
  try {
14476
14537
  assert10(miniflare, `Miniflare not defined`);
14477
- const routerWorker = await getRouterWorker(miniflare);
14478
14538
  const request = createRequest(req, res);
14479
- const response = await routerWorker.fetch(
14480
- toMiniflareRequest(request),
14481
- {
14482
- redirect: "manual"
14483
- }
14484
- );
14539
+ let response;
14540
+ if (req[kRequestType] === "asset") {
14541
+ const assetWorker = await miniflare.getWorker(ASSET_WORKER_NAME);
14542
+ response = await assetWorker.fetch(
14543
+ toMiniflareRequest(request),
14544
+ { redirect: "manual" }
14545
+ );
14546
+ } else {
14547
+ const routerWorker = await miniflare.getWorker(ROUTER_WORKER_NAME);
14548
+ response = await routerWorker.fetch(
14549
+ toMiniflareRequest(request),
14550
+ { redirect: "manual" }
14551
+ );
14552
+ }
14485
14553
  if (req.httpVersionMajor === 2) {
14486
14554
  response.headers.delete("transfer-encoding");
14487
14555
  }
@@ -14493,16 +14561,20 @@ function cloudflare2(pluginConfig = {}) {
14493
14561
  };
14494
14562
  },
14495
14563
  async configurePreviewServer(vitePreviewServer) {
14496
- const workerConfigs = getWorkerConfigs(vitePreviewServer.config.root);
14564
+ const workerConfigs = getWorkerConfigs(
14565
+ vitePreviewServer.config.root,
14566
+ pluginConfig.experimental?.mixedMode ?? false
14567
+ );
14497
14568
  const inputInspectorPort = await getInputInspectorPortOption(
14498
14569
  pluginConfig,
14499
14570
  vitePreviewServer
14500
14571
  );
14501
14572
  const miniflare2 = new Miniflare(
14502
- getPreviewMiniflareOptions(
14573
+ await getPreviewMiniflareOptions(
14503
14574
  vitePreviewServer,
14504
14575
  workerConfigs,
14505
14576
  pluginConfig.persistState ?? true,
14577
+ !!pluginConfig.experimental?.mixedMode,
14506
14578
  inputInspectorPort
14507
14579
  )
14508
14580
  );
@@ -14759,7 +14831,10 @@ function cloudflare2(pluginConfig = {}) {
14759
14831
  });
14760
14832
  },
14761
14833
  async configurePreviewServer(vitePreviewServer) {
14762
- const workerConfigs = getWorkerConfigs(vitePreviewServer.config.root);
14834
+ const workerConfigs = getWorkerConfigs(
14835
+ vitePreviewServer.config.root,
14836
+ pluginConfig.experimental?.mixedMode ?? false
14837
+ );
14763
14838
  if (workerConfigs.length >= 1 && pluginConfig.inspectorPort !== false) {
14764
14839
  addDebugToVitePrintUrls(vitePreviewServer);
14765
14840
  }
@@ -11,6 +11,7 @@ var ADDITIONAL_MODULE_TYPES = [
11
11
  "Data",
12
12
  "Text"
13
13
  ];
14
+ var kRequestType = Symbol("kRequestType");
14
15
 
15
16
  // src/shared.ts
16
17
  var UNKNOWN_HOST = "http://localhost";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudflare/vite-plugin",
3
- "version": "0.0.0-e39a45ffa",
3
+ "version": "0.0.0-e3b3ef51c",
4
4
  "description": "Cloudflare plugin for Vite",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -41,23 +41,22 @@
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-e39a45ffa",
45
- "wrangler": "0.0.0-e39a45ffa"
44
+ "miniflare": "0.0.0-e3b3ef51c",
45
+ "wrangler": "0.0.0-e3b3ef51c"
46
46
  },
47
47
  "devDependencies": {
48
- "@cloudflare/workers-types": "^4.20250525.0",
48
+ "@cloudflare/workers-types": "^4.20250604.0",
49
49
  "@types/node": "^22.10.1",
50
50
  "@types/ws": "^8.5.13",
51
51
  "magic-string": "^0.30.12",
52
52
  "mlly": "^1.7.4",
53
53
  "tsup": "8.3.0",
54
54
  "typescript": "^5.7.2",
55
- "undici": "^5.28.5",
56
55
  "vite": "^6.1.0",
57
56
  "vitest": "~3.1.1",
58
57
  "@cloudflare/mock-npm-registry": "0.0.0",
59
- "@cloudflare/workers-tsconfig": "0.0.0",
60
- "@cloudflare/workers-shared": "0.0.0-e39a45ffa"
58
+ "@cloudflare/workers-shared": "0.0.0-e3b3ef51c",
59
+ "@cloudflare/workers-tsconfig": "0.0.0"
61
60
  },
62
61
  "peerDependencies": {
63
62
  "vite": "^6.1.0",