@cloudflare/vite-plugin 0.0.0-e2f5756c2 → 0.0.0-e55f489db

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.
@@ -5,23 +5,31 @@ import {
5
5
  WorkflowEntrypoint
6
6
  } from "cloudflare:workers";
7
7
 
8
+ // src/constants.ts
9
+ var ADDITIONAL_MODULE_TYPES = [
10
+ "CompiledWasm",
11
+ "Data",
12
+ "Text"
13
+ ];
14
+
8
15
  // src/shared.ts
9
16
  var UNKNOWN_HOST = "http://localhost";
10
17
  var INIT_PATH = "/__vite_plugin_cloudflare_init__";
18
+ var ADDITIONAL_MODULE_PATTERN = `__CLOUDFLARE_MODULE__(${ADDITIONAL_MODULE_TYPES.join("|")})__(.*?)__`;
19
+ var additionalModuleRE = new RegExp(ADDITIONAL_MODULE_PATTERN);
20
+ var additionalModuleGlobalRE = new RegExp(
21
+ ADDITIONAL_MODULE_PATTERN,
22
+ "g"
23
+ );
24
+ var VITE_DEV_METADATA_HEADER = "__VITE_DEV_METADATA__";
11
25
 
12
26
  // src/runner-worker/env.ts
13
27
  function stripInternalEnv(internalEnv) {
14
- const {
15
- __VITE_ROOT__,
16
- __VITE_ENTRY_PATH__,
17
- __VITE_INVOKE_MODULE__,
18
- __VITE_UNSAFE_EVAL__,
19
- ...userEnv
20
- } = internalEnv;
28
+ const { __VITE_INVOKE_MODULE__, __VITE_UNSAFE_EVAL__, ...userEnv } = internalEnv;
21
29
  return userEnv;
22
30
  }
23
31
 
24
- // ../../node_modules/.pnpm/vite@6.0.7_@types+node@18.19.59_jiti@2.4.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
25
33
  var VALID_ID_PREFIX = "/@id/";
26
34
  var NULL_BYTE_PLACEHOLDER = "__x00__";
27
35
  var SOURCEMAPPING_URL = "sourceMa";
@@ -1352,7 +1360,7 @@ function exportAll(exports, sourceModule) {
1352
1360
 
1353
1361
  // src/runner-worker/module-runner.ts
1354
1362
  var moduleRunner;
1355
- async function createModuleRunner(env, webSocket) {
1363
+ async function createModuleRunner(env, webSocket, viteRoot) {
1356
1364
  if (moduleRunner) {
1357
1365
  throw new Error("Runner already initialized");
1358
1366
  }
@@ -1364,7 +1372,7 @@ async function createModuleRunner(env, webSocket) {
1364
1372
  });
1365
1373
  moduleRunner = new ModuleRunner(
1366
1374
  {
1367
- root: env.__VITE_ROOT__,
1375
+ root: viteRoot,
1368
1376
  sourcemapInterceptor: "prepareStackTrace",
1369
1377
  transport: {
1370
1378
  ...transport,
@@ -1386,13 +1394,6 @@ async function createModuleRunner(env, webSocket) {
1386
1394
  },
1387
1395
  {
1388
1396
  async runInlinedModule(context, transformed, module) {
1389
- if (module.file.includes("/node_modules") && !module.file.includes("/node_modules/.vite")) {
1390
- throw new Error(
1391
- `[Error] Trying to import non-prebundled module (only prebundled modules are allowed): ${module.id}
1392
-
1393
- (have you excluded the module via \`optimizeDeps.exclude\`?)`
1394
- );
1395
- }
1396
1397
  const codeDefinition = `'use strict';async (${Object.keys(context).join(
1397
1398
  ","
1398
1399
  )})=>{{`;
@@ -1409,12 +1410,14 @@ async function createModuleRunner(env, webSocket) {
1409
1410
  }
1410
1411
  },
1411
1412
  async runExternalModule(filepath) {
1412
- if (filepath.includes("/node_modules") && !filepath.includes("/node_modules/.vite")) {
1413
- throw new Error(
1414
- `[Error] Trying to import non-prebundled module (only prebundled modules are allowed): ${filepath}
1415
-
1416
- (have you externalized the module via \`resolve.external\`?)`
1417
- );
1413
+ if (filepath === "cloudflare:workers") {
1414
+ const originalCloudflareWorkersModule = await import("cloudflare:workers");
1415
+ return Object.seal({
1416
+ ...originalCloudflareWorkersModule,
1417
+ env: stripInternalEnv(
1418
+ originalCloudflareWorkersModule.env
1419
+ )
1420
+ });
1418
1421
  }
1419
1422
  filepath = filepath.replace(/^file:\/\//, "");
1420
1423
  return import(filepath);
@@ -1432,22 +1435,24 @@ async function getWorkerEntryExport(path, entrypoint) {
1432
1435
  }
1433
1436
 
1434
1437
  // src/runner-worker/index.ts
1438
+ var IGNORED_KEYS = ["self", "tailStream"];
1435
1439
  var WORKER_ENTRYPOINT_KEYS = [
1436
1440
  "fetch",
1441
+ "queue",
1437
1442
  "tail",
1443
+ "test",
1438
1444
  "trace",
1439
- "scheduled",
1440
- "queue",
1441
- "test"
1445
+ "scheduled"
1442
1446
  ];
1443
1447
  var DURABLE_OBJECT_KEYS = [
1444
- "fetch",
1445
1448
  "alarm",
1446
- "webSocketMessage",
1449
+ "fetch",
1447
1450
  "webSocketClose",
1448
- "webSocketError"
1451
+ "webSocketError",
1452
+ "webSocketMessage"
1449
1453
  ];
1450
1454
  var WORKFLOW_ENTRYPOINT_KEYS = ["run"];
1455
+ var entryPath = "";
1451
1456
  function getRpcProperty(ctor, instance, key) {
1452
1457
  const prototypeHasKey = Reflect.has(ctor.prototype, key);
1453
1458
  if (!prototypeHasKey) {
@@ -1480,7 +1485,6 @@ function getRpcPropertyCallableThenable(key, property) {
1480
1485
  return fn;
1481
1486
  }
1482
1487
  async function getWorkerEntrypointRpcProperty(entrypoint, key) {
1483
- const entryPath = this.env.__VITE_ENTRY_PATH__;
1484
1488
  const ctor = await getWorkerEntryExport(
1485
1489
  entryPath,
1486
1490
  entrypoint
@@ -1510,7 +1514,7 @@ function createWorkerEntrypointWrapper(entrypoint) {
1510
1514
  if (value !== void 0) {
1511
1515
  return value;
1512
1516
  }
1513
- if (key === "self" || typeof key === "symbol" || DURABLE_OBJECT_KEYS.includes(key)) {
1517
+ if (typeof key === "symbol" || IGNORED_KEYS.includes(key) || DURABLE_OBJECT_KEYS.includes(key)) {
1514
1518
  return;
1515
1519
  }
1516
1520
  const property = getWorkerEntrypointRpcProperty.call(
@@ -1525,14 +1529,27 @@ function createWorkerEntrypointWrapper(entrypoint) {
1525
1529
  }
1526
1530
  for (const key of WORKER_ENTRYPOINT_KEYS) {
1527
1531
  Wrapper.prototype[key] = async function(arg) {
1528
- const entryPath = this.env.__VITE_ENTRY_PATH__;
1529
1532
  if (key === "fetch") {
1530
1533
  const request = arg;
1531
1534
  const url = new URL(request.url);
1535
+ let webSocket;
1532
1536
  if (url.pathname === INIT_PATH) {
1533
- const { 0: client, 1: server } = new WebSocketPair();
1534
- createModuleRunner(this.env, server);
1535
- return new Response(null, { status: 101, webSocket: client });
1537
+ try {
1538
+ const viteDevMetadata = getViteDevMetadata(request);
1539
+ entryPath = viteDevMetadata.entryPath;
1540
+ const { 0: client, 1: server } = new WebSocketPair();
1541
+ webSocket = client;
1542
+ await createModuleRunner(this.env, server, viteDevMetadata.root);
1543
+ } catch (e) {
1544
+ return new Response(
1545
+ e instanceof Error ? e.message : JSON.stringify(e),
1546
+ { status: 500 }
1547
+ );
1548
+ }
1549
+ return new Response(null, {
1550
+ status: 101,
1551
+ webSocket
1552
+ });
1536
1553
  }
1537
1554
  }
1538
1555
  const entrypointValue = await getWorkerEntryExport(entryPath, entrypoint);
@@ -1572,7 +1589,6 @@ function createWorkerEntrypointWrapper(entrypoint) {
1572
1589
  var kInstance = Symbol("kInstance");
1573
1590
  var kEnsureInstance = Symbol("kEnsureInstance");
1574
1591
  async function getDurableObjectRpcProperty(className, key) {
1575
- const entryPath = this.env.__VITE_ENTRY_PATH__;
1576
1592
  const { ctor, instance } = await this[kEnsureInstance]();
1577
1593
  if (!(instance instanceof DurableObject)) {
1578
1594
  throw new TypeError(
@@ -1596,7 +1612,7 @@ function createDurableObjectWrapper(className) {
1596
1612
  if (value !== void 0) {
1597
1613
  return value;
1598
1614
  }
1599
- if (key === "self" || typeof key === "symbol" || WORKER_ENTRYPOINT_KEYS.includes(key)) {
1615
+ if (typeof key === "symbol" || IGNORED_KEYS.includes(key) || WORKER_ENTRYPOINT_KEYS.includes(key)) {
1600
1616
  return;
1601
1617
  }
1602
1618
  const property = getDurableObjectRpcProperty.call(
@@ -1609,7 +1625,6 @@ function createDurableObjectWrapper(className) {
1609
1625
  });
1610
1626
  }
1611
1627
  async [kEnsureInstance]() {
1612
- const entryPath = this.env.__VITE_ENTRY_PATH__;
1613
1628
  const ctor = await getWorkerEntryExport(
1614
1629
  entryPath,
1615
1630
  className
@@ -1631,7 +1646,6 @@ function createDurableObjectWrapper(className) {
1631
1646
  }
1632
1647
  for (const key of DURABLE_OBJECT_KEYS) {
1633
1648
  Wrapper.prototype[key] = async function(...args) {
1634
- const entryPath = this.env.__VITE_ENTRY_PATH__;
1635
1649
  const { instance } = await this[kEnsureInstance]();
1636
1650
  const maybeFn = instance[key];
1637
1651
  if (typeof maybeFn !== "function") {
@@ -1649,7 +1663,6 @@ function createWorkflowEntrypointWrapper(className) {
1649
1663
  }
1650
1664
  for (const key of WORKFLOW_ENTRYPOINT_KEYS) {
1651
1665
  Wrapper.prototype[key] = async function(...args) {
1652
- const entryPath = this.env.__VITE_ENTRY_PATH__;
1653
1666
  const ctor = await getWorkerEntryExport(
1654
1667
  entryPath,
1655
1668
  className
@@ -1672,6 +1685,34 @@ function createWorkflowEntrypointWrapper(className) {
1672
1685
  }
1673
1686
  return Wrapper;
1674
1687
  }
1688
+ function getViteDevMetadata(request) {
1689
+ const viteDevMetadataHeader = request.headers.get(VITE_DEV_METADATA_HEADER);
1690
+ if (viteDevMetadataHeader === null) {
1691
+ throw new Error(
1692
+ "Unexpected internal error, vite dev metadata header not set"
1693
+ );
1694
+ }
1695
+ let parsedViteDevMetadataHeader;
1696
+ try {
1697
+ parsedViteDevMetadataHeader = JSON.parse(viteDevMetadataHeader);
1698
+ } catch {
1699
+ throw new Error(
1700
+ `Unexpected internal error, vite dev metadata header JSON parsing failed, value = ${viteDevMetadataHeader}`
1701
+ );
1702
+ }
1703
+ const { root, entryPath: entryPath2 } = parsedViteDevMetadataHeader;
1704
+ if (root === void 0) {
1705
+ throw new Error(
1706
+ "Unexpected internal error, vite dev metadata header doesn't contain a root value"
1707
+ );
1708
+ }
1709
+ if (entryPath2 === void 0) {
1710
+ throw new Error(
1711
+ "Unexpected internal error, vite dev metadata header doesn't contain an entryPath value"
1712
+ );
1713
+ }
1714
+ return { root, entryPath: entryPath2 };
1715
+ }
1675
1716
  export {
1676
1717
  createDurableObjectWrapper,
1677
1718
  createWorkerEntrypointWrapper,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudflare/vite-plugin",
3
- "version": "0.0.0-e2f5756c2",
3
+ "version": "0.0.0-e55f489db",
4
4
  "description": "Cloudflare plugin for Vite",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -33,26 +33,35 @@
33
33
  "dist"
34
34
  ],
35
35
  "dependencies": {
36
- "@hattip/adapter-node": "^0.0.49",
37
- "unenv": "npm:unenv-nightly@2.0.0-20241218-183400-5d6aec3",
38
- "ws": "^8.18.0",
39
- "miniflare": "0.0.0-e2f5756c2"
36
+ "@mjackson/node-fetch-server": "^0.6.1",
37
+ "@rollup/plugin-replace": "^6.0.1",
38
+ "get-port": "^7.1.0",
39
+ "picocolors": "^1.1.1",
40
+ "tinyglobby": "^0.2.12",
41
+ "unenv": "2.0.0-rc.15",
42
+ "ws": "8.18.0",
43
+ "@cloudflare/unenv-preset": "0.0.0-e55f489db",
44
+ "miniflare": "0.0.0-e55f489db",
45
+ "wrangler": "0.0.0-e55f489db"
40
46
  },
41
47
  "devDependencies": {
42
- "@cloudflare/workers-types": "^4.20241230.0",
48
+ "@cloudflare/workers-types": "^4.20250508.0",
43
49
  "@types/node": "^22.10.1",
44
50
  "@types/ws": "^8.5.13",
45
51
  "magic-string": "^0.30.12",
46
- "tsup": "^8.3.0",
52
+ "mlly": "^1.7.4",
53
+ "tsup": "8.3.0",
47
54
  "typescript": "^5.7.2",
48
- "vite": "^6.0.7",
49
- "wrangler": "0.0.0-e2f5756c2",
50
- "@cloudflare/workers-tsconfig": "0.0.0",
51
- "@cloudflare/workers-shared": "0.0.0-e2f5756c2"
55
+ "undici": "^5.28.5",
56
+ "vite": "^6.1.0",
57
+ "vitest": "~3.1.1",
58
+ "@cloudflare/workers-shared": "0.0.0-e55f489db",
59
+ "@cloudflare/mock-npm-registry": "0.0.0",
60
+ "@cloudflare/workers-tsconfig": "0.0.0"
52
61
  },
53
62
  "peerDependencies": {
54
- "vite": "^6.0.7",
55
- "wrangler": "^3.101.0"
63
+ "vite": "^6.1.0",
64
+ "wrangler": "^3.101.0 || ^4.0.0"
56
65
  },
57
66
  "publishConfig": {
58
67
  "access": "public"
@@ -63,8 +72,10 @@
63
72
  "scripts": {
64
73
  "build": "tsup",
65
74
  "check:type": "tsc --build",
66
- "test": "vitest",
67
- "test:ci": "vitest run",
68
- "watch": "tsup --watch"
75
+ "dev": "tsup --watch",
76
+ "test": "vitest run",
77
+ "test:ci": "pnpm test",
78
+ "test:e2e": "vitest run -c e2e/vitest.config.ts",
79
+ "test:watch": "vitest"
69
80
  }
70
81
  }