@cloudflare/vite-plugin 0.0.0-6479fc522 → 0.0.0-66edd2f3b

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 = [
@@ -5787,14 +5788,8 @@ var InternalConfigSchema = z.object({
5787
5788
  script_id: z.number().optional(),
5788
5789
  debug: z.boolean().optional()
5789
5790
  });
5790
- var StaticRoutingSchema = z.object({
5791
- version: z.literal(1),
5792
- include: z.array(z.string()),
5793
- exclude: z.array(z.string()).optional()
5794
- });
5795
5791
  var RouterConfigSchema = z.object({
5796
5792
  invoke_user_worker_ahead_of_assets: z.boolean().optional(),
5797
- static_routing: StaticRoutingSchema.optional(),
5798
5793
  has_user_worker: z.boolean().optional(),
5799
5794
  ...InternalConfigSchema.shape
5800
5795
  });
@@ -5835,7 +5830,6 @@ var AssetConfigSchema = z.object({
5835
5830
  not_found_handling: z.enum(["single-page-application", "404-page", "none"]).optional(),
5836
5831
  redirects: RedirectsSchema,
5837
5832
  headers: HeadersSchema,
5838
- has_static_routing: z.boolean().optional(),
5839
5833
  ...InternalConfigSchema.shape
5840
5834
  });
5841
5835
 
@@ -12655,8 +12649,8 @@ function packageResolve(specifier, base, conditions) {
12655
12649
  let packageJsonPath = fileURLToPath$1(packageJsonUrl);
12656
12650
  let lastPath;
12657
12651
  do {
12658
- const stat = tryStatSync(packageJsonPath.slice(0, -13));
12659
- if (!stat || !stat.isDirectory()) {
12652
+ const stat2 = tryStatSync(packageJsonPath.slice(0, -13));
12653
+ if (!stat2 || !stat2.isDirectory()) {
12660
12654
  lastPath = packageJsonPath;
12661
12655
  packageJsonUrl = new URL$1(
12662
12656
  (isScoped ? "../../../../node_modules/" : "../../../node_modules/") + packageName + "/package.json",
@@ -12786,8 +12780,8 @@ function _resolve(id, options = {}) {
12786
12780
  }
12787
12781
  if (isAbsolute(id)) {
12788
12782
  try {
12789
- const stat = statSync(id);
12790
- if (stat.isFile()) {
12783
+ const stat2 = statSync(id);
12784
+ if (stat2.isFile()) {
12791
12785
  return pathToFileURL(id);
12792
12786
  }
12793
12787
  } catch (error) {
@@ -13017,9 +13011,6 @@ function getOutputDirectory(userConfig, environmentName) {
13017
13011
  const rootOutputDirectory = userConfig.build?.outDir ?? "dist";
13018
13012
  return userConfig.environments?.[environmentName]?.build?.outDir ?? path4.join(rootOutputDirectory, environmentName);
13019
13013
  }
13020
- function getRouterWorker(miniflare2) {
13021
- return miniflare2.getWorker(ROUTER_WORKER_NAME);
13022
- }
13023
13014
  function toMiniflareRequest(request) {
13024
13015
  const host = request.headers.get("Host");
13025
13016
  if (host) {
@@ -13264,7 +13255,7 @@ import { unstable_readConfig } from "wrangler";
13264
13255
  function getDeployConfigPath(root) {
13265
13256
  return path5.resolve(root, ".wrangler", "deploy", "config.json");
13266
13257
  }
13267
- function getWorkerConfigs(root) {
13258
+ function getWorkerConfigs(root, mixedModeEnabled) {
13268
13259
  const deployConfigPath = getDeployConfigPath(root);
13269
13260
  const deployConfig = JSON.parse(
13270
13261
  fs2.readFileSync(deployConfigPath, "utf-8")
@@ -13277,7 +13268,10 @@ function getWorkerConfigs(root) {
13277
13268
  path5.dirname(deployConfigPath),
13278
13269
  configPath
13279
13270
  );
13280
- return unstable_readConfig({ config: resolvedConfigPath });
13271
+ return unstable_readConfig(
13272
+ { config: resolvedConfigPath },
13273
+ { experimental: { mixedModeEnabled } }
13274
+ );
13281
13275
  });
13282
13276
  }
13283
13277
  function getRelativePathToWorkerConfig(deployConfigDirectory, root, outputDirectory) {
@@ -13344,6 +13338,7 @@ import * as fsp from "node:fs/promises";
13344
13338
  import * as path6 from "node:path";
13345
13339
  import { fileURLToPath as fileURLToPath2 } from "node:url";
13346
13340
  import {
13341
+ getDefaultDevRegistryPath,
13347
13342
  kCurrentWorker,
13348
13343
  Log,
13349
13344
  LogLevel,
@@ -13352,10 +13347,15 @@ import {
13352
13347
  import colors2 from "picocolors";
13353
13348
  import { globSync } from "tinyglobby";
13354
13349
  import "vite";
13355
- import { unstable_getMiniflareWorkerOptions } from "wrangler";
13356
- function getPersistence(root, persistState) {
13350
+ import {
13351
+ experimental_pickRemoteBindings,
13352
+ experimental_startMixedModeSession,
13353
+ unstable_convertConfigBindingsToStartWorkerBindings,
13354
+ unstable_getMiniflareWorkerOptions
13355
+ } from "wrangler";
13356
+ function getPersistenceRoot(root, persistState) {
13357
13357
  if (persistState === false) {
13358
- return {};
13358
+ return;
13359
13359
  }
13360
13360
  const defaultPersistPath = ".wrangler/state";
13361
13361
  const persistPath = path6.resolve(
@@ -13363,14 +13363,7 @@ function getPersistence(root, persistState) {
13363
13363
  typeof persistState === "object" ? persistState.path : defaultPersistPath,
13364
13364
  "v3"
13365
13365
  );
13366
- return {
13367
- cachePersist: path6.join(persistPath, "cache"),
13368
- d1Persist: path6.join(persistPath, "d1"),
13369
- durableObjectsPersist: path6.join(persistPath, "do"),
13370
- kvPersist: path6.join(persistPath, "kv"),
13371
- r2Persist: path6.join(persistPath, "r2"),
13372
- workflowsPersist: path6.join(persistPath, "workflows")
13373
- };
13366
+ return persistPath;
13374
13367
  }
13375
13368
  function missingWorkerErrorMessage(workerName) {
13376
13369
  return `${workerName} does not match a worker name.`;
@@ -13454,30 +13447,29 @@ function getEntryWorkerConfig(resolvedPluginConfig) {
13454
13447
  }
13455
13448
  return resolvedPluginConfig.workers[resolvedPluginConfig.entryWorkerEnvironmentName];
13456
13449
  }
13457
- function filterTails(tails, userWorkers, log) {
13458
- return tails?.filter((tailService) => {
13450
+ function logUnknownTails(tails, userWorkers, log) {
13451
+ for (const tailService of tails ?? []) {
13459
13452
  let name;
13460
13453
  if (typeof tailService === "string") {
13461
13454
  name = tailService;
13462
13455
  } else if (typeof tailService === "object" && "name" in tailService && typeof tailService.name === "string") {
13463
13456
  name = tailService.name;
13464
13457
  } else {
13465
- return true;
13458
+ continue;
13466
13459
  }
13467
13460
  const found = userWorkers.some((w) => w.name === name);
13468
13461
  if (!found) {
13469
13462
  log(
13470
13463
  colors2.dim(
13471
13464
  colors2.yellow(
13472
- `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.`
13473
13466
  )
13474
13467
  )
13475
13468
  );
13476
13469
  }
13477
- return found;
13478
- });
13470
+ }
13479
13471
  }
13480
- function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPort) {
13472
+ async function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPort) {
13481
13473
  const resolvedViteConfig = viteDevServer.config;
13482
13474
  const entryWorkerConfig = getEntryWorkerConfig(resolvedPluginConfig);
13483
13475
  const assetsConfig = getAssetsConfig(
@@ -13528,12 +13520,14 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13528
13520
  serviceBindings: {
13529
13521
  __VITE_ASSET_EXISTS__: async (request) => {
13530
13522
  const { pathname } = new URL(request.url);
13531
- const filePath = path6.join(resolvedViteConfig.root, pathname);
13532
- let exists;
13533
- try {
13534
- exists = fs3.statSync(filePath).isFile();
13535
- } catch (error) {
13536
- 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
+ }
13537
13531
  }
13538
13532
  return MiniflareResponse.json(exists);
13539
13533
  },
@@ -13547,59 +13541,75 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13547
13541
  headers: { "Content-Type": "text/html" }
13548
13542
  });
13549
13543
  } catch (error) {
13550
- throw new Error(`Unexpected error. Failed to load ${pathname}`);
13544
+ throw new Error(`Unexpected error. Failed to load "${pathname}".`);
13551
13545
  }
13552
13546
  }
13553
13547
  }
13554
13548
  }
13555
13549
  ];
13556
- const workersFromConfig = resolvedPluginConfig.type === "workers" ? Object.entries(resolvedPluginConfig.workers).map(
13557
- ([environmentName, workerConfig]) => {
13558
- const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(
13559
- {
13560
- ...workerConfig,
13561
- assets: void 0
13562
- },
13563
- resolvedPluginConfig.cloudflareEnv
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
- modulesRoot: miniflareModulesRoot,
13574
- unsafeEvalBinding: "__VITE_UNSAFE_EVAL__",
13575
- serviceBindings: {
13576
- ...workerOptions.serviceBindings,
13577
- ...environmentName === resolvedPluginConfig.entryWorkerEnvironmentName && workerConfig.assets?.binding ? {
13578
- [workerConfig.assets.binding]: ASSET_WORKER_NAME
13579
- } : {},
13580
- __VITE_INVOKE_MODULE__: async (request) => {
13581
- const payload = await request.json();
13582
- const invokePayloadData = payload.data;
13583
- assert6(
13584
- invokePayloadData.name === "fetchModule",
13585
- `Invalid invoke event: ${invokePayloadData.name}`
13586
- );
13587
- const [moduleId] = invokePayloadData.data;
13588
- if (additionalModuleRE.test(moduleId)) {
13589
- const result2 = {
13590
- externalize: moduleId,
13591
- type: "module"
13592
- };
13593
- 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);
13594
13607
  }
13595
- const devEnvironment = viteDevServer.environments[environmentName];
13596
- const result = await devEnvironment.hot.handleInvoke(payload);
13597
- return MiniflareResponse.json(result);
13598
13608
  }
13599
13609
  }
13600
- }
13601
- };
13602
- }
13610
+ };
13611
+ }
13612
+ )
13603
13613
  ) : [];
13604
13614
  const userWorkers = workersFromConfig.map((options) => options.worker);
13605
13615
  const externalWorkers = workersFromConfig.flatMap(
@@ -13611,8 +13621,10 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13611
13621
  const logger = new ViteMiniflareLogger(resolvedViteConfig);
13612
13622
  return {
13613
13623
  log: logger,
13624
+ logRequests: false,
13614
13625
  inspectorPort: inspectorPort === false ? void 0 : inspectorPort,
13615
13626
  unsafeInspectorProxy: inspectorPort !== false,
13627
+ unsafeDevRegistryPath: getDefaultDevRegistryPath(),
13616
13628
  handleRuntimeStdio(stdout, stderr) {
13617
13629
  const decoder = new TextDecoder();
13618
13630
  stdout.forEach((data2) => logger.info(decoder.decode(data2)));
@@ -13620,7 +13632,7 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13620
13632
  (error) => logger.logWithLevel(LogLevel.ERROR, decoder.decode(error))
13621
13633
  );
13622
13634
  },
13623
- ...getPersistence(
13635
+ defaultPersistRoot: getPersistenceRoot(
13624
13636
  resolvedViteConfig.root,
13625
13637
  resolvedPluginConfig.persistState
13626
13638
  ),
@@ -13666,13 +13678,13 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13666
13678
  `export const ${className} = createWorkflowEntrypointWrapper('${className}');`
13667
13679
  );
13668
13680
  }
13681
+ logUnknownTails(
13682
+ workerOptions.tails,
13683
+ userWorkers,
13684
+ viteDevServer.config.logger.warn
13685
+ );
13669
13686
  return {
13670
13687
  ...workerOptions,
13671
- tails: filterTails(
13672
- workerOptions.tails,
13673
- userWorkers,
13674
- viteDevServer.config.logger.warn
13675
- ),
13676
13688
  modules: [
13677
13689
  {
13678
13690
  type: "ESModule",
@@ -13754,32 +13766,48 @@ function getPreviewModules(main, modulesRules) {
13754
13766
  ]
13755
13767
  };
13756
13768
  }
13757
- function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistState, inspectorPort) {
13769
+ async function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistState, mixedModeEnabled, inspectorPort) {
13758
13770
  const resolvedViteConfig = vitePreviewServer.config;
13759
- const workers = workerConfigs.flatMap((config) => {
13760
- const miniflareWorkerOptions = unstable_getMiniflareWorkerOptions(config);
13761
- const { externalWorkers } = miniflareWorkerOptions;
13762
- const { ratelimits, modulesRules, ...workerOptions } = miniflareWorkerOptions.workerOptions;
13763
- return [
13764
- {
13765
- ...workerOptions,
13766
- tails: filterTails(
13767
- workerOptions.tails,
13768
- workerConfigs,
13769
- vitePreviewServer.config.logger.warn
13770
- ),
13771
- name: workerOptions.name ?? config.name,
13772
- unsafeInspectorProxy: inspectorPort !== false,
13773
- ...miniflareWorkerOptions.main ? getPreviewModules(miniflareWorkerOptions.main, modulesRules) : { modules: true, script: "" }
13774
- },
13775
- ...externalWorkers
13776
- ];
13777
- });
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();
13778
13805
  const logger = new ViteMiniflareLogger(resolvedViteConfig);
13779
13806
  return {
13780
13807
  log: logger,
13781
13808
  inspectorPort: inspectorPort === false ? void 0 : inspectorPort,
13782
13809
  unsafeInspectorProxy: inspectorPort !== false,
13810
+ unsafeDevRegistryPath: getDefaultDevRegistryPath(),
13783
13811
  handleRuntimeStdio(stdout, stderr) {
13784
13812
  const decoder = new TextDecoder();
13785
13813
  stdout.forEach((data2) => logger.info(decoder.decode(data2)));
@@ -13787,11 +13815,13 @@ function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistSta
13787
13815
  (error) => logger.logWithLevel(LogLevel.ERROR, decoder.decode(error))
13788
13816
  );
13789
13817
  },
13790
- ...getPersistence(resolvedViteConfig.root, persistState),
13818
+ defaultPersistRoot: getPersistenceRoot(
13819
+ resolvedViteConfig.root,
13820
+ persistState
13821
+ ),
13791
13822
  workers
13792
13823
  };
13793
13824
  }
13794
- var removedMessages = [/^Ready on http/, /^Updated and ready on http/];
13795
13825
  var ViteMiniflareLogger = class extends Log {
13796
13826
  logger;
13797
13827
  constructor(config) {
@@ -13799,11 +13829,6 @@ var ViteMiniflareLogger = class extends Log {
13799
13829
  this.logger = config.logger;
13800
13830
  }
13801
13831
  logWithLevel(level, message) {
13802
- for (const removedMessage of removedMessages) {
13803
- if (removedMessage.test(message)) {
13804
- return;
13805
- }
13806
- }
13807
13832
  switch (level) {
13808
13833
  case LogLevel.ERROR:
13809
13834
  return this.logger.error(message);
@@ -13813,6 +13838,8 @@ var ViteMiniflareLogger = class extends Log {
13813
13838
  return this.logger.info(message);
13814
13839
  }
13815
13840
  }
13841
+ logReady() {
13842
+ }
13816
13843
  };
13817
13844
  function miniflareLogLevelFromViteLogLevel(level = "info") {
13818
13845
  switch (level) {
@@ -13826,6 +13853,24 @@ function miniflareLogLevelFromViteLogLevel(level = "info") {
13826
13853
  return LogLevel.NONE;
13827
13854
  }
13828
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
+ }
13829
13874
 
13830
13875
  // src/plugin-config.ts
13831
13876
  import assert8 from "node:assert";
@@ -13880,12 +13925,15 @@ var nullableNonApplicable = [
13880
13925
  "site",
13881
13926
  "tsconfig"
13882
13927
  ];
13883
- function readWorkerConfig(configPath, env2) {
13928
+ function readWorkerConfig(configPath, env2, mixedModeEnabled) {
13884
13929
  const nonApplicable = {
13885
13930
  replacedByVite: /* @__PURE__ */ new Set(),
13886
13931
  notRelevant: /* @__PURE__ */ new Set()
13887
13932
  };
13888
- const config = unstable_readConfig2({ config: configPath, env: env2 }, {});
13933
+ const config = unstable_readConfig2(
13934
+ { config: configPath, env: env2 },
13935
+ { experimental: { mixedModeEnabled } }
13936
+ );
13889
13937
  const raw = structuredClone(config);
13890
13938
  nullableNonApplicable.forEach((prop) => {
13891
13939
  if (config[prop] !== void 0) {
@@ -13980,11 +14028,15 @@ function isNotRelevant(configName) {
13980
14028
  function missingFieldErrorMessage(field, configPath, env2) {
13981
14029
  return `No ${field} field provided in '${configPath}'${env2 ? ` for '${env2}' environment` : ""}`;
13982
14030
  }
13983
- function getWorkerConfig(configPath, env2, opts) {
14031
+ function getWorkerConfig(configPath, env2, mixedModeEnabled, opts) {
13984
14032
  if (opts?.visitedConfigPaths?.has(configPath)) {
13985
14033
  throw new Error(`Duplicate Wrangler config path found: ${configPath}`);
13986
14034
  }
13987
- const { raw, config, nonApplicable } = readWorkerConfig(configPath, env2);
14035
+ const { raw, config, nonApplicable } = readWorkerConfig(
14036
+ configPath,
14037
+ env2,
14038
+ mixedModeEnabled
14039
+ );
13988
14040
  opts?.visitedConfigPaths?.add(configPath);
13989
14041
  if (!config.name) {
13990
14042
  throw new Error(missingFieldErrorMessage(`'name'`, configPath, env2));
@@ -14109,6 +14161,7 @@ function resolvePluginConfig(pluginConfig, userConfig, viteEnv) {
14109
14161
  const entryWorkerResolvedConfig = getWorkerConfig(
14110
14162
  entryWorkerConfigPath,
14111
14163
  cloudflareEnv,
14164
+ pluginConfig.experimental?.mixedMode ?? false,
14112
14165
  {
14113
14166
  visitedConfigPaths: configPaths,
14114
14167
  isEntryWorker: true
@@ -14142,6 +14195,7 @@ function resolvePluginConfig(pluginConfig, userConfig, viteEnv) {
14142
14195
  const workerResolvedConfig = getWorkerConfig(
14143
14196
  workerConfigPath,
14144
14197
  cloudflareEnv,
14198
+ pluginConfig.experimental?.mixedMode ?? false,
14145
14199
  {
14146
14200
  visitedConfigPaths: configPaths
14147
14201
  }
@@ -14459,28 +14513,21 @@ function cloudflare2(pluginConfig = {}) {
14459
14513
  pluginConfig,
14460
14514
  viteDevServer
14461
14515
  );
14516
+ const miniflareDevOptions = await getDevMiniflareOptions(
14517
+ resolvedPluginConfig,
14518
+ viteDevServer,
14519
+ inputInspectorPort
14520
+ );
14462
14521
  if (!miniflare) {
14463
- miniflare = new Miniflare(
14464
- getDevMiniflareOptions(
14465
- resolvedPluginConfig,
14466
- viteDevServer,
14467
- inputInspectorPort
14468
- )
14469
- );
14522
+ miniflare = new Miniflare(miniflareDevOptions);
14470
14523
  } else {
14471
- await miniflare.setOptions(
14472
- getDevMiniflareOptions(
14473
- resolvedPluginConfig,
14474
- viteDevServer,
14475
- inputInspectorPort
14476
- )
14477
- );
14524
+ await miniflare.setOptions(miniflareDevOptions);
14478
14525
  }
14479
14526
  await initRunners(resolvedPluginConfig, viteDevServer, miniflare);
14480
14527
  if (viteDevServer.httpServer) {
14481
14528
  handleWebSocket(viteDevServer.httpServer, async () => {
14482
14529
  assert10(miniflare, `Miniflare not defined`);
14483
- const routerWorker = await getRouterWorker(miniflare);
14530
+ const routerWorker = await miniflare.getWorker(ROUTER_WORKER_NAME);
14484
14531
  return routerWorker.fetch;
14485
14532
  });
14486
14533
  }
@@ -14488,14 +14535,21 @@ function cloudflare2(pluginConfig = {}) {
14488
14535
  viteDevServer.middlewares.use(async (req, res, next) => {
14489
14536
  try {
14490
14537
  assert10(miniflare, `Miniflare not defined`);
14491
- const routerWorker = await getRouterWorker(miniflare);
14492
14538
  const request = createRequest(req, res);
14493
- const response = await routerWorker.fetch(
14494
- toMiniflareRequest(request),
14495
- {
14496
- redirect: "manual"
14497
- }
14498
- );
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
+ }
14499
14553
  if (req.httpVersionMajor === 2) {
14500
14554
  response.headers.delete("transfer-encoding");
14501
14555
  }
@@ -14507,16 +14561,20 @@ function cloudflare2(pluginConfig = {}) {
14507
14561
  };
14508
14562
  },
14509
14563
  async configurePreviewServer(vitePreviewServer) {
14510
- const workerConfigs = getWorkerConfigs(vitePreviewServer.config.root);
14564
+ const workerConfigs = getWorkerConfigs(
14565
+ vitePreviewServer.config.root,
14566
+ pluginConfig.experimental?.mixedMode ?? false
14567
+ );
14511
14568
  const inputInspectorPort = await getInputInspectorPortOption(
14512
14569
  pluginConfig,
14513
14570
  vitePreviewServer
14514
14571
  );
14515
14572
  const miniflare2 = new Miniflare(
14516
- getPreviewMiniflareOptions(
14573
+ await getPreviewMiniflareOptions(
14517
14574
  vitePreviewServer,
14518
14575
  workerConfigs,
14519
14576
  pluginConfig.persistState ?? true,
14577
+ !!pluginConfig.experimental?.mixedMode,
14520
14578
  inputInspectorPort
14521
14579
  )
14522
14580
  );
@@ -14773,7 +14831,10 @@ function cloudflare2(pluginConfig = {}) {
14773
14831
  });
14774
14832
  },
14775
14833
  async configurePreviewServer(vitePreviewServer) {
14776
- const workerConfigs = getWorkerConfigs(vitePreviewServer.config.root);
14834
+ const workerConfigs = getWorkerConfigs(
14835
+ vitePreviewServer.config.root,
14836
+ pluginConfig.experimental?.mixedMode ?? false
14837
+ );
14777
14838
  if (workerConfigs.length >= 1 && pluginConfig.inspectorPort !== false) {
14778
14839
  addDebugToVitePrintUrls(vitePreviewServer);
14779
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-6479fc522",
3
+ "version": "0.0.0-66edd2f3b",
4
4
  "description": "Cloudflare plugin for Vite",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -41,22 +41,21 @@
41
41
  "tinyglobby": "^0.2.12",
42
42
  "unenv": "2.0.0-rc.17",
43
43
  "ws": "8.18.0",
44
- "wrangler": "0.0.0-6479fc522",
45
- "miniflare": "0.0.0-6479fc522"
44
+ "miniflare": "0.0.0-66edd2f3b",
45
+ "wrangler": "0.0.0-66edd2f3b"
46
46
  },
47
47
  "devDependencies": {
48
- "@cloudflare/workers-types": "^4.20250508.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-shared": "0.0.0-6479fc522",
58
+ "@cloudflare/workers-shared": "0.0.0-66edd2f3b",
60
59
  "@cloudflare/workers-tsconfig": "0.0.0"
61
60
  },
62
61
  "peerDependencies": {