@cloudflare/vite-plugin 0.0.0-3f8f1a148 → 0.0.0-3fcf19b1c

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.js CHANGED
@@ -489,7 +489,7 @@ import assert10 from "node:assert";
489
489
  import * as fs5 from "node:fs";
490
490
  import * as fsp2 from "node:fs/promises";
491
491
  import * as path9 from "node:path";
492
- import { createMiddleware } from "@hattip/adapter-node";
492
+ import { createRequest, sendResponse } from "@mjackson/node-fetch-server";
493
493
  import replace from "@rollup/plugin-replace";
494
494
 
495
495
  // ../../node_modules/.pnpm/@jridgewell+sourcemap-codec@1.5.0/node_modules/@jridgewell/sourcemap-codec/dist/sourcemap-codec.mjs
@@ -1558,7 +1558,7 @@ var MagicString = class _MagicString {
1558
1558
 
1559
1559
  // src/index.ts
1560
1560
  import { Miniflare } from "miniflare";
1561
- import colors2 from "picocolors";
1561
+ import colors3 from "picocolors";
1562
1562
  import * as vite7 from "vite";
1563
1563
 
1564
1564
  // src/constants.ts
@@ -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
@@ -5787,8 +5787,14 @@ var InternalConfigSchema = z.object({
5787
5787
  script_id: z.number().optional(),
5788
5788
  debug: z.boolean().optional()
5789
5789
  });
5790
+ var StaticRoutingSchema = z.object({
5791
+ version: z.literal(1),
5792
+ include: z.array(z.string()),
5793
+ exclude: z.array(z.string()).optional()
5794
+ });
5790
5795
  var RouterConfigSchema = z.object({
5791
5796
  invoke_user_worker_ahead_of_assets: z.boolean().optional(),
5797
+ static_routing: StaticRoutingSchema.optional(),
5792
5798
  has_user_worker: z.boolean().optional(),
5793
5799
  ...InternalConfigSchema.shape
5794
5800
  });
@@ -5829,6 +5835,7 @@ var AssetConfigSchema = z.object({
5829
5835
  not_found_handling: z.enum(["single-page-application", "404-page", "none"]).optional(),
5830
5836
  redirects: RedirectsSchema,
5831
5837
  headers: HeadersSchema,
5838
+ has_static_routing: z.boolean().optional(),
5832
5839
  ...InternalConfigSchema.shape
5833
5840
  });
5834
5841
 
@@ -12993,7 +13000,7 @@ var NodeJsCompatWarnings = class {
12993
13000
  // src/shared.ts
12994
13001
  var UNKNOWN_HOST = "http://localhost";
12995
13002
  var INIT_PATH = "/__vite_plugin_cloudflare_init__";
12996
- var ADDITIONAL_MODULE_PATTERN = `__CLOUDFLARE_MODULE__(${ADDITIONAL_MODULE_TYPES.join("|")})__(.*?)__`;
13003
+ var ADDITIONAL_MODULE_PATTERN = `__CLOUDFLARE_MODULE__(${ADDITIONAL_MODULE_TYPES.join("|")})__(.*?)__CLOUDFLARE_MODULE__`;
12997
13004
  var additionalModuleRE = new RegExp(ADDITIONAL_MODULE_PATTERN);
12998
13005
  var additionalModuleGlobalRE = new RegExp(
12999
13006
  ADDITIONAL_MODULE_PATTERN,
@@ -13029,19 +13036,6 @@ function toMiniflareRequest(request) {
13029
13036
  duplex: "half"
13030
13037
  });
13031
13038
  }
13032
- function nodeHeadersToWebHeaders(nodeHeaders) {
13033
- const headers = new Headers();
13034
- for (const [key, value] of Object.entries(nodeHeaders)) {
13035
- if (typeof value === "string") {
13036
- headers.append(key, value);
13037
- } else if (Array.isArray(value)) {
13038
- for (const item of value) {
13039
- headers.append(key, item);
13040
- }
13041
- }
13042
- }
13043
- return headers;
13044
- }
13045
13039
  var postfixRE = /[?#].*$/;
13046
13040
  function cleanUrl(url) {
13047
13041
  return url.replace(postfixRE, "");
@@ -13355,6 +13349,7 @@ import {
13355
13349
  LogLevel,
13356
13350
  Response as MiniflareResponse
13357
13351
  } from "miniflare";
13352
+ import colors2 from "picocolors";
13358
13353
  import { globSync } from "tinyglobby";
13359
13354
  import "vite";
13360
13355
  import { unstable_getMiniflareWorkerOptions } from "wrangler";
@@ -13459,6 +13454,29 @@ function getEntryWorkerConfig(resolvedPluginConfig) {
13459
13454
  }
13460
13455
  return resolvedPluginConfig.workers[resolvedPluginConfig.entryWorkerEnvironmentName];
13461
13456
  }
13457
+ function filterTails(tails, userWorkers, log) {
13458
+ return tails?.filter((tailService) => {
13459
+ let name;
13460
+ if (typeof tailService === "string") {
13461
+ name = tailService;
13462
+ } else if (typeof tailService === "object" && "name" in tailService && typeof tailService.name === "string") {
13463
+ name = tailService.name;
13464
+ } else {
13465
+ return true;
13466
+ }
13467
+ const found = userWorkers.some((w) => w.name === name);
13468
+ if (!found) {
13469
+ log(
13470
+ colors2.dim(
13471
+ 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.`
13473
+ )
13474
+ )
13475
+ );
13476
+ }
13477
+ return found;
13478
+ });
13479
+ }
13462
13480
  function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPort) {
13463
13481
  const resolvedViteConfig = viteDevServer.config;
13464
13482
  const entryWorkerConfig = getEntryWorkerConfig(resolvedPluginConfig);
@@ -13650,6 +13668,11 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer, inspectorPo
13650
13668
  }
13651
13669
  return {
13652
13670
  ...workerOptions,
13671
+ tails: filterTails(
13672
+ workerOptions.tails,
13673
+ userWorkers,
13674
+ viteDevServer.config.logger.warn
13675
+ ),
13653
13676
  modules: [
13654
13677
  {
13655
13678
  type: "ESModule",
@@ -13740,6 +13763,11 @@ function getPreviewMiniflareOptions(vitePreviewServer, workerConfigs, persistSta
13740
13763
  return [
13741
13764
  {
13742
13765
  ...workerOptions,
13766
+ tails: filterTails(
13767
+ workerOptions.tails,
13768
+ workerConfigs,
13769
+ vitePreviewServer.config.logger.warn
13770
+ ),
13743
13771
  name: workerOptions.name ?? config.name,
13744
13772
  unsafeInspectorProxy: inspectorPort !== false,
13745
13773
  ...miniflareWorkerOptions.main ? getPreviewModules(miniflareWorkerOptions.main, modulesRules) : { modules: true, script: "" }
@@ -14148,6 +14176,7 @@ function resolvePluginConfig(pluginConfig, userConfig, viteEnv) {
14148
14176
  }
14149
14177
 
14150
14178
  // src/websockets.ts
14179
+ import { createHeaders } from "@mjackson/node-fetch-server";
14151
14180
  import { coupleWebSocket } from "miniflare";
14152
14181
  import { WebSocketServer } from "ws";
14153
14182
  function handleWebSocket(httpServer, getFetcher) {
@@ -14159,7 +14188,7 @@ function handleWebSocket(httpServer, getFetcher) {
14159
14188
  if (request.headers["sec-websocket-protocol"]?.startsWith("vite")) {
14160
14189
  return;
14161
14190
  }
14162
- const headers = nodeHeadersToWebHeaders(request.headers);
14191
+ const headers = createHeaders(request);
14163
14192
  const fetcher = await getFetcher();
14164
14193
  const response = await fetcher(url, {
14165
14194
  headers,
@@ -14426,10 +14455,6 @@ function cloudflare2(pluginConfig = {}) {
14426
14455
  }
14427
14456
  },
14428
14457
  async configureServer(viteDevServer) {
14429
- assert10(
14430
- viteDevServer.httpServer,
14431
- "Unexpected error: No Vite HTTP server"
14432
- );
14433
14458
  const inputInspectorPort = await getInputInspectorPortOption(
14434
14459
  pluginConfig,
14435
14460
  viteDevServer
@@ -14452,24 +14477,32 @@ function cloudflare2(pluginConfig = {}) {
14452
14477
  );
14453
14478
  }
14454
14479
  await initRunners(resolvedPluginConfig, viteDevServer, miniflare);
14455
- const middleware = createMiddleware(
14456
- async ({ request }) => {
14480
+ if (viteDevServer.httpServer) {
14481
+ handleWebSocket(viteDevServer.httpServer, async () => {
14457
14482
  assert10(miniflare, `Miniflare not defined`);
14458
14483
  const routerWorker = await getRouterWorker(miniflare);
14459
- return routerWorker.fetch(toMiniflareRequest(request), {
14460
- redirect: "manual"
14461
- });
14462
- },
14463
- { alwaysCallNext: false }
14464
- );
14465
- handleWebSocket(viteDevServer.httpServer, async () => {
14466
- assert10(miniflare, `Miniflare not defined`);
14467
- const routerWorker = await getRouterWorker(miniflare);
14468
- return routerWorker.fetch;
14469
- });
14484
+ return routerWorker.fetch;
14485
+ });
14486
+ }
14470
14487
  return () => {
14471
- viteDevServer.middlewares.use((req, res, next) => {
14472
- middleware(req, res, next);
14488
+ viteDevServer.middlewares.use(async (req, res, next) => {
14489
+ try {
14490
+ assert10(miniflare, `Miniflare not defined`);
14491
+ const routerWorker = await getRouterWorker(miniflare);
14492
+ const request = createRequest(req, res);
14493
+ const response = await routerWorker.fetch(
14494
+ toMiniflareRequest(request),
14495
+ {
14496
+ redirect: "manual"
14497
+ }
14498
+ );
14499
+ if (req.httpVersionMajor === 2) {
14500
+ response.headers.delete("transfer-encoding");
14501
+ }
14502
+ await sendResponse(res, response);
14503
+ } catch (error) {
14504
+ next(error);
14505
+ }
14473
14506
  });
14474
14507
  };
14475
14508
  },
@@ -14487,20 +14520,24 @@ function cloudflare2(pluginConfig = {}) {
14487
14520
  inputInspectorPort
14488
14521
  )
14489
14522
  );
14490
- const middleware = createMiddleware(
14491
- ({ request }) => {
14492
- return miniflare2.dispatchFetch(toMiniflareRequest(request), {
14493
- redirect: "manual"
14494
- });
14495
- },
14496
- { alwaysCallNext: false }
14497
- );
14498
14523
  handleWebSocket(
14499
14524
  vitePreviewServer.httpServer,
14500
14525
  () => miniflare2.dispatchFetch
14501
14526
  );
14502
- vitePreviewServer.middlewares.use((req, res, next) => {
14503
- middleware(req, res, next);
14527
+ vitePreviewServer.middlewares.use(async (req, res, next) => {
14528
+ try {
14529
+ const request = createRequest(req, res);
14530
+ const response = await miniflare2.dispatchFetch(
14531
+ toMiniflareRequest(request),
14532
+ { redirect: "manual" }
14533
+ );
14534
+ if (req.httpVersionMajor === 2) {
14535
+ response.headers.delete("transfer-encoding");
14536
+ }
14537
+ await sendResponse(res, response);
14538
+ } catch (error) {
14539
+ next(error);
14540
+ }
14504
14541
  });
14505
14542
  }
14506
14543
  },
@@ -14839,7 +14876,7 @@ async function getInputInspectorPortOption(pluginConfig, viteServer) {
14839
14876
  const inputInspectorPort = pluginConfig.inspectorPort ?? await getFirstAvailablePort(DEFAULT_INSPECTOR_PORT);
14840
14877
  if (pluginConfig.inspectorPort === void 0 && inputInspectorPort !== DEFAULT_INSPECTOR_PORT) {
14841
14878
  viteServer.config.logger.warn(
14842
- colors2.dim(
14879
+ colors3.dim(
14843
14880
  `Default inspector port ${DEFAULT_INSPECTOR_PORT} not available, using ${inputInspectorPort} instead
14844
14881
  `
14845
14882
  )
@@ -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,
@@ -29,7 +29,7 @@ function stripInternalEnv(internalEnv) {
29
29
  return userEnv;
30
30
  }
31
31
 
32
- // ../../node_modules/.pnpm/vite@6.1.0_@types+node@18.19.76_jiti@2.4.2_lightningcss@1.29.2/node_modules/vite/dist/node/module-runner.js
32
+ // ../../node_modules/.pnpm/vite@6.1.0_@types+node@20.17.32_jiti@2.4.2_lightningcss@1.29.2/node_modules/vite/dist/node/module-runner.js
33
33
  var VALID_ID_PREFIX = "/@id/";
34
34
  var NULL_BYTE_PLACEHOLDER = "__x00__";
35
35
  var SOURCEMAPPING_URL = "sourceMa";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudflare/vite-plugin",
3
- "version": "0.0.0-3f8f1a148",
3
+ "version": "0.0.0-3fcf19b1c",
4
4
  "description": "Cloudflare plugin for Vite",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -33,19 +33,19 @@
33
33
  "dist"
34
34
  ],
35
35
  "dependencies": {
36
- "@hattip/adapter-node": "^0.0.49",
36
+ "@cloudflare/unenv-preset": "2.3.2",
37
+ "@mjackson/node-fetch-server": "^0.6.1",
37
38
  "@rollup/plugin-replace": "^6.0.1",
38
39
  "get-port": "^7.1.0",
39
40
  "picocolors": "^1.1.1",
40
41
  "tinyglobby": "^0.2.12",
41
- "unenv": "2.0.0-rc.15",
42
+ "unenv": "2.0.0-rc.17",
42
43
  "ws": "8.18.0",
43
- "@cloudflare/unenv-preset": "0.0.0-3f8f1a148",
44
- "miniflare": "0.0.0-3f8f1a148",
45
- "wrangler": "0.0.0-3f8f1a148"
44
+ "wrangler": "0.0.0-3fcf19b1c",
45
+ "miniflare": "0.0.0-3fcf19b1c"
46
46
  },
47
47
  "devDependencies": {
48
- "@cloudflare/workers-types": "^4.20250428.0",
48
+ "@cloudflare/workers-types": "^4.20250520.0",
49
49
  "@types/node": "^22.10.1",
50
50
  "@types/ws": "^8.5.13",
51
51
  "magic-string": "^0.30.12",
@@ -55,9 +55,9 @@
55
55
  "undici": "^5.28.5",
56
56
  "vite": "^6.1.0",
57
57
  "vitest": "~3.1.1",
58
- "@cloudflare/workers-shared": "0.0.0-3f8f1a148",
59
58
  "@cloudflare/mock-npm-registry": "0.0.0",
60
- "@cloudflare/workers-tsconfig": "0.0.0"
59
+ "@cloudflare/workers-tsconfig": "0.0.0",
60
+ "@cloudflare/workers-shared": "0.0.0-3fcf19b1c"
61
61
  },
62
62
  "peerDependencies": {
63
63
  "vite": "^6.1.0",