@cloudflare/vite-plugin 0.0.7 → 0.1.0
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/asset-workers/asset-worker.js +754 -664
- package/dist/asset-workers/router-worker.js +720 -644
- package/dist/index.js +211 -176
- package/dist/runner-worker/index.js +1 -1
- package/package.json +8 -7
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
|
-
import
|
|
2
|
+
import assert8 from "node:assert";
|
|
3
3
|
import * as fs4 from "node:fs";
|
|
4
4
|
import * as path6 from "node:path";
|
|
5
5
|
import { createMiddleware } from "@hattip/adapter-node";
|
|
@@ -1077,98 +1077,6 @@ import assert from "node:assert";
|
|
|
1077
1077
|
import { builtinModules } from "node:module";
|
|
1078
1078
|
import * as vite2 from "vite";
|
|
1079
1079
|
|
|
1080
|
-
// src/node-js-compat.ts
|
|
1081
|
-
import { createRequire } from "node:module";
|
|
1082
|
-
import { getNodeCompat } from "miniflare";
|
|
1083
|
-
import * as unenv from "unenv";
|
|
1084
|
-
var require2 = createRequire(import.meta.url);
|
|
1085
|
-
var preset = unenv.env(unenv.nodeless, unenv.cloudflare);
|
|
1086
|
-
var CLOUDFLARE_VIRTUAL_PREFIX = "\0cloudflare-";
|
|
1087
|
-
function isNodeCompat({
|
|
1088
|
-
compatibility_date,
|
|
1089
|
-
compatibility_flags
|
|
1090
|
-
}) {
|
|
1091
|
-
const nodeCompatMode = getNodeCompat(
|
|
1092
|
-
compatibility_date,
|
|
1093
|
-
compatibility_flags ?? []
|
|
1094
|
-
).mode;
|
|
1095
|
-
if (nodeCompatMode === "v2") {
|
|
1096
|
-
return true;
|
|
1097
|
-
}
|
|
1098
|
-
if (nodeCompatMode === "legacy") {
|
|
1099
|
-
throw new Error(
|
|
1100
|
-
"Unsupported Node.js compat mode (legacy). Remove the `node_compat` setting and add the `nodejs_compat` flag instead."
|
|
1101
|
-
);
|
|
1102
|
-
}
|
|
1103
|
-
if (nodeCompatMode === "v1") {
|
|
1104
|
-
throw new Error(
|
|
1105
|
-
`Unsupported Node.js compat mode (v1). Only the v2 mode is supported, either change your compat date to "2024-09-23" or later, or set the "nodejs_compat_v2" compatibility flag`
|
|
1106
|
-
);
|
|
1107
|
-
}
|
|
1108
|
-
return false;
|
|
1109
|
-
}
|
|
1110
|
-
function injectGlobalCode(id, code, workerConfig) {
|
|
1111
|
-
if (!isNodeCompat(workerConfig)) {
|
|
1112
|
-
return;
|
|
1113
|
-
}
|
|
1114
|
-
const injectedCode = Object.entries(preset.inject).map(([globalName, globalInject]) => {
|
|
1115
|
-
if (typeof globalInject === "string") {
|
|
1116
|
-
const moduleSpecifier2 = globalInject;
|
|
1117
|
-
return `import var_${globalName} from "${moduleSpecifier2}";
|
|
1118
|
-
globalThis.${globalName} = var_${globalName};
|
|
1119
|
-
`;
|
|
1120
|
-
}
|
|
1121
|
-
const [moduleSpecifier, exportName] = globalInject;
|
|
1122
|
-
return `import var_${globalName} from "${moduleSpecifier}";
|
|
1123
|
-
globalThis.${globalName} = var_${globalName}.${exportName};
|
|
1124
|
-
`;
|
|
1125
|
-
}).join("\n");
|
|
1126
|
-
const modified = new MagicString(code);
|
|
1127
|
-
modified.prepend(injectedCode);
|
|
1128
|
-
return {
|
|
1129
|
-
code: modified.toString(),
|
|
1130
|
-
map: modified.generateMap({ hires: "boundary", source: id })
|
|
1131
|
-
};
|
|
1132
|
-
}
|
|
1133
|
-
function getNodeCompatAliases() {
|
|
1134
|
-
const aliases = {};
|
|
1135
|
-
Object.keys(preset.alias).forEach((key) => {
|
|
1136
|
-
if (!preset.external.includes(key)) {
|
|
1137
|
-
aliases[key] = CLOUDFLARE_VIRTUAL_PREFIX + key;
|
|
1138
|
-
}
|
|
1139
|
-
});
|
|
1140
|
-
return aliases;
|
|
1141
|
-
}
|
|
1142
|
-
function resolveNodeCompatId(environment, workerConfig, id) {
|
|
1143
|
-
const aliased = resolveNodeAliases(id, workerConfig) ?? id;
|
|
1144
|
-
if (aliased.startsWith("unenv/")) {
|
|
1145
|
-
const resolvedDep = require2.resolve(aliased).replace(/\.cjs$/, ".mjs");
|
|
1146
|
-
if (environment.mode === "dev" && environment.depsOptimizer) {
|
|
1147
|
-
const dep = environment.depsOptimizer.registerMissingImport(
|
|
1148
|
-
aliased,
|
|
1149
|
-
resolvedDep
|
|
1150
|
-
);
|
|
1151
|
-
return dep.id;
|
|
1152
|
-
} else {
|
|
1153
|
-
return resolvedDep;
|
|
1154
|
-
}
|
|
1155
|
-
}
|
|
1156
|
-
}
|
|
1157
|
-
function getNodeCompatExternals() {
|
|
1158
|
-
return preset.external;
|
|
1159
|
-
}
|
|
1160
|
-
function resolveNodeAliases(source, workerConfig) {
|
|
1161
|
-
if (!source.startsWith(CLOUDFLARE_VIRTUAL_PREFIX) || !isNodeCompat(workerConfig)) {
|
|
1162
|
-
return;
|
|
1163
|
-
}
|
|
1164
|
-
const from = source.slice(CLOUDFLARE_VIRTUAL_PREFIX.length);
|
|
1165
|
-
const alias = preset.alias[from];
|
|
1166
|
-
if (alias && preset.external.includes(alias)) {
|
|
1167
|
-
throw new Error(`Alias to external: ${source} -> ${alias}`);
|
|
1168
|
-
}
|
|
1169
|
-
return alias;
|
|
1170
|
-
}
|
|
1171
|
-
|
|
1172
1080
|
// src/constants.ts
|
|
1173
1081
|
var ROUTER_WORKER_NAME = "__router-worker__";
|
|
1174
1082
|
var ASSET_WORKER_NAME = "__asset-worker__";
|
|
@@ -1322,12 +1230,13 @@ function createCloudflareEnvironmentOptions(workerConfig, userConfig, environmen
|
|
|
1322
1230
|
// dev pre-bundling crawling (were we not to set this input field we'd have to appropriately set
|
|
1323
1231
|
// optimizeDeps.entries in the dev config)
|
|
1324
1232
|
input: workerConfig.main,
|
|
1325
|
-
external: [...cloudflareBuiltInModules
|
|
1233
|
+
external: [...cloudflareBuiltInModules]
|
|
1326
1234
|
}
|
|
1327
1235
|
},
|
|
1328
1236
|
optimizeDeps: {
|
|
1329
1237
|
// Note: ssr pre-bundling is opt-in and we need to enable it by setting `noDiscovery` to false
|
|
1330
1238
|
noDiscovery: false,
|
|
1239
|
+
entries: workerConfig.main,
|
|
1331
1240
|
exclude: [
|
|
1332
1241
|
...cloudflareBuiltInModules,
|
|
1333
1242
|
// we have to exclude all node modules to work in dev-mode not just the unenv externals...
|
|
@@ -1413,33 +1322,33 @@ function writeDeployConfig(resolvedPluginConfig, resolvedViteConfig) {
|
|
|
1413
1322
|
};
|
|
1414
1323
|
fs.writeFileSync(deployConfigPath, JSON.stringify(deployConfig));
|
|
1415
1324
|
} else {
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
}
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1325
|
+
let entryWorkerConfigPath;
|
|
1326
|
+
const auxiliaryWorkers = [];
|
|
1327
|
+
for (const environmentName of Object.keys(resolvedPluginConfig.workers)) {
|
|
1328
|
+
const outputDirectory = resolvedViteConfig.environments[environmentName]?.build.outDir;
|
|
1329
|
+
assert2(
|
|
1330
|
+
outputDirectory,
|
|
1331
|
+
`Unexpected error: ${environmentName} environment output directory is undefined`
|
|
1332
|
+
);
|
|
1333
|
+
const configPath = getRelativePathToWorkerConfig(
|
|
1334
|
+
deployConfigDirectory,
|
|
1335
|
+
resolvedViteConfig.root,
|
|
1336
|
+
outputDirectory
|
|
1337
|
+
);
|
|
1338
|
+
if (environmentName === resolvedPluginConfig.entryWorkerEnvironmentName) {
|
|
1339
|
+
entryWorkerConfigPath = configPath;
|
|
1340
|
+
} else {
|
|
1341
|
+
auxiliaryWorkers.push({ configPath });
|
|
1342
|
+
}
|
|
1343
|
+
}
|
|
1435
1344
|
assert2(
|
|
1436
|
-
|
|
1437
|
-
`Unexpected error:
|
|
1345
|
+
entryWorkerConfigPath,
|
|
1346
|
+
`Unexpected error: entryWorkerConfigPath is undefined`
|
|
1438
1347
|
);
|
|
1439
|
-
const
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1348
|
+
const deployConfig = {
|
|
1349
|
+
configPath: entryWorkerConfigPath,
|
|
1350
|
+
auxiliaryWorkers
|
|
1351
|
+
};
|
|
1443
1352
|
fs.writeFileSync(deployConfigPath, JSON.stringify(deployConfig));
|
|
1444
1353
|
}
|
|
1445
1354
|
}
|
|
@@ -1868,13 +1777,94 @@ function miniflareLogLevelFromViteLogLevel(level = "info") {
|
|
|
1868
1777
|
}
|
|
1869
1778
|
}
|
|
1870
1779
|
|
|
1780
|
+
// src/node-js-compat.ts
|
|
1781
|
+
import assert5 from "node:assert";
|
|
1782
|
+
import { cloudflare } from "@cloudflare/unenv-preset";
|
|
1783
|
+
import { getNodeCompat } from "miniflare";
|
|
1784
|
+
import { defineEnv } from "unenv";
|
|
1785
|
+
var { env } = defineEnv({
|
|
1786
|
+
nodeCompat: true,
|
|
1787
|
+
presets: [cloudflare]
|
|
1788
|
+
});
|
|
1789
|
+
var CLOUDFLARE_VIRTUAL_PREFIX = "\0__CLOUDFLARE_NODEJS_COMPAT__";
|
|
1790
|
+
function isNodeCompat(workerConfig) {
|
|
1791
|
+
if (workerConfig === void 0) {
|
|
1792
|
+
return false;
|
|
1793
|
+
}
|
|
1794
|
+
const nodeCompatMode = getNodeCompat(
|
|
1795
|
+
workerConfig.compatibility_date,
|
|
1796
|
+
workerConfig.compatibility_flags ?? []
|
|
1797
|
+
).mode;
|
|
1798
|
+
if (nodeCompatMode === "v2") {
|
|
1799
|
+
return true;
|
|
1800
|
+
}
|
|
1801
|
+
if (nodeCompatMode === "legacy") {
|
|
1802
|
+
throw new Error(
|
|
1803
|
+
"Unsupported Node.js compat mode (legacy). Remove the `node_compat` setting and add the `nodejs_compat` flag instead."
|
|
1804
|
+
);
|
|
1805
|
+
}
|
|
1806
|
+
if (nodeCompatMode === "v1") {
|
|
1807
|
+
throw new Error(
|
|
1808
|
+
`Unsupported Node.js compat mode (v1). Only the v2 mode is supported, either change your compat date to "2024-09-23" or later, or set the "nodejs_compat_v2" compatibility flag`
|
|
1809
|
+
);
|
|
1810
|
+
}
|
|
1811
|
+
return false;
|
|
1812
|
+
}
|
|
1813
|
+
function injectGlobalCode(id, code) {
|
|
1814
|
+
const injectedCode = Object.entries(env.inject).map(([globalName, globalInject]) => {
|
|
1815
|
+
if (typeof globalInject === "string") {
|
|
1816
|
+
const moduleSpecifier2 = globalInject;
|
|
1817
|
+
return `import var_${globalName} from "${moduleSpecifier2}";
|
|
1818
|
+
globalThis.${globalName} = var_${globalName};
|
|
1819
|
+
`;
|
|
1820
|
+
}
|
|
1821
|
+
const [moduleSpecifier, exportName] = globalInject;
|
|
1822
|
+
return `import var_${globalName} from "${moduleSpecifier}";
|
|
1823
|
+
globalThis.${globalName} = var_${globalName}.${exportName};
|
|
1824
|
+
`;
|
|
1825
|
+
}).join("\n");
|
|
1826
|
+
const modified = new MagicString(code);
|
|
1827
|
+
modified.prepend(injectedCode);
|
|
1828
|
+
return {
|
|
1829
|
+
code: modified.toString(),
|
|
1830
|
+
map: modified.generateMap({ hires: "boundary", source: id })
|
|
1831
|
+
};
|
|
1832
|
+
}
|
|
1833
|
+
function getNodeCompatAliases() {
|
|
1834
|
+
const aliases = {};
|
|
1835
|
+
Object.keys(env.alias).forEach((key) => {
|
|
1836
|
+
if (!env.external.includes(key)) {
|
|
1837
|
+
aliases[key] = CLOUDFLARE_VIRTUAL_PREFIX + key;
|
|
1838
|
+
}
|
|
1839
|
+
});
|
|
1840
|
+
return aliases;
|
|
1841
|
+
}
|
|
1842
|
+
function getNodeCompatExternals() {
|
|
1843
|
+
return env.external;
|
|
1844
|
+
}
|
|
1845
|
+
function maybeStripNodeJsVirtualPrefix(source) {
|
|
1846
|
+
return source.startsWith(CLOUDFLARE_VIRTUAL_PREFIX) ? source.slice(CLOUDFLARE_VIRTUAL_PREFIX.length) : void 0;
|
|
1847
|
+
}
|
|
1848
|
+
function dealiasVirtualNodeJSImport(source) {
|
|
1849
|
+
const alias = env.alias[source];
|
|
1850
|
+
assert5(
|
|
1851
|
+
alias,
|
|
1852
|
+
`Expected "${source}" to have a Node.js compat alias, but none was found`
|
|
1853
|
+
);
|
|
1854
|
+
assert5(
|
|
1855
|
+
!env.external.includes(alias),
|
|
1856
|
+
`Unexpected unenv alias to external module: ${source} -> ${alias}`
|
|
1857
|
+
);
|
|
1858
|
+
return alias;
|
|
1859
|
+
}
|
|
1860
|
+
|
|
1871
1861
|
// src/plugin-config.ts
|
|
1872
|
-
import
|
|
1862
|
+
import assert7 from "node:assert";
|
|
1873
1863
|
import * as path5 from "node:path";
|
|
1874
1864
|
import * as vite5 from "vite";
|
|
1875
1865
|
|
|
1876
1866
|
// src/workers-configs.ts
|
|
1877
|
-
import
|
|
1867
|
+
import assert6 from "node:assert";
|
|
1878
1868
|
import * as fs3 from "node:fs";
|
|
1879
1869
|
import * as path4 from "node:path";
|
|
1880
1870
|
import { unstable_readConfig as unstable_readConfig2 } from "wrangler";
|
|
@@ -2050,17 +2040,17 @@ function getWorkerConfig(configPath, env2, opts) {
|
|
|
2050
2040
|
}
|
|
2051
2041
|
const { raw, config, nonApplicable } = readWorkerConfig(configPath, env2);
|
|
2052
2042
|
opts?.visitedConfigPaths?.add(configPath);
|
|
2053
|
-
|
|
2043
|
+
assert6(
|
|
2054
2044
|
config.topLevelName,
|
|
2055
2045
|
missingFieldErrorMessage(`top-level 'name'`, configPath, env2)
|
|
2056
2046
|
);
|
|
2057
|
-
|
|
2058
|
-
|
|
2047
|
+
assert6(config.name, missingFieldErrorMessage(`'name'`, configPath, env2));
|
|
2048
|
+
assert6(
|
|
2059
2049
|
config.compatibility_date,
|
|
2060
2050
|
missingFieldErrorMessage(`'compatibility_date'`, configPath, env2)
|
|
2061
2051
|
);
|
|
2062
2052
|
if (opts?.isEntryWorker && !config.main) {
|
|
2063
|
-
|
|
2053
|
+
assert6(
|
|
2064
2054
|
config.assets,
|
|
2065
2055
|
missingFieldErrorMessage(`'main' or 'assets'`, configPath, env2)
|
|
2066
2056
|
);
|
|
@@ -2077,7 +2067,7 @@ function getWorkerConfig(configPath, env2, opts) {
|
|
|
2077
2067
|
nonApplicable
|
|
2078
2068
|
};
|
|
2079
2069
|
}
|
|
2080
|
-
|
|
2070
|
+
assert6(config.main, missingFieldErrorMessage(`'main'`, configPath, env2));
|
|
2081
2071
|
return {
|
|
2082
2072
|
type: "worker",
|
|
2083
2073
|
raw,
|
|
@@ -2115,7 +2105,7 @@ function resolvePluginConfig(pluginConfig, userConfig, viteEnv) {
|
|
|
2115
2105
|
""
|
|
2116
2106
|
);
|
|
2117
2107
|
const configPath = pluginConfig.configPath ? path5.resolve(root, pluginConfig.configPath) : findWranglerConfig(root);
|
|
2118
|
-
|
|
2108
|
+
assert7(
|
|
2119
2109
|
configPath,
|
|
2120
2110
|
`Config not found. Have you created a wrangler.json(c) or wrangler.toml file?`
|
|
2121
2111
|
);
|
|
@@ -2150,7 +2140,7 @@ function resolvePluginConfig(pluginConfig, userConfig, viteEnv) {
|
|
|
2150
2140
|
}
|
|
2151
2141
|
);
|
|
2152
2142
|
auxiliaryWorkersResolvedConfigs.push(workerResolvedConfig);
|
|
2153
|
-
|
|
2143
|
+
assert7(
|
|
2154
2144
|
workerResolvedConfig.type === "worker",
|
|
2155
2145
|
"Unexpected error: received AssetsOnlyResult with auxiliary workers."
|
|
2156
2146
|
);
|
|
@@ -2267,9 +2257,6 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2267
2257
|
}
|
|
2268
2258
|
return {
|
|
2269
2259
|
appType: "custom",
|
|
2270
|
-
resolve: {
|
|
2271
|
-
alias: getNodeCompatAliases()
|
|
2272
|
-
},
|
|
2273
2260
|
environments: resolvedPluginConfig.type === "workers" ? {
|
|
2274
2261
|
...Object.fromEntries(
|
|
2275
2262
|
Object.entries(resolvedPluginConfig.workers).map(
|
|
@@ -2306,7 +2293,7 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2306
2293
|
resolvedPluginConfig.workers
|
|
2307
2294
|
).map((environmentName) => {
|
|
2308
2295
|
const environment = builder.environments[environmentName];
|
|
2309
|
-
|
|
2296
|
+
assert8(
|
|
2310
2297
|
environment,
|
|
2311
2298
|
`${environmentName} environment not found`
|
|
2312
2299
|
);
|
|
@@ -2318,7 +2305,6 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2318
2305
|
)
|
|
2319
2306
|
);
|
|
2320
2307
|
}
|
|
2321
|
-
writeDeployConfig(resolvedPluginConfig, resolvedViteConfig);
|
|
2322
2308
|
}
|
|
2323
2309
|
}
|
|
2324
2310
|
};
|
|
@@ -2326,29 +2312,6 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2326
2312
|
configResolved(config) {
|
|
2327
2313
|
resolvedViteConfig = config;
|
|
2328
2314
|
},
|
|
2329
|
-
async resolveId(source) {
|
|
2330
|
-
if (resolvedPluginConfig.type === "assets-only") {
|
|
2331
|
-
return;
|
|
2332
|
-
}
|
|
2333
|
-
const workerConfig = resolvedPluginConfig.workers[this.environment.name];
|
|
2334
|
-
if (!workerConfig) {
|
|
2335
|
-
return;
|
|
2336
|
-
}
|
|
2337
|
-
return resolveNodeCompatId(this.environment, workerConfig, source);
|
|
2338
|
-
},
|
|
2339
|
-
async transform(code, id) {
|
|
2340
|
-
if (resolvedPluginConfig.type === "assets-only") {
|
|
2341
|
-
return;
|
|
2342
|
-
}
|
|
2343
|
-
const workerConfig = resolvedPluginConfig.workers[this.environment.name];
|
|
2344
|
-
if (!workerConfig) {
|
|
2345
|
-
return;
|
|
2346
|
-
}
|
|
2347
|
-
const resolvedId = await this.resolve(workerConfig.main);
|
|
2348
|
-
if (id === resolvedId?.id) {
|
|
2349
|
-
return injectGlobalCode(id, code, workerConfig);
|
|
2350
|
-
}
|
|
2351
|
-
},
|
|
2352
2315
|
generateBundle(_, bundle) {
|
|
2353
2316
|
let config;
|
|
2354
2317
|
if (resolvedPluginConfig.type === "workers") {
|
|
@@ -2364,7 +2327,7 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2364
2327
|
if (isEntryWorker && workerConfig.assets) {
|
|
2365
2328
|
const workerOutputDirectory = this.environment.config.build.outDir;
|
|
2366
2329
|
const clientOutputDirectory = resolvedViteConfig.environments.client?.build.outDir;
|
|
2367
|
-
|
|
2330
|
+
assert8(
|
|
2368
2331
|
clientOutputDirectory,
|
|
2369
2332
|
"Unexpected error: client output directory is undefined"
|
|
2370
2333
|
);
|
|
@@ -2413,6 +2376,11 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2413
2376
|
source: JSON.stringify(config)
|
|
2414
2377
|
});
|
|
2415
2378
|
},
|
|
2379
|
+
writeBundle() {
|
|
2380
|
+
if (this.environment.name === (resolvedPluginConfig.type === "assets-only" ? "client" : resolvedPluginConfig.entryWorkerEnvironmentName)) {
|
|
2381
|
+
writeDeployConfig(resolvedPluginConfig, resolvedViteConfig);
|
|
2382
|
+
}
|
|
2383
|
+
},
|
|
2416
2384
|
handleHotUpdate(options) {
|
|
2417
2385
|
if (resolvedPluginConfig.configPaths.has(options.file)) {
|
|
2418
2386
|
options.server.restart();
|
|
@@ -2425,7 +2393,7 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2425
2393
|
}
|
|
2426
2394
|
},
|
|
2427
2395
|
async configureServer(viteDevServer) {
|
|
2428
|
-
|
|
2396
|
+
assert8(
|
|
2429
2397
|
viteDevServer.httpServer,
|
|
2430
2398
|
"Unexpected error: No Vite HTTP server"
|
|
2431
2399
|
);
|
|
@@ -2437,11 +2405,14 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2437
2405
|
resolvedPluginConfig,
|
|
2438
2406
|
miniflare
|
|
2439
2407
|
);
|
|
2440
|
-
const middleware = createMiddleware(
|
|
2441
|
-
|
|
2442
|
-
|
|
2443
|
-
|
|
2444
|
-
|
|
2408
|
+
const middleware = createMiddleware(
|
|
2409
|
+
({ request }) => {
|
|
2410
|
+
return entryWorker.fetch(toMiniflareRequest(request), {
|
|
2411
|
+
redirect: "manual"
|
|
2412
|
+
});
|
|
2413
|
+
},
|
|
2414
|
+
{ alwaysCallNext: false }
|
|
2415
|
+
);
|
|
2445
2416
|
handleWebSocket(
|
|
2446
2417
|
viteDevServer.httpServer,
|
|
2447
2418
|
entryWorker.fetch,
|
|
@@ -2460,11 +2431,14 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2460
2431
|
pluginConfig.persistState ?? true
|
|
2461
2432
|
)
|
|
2462
2433
|
);
|
|
2463
|
-
const middleware = createMiddleware(
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2434
|
+
const middleware = createMiddleware(
|
|
2435
|
+
({ request }) => {
|
|
2436
|
+
return miniflare2.dispatchFetch(toMiniflareRequest(request), {
|
|
2437
|
+
redirect: "manual"
|
|
2438
|
+
});
|
|
2439
|
+
},
|
|
2440
|
+
{ alwaysCallNext: false }
|
|
2441
|
+
);
|
|
2468
2442
|
handleWebSocket(
|
|
2469
2443
|
vitePreviewServer.httpServer,
|
|
2470
2444
|
miniflare2.dispatchFetch,
|
|
@@ -2484,19 +2458,14 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2484
2458
|
// Otherwise the `vite:wasm-fallback` plugin prevents the `.wasm` extension being used for module imports.
|
|
2485
2459
|
enforce: "pre",
|
|
2486
2460
|
applyToEnvironment(environment) {
|
|
2487
|
-
|
|
2488
|
-
return false;
|
|
2489
|
-
}
|
|
2490
|
-
return Object.keys(resolvedPluginConfig.workers).includes(
|
|
2491
|
-
environment.name
|
|
2492
|
-
);
|
|
2461
|
+
return getWorkerConfig2(environment.name) !== void 0;
|
|
2493
2462
|
},
|
|
2494
2463
|
async resolveId(source, importer) {
|
|
2495
2464
|
if (!source.endsWith(".wasm")) {
|
|
2496
2465
|
return;
|
|
2497
2466
|
}
|
|
2498
2467
|
const resolved = await this.resolve(source, importer);
|
|
2499
|
-
|
|
2468
|
+
assert8(
|
|
2500
2469
|
resolved,
|
|
2501
2470
|
`Unexpected error: could not resolve Wasm module ${source}`
|
|
2502
2471
|
);
|
|
@@ -2512,7 +2481,7 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2512
2481
|
while (match = moduleRE.exec(code)) {
|
|
2513
2482
|
magicString ??= new MagicString(code);
|
|
2514
2483
|
const [full, moduleType, modulePath] = match;
|
|
2515
|
-
|
|
2484
|
+
assert8(
|
|
2516
2485
|
modulePath,
|
|
2517
2486
|
`Unexpected error: module path not found in reference ${full}.`
|
|
2518
2487
|
);
|
|
@@ -2548,8 +2517,74 @@ function cloudflare2(pluginConfig = {}) {
|
|
|
2548
2517
|
};
|
|
2549
2518
|
}
|
|
2550
2519
|
}
|
|
2520
|
+
},
|
|
2521
|
+
// Plugin that can provide Node.js compatibility support for Vite Environments that are hosted in Cloudflare Workers.
|
|
2522
|
+
{
|
|
2523
|
+
name: "vite-plugin-cloudflare:nodejs-compat",
|
|
2524
|
+
apply(_config, env2) {
|
|
2525
|
+
return !env2.isPreview;
|
|
2526
|
+
},
|
|
2527
|
+
config() {
|
|
2528
|
+
return {
|
|
2529
|
+
resolve: {
|
|
2530
|
+
alias: getNodeCompatAliases()
|
|
2531
|
+
}
|
|
2532
|
+
};
|
|
2533
|
+
},
|
|
2534
|
+
configEnvironment(environmentName) {
|
|
2535
|
+
const workerConfig = getWorkerConfig2(environmentName);
|
|
2536
|
+
if (isNodeCompat(workerConfig)) {
|
|
2537
|
+
return {
|
|
2538
|
+
build: {
|
|
2539
|
+
rollupOptions: {
|
|
2540
|
+
external: getNodeCompatExternals()
|
|
2541
|
+
}
|
|
2542
|
+
}
|
|
2543
|
+
};
|
|
2544
|
+
}
|
|
2545
|
+
},
|
|
2546
|
+
async resolveId(source, importer, options) {
|
|
2547
|
+
const from = maybeStripNodeJsVirtualPrefix(source);
|
|
2548
|
+
if (!from) {
|
|
2549
|
+
return;
|
|
2550
|
+
}
|
|
2551
|
+
const workerConfig = getWorkerConfig2(this.environment.name);
|
|
2552
|
+
if (!isNodeCompat(workerConfig)) {
|
|
2553
|
+
return this.resolve(from, importer, options);
|
|
2554
|
+
}
|
|
2555
|
+
const unresolvedAlias = dealiasVirtualNodeJSImport(from);
|
|
2556
|
+
const resolvedAlias = await this.resolve(
|
|
2557
|
+
unresolvedAlias,
|
|
2558
|
+
import.meta.url
|
|
2559
|
+
);
|
|
2560
|
+
assert8(
|
|
2561
|
+
resolvedAlias,
|
|
2562
|
+
"Failed to resolve aliased nodejs import: " + unresolvedAlias
|
|
2563
|
+
);
|
|
2564
|
+
if (this.environment.mode === "dev" && this.environment.depsOptimizer) {
|
|
2565
|
+
this.environment.depsOptimizer.registerMissingImport(
|
|
2566
|
+
unresolvedAlias,
|
|
2567
|
+
resolvedAlias.id
|
|
2568
|
+
);
|
|
2569
|
+
}
|
|
2570
|
+
return resolvedAlias;
|
|
2571
|
+
},
|
|
2572
|
+
async transform(code, id) {
|
|
2573
|
+
const workerConfig = getWorkerConfig2(this.environment.name);
|
|
2574
|
+
if (!isNodeCompat(workerConfig)) {
|
|
2575
|
+
return;
|
|
2576
|
+
}
|
|
2577
|
+
const resolvedId = await this.resolve(workerConfig.main);
|
|
2578
|
+
if (id === resolvedId?.id) {
|
|
2579
|
+
return injectGlobalCode(id, code);
|
|
2580
|
+
}
|
|
2581
|
+
}
|
|
2551
2582
|
}
|
|
2552
2583
|
];
|
|
2584
|
+
function getWorkerConfig2(environmentName) {
|
|
2585
|
+
assert8(resolvedPluginConfig, "Expected resolvedPluginConfig to be defined");
|
|
2586
|
+
return resolvedPluginConfig.type !== "assets-only" ? resolvedPluginConfig.workers[environmentName] : void 0;
|
|
2587
|
+
}
|
|
2553
2588
|
}
|
|
2554
2589
|
function getDotDevDotVarsContent(configPath, cloudflareEnv) {
|
|
2555
2590
|
const configDir = path6.dirname(configPath);
|
|
@@ -25,7 +25,7 @@ function stripInternalEnv(internalEnv) {
|
|
|
25
25
|
return userEnv;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
// ../../node_modules/.pnpm/vite@6.
|
|
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
|
|
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
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "Cloudflare plugin for Vite",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"cloudflare",
|
|
@@ -33,10 +33,11 @@
|
|
|
33
33
|
"dist"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
+
"@cloudflare/unenv-preset": "1.1.1",
|
|
36
37
|
"@hattip/adapter-node": "^0.0.49",
|
|
37
|
-
"unenv": "
|
|
38
|
+
"unenv": "2.0.0-rc.1",
|
|
38
39
|
"ws": "^8.18.0",
|
|
39
|
-
"miniflare": "3.20250204.
|
|
40
|
+
"miniflare": "3.20250204.1"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
43
|
"@cloudflare/workers-types": "^4.20250204.0",
|
|
@@ -45,13 +46,13 @@
|
|
|
45
46
|
"magic-string": "^0.30.12",
|
|
46
47
|
"tsup": "8.3.0",
|
|
47
48
|
"typescript": "^5.7.2",
|
|
48
|
-
"vite": "^6.0
|
|
49
|
-
"@cloudflare/workers-shared": "0.
|
|
49
|
+
"vite": "^6.1.0",
|
|
50
|
+
"@cloudflare/workers-shared": "0.14.1",
|
|
50
51
|
"@cloudflare/workers-tsconfig": "0.0.0",
|
|
51
|
-
"wrangler": "3.
|
|
52
|
+
"wrangler": "3.109.0"
|
|
52
53
|
},
|
|
53
54
|
"peerDependencies": {
|
|
54
|
-
"vite": "^6.0
|
|
55
|
+
"vite": "^6.1.0",
|
|
55
56
|
"wrangler": "^3.101.0"
|
|
56
57
|
},
|
|
57
58
|
"publishConfig": {
|