@cloudflare/vite-plugin 0.0.0-ed3bc2f3b → 0.0.0-ed5ebdc4c

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
@@ -1,6 +1,7 @@
1
1
  // src/index.ts
2
2
  import assert9 from "node:assert";
3
3
  import * as fs5 from "node:fs";
4
+ import { builtinModules as builtinModules2 } from "node:module";
4
5
  import * as path7 from "node:path";
5
6
  import { createMiddleware } from "@hattip/adapter-node";
6
7
 
@@ -1074,7 +1075,6 @@ import * as vite6 from "vite";
1074
1075
 
1075
1076
  // src/cloudflare-environment.ts
1076
1077
  import assert from "node:assert";
1077
- import { builtinModules } from "node:module";
1078
1078
  import * as vite2 from "vite";
1079
1079
 
1080
1080
  // src/constants.ts
@@ -1207,7 +1207,9 @@ function createCloudflareEnvironmentOptions(workerConfig, userConfig, environmen
1207
1207
  // dependencies as not external
1208
1208
  noExternal: true,
1209
1209
  // We want to use `workerd` package exports if available (e.g. for postgres).
1210
- conditions: [...defaultConditions, "development|production"]
1210
+ conditions: [...defaultConditions, "development|production"],
1211
+ // The Cloudflare ones are proper builtins in the environment
1212
+ builtins: [...cloudflareBuiltInModules]
1211
1213
  },
1212
1214
  dev: {
1213
1215
  createEnvironment(name2, config) {
@@ -1229,19 +1231,14 @@ function createCloudflareEnvironmentOptions(workerConfig, userConfig, environmen
1229
1231
  // so the input value here serves both as the build input as well as the starting point for
1230
1232
  // dev pre-bundling crawling (were we not to set this input field we'd have to appropriately set
1231
1233
  // optimizeDeps.entries in the dev config)
1232
- input: workerConfig.main,
1233
- external: [...cloudflareBuiltInModules]
1234
+ input: workerConfig.main
1234
1235
  }
1235
1236
  },
1236
1237
  optimizeDeps: {
1237
1238
  // Note: ssr pre-bundling is opt-in and we need to enable it by setting `noDiscovery` to false
1238
1239
  noDiscovery: false,
1239
1240
  entries: workerConfig.main,
1240
- exclude: [
1241
- ...cloudflareBuiltInModules,
1242
- // we have to exclude all node modules to work in dev-mode not just the unenv externals...
1243
- ...builtinModules.concat(builtinModules.map((m) => `node:${m}`))
1244
- ],
1241
+ exclude: [...cloudflareBuiltInModules],
1245
1242
  esbuildOptions: {
1246
1243
  platform: "neutral",
1247
1244
  conditions: [...defaultConditions, "development"],
@@ -1585,20 +1582,17 @@ function getDevMiniflareOptions(resolvedPluginConfig, viteDevServer) {
1585
1582
  );
1586
1583
  const [moduleId] = invokePayloadData.data;
1587
1584
  const moduleRE = new RegExp(MODULE_PATTERN);
1588
- if (moduleRE.test(moduleId)) {
1585
+ const shouldExternalize = (
1586
+ // Worker modules (CompiledWasm, Text, Data)
1587
+ moduleRE.test(moduleId)
1588
+ );
1589
+ if (shouldExternalize) {
1589
1590
  const result2 = {
1590
1591
  externalize: moduleId,
1591
1592
  type: "module"
1592
1593
  };
1593
1594
  return MiniflareResponse.json({ result: result2 });
1594
1595
  }
1595
- if (moduleId.startsWith("cloudflare:")) {
1596
- const result2 = {
1597
- externalize: moduleId,
1598
- type: "builtin"
1599
- };
1600
- return MiniflareResponse.json({ result: result2 });
1601
- }
1602
1596
  const devEnvironment = viteDevServer.environments[environmentName];
1603
1597
  const result = await devEnvironment.hot.handleInvoke(payload);
1604
1598
  return MiniflareResponse.json(result);
@@ -7310,7 +7304,7 @@ Parser.acorn = {
7310
7304
  };
7311
7305
 
7312
7306
  // ../../node_modules/.pnpm/mlly@1.7.4/node_modules/mlly/dist/index.mjs
7313
- import { builtinModules as builtinModules2, createRequire } from "node:module";
7307
+ import { builtinModules, createRequire } from "node:module";
7314
7308
  import fs3, { realpathSync, statSync as statSync2, promises } from "node:fs";
7315
7309
 
7316
7310
  // ../../node_modules/.pnpm/ufo@1.5.4/node_modules/ufo/dist/index.mjs
@@ -7373,7 +7367,7 @@ import process$1 from "node:process";
7373
7367
  import path4, { dirname as dirname3 } from "node:path";
7374
7368
  import v8 from "node:v8";
7375
7369
  import { format as format2, inspect } from "node:util";
7376
- var BUILTIN_MODULES = new Set(builtinModules2);
7370
+ var BUILTIN_MODULES = new Set(builtinModules);
7377
7371
  function normalizeSlash(path8) {
7378
7372
  return path8.replace(/\\/g, "/");
7379
7373
  }
@@ -8487,7 +8481,7 @@ function parsePackageName(specifier, base) {
8487
8481
  return { packageName, packageSubpath, isScoped };
8488
8482
  }
8489
8483
  function packageResolve(specifier, base, conditions) {
8490
- if (builtinModules2.includes(specifier)) {
8484
+ if (builtinModules.includes(specifier)) {
8491
8485
  return new URL$1("node:" + specifier);
8492
8486
  }
8493
8487
  const { packageName, packageSubpath, isScoped } = parsePackageName(
@@ -8574,7 +8568,7 @@ function moduleResolve(specifier, base, conditions, preserveSymlinks) {
8574
8568
  try {
8575
8569
  resolved = new URL$1(specifier);
8576
8570
  } catch (error_) {
8577
- if (isRemote && !builtinModules2.includes(specifier)) {
8571
+ if (isRemote && !builtinModules.includes(specifier)) {
8578
8572
  const error = new ERR_UNSUPPORTED_RESOLVE_REQUEST(specifier, base);
8579
8573
  error.cause = error_;
8580
8574
  throw error;
@@ -8719,7 +8713,6 @@ var { env } = defineEnv({
8719
8713
  nodeCompat: true,
8720
8714
  presets: [cloudflare]
8721
8715
  });
8722
- var CLOUDFLARE_VIRTUAL_PREFIX = "\0__CLOUDFLARE_NODEJS_COMPAT__";
8723
8716
  function isNodeCompat(workerConfig) {
8724
8717
  if (workerConfig === void 0) {
8725
8718
  return false;
@@ -8743,16 +8736,39 @@ function isNodeCompat(workerConfig) {
8743
8736
  }
8744
8737
  return false;
8745
8738
  }
8739
+ function getNodeCompatEntries() {
8740
+ const entries = new Set(Object.values(env.alias));
8741
+ for (const globalInject of Object.values(env.inject)) {
8742
+ if (typeof globalInject === "string") {
8743
+ entries.add(globalInject);
8744
+ } else {
8745
+ assert6(
8746
+ globalInject[0] !== void 0,
8747
+ "Expected first element of globalInject to be defined"
8748
+ );
8749
+ entries.add(globalInject[0]);
8750
+ }
8751
+ }
8752
+ for (const external of env.external) {
8753
+ entries.delete(external);
8754
+ }
8755
+ return entries;
8756
+ }
8746
8757
  function injectGlobalCode(id, code) {
8747
8758
  const injectedCode = Object.entries(env.inject).map(([globalName, globalInject]) => {
8748
8759
  if (typeof globalInject === "string") {
8749
8760
  const moduleSpecifier2 = globalInject;
8750
- return `import var_${globalName} from "${CLOUDFLARE_VIRTUAL_PREFIX}${moduleSpecifier2}";
8761
+ return `import var_${globalName} from "${moduleSpecifier2}";
8751
8762
  globalThis.${globalName} = var_${globalName};
8752
8763
  `;
8753
8764
  }
8754
8765
  const [moduleSpecifier, exportName] = globalInject;
8755
- return `import var_${globalName} from "${CLOUDFLARE_VIRTUAL_PREFIX}${moduleSpecifier}";
8766
+ assert6(
8767
+ moduleSpecifier !== void 0,
8768
+ "Expected moduleSpecifier to be defined"
8769
+ );
8770
+ assert6(exportName !== void 0, "Expected exportName to be defined");
8771
+ return `import var_${globalName} from "${moduleSpecifier}";
8756
8772
  globalThis.${globalName} = var_${globalName}.${exportName};
8757
8773
  `;
8758
8774
  }).join("\n");
@@ -8763,37 +8779,17 @@ globalThis.${globalName} = var_${globalName}.${exportName};
8763
8779
  map: modified.generateMap({ hires: "boundary", source: id })
8764
8780
  };
8765
8781
  }
8766
- function getNodeCompatAliases() {
8767
- const aliases = {};
8768
- Object.keys(env.alias).forEach((key) => {
8769
- if (!env.external.includes(key)) {
8770
- aliases[key] = CLOUDFLARE_VIRTUAL_PREFIX + key;
8771
- }
8772
- });
8773
- return aliases;
8774
- }
8775
8782
  function getNodeCompatExternals() {
8776
8783
  return env.external;
8777
8784
  }
8778
- function maybeStripNodeJsVirtualPrefix(source) {
8779
- return source.startsWith(CLOUDFLARE_VIRTUAL_PREFIX) ? source.slice(CLOUDFLARE_VIRTUAL_PREFIX.length) : void 0;
8780
- }
8781
8785
  function resolveNodeJSImport(source) {
8782
8786
  const alias = env.alias[source];
8783
8787
  if (alias) {
8784
- assert6(
8785
- !env.external.includes(alias),
8786
- `Unexpected unenv alias to external module: ${source} -> ${alias}`
8787
- );
8788
- source = alias;
8788
+ return {
8789
+ unresolved: alias,
8790
+ resolved: resolvePathSync(alias, { url: import.meta.url })
8791
+ };
8789
8792
  }
8790
- const resolved = resolvePathSync(source, {
8791
- url: import.meta.url
8792
- });
8793
- return {
8794
- unresolved: source,
8795
- resolved
8796
- };
8797
8793
  }
8798
8794
 
8799
8795
  // src/plugin-config.ts
@@ -9462,49 +9458,56 @@ function cloudflare2(pluginConfig = {}) {
9462
9458
  apply(_config, env2) {
9463
9459
  return !env2.isPreview;
9464
9460
  },
9465
- config() {
9466
- return {
9467
- resolve: {
9468
- alias: getNodeCompatAliases()
9469
- }
9470
- };
9471
- },
9472
- configEnvironment(environmentName) {
9473
- const workerConfig = getWorkerConfig2(environmentName);
9474
- if (isNodeCompat(workerConfig)) {
9461
+ configEnvironment(name2) {
9462
+ if (isNodeCompat(getWorkerConfig2(name2))) {
9475
9463
  return {
9476
- build: {
9477
- rollupOptions: {
9478
- external: getNodeCompatExternals()
9479
- }
9464
+ resolve: {
9465
+ builtins: getNodeCompatExternals()
9466
+ },
9467
+ optimizeDeps: {
9468
+ // This is a list of dependency entry-points that should be pre-bundled.
9469
+ // In this case we provide a list of all the possible polyfills so that they are pre-bundled,
9470
+ // ready ahead the first request to the dev server.
9471
+ // Without this the dependency optimizer will try to bundle them on-the-fly in the middle of the first request,
9472
+ // which can potentially cause problems if it leads to previous pre-bundling to become stale and needing to be reloaded.
9473
+ include: [...getNodeCompatEntries()],
9474
+ // This is a list of module specifiers that the dependency optimizer should not follow when doing import analysis.
9475
+ // In this case we provide a list of all the Node.js modules, both those built-in to workerd and those that will be polyfilled.
9476
+ // Obviously we don't want/need the optimizer to try to process modules that are built-in;
9477
+ // But also we want to avoid following the ones that are polyfilled since the dependency-optimizer import analyzer does not
9478
+ // resolve these imports using our `resolveId()` hook causing the optimization step to fail.
9479
+ exclude: [
9480
+ ...builtinModules2,
9481
+ ...builtinModules2.map((m) => `node:${m}`)
9482
+ ]
9480
9483
  }
9481
9484
  };
9482
9485
  }
9483
9486
  },
9487
+ applyToEnvironment(environment) {
9488
+ return isNodeCompat(getWorkerConfig2(environment.name));
9489
+ },
9490
+ // We need the resolver from this plugin to run before built-in ones, otherwise Vite's built-in
9491
+ // resolver will try to externalize the Node.js module imports (e.g. `perf_hooks` and `node:tty`)
9492
+ // rather than allowing the resolve hook here to alias then to polyfills.
9493
+ enforce: "pre",
9484
9494
  async resolveId(source, importer, options) {
9485
- const strippedSource = maybeStripNodeJsVirtualPrefix(source);
9486
- if (!strippedSource) {
9487
- return;
9488
- }
9489
- const workerConfig = getWorkerConfig2(this.environment.name);
9490
- if (!isNodeCompat(workerConfig)) {
9491
- return this.resolve(strippedSource, importer, options);
9495
+ const result = resolveNodeJSImport(source);
9496
+ if (!result) {
9497
+ return this.resolve(source, importer, options);
9492
9498
  }
9493
- const { unresolved, resolved } = resolveNodeJSImport(strippedSource);
9494
- if (this.environment.mode === "dev" && this.environment.depsOptimizer) {
9495
- const optimized = this.environment.depsOptimizer.registerMissingImport(
9496
- unresolved,
9497
- resolved
9498
- ).id;
9499
- return this.resolve(optimized, importer, options);
9499
+ if (this.environment.mode === "dev") {
9500
+ assert9(
9501
+ this.environment.depsOptimizer,
9502
+ "depsOptimizer is required in dev mode"
9503
+ );
9504
+ return this.resolve(result.unresolved, importer, options);
9500
9505
  }
9501
- return this.resolve(resolved, importer, options);
9506
+ return this.resolve(result.resolved, importer, options);
9502
9507
  },
9503
9508
  async transform(code, id) {
9504
9509
  const workerConfig = getWorkerConfig2(this.environment.name);
9505
- if (!isNodeCompat(workerConfig)) {
9506
- return;
9507
- }
9510
+ assert9(workerConfig, "Expected a worker config");
9508
9511
  const resolvedId = await this.resolve(workerConfig.main);
9509
9512
  if (id === resolvedId?.id) {
9510
9513
  return injectGlobalCode(id, code);
@@ -25,7 +25,7 @@ function stripInternalEnv(internalEnv) {
25
25
  return userEnv;
26
26
  }
27
27
 
28
- // ../../node_modules/.pnpm/vite@6.1.0_@types+node@18.19.74_jiti@2.4.2/node_modules/vite/dist/node/module-runner.js
28
+ // ../../node_modules/.pnpm/vite@6.1.0_@types+node@18.19.76_jiti@2.4.2/node_modules/vite/dist/node/module-runner.js
29
29
  var VALID_ID_PREFIX = "/@id/";
30
30
  var NULL_BYTE_PLACEHOLDER = "__x00__";
31
31
  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-ed3bc2f3b",
3
+ "version": "0.0.0-ed5ebdc4c",
4
4
  "description": "Cloudflare plugin for Vite",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -37,23 +37,23 @@
37
37
  "@hattip/adapter-node": "^0.0.49",
38
38
  "unenv": "2.0.0-rc.1",
39
39
  "ws": "^8.18.0",
40
- "miniflare": "0.0.0-ed3bc2f3b"
40
+ "miniflare": "0.0.0-ed5ebdc4c"
41
41
  },
42
42
  "devDependencies": {
43
- "@cloudflare/workers-types": "^4.20250204.0",
43
+ "@cloudflare/workers-types": "^4.20250214.0",
44
44
  "@types/node": "^22.10.1",
45
45
  "@types/ws": "^8.5.13",
46
46
  "magic-string": "^0.30.12",
47
47
  "mlly": "^1.7.4",
48
48
  "tsup": "8.3.0",
49
49
  "typescript": "^5.7.2",
50
- "undici": "^5.28.4",
50
+ "undici": "^5.28.5",
51
51
  "vite": "^6.1.0",
52
52
  "vitest": "~3.0.5",
53
53
  "@cloudflare/mock-npm-registry": "0.0.0",
54
- "@cloudflare/workers-shared": "0.0.0-ed3bc2f3b",
55
54
  "@cloudflare/workers-tsconfig": "0.0.0",
56
- "wrangler": "0.0.0-ed3bc2f3b"
55
+ "@cloudflare/workers-shared": "0.0.0-ed5ebdc4c",
56
+ "wrangler": "0.0.0-ed5ebdc4c"
57
57
  },
58
58
  "peerDependencies": {
59
59
  "vite": "^6.1.0",