@react-router/dev 0.0.0-experimental-1b454267f → 0.0.0-experimental-58439e382
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/cli/index.js +45 -151
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/vite/cloudflare.js +14 -3
- package/dist/vite.js +175 -93
- package/package.json +8 -8
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* @react-router/dev v0.0.0-experimental-
|
|
3
|
+
* @react-router/dev v0.0.0-experimental-58439e382
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) Remix Software Inc.
|
|
6
6
|
*
|
|
@@ -516,7 +516,7 @@ function findEntry(dir, basename2, options) {
|
|
|
516
516
|
}
|
|
517
517
|
return void 0;
|
|
518
518
|
}
|
|
519
|
-
var import_node_fs, import_node_child_process, import_package_json, import_pathe3, import_chokidar, import_picocolors, import_pick2, import_omit, import_cloneDeep, import_isEqual, excludedConfigPresetKeys,
|
|
519
|
+
var import_node_fs, import_node_child_process, import_package_json, import_pathe3, import_chokidar, import_picocolors, import_pick2, import_omit, import_cloneDeep, import_isEqual, excludedConfigPresetKeys, mergeReactRouterConfig, deepFreeze, ssrExternals, entryExts;
|
|
520
520
|
var init_config = __esm({
|
|
521
521
|
"config/config.ts"() {
|
|
522
522
|
"use strict";
|
|
@@ -535,13 +535,6 @@ var init_config = __esm({
|
|
|
535
535
|
init_detectPackageManager();
|
|
536
536
|
init_is_react_router_repo();
|
|
537
537
|
excludedConfigPresetKeys = ["presets"];
|
|
538
|
-
branchRouteProperties = [
|
|
539
|
-
"id",
|
|
540
|
-
"path",
|
|
541
|
-
"file",
|
|
542
|
-
"index"
|
|
543
|
-
];
|
|
544
|
-
configRouteToBranchRoute = (configRoute) => (0, import_pick2.default)(configRoute, branchRouteProperties);
|
|
545
538
|
mergeReactRouterConfig = (...configs) => {
|
|
546
539
|
let reducer = (configA, configB) => {
|
|
547
540
|
let mergeRequired = (key) => configA[key] !== void 0 && configB[key] !== void 0;
|
|
@@ -1068,68 +1061,22 @@ async function resolveViteConfig({
|
|
|
1068
1061
|
}
|
|
1069
1062
|
return viteConfig;
|
|
1070
1063
|
}
|
|
1071
|
-
|
|
1064
|
+
function extractPluginContext(viteConfig) {
|
|
1072
1065
|
return viteConfig["__reactRouterPluginContext"];
|
|
1073
1066
|
}
|
|
1074
1067
|
function isSeverBundleEnvironmentName(name) {
|
|
1075
1068
|
return name.startsWith(SSR_BUNDLE_PREFIX);
|
|
1076
1069
|
}
|
|
1077
|
-
function getServerEnvironmentEntries(
|
|
1070
|
+
function getServerEnvironmentEntries(ctx, record) {
|
|
1078
1071
|
return Object.entries(record).filter(
|
|
1079
|
-
([name]) => buildManifest
|
|
1072
|
+
([name]) => ctx.buildManifest?.serverBundles ? isSeverBundleEnvironmentName(name) : name === "ssr"
|
|
1080
1073
|
);
|
|
1081
1074
|
}
|
|
1082
|
-
function getServerEnvironmentKeys(
|
|
1083
|
-
return getServerEnvironmentEntries(
|
|
1084
|
-
}
|
|
1085
|
-
function getAddressableRoutes(routes2) {
|
|
1086
|
-
let nonAddressableIds = /* @__PURE__ */ new Set();
|
|
1087
|
-
for (let id in routes2) {
|
|
1088
|
-
let route = routes2[id];
|
|
1089
|
-
if (route.index) {
|
|
1090
|
-
invariant(
|
|
1091
|
-
route.parentId,
|
|
1092
|
-
`Expected index route "${route.id}" to have "parentId" set`
|
|
1093
|
-
);
|
|
1094
|
-
nonAddressableIds.add(route.parentId);
|
|
1095
|
-
}
|
|
1096
|
-
if (typeof route.path !== "string" && !route.index) {
|
|
1097
|
-
nonAddressableIds.add(id);
|
|
1098
|
-
}
|
|
1099
|
-
}
|
|
1100
|
-
return Object.values(routes2).filter(
|
|
1101
|
-
(route) => !nonAddressableIds.has(route.id)
|
|
1102
|
-
);
|
|
1103
|
-
}
|
|
1104
|
-
function getRouteBranch(routes2, routeId) {
|
|
1105
|
-
let branch = [];
|
|
1106
|
-
let currentRouteId = routeId;
|
|
1107
|
-
while (currentRouteId) {
|
|
1108
|
-
let route = routes2[currentRouteId];
|
|
1109
|
-
invariant(route, `Missing route for ${currentRouteId}`);
|
|
1110
|
-
branch.push(route);
|
|
1111
|
-
currentRouteId = route.parentId;
|
|
1112
|
-
}
|
|
1113
|
-
return branch.reverse();
|
|
1114
|
-
}
|
|
1115
|
-
function hasServerBundles(buildManifest) {
|
|
1116
|
-
return Object.keys(buildManifest.serverBundles ?? {}).length > 0;
|
|
1075
|
+
function getServerEnvironmentKeys(ctx, record) {
|
|
1076
|
+
return getServerEnvironmentEntries(ctx, record).map(([key]) => key);
|
|
1117
1077
|
}
|
|
1118
|
-
function
|
|
1119
|
-
|
|
1120
|
-
return {};
|
|
1121
|
-
}
|
|
1122
|
-
let routesByServerBundleId = {};
|
|
1123
|
-
for (let [routeId, serverBundleId] of Object.entries(
|
|
1124
|
-
buildManifest.routeIdToServerBundleId
|
|
1125
|
-
)) {
|
|
1126
|
-
routesByServerBundleId[serverBundleId] ??= {};
|
|
1127
|
-
let branch = getRouteBranch(buildManifest.routes, routeId);
|
|
1128
|
-
for (let route of branch) {
|
|
1129
|
-
routesByServerBundleId[serverBundleId][route.id] = route;
|
|
1130
|
-
}
|
|
1131
|
-
}
|
|
1132
|
-
return routesByServerBundleId;
|
|
1078
|
+
function getServerBundleIds(ctx) {
|
|
1079
|
+
return ctx.buildManifest?.serverBundles ? Object.keys(ctx.buildManifest.serverBundles) : void 0;
|
|
1133
1080
|
}
|
|
1134
1081
|
async function cleanBuildDirectory(viteConfig, ctx) {
|
|
1135
1082
|
let buildDirectory = ctx.reactRouterConfig.buildDirectory;
|
|
@@ -1164,65 +1111,6 @@ async function cleanViteManifests(environmentsOptions, ctx) {
|
|
|
1164
1111
|
})
|
|
1165
1112
|
);
|
|
1166
1113
|
}
|
|
1167
|
-
async function getBuildManifest(ctx) {
|
|
1168
|
-
let { routes: routes2, serverBundles, appDirectory } = ctx.reactRouterConfig;
|
|
1169
|
-
if (!serverBundles) {
|
|
1170
|
-
return { routes: routes2 };
|
|
1171
|
-
}
|
|
1172
|
-
let { normalizePath } = await import("vite");
|
|
1173
|
-
let serverBuildDirectory = getServerBuildDirectory(ctx);
|
|
1174
|
-
let resolvedAppDirectory = path7.resolve(ctx.rootDirectory, appDirectory);
|
|
1175
|
-
let rootRelativeRoutes = Object.fromEntries(
|
|
1176
|
-
Object.entries(routes2).map(([id, route]) => {
|
|
1177
|
-
let filePath = path7.join(resolvedAppDirectory, route.file);
|
|
1178
|
-
let rootRelativeFilePath = normalizePath(
|
|
1179
|
-
path7.relative(ctx.rootDirectory, filePath)
|
|
1180
|
-
);
|
|
1181
|
-
return [id, { ...route, file: rootRelativeFilePath }];
|
|
1182
|
-
})
|
|
1183
|
-
);
|
|
1184
|
-
let buildManifest = {
|
|
1185
|
-
serverBundles: {},
|
|
1186
|
-
routeIdToServerBundleId: {},
|
|
1187
|
-
routes: rootRelativeRoutes
|
|
1188
|
-
};
|
|
1189
|
-
await Promise.all(
|
|
1190
|
-
getAddressableRoutes(routes2).map(async (route) => {
|
|
1191
|
-
let branch = getRouteBranch(routes2, route.id);
|
|
1192
|
-
let serverBundleId = await serverBundles({
|
|
1193
|
-
branch: branch.map(
|
|
1194
|
-
(route2) => configRouteToBranchRoute({
|
|
1195
|
-
...route2,
|
|
1196
|
-
// Ensure absolute paths are passed to the serverBundles function
|
|
1197
|
-
file: path7.join(resolvedAppDirectory, route2.file)
|
|
1198
|
-
})
|
|
1199
|
-
)
|
|
1200
|
-
});
|
|
1201
|
-
if (typeof serverBundleId !== "string") {
|
|
1202
|
-
throw new Error(`The "serverBundles" function must return a string`);
|
|
1203
|
-
}
|
|
1204
|
-
if (!/^[a-zA-Z0-9-_]+$/.test(serverBundleId)) {
|
|
1205
|
-
throw new Error(
|
|
1206
|
-
`The "serverBundles" function must only return strings containing alphanumeric characters, hyphens and underscores.`
|
|
1207
|
-
);
|
|
1208
|
-
}
|
|
1209
|
-
buildManifest.routeIdToServerBundleId[route.id] = serverBundleId;
|
|
1210
|
-
buildManifest.serverBundles[serverBundleId] ??= {
|
|
1211
|
-
id: serverBundleId,
|
|
1212
|
-
file: normalizePath(
|
|
1213
|
-
path7.join(
|
|
1214
|
-
path7.relative(
|
|
1215
|
-
ctx.rootDirectory,
|
|
1216
|
-
path7.join(serverBuildDirectory, serverBundleId)
|
|
1217
|
-
),
|
|
1218
|
-
ctx.reactRouterConfig.serverBuildFile
|
|
1219
|
-
)
|
|
1220
|
-
)
|
|
1221
|
-
};
|
|
1222
|
-
})
|
|
1223
|
-
);
|
|
1224
|
-
return buildManifest;
|
|
1225
|
-
}
|
|
1226
1114
|
function mergeEnvironmentOptions(base, ...overrides) {
|
|
1227
1115
|
let vite2 = getVite();
|
|
1228
1116
|
return overrides.reduce(
|
|
@@ -1230,7 +1118,7 @@ function mergeEnvironmentOptions(base, ...overrides) {
|
|
|
1230
1118
|
base
|
|
1231
1119
|
);
|
|
1232
1120
|
}
|
|
1233
|
-
async function getEnvironmentOptionsResolvers(ctx,
|
|
1121
|
+
async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
1234
1122
|
let { serverBuildFile, serverModuleFormat } = ctx.reactRouterConfig;
|
|
1235
1123
|
let packageRoot = path7.dirname(
|
|
1236
1124
|
require.resolve("@react-router/dev/package.json")
|
|
@@ -1274,7 +1162,15 @@ async function getEnvironmentOptionsResolvers(ctx, buildManifest, viteCommand) {
|
|
|
1274
1162
|
let conditions = viteCommand === "build" ? viteServerConditions : ["development", ...viteServerConditions];
|
|
1275
1163
|
return mergeEnvironmentOptions(getBaseOptions({ viteUserConfig }), {
|
|
1276
1164
|
resolve: {
|
|
1277
|
-
external:
|
|
1165
|
+
external: (
|
|
1166
|
+
// This check is required to honor the "noExternal: true" config
|
|
1167
|
+
// provided by vite-plugin-cloudflare within this repo. When compiling
|
|
1168
|
+
// for Cloudflare, all server dependencies are externalized, but our
|
|
1169
|
+
// `ssrExternals` config inadvertently overrides this. This doesn't
|
|
1170
|
+
// impact consumers because for them `ssrExternals` is undefined and
|
|
1171
|
+
// Cloudflare's "noExternal: true" config remains intact.
|
|
1172
|
+
ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteUserConfig.environments?.ssr?.resolve?.noExternal === true ? void 0 : ssrExternals
|
|
1173
|
+
),
|
|
1278
1174
|
conditions,
|
|
1279
1175
|
externalConditions: conditions
|
|
1280
1176
|
},
|
|
@@ -1288,6 +1184,7 @@ async function getEnvironmentOptionsResolvers(ctx, buildManifest, viteCommand) {
|
|
|
1288
1184
|
copyPublicDir: false,
|
|
1289
1185
|
// Assets in the public directory are only used by the client
|
|
1290
1186
|
rollupOptions: {
|
|
1187
|
+
input: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ?? virtual.serverBuild.id,
|
|
1291
1188
|
output: {
|
|
1292
1189
|
entryFileNames: serverBuildFile,
|
|
1293
1190
|
format: serverModuleFormat
|
|
@@ -1319,12 +1216,15 @@ async function getEnvironmentOptionsResolvers(ctx, buildManifest, viteCommand) {
|
|
|
1319
1216
|
}
|
|
1320
1217
|
)
|
|
1321
1218
|
],
|
|
1322
|
-
output: {
|
|
1323
|
-
entryFileNames({ moduleIds }) {
|
|
1219
|
+
output: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.rollupOptions?.output : viteUserConfig?.build?.rollupOptions?.output) ?? {
|
|
1220
|
+
entryFileNames: ({ moduleIds }) => {
|
|
1324
1221
|
let routeChunkModuleId = moduleIds.find(isRouteChunkModuleId);
|
|
1325
1222
|
let routeChunkName = routeChunkModuleId ? getRouteChunkNameFromModuleId(routeChunkModuleId) : null;
|
|
1326
1223
|
let routeChunkSuffix = routeChunkName ? `-${(0, import_kebabCase.default)(routeChunkName)}` : "";
|
|
1327
|
-
return
|
|
1224
|
+
return path7.posix.join(
|
|
1225
|
+
(ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.assetsDir : viteUserConfig?.build?.assetsDir) ?? "assets",
|
|
1226
|
+
`[name]${routeChunkSuffix}-[hash].js`
|
|
1227
|
+
);
|
|
1328
1228
|
}
|
|
1329
1229
|
}
|
|
1330
1230
|
},
|
|
@@ -1332,22 +1232,17 @@ async function getEnvironmentOptionsResolvers(ctx, buildManifest, viteCommand) {
|
|
|
1332
1232
|
}
|
|
1333
1233
|
})
|
|
1334
1234
|
};
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
const serverBundleEnvironmentId = serverBundleId.replaceAll("-", "_");
|
|
1340
|
-
const environmentName = `${SSR_BUNDLE_PREFIX}${serverBundleEnvironmentId}`;
|
|
1235
|
+
let serverBundleIds = getServerBundleIds(ctx);
|
|
1236
|
+
if (serverBundleIds) {
|
|
1237
|
+
for (let serverBundleId of serverBundleIds) {
|
|
1238
|
+
const environmentName = `${SSR_BUNDLE_PREFIX}${serverBundleId}`;
|
|
1341
1239
|
environmentOptionsResolvers[environmentName] = ({ viteUserConfig }) => mergeEnvironmentOptions(
|
|
1342
1240
|
getBaseServerOptions({ viteUserConfig }),
|
|
1343
1241
|
{
|
|
1344
1242
|
build: {
|
|
1345
|
-
outDir: getServerBuildDirectory(ctx, {
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
routes2
|
|
1349
|
-
).join(",")}`
|
|
1350
|
-
}
|
|
1243
|
+
outDir: getServerBuildDirectory(ctx.reactRouterConfig, {
|
|
1244
|
+
serverBundleId
|
|
1245
|
+
})
|
|
1351
1246
|
}
|
|
1352
1247
|
},
|
|
1353
1248
|
// Ensure server bundle environments extend the user's SSR
|
|
@@ -1358,10 +1253,7 @@ async function getEnvironmentOptionsResolvers(ctx, buildManifest, viteCommand) {
|
|
|
1358
1253
|
} else {
|
|
1359
1254
|
environmentOptionsResolvers.ssr = ({ viteUserConfig }) => mergeEnvironmentOptions(getBaseServerOptions({ viteUserConfig }), {
|
|
1360
1255
|
build: {
|
|
1361
|
-
outDir: getServerBuildDirectory(ctx)
|
|
1362
|
-
rollupOptions: {
|
|
1363
|
-
input: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ?? virtual.serverBuild.id
|
|
1364
|
-
}
|
|
1256
|
+
outDir: getServerBuildDirectory(ctx.reactRouterConfig)
|
|
1365
1257
|
},
|
|
1366
1258
|
optimizeDeps: ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteUserConfig.environments?.ssr?.optimizeDeps?.noDiscovery === false ? {
|
|
1367
1259
|
entries: [
|
|
@@ -1440,8 +1332,8 @@ var init_plugin = __esm({
|
|
|
1440
1332
|
serverManifest: create("server-manifest"),
|
|
1441
1333
|
browserManifest: create("browser-manifest")
|
|
1442
1334
|
};
|
|
1443
|
-
getServerBuildDirectory = (
|
|
1444
|
-
|
|
1335
|
+
getServerBuildDirectory = (reactRouterConfig, { serverBundleId } = {}) => path7.join(
|
|
1336
|
+
reactRouterConfig.buildDirectory,
|
|
1445
1337
|
"server",
|
|
1446
1338
|
...serverBundleId ? [serverBundleId] : []
|
|
1447
1339
|
);
|
|
@@ -1585,7 +1477,7 @@ async function viteBuild(root, {
|
|
|
1585
1477
|
}
|
|
1586
1478
|
]
|
|
1587
1479
|
});
|
|
1588
|
-
let ctx =
|
|
1480
|
+
let ctx = extractPluginContext(viteConfig);
|
|
1589
1481
|
if (!ctx) {
|
|
1590
1482
|
console.error(
|
|
1591
1483
|
import_picocolors5.default.red("React Router Vite plugin not found in Vite config")
|
|
@@ -1615,14 +1507,16 @@ async function viteBuild(root, {
|
|
|
1615
1507
|
optimizeDeps: { force },
|
|
1616
1508
|
clearScreen,
|
|
1617
1509
|
logLevel,
|
|
1618
|
-
...{
|
|
1510
|
+
...{
|
|
1511
|
+
__reactRouterPluginContext: ctx,
|
|
1512
|
+
__reactRouterEnvironmentBuildContext: environmentBuildContext
|
|
1513
|
+
}
|
|
1619
1514
|
});
|
|
1620
1515
|
}
|
|
1621
|
-
let { reactRouterConfig } = ctx;
|
|
1622
|
-
|
|
1516
|
+
let { reactRouterConfig, buildManifest } = ctx;
|
|
1517
|
+
invariant(buildManifest, "Expected build manifest to be present");
|
|
1623
1518
|
let environmentOptionsResolvers = await getEnvironmentOptionsResolvers(
|
|
1624
1519
|
ctx,
|
|
1625
|
-
buildManifest,
|
|
1626
1520
|
"build"
|
|
1627
1521
|
);
|
|
1628
1522
|
let environmentsOptions = resolveEnvironmentsOptions(
|
|
@@ -1632,8 +1526,8 @@ async function viteBuild(root, {
|
|
|
1632
1526
|
await cleanBuildDirectory(viteConfig, ctx);
|
|
1633
1527
|
await buildEnvironment("client");
|
|
1634
1528
|
let serverEnvironmentNames = getServerEnvironmentKeys(
|
|
1635
|
-
|
|
1636
|
-
|
|
1529
|
+
ctx,
|
|
1530
|
+
environmentOptionsResolvers
|
|
1637
1531
|
);
|
|
1638
1532
|
await Promise.all(serverEnvironmentNames.map(buildEnvironment));
|
|
1639
1533
|
await cleanViteManifests(environmentsOptions, ctx);
|
package/dist/config.js
CHANGED
package/dist/routes.js
CHANGED
package/dist/vite/cloudflare.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-58439e382
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -64,7 +64,18 @@ function invariant(value, message) {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
// vite/node-adapter.ts
|
|
67
|
-
function fromNodeHeaders(
|
|
67
|
+
function fromNodeHeaders(nodeReq) {
|
|
68
|
+
let nodeHeaders = nodeReq.headers;
|
|
69
|
+
if (nodeReq.httpVersionMajor >= 2) {
|
|
70
|
+
nodeHeaders = { ...nodeHeaders };
|
|
71
|
+
if (nodeHeaders[":authority"]) {
|
|
72
|
+
nodeHeaders.host = nodeHeaders[":authority"];
|
|
73
|
+
}
|
|
74
|
+
delete nodeHeaders[":authority"];
|
|
75
|
+
delete nodeHeaders[":method"];
|
|
76
|
+
delete nodeHeaders[":path"];
|
|
77
|
+
delete nodeHeaders[":scheme"];
|
|
78
|
+
}
|
|
68
79
|
let headers = new Headers();
|
|
69
80
|
for (let [key, values] of Object.entries(nodeHeaders)) {
|
|
70
81
|
if (values) {
|
|
@@ -89,7 +100,7 @@ function fromNodeRequest(nodeReq, nodeRes) {
|
|
|
89
100
|
let controller = new AbortController();
|
|
90
101
|
let init = {
|
|
91
102
|
method: nodeReq.method,
|
|
92
|
-
headers: fromNodeHeaders(nodeReq
|
|
103
|
+
headers: fromNodeHeaders(nodeReq),
|
|
93
104
|
signal: controller.signal
|
|
94
105
|
};
|
|
95
106
|
nodeRes.on("finish", () => controller = null);
|
package/dist/vite.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-58439e382
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -867,7 +867,18 @@ var import_node_events = require("events");
|
|
|
867
867
|
var import_node_stream = require("stream");
|
|
868
868
|
var import_set_cookie_parser = require("set-cookie-parser");
|
|
869
869
|
var import_node = require("@react-router/node");
|
|
870
|
-
function fromNodeHeaders(
|
|
870
|
+
function fromNodeHeaders(nodeReq) {
|
|
871
|
+
let nodeHeaders = nodeReq.headers;
|
|
872
|
+
if (nodeReq.httpVersionMajor >= 2) {
|
|
873
|
+
nodeHeaders = { ...nodeHeaders };
|
|
874
|
+
if (nodeHeaders[":authority"]) {
|
|
875
|
+
nodeHeaders.host = nodeHeaders[":authority"];
|
|
876
|
+
}
|
|
877
|
+
delete nodeHeaders[":authority"];
|
|
878
|
+
delete nodeHeaders[":method"];
|
|
879
|
+
delete nodeHeaders[":path"];
|
|
880
|
+
delete nodeHeaders[":scheme"];
|
|
881
|
+
}
|
|
871
882
|
let headers = new Headers();
|
|
872
883
|
for (let [key, values] of Object.entries(nodeHeaders)) {
|
|
873
884
|
if (values) {
|
|
@@ -892,7 +903,7 @@ function fromNodeRequest(nodeReq, nodeRes) {
|
|
|
892
903
|
let controller = new AbortController();
|
|
893
904
|
let init = {
|
|
894
905
|
method: nodeReq.method,
|
|
895
|
-
headers: fromNodeHeaders(nodeReq
|
|
906
|
+
headers: fromNodeHeaders(nodeReq),
|
|
896
907
|
signal: controller.signal
|
|
897
908
|
};
|
|
898
909
|
nodeRes.on("finish", () => controller = null);
|
|
@@ -1945,6 +1956,9 @@ function toFunctionExpression(decl) {
|
|
|
1945
1956
|
}
|
|
1946
1957
|
|
|
1947
1958
|
// vite/plugin.ts
|
|
1959
|
+
function extractPluginContext(viteConfig) {
|
|
1960
|
+
return viteConfig["__reactRouterPluginContext"];
|
|
1961
|
+
}
|
|
1948
1962
|
var SERVER_ONLY_ROUTE_EXPORTS = ["loader", "action", "headers"];
|
|
1949
1963
|
var CLIENT_ROUTE_EXPORTS = [
|
|
1950
1964
|
"clientAction",
|
|
@@ -1960,19 +1974,20 @@ var CLIENT_ROUTE_EXPORTS = [
|
|
|
1960
1974
|
];
|
|
1961
1975
|
var BUILD_CLIENT_ROUTE_QUERY_STRING = "?__react-router-build-client-route";
|
|
1962
1976
|
var SSR_BUNDLE_PREFIX = "ssrBundle_";
|
|
1977
|
+
function isSsrBundleEnvironmentName(name) {
|
|
1978
|
+
return name.startsWith(SSR_BUNDLE_PREFIX);
|
|
1979
|
+
}
|
|
1963
1980
|
var CSS_DEV_HELPER_ENVIRONMENT_NAME = "__react_router_css_dev_helper__";
|
|
1964
1981
|
function isSeverBundleEnvironmentName(name) {
|
|
1965
1982
|
return name.startsWith(SSR_BUNDLE_PREFIX);
|
|
1966
1983
|
}
|
|
1967
|
-
function getServerEnvironmentEntries(
|
|
1984
|
+
function getServerEnvironmentEntries(ctx, record) {
|
|
1968
1985
|
return Object.entries(record).filter(
|
|
1969
|
-
([name]) => buildManifest
|
|
1986
|
+
([name]) => ctx.buildManifest?.serverBundles ? isSeverBundleEnvironmentName(name) : name === "ssr"
|
|
1970
1987
|
);
|
|
1971
1988
|
}
|
|
1972
|
-
function getServerEnvironmentValues(
|
|
1973
|
-
return getServerEnvironmentEntries(
|
|
1974
|
-
([, value]) => value
|
|
1975
|
-
);
|
|
1989
|
+
function getServerEnvironmentValues(ctx, record) {
|
|
1990
|
+
return getServerEnvironmentEntries(ctx, record).map(([, value]) => value);
|
|
1976
1991
|
}
|
|
1977
1992
|
var isRouteEntryModuleId = (id) => {
|
|
1978
1993
|
return id.endsWith(BUILD_CLIENT_ROUTE_QUERY_STRING);
|
|
@@ -1980,6 +1995,23 @@ var isRouteEntryModuleId = (id) => {
|
|
|
1980
1995
|
var isRouteVirtualModule = (id) => {
|
|
1981
1996
|
return isRouteEntryModuleId(id) || isRouteChunkModuleId(id);
|
|
1982
1997
|
};
|
|
1998
|
+
var isServerBuildVirtualModuleId = (id) => {
|
|
1999
|
+
return id.split("?")[0] === virtual.serverBuild.id;
|
|
2000
|
+
};
|
|
2001
|
+
var getServerBuildFile = (viteManifest) => {
|
|
2002
|
+
let serverBuildIds = Object.keys(viteManifest).filter(
|
|
2003
|
+
isServerBuildVirtualModuleId
|
|
2004
|
+
);
|
|
2005
|
+
invariant(
|
|
2006
|
+
serverBuildIds.length <= 1,
|
|
2007
|
+
"Multiple server build files found in manifest"
|
|
2008
|
+
);
|
|
2009
|
+
invariant(
|
|
2010
|
+
serverBuildIds.length === 1,
|
|
2011
|
+
"Server build file not found in manifest"
|
|
2012
|
+
);
|
|
2013
|
+
return viteManifest[serverBuildIds[0]].file;
|
|
2014
|
+
};
|
|
1983
2015
|
var virtualHmrRuntime = create("hmr-runtime");
|
|
1984
2016
|
var virtualInjectHmrRuntime = create("inject-hmr-runtime");
|
|
1985
2017
|
var normalizeRelativeFilePath = (file, reactRouterConfig) => {
|
|
@@ -2146,12 +2178,29 @@ var resolveEnvironmentBuildContext = ({
|
|
|
2146
2178
|
};
|
|
2147
2179
|
return resolvedBuildContext;
|
|
2148
2180
|
};
|
|
2149
|
-
var getServerBuildDirectory = (
|
|
2150
|
-
|
|
2181
|
+
var getServerBuildDirectory = (reactRouterConfig, { serverBundleId } = {}) => path6.join(
|
|
2182
|
+
reactRouterConfig.buildDirectory,
|
|
2151
2183
|
"server",
|
|
2152
2184
|
...serverBundleId ? [serverBundleId] : []
|
|
2153
2185
|
);
|
|
2154
2186
|
var getClientBuildDirectory = (reactRouterConfig) => path6.join(reactRouterConfig.buildDirectory, "client");
|
|
2187
|
+
var getServerBundleRouteIds = (vitePluginContext, ctx) => {
|
|
2188
|
+
if (!ctx.buildManifest) {
|
|
2189
|
+
return void 0;
|
|
2190
|
+
}
|
|
2191
|
+
let environmentName = ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? vitePluginContext.environment.name : ctx.environmentBuildContext?.name;
|
|
2192
|
+
if (!environmentName || !isSsrBundleEnvironmentName(environmentName)) {
|
|
2193
|
+
return void 0;
|
|
2194
|
+
}
|
|
2195
|
+
let serverBundleId = environmentName.replace(SSR_BUNDLE_PREFIX, "");
|
|
2196
|
+
let routesByServerBundleId = getRoutesByServerBundleId(ctx.buildManifest);
|
|
2197
|
+
let serverBundleRoutes = routesByServerBundleId[serverBundleId];
|
|
2198
|
+
invariant(
|
|
2199
|
+
serverBundleRoutes,
|
|
2200
|
+
`Routes not found for server bundle "${serverBundleId}"`
|
|
2201
|
+
);
|
|
2202
|
+
return Object.keys(serverBundleRoutes);
|
|
2203
|
+
};
|
|
2155
2204
|
var injectQuery = (url2, query) => url2.includes("?") ? url2.replace("?", `?${query}&`) : `${url2}?${query}`;
|
|
2156
2205
|
var defaultEntriesDir = path6.resolve(
|
|
2157
2206
|
path6.dirname(require.resolve("@react-router/dev/package.json")),
|
|
@@ -2168,7 +2217,6 @@ var reactRouterVitePlugin = () => {
|
|
|
2168
2217
|
let viteUserConfig;
|
|
2169
2218
|
let viteConfigEnv;
|
|
2170
2219
|
let viteConfig;
|
|
2171
|
-
let buildManifest;
|
|
2172
2220
|
let cssModulesManifest = {};
|
|
2173
2221
|
let viteChildCompiler = null;
|
|
2174
2222
|
let cache = /* @__PURE__ */ new Map();
|
|
@@ -2189,6 +2237,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2189
2237
|
}
|
|
2190
2238
|
return;
|
|
2191
2239
|
}
|
|
2240
|
+
let injectedPluginContext = !reactRouterConfig.future.unstable_viteEnvironmentApi && viteCommand === "build" ? extractPluginContext(viteUserConfig) : void 0;
|
|
2192
2241
|
let { entryClientFilePath, entryServerFilePath } = await resolveEntryFiles({
|
|
2193
2242
|
rootDirectory,
|
|
2194
2243
|
reactRouterConfig
|
|
@@ -2203,6 +2252,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2203
2252
|
process.exit(1);
|
|
2204
2253
|
}
|
|
2205
2254
|
let viteManifestEnabled = viteUserConfig.build?.manifest === true;
|
|
2255
|
+
let buildManifest = viteCommand === "build" ? injectedPluginContext?.buildManifest ?? await getBuildManifest({ reactRouterConfig, rootDirectory }) : null;
|
|
2206
2256
|
let environmentBuildContext = viteCommand === "build" ? resolveEnvironmentBuildContext({ viteCommand, viteUserConfig }) : null;
|
|
2207
2257
|
firstLoad = false;
|
|
2208
2258
|
ctx = {
|
|
@@ -2212,7 +2262,8 @@ var reactRouterVitePlugin = () => {
|
|
|
2212
2262
|
entryClientFilePath,
|
|
2213
2263
|
entryServerFilePath,
|
|
2214
2264
|
publicPath,
|
|
2215
|
-
viteManifestEnabled
|
|
2265
|
+
viteManifestEnabled,
|
|
2266
|
+
buildManifest
|
|
2216
2267
|
};
|
|
2217
2268
|
};
|
|
2218
2269
|
let pluginIndex = (pluginName) => {
|
|
@@ -2234,21 +2285,26 @@ var reactRouterVitePlugin = () => {
|
|
|
2234
2285
|
ctx.reactRouterConfig.ssr,
|
|
2235
2286
|
routes
|
|
2236
2287
|
);
|
|
2288
|
+
let isSpaMode = isSpaModeEnabled(ctx.reactRouterConfig);
|
|
2237
2289
|
return `
|
|
2238
|
-
|
|
2290
|
+
import * as entryServer from ${JSON.stringify(
|
|
2239
2291
|
resolveFileUrl(ctx, ctx.entryServerFilePath)
|
|
2240
2292
|
)};
|
|
2241
|
-
|
|
2293
|
+
${Object.keys(routes).map((key, index) => {
|
|
2242
2294
|
let route = routes[key];
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2295
|
+
if (isSpaMode && key !== "root") {
|
|
2296
|
+
return `const route${index} = { default: () => null };`;
|
|
2297
|
+
} else {
|
|
2298
|
+
return `import * as route${index} from ${JSON.stringify(
|
|
2299
|
+
resolveFileUrl(
|
|
2300
|
+
ctx,
|
|
2301
|
+
resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
|
|
2302
|
+
)
|
|
2303
|
+
)};`;
|
|
2304
|
+
}
|
|
2249
2305
|
}).join("\n")}
|
|
2250
2306
|
export { default as assets } from ${JSON.stringify(
|
|
2251
|
-
|
|
2307
|
+
virtual.serverManifest.id
|
|
2252
2308
|
)};
|
|
2253
2309
|
export const assetsBuildDirectory = ${JSON.stringify(
|
|
2254
2310
|
path6.relative(
|
|
@@ -2259,7 +2315,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2259
2315
|
export const basename = ${JSON.stringify(ctx.reactRouterConfig.basename)};
|
|
2260
2316
|
export const future = ${JSON.stringify(ctx.reactRouterConfig.future)};
|
|
2261
2317
|
export const ssr = ${ctx.reactRouterConfig.ssr};
|
|
2262
|
-
export const isSpaMode = ${
|
|
2318
|
+
export const isSpaMode = ${isSpaMode};
|
|
2263
2319
|
export const prerender = ${JSON.stringify(prerenderPaths)};
|
|
2264
2320
|
export const publicPath = ${JSON.stringify(ctx.publicPath)};
|
|
2265
2321
|
export const entry = { module: entryServer };
|
|
@@ -2553,7 +2609,6 @@ var reactRouterVitePlugin = () => {
|
|
|
2553
2609
|
watch: viteCommand === "serve"
|
|
2554
2610
|
});
|
|
2555
2611
|
await updatePluginContext();
|
|
2556
|
-
buildManifest = await getBuildManifest(ctx);
|
|
2557
2612
|
Object.assign(
|
|
2558
2613
|
process.env,
|
|
2559
2614
|
vite2.loadEnv(
|
|
@@ -2565,15 +2620,12 @@ var reactRouterVitePlugin = () => {
|
|
|
2565
2620
|
""
|
|
2566
2621
|
)
|
|
2567
2622
|
);
|
|
2568
|
-
let environments = await getEnvironmentsOptions(
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
viteCommand,
|
|
2572
|
-
{ viteUserConfig }
|
|
2573
|
-
);
|
|
2623
|
+
let environments = await getEnvironmentsOptions(ctx, viteCommand, {
|
|
2624
|
+
viteUserConfig
|
|
2625
|
+
});
|
|
2574
2626
|
let serverEnvironment = getServerEnvironmentValues(
|
|
2575
|
-
|
|
2576
|
-
|
|
2627
|
+
ctx,
|
|
2628
|
+
environments
|
|
2577
2629
|
)[0];
|
|
2578
2630
|
invariant(serverEnvironment);
|
|
2579
2631
|
let clientEnvironment = environments.client;
|
|
@@ -2644,7 +2696,6 @@ var reactRouterVitePlugin = () => {
|
|
|
2644
2696
|
sharedPlugins: true,
|
|
2645
2697
|
async buildApp(builder) {
|
|
2646
2698
|
invariant(viteConfig);
|
|
2647
|
-
invariant(buildManifest);
|
|
2648
2699
|
viteConfig.logger.info(
|
|
2649
2700
|
"Using Vite Environment API (experimental)"
|
|
2650
2701
|
);
|
|
@@ -2652,11 +2703,13 @@ var reactRouterVitePlugin = () => {
|
|
|
2652
2703
|
await cleanBuildDirectory(viteConfig, ctx);
|
|
2653
2704
|
await builder.build(builder.environments.client);
|
|
2654
2705
|
let serverEnvironments = getServerEnvironmentValues(
|
|
2655
|
-
|
|
2656
|
-
|
|
2706
|
+
ctx,
|
|
2707
|
+
builder.environments
|
|
2657
2708
|
);
|
|
2658
2709
|
await Promise.all(serverEnvironments.map(builder.build));
|
|
2659
2710
|
await cleanViteManifests(environments, ctx);
|
|
2711
|
+
let { buildManifest } = ctx;
|
|
2712
|
+
invariant(buildManifest, "Expected build manifest");
|
|
2660
2713
|
await reactRouterConfig.buildEnd?.({
|
|
2661
2714
|
buildManifest,
|
|
2662
2715
|
reactRouterConfig,
|
|
@@ -2840,9 +2893,21 @@ var reactRouterVitePlugin = () => {
|
|
|
2840
2893
|
if (!viteDevServer.config.server.middlewareMode) {
|
|
2841
2894
|
viteDevServer.middlewares.use(async (req, res, next) => {
|
|
2842
2895
|
try {
|
|
2843
|
-
let build
|
|
2844
|
-
|
|
2845
|
-
|
|
2896
|
+
let build;
|
|
2897
|
+
if (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi) {
|
|
2898
|
+
let vite2 = getVite();
|
|
2899
|
+
let ssrEnvironment = viteDevServer.environments.ssr;
|
|
2900
|
+
if (!vite2.isRunnableDevEnvironment(ssrEnvironment)) {
|
|
2901
|
+
return;
|
|
2902
|
+
}
|
|
2903
|
+
build = await ssrEnvironment.runner.import(
|
|
2904
|
+
virtual.serverBuild.id
|
|
2905
|
+
);
|
|
2906
|
+
} else {
|
|
2907
|
+
build = await viteDevServer.ssrLoadModule(
|
|
2908
|
+
virtual.serverBuild.id
|
|
2909
|
+
);
|
|
2910
|
+
}
|
|
2846
2911
|
let handler = (0, import_react_router2.createRequestHandler)(build, "development");
|
|
2847
2912
|
let nodeHandler = async (nodeReq, nodeRes) => {
|
|
2848
2913
|
let req2 = fromNodeRequest(nodeReq, nodeRes);
|
|
@@ -2872,7 +2937,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2872
2937
|
let clientBuildDirectory = getClientBuildDirectory(
|
|
2873
2938
|
ctx.reactRouterConfig
|
|
2874
2939
|
);
|
|
2875
|
-
let serverBuildDirectory = future.unstable_viteEnvironmentApi ? this.environment.config?.build?.outDir : ctx.environmentBuildContext?.options.build?.outDir ?? getServerBuildDirectory(ctx);
|
|
2940
|
+
let serverBuildDirectory = future.unstable_viteEnvironmentApi ? this.environment.config?.build?.outDir : ctx.environmentBuildContext?.options.build?.outDir ?? getServerBuildDirectory(ctx.reactRouterConfig);
|
|
2876
2941
|
let ssrViteManifest = await loadViteManifest(serverBuildDirectory);
|
|
2877
2942
|
let ssrAssetPaths = getViteManifestAssetPaths(ssrViteManifest);
|
|
2878
2943
|
let movedAssetPaths = [];
|
|
@@ -2911,7 +2976,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2911
2976
|
viteConfig,
|
|
2912
2977
|
ctx.reactRouterConfig,
|
|
2913
2978
|
serverBuildDirectory,
|
|
2914
|
-
ssrViteManifest
|
|
2979
|
+
getServerBuildFile(ssrViteManifest),
|
|
2915
2980
|
clientBuildDirectory
|
|
2916
2981
|
);
|
|
2917
2982
|
}
|
|
@@ -2920,7 +2985,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2920
2985
|
viteConfig,
|
|
2921
2986
|
ctx.reactRouterConfig,
|
|
2922
2987
|
serverBuildDirectory,
|
|
2923
|
-
ssrViteManifest
|
|
2988
|
+
getServerBuildFile(ssrViteManifest),
|
|
2924
2989
|
clientBuildDirectory
|
|
2925
2990
|
);
|
|
2926
2991
|
}
|
|
@@ -3061,22 +3126,17 @@ var reactRouterVitePlugin = () => {
|
|
|
3061
3126
|
name: "react-router:virtual-modules",
|
|
3062
3127
|
enforce: "pre",
|
|
3063
3128
|
resolveId(id) {
|
|
3064
|
-
|
|
3065
|
-
|
|
3066
|
-
if (vmod2)
|
|
3067
|
-
return vmod2.resolvedId + (queryString ? `?${queryString}` : "");
|
|
3129
|
+
const vmod2 = Object.values(virtual).find((vmod3) => vmod3.id === id);
|
|
3130
|
+
if (vmod2) return vmod2.resolvedId;
|
|
3068
3131
|
},
|
|
3069
3132
|
async load(id) {
|
|
3070
|
-
|
|
3071
|
-
switch (baseId) {
|
|
3133
|
+
switch (id) {
|
|
3072
3134
|
case virtual.serverBuild.resolvedId: {
|
|
3073
|
-
let
|
|
3074
|
-
let routeIds = searchParams.get("route-ids")?.split(",") || void 0;
|
|
3135
|
+
let routeIds = getServerBundleRouteIds(this, ctx);
|
|
3075
3136
|
return await getServerEntry({ routeIds });
|
|
3076
3137
|
}
|
|
3077
3138
|
case virtual.serverManifest.resolvedId: {
|
|
3078
|
-
let
|
|
3079
|
-
let routeIds = searchParams.get("route-ids")?.split(",") || void 0;
|
|
3139
|
+
let routeIds = getServerBundleRouteIds(this, ctx);
|
|
3080
3140
|
let reactRouterManifest = viteCommand === "build" ? (await generateReactRouterManifestsForBuild({
|
|
3081
3141
|
routeIds
|
|
3082
3142
|
})).reactRouterServerManifest : await getReactRouterManifestForDev();
|
|
@@ -3563,18 +3623,26 @@ async function handlePrerender(viteConfig, reactRouterConfig, serverBuildDirecto
|
|
|
3563
3623
|
serverBuildDirectory,
|
|
3564
3624
|
serverBuildPath
|
|
3565
3625
|
);
|
|
3566
|
-
let routes = createPrerenderRoutes(
|
|
3626
|
+
let routes = createPrerenderRoutes(reactRouterConfig.routes);
|
|
3627
|
+
for (let path7 of build.prerender) {
|
|
3628
|
+
let matches = (0, import_react_router2.matchRoutes)(routes, `/${path7}/`.replace(/^\/\/+/, "/"));
|
|
3629
|
+
if (!matches) {
|
|
3630
|
+
throw new Error(
|
|
3631
|
+
`Unable to prerender path because it does not match any routes: ${path7}`
|
|
3632
|
+
);
|
|
3633
|
+
}
|
|
3634
|
+
}
|
|
3635
|
+
let buildRoutes = createPrerenderRoutes(build.routes);
|
|
3567
3636
|
let headers = {
|
|
3568
3637
|
// Header that can be used in the loader to know if you're running at
|
|
3569
3638
|
// build time or runtime
|
|
3570
3639
|
"X-React-Router-Prerender": "yes"
|
|
3571
3640
|
};
|
|
3572
3641
|
for (let path7 of build.prerender) {
|
|
3573
|
-
let matches = (0, import_react_router2.matchRoutes)(
|
|
3574
|
-
|
|
3575
|
-
|
|
3576
|
-
|
|
3577
|
-
);
|
|
3642
|
+
let matches = (0, import_react_router2.matchRoutes)(buildRoutes, `/${path7}/`.replace(/^\/\/+/, "/"));
|
|
3643
|
+
if (!matches) {
|
|
3644
|
+
continue;
|
|
3645
|
+
}
|
|
3578
3646
|
let leafRoute = matches ? matches[matches.length - 1].route : null;
|
|
3579
3647
|
let manifestRoute = leafRoute ? build.routes[leafRoute.id]?.module : null;
|
|
3580
3648
|
let isResourceRoute = manifestRoute && !manifestRoute.default && !manifestRoute.ErrorBoundary;
|
|
@@ -3877,8 +3945,8 @@ function getRouteBranch(routes, routeId) {
|
|
|
3877
3945
|
}
|
|
3878
3946
|
return branch.reverse();
|
|
3879
3947
|
}
|
|
3880
|
-
function
|
|
3881
|
-
return Object.keys(buildManifest.serverBundles
|
|
3948
|
+
function getServerBundleIds(ctx) {
|
|
3949
|
+
return ctx.buildManifest?.serverBundles ? Object.keys(ctx.buildManifest.serverBundles) : void 0;
|
|
3882
3950
|
}
|
|
3883
3951
|
function getRoutesByServerBundleId(buildManifest) {
|
|
3884
3952
|
if (!buildManifest.routeIdToServerBundleId) {
|
|
@@ -3993,19 +4061,22 @@ async function cleanViteManifests(environmentsOptions, ctx) {
|
|
|
3993
4061
|
})
|
|
3994
4062
|
);
|
|
3995
4063
|
}
|
|
3996
|
-
async function getBuildManifest(
|
|
3997
|
-
|
|
4064
|
+
async function getBuildManifest({
|
|
4065
|
+
reactRouterConfig,
|
|
4066
|
+
rootDirectory
|
|
4067
|
+
}) {
|
|
4068
|
+
let { routes, serverBundles, appDirectory } = reactRouterConfig;
|
|
3998
4069
|
if (!serverBundles) {
|
|
3999
4070
|
return { routes };
|
|
4000
4071
|
}
|
|
4001
4072
|
let { normalizePath } = await import("vite");
|
|
4002
|
-
let serverBuildDirectory = getServerBuildDirectory(
|
|
4003
|
-
let resolvedAppDirectory = path6.resolve(
|
|
4073
|
+
let serverBuildDirectory = getServerBuildDirectory(reactRouterConfig);
|
|
4074
|
+
let resolvedAppDirectory = path6.resolve(rootDirectory, appDirectory);
|
|
4004
4075
|
let rootRelativeRoutes = Object.fromEntries(
|
|
4005
4076
|
Object.entries(routes).map(([id, route]) => {
|
|
4006
4077
|
let filePath = path6.join(resolvedAppDirectory, route.file);
|
|
4007
4078
|
let rootRelativeFilePath = normalizePath(
|
|
4008
|
-
path6.relative(
|
|
4079
|
+
path6.relative(rootDirectory, filePath)
|
|
4009
4080
|
);
|
|
4010
4081
|
return [id, { ...route, file: rootRelativeFilePath }];
|
|
4011
4082
|
})
|
|
@@ -4030,10 +4101,18 @@ async function getBuildManifest(ctx) {
|
|
|
4030
4101
|
if (typeof serverBundleId !== "string") {
|
|
4031
4102
|
throw new Error(`The "serverBundles" function must return a string`);
|
|
4032
4103
|
}
|
|
4033
|
-
if (
|
|
4034
|
-
|
|
4035
|
-
|
|
4036
|
-
|
|
4104
|
+
if (reactRouterConfig.future.unstable_viteEnvironmentApi) {
|
|
4105
|
+
if (!/^[a-zA-Z0-9_]+$/.test(serverBundleId)) {
|
|
4106
|
+
throw new Error(
|
|
4107
|
+
`The "serverBundles" function must only return strings containing alphanumeric characters and underscores.`
|
|
4108
|
+
);
|
|
4109
|
+
}
|
|
4110
|
+
} else {
|
|
4111
|
+
if (!/^[a-zA-Z0-9-_]+$/.test(serverBundleId)) {
|
|
4112
|
+
throw new Error(
|
|
4113
|
+
`The "serverBundles" function must only return strings containing alphanumeric characters, hyphens and underscores.`
|
|
4114
|
+
);
|
|
4115
|
+
}
|
|
4037
4116
|
}
|
|
4038
4117
|
buildManifest.routeIdToServerBundleId[route.id] = serverBundleId;
|
|
4039
4118
|
buildManifest.serverBundles[serverBundleId] ??= {
|
|
@@ -4041,10 +4120,10 @@ async function getBuildManifest(ctx) {
|
|
|
4041
4120
|
file: normalizePath(
|
|
4042
4121
|
path6.join(
|
|
4043
4122
|
path6.relative(
|
|
4044
|
-
|
|
4123
|
+
rootDirectory,
|
|
4045
4124
|
path6.join(serverBuildDirectory, serverBundleId)
|
|
4046
4125
|
),
|
|
4047
|
-
|
|
4126
|
+
reactRouterConfig.serverBuildFile
|
|
4048
4127
|
)
|
|
4049
4128
|
)
|
|
4050
4129
|
};
|
|
@@ -4059,7 +4138,7 @@ function mergeEnvironmentOptions(base, ...overrides) {
|
|
|
4059
4138
|
base
|
|
4060
4139
|
);
|
|
4061
4140
|
}
|
|
4062
|
-
async function getEnvironmentOptionsResolvers(ctx,
|
|
4141
|
+
async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
4063
4142
|
let { serverBuildFile, serverModuleFormat } = ctx.reactRouterConfig;
|
|
4064
4143
|
let packageRoot = path6.dirname(
|
|
4065
4144
|
require.resolve("@react-router/dev/package.json")
|
|
@@ -4103,7 +4182,15 @@ async function getEnvironmentOptionsResolvers(ctx, buildManifest, viteCommand) {
|
|
|
4103
4182
|
let conditions = viteCommand === "build" ? viteServerConditions : ["development", ...viteServerConditions];
|
|
4104
4183
|
return mergeEnvironmentOptions(getBaseOptions({ viteUserConfig }), {
|
|
4105
4184
|
resolve: {
|
|
4106
|
-
external:
|
|
4185
|
+
external: (
|
|
4186
|
+
// This check is required to honor the "noExternal: true" config
|
|
4187
|
+
// provided by vite-plugin-cloudflare within this repo. When compiling
|
|
4188
|
+
// for Cloudflare, all server dependencies are externalized, but our
|
|
4189
|
+
// `ssrExternals` config inadvertently overrides this. This doesn't
|
|
4190
|
+
// impact consumers because for them `ssrExternals` is undefined and
|
|
4191
|
+
// Cloudflare's "noExternal: true" config remains intact.
|
|
4192
|
+
ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteUserConfig.environments?.ssr?.resolve?.noExternal === true ? void 0 : ssrExternals
|
|
4193
|
+
),
|
|
4107
4194
|
conditions,
|
|
4108
4195
|
externalConditions: conditions
|
|
4109
4196
|
},
|
|
@@ -4117,6 +4204,7 @@ async function getEnvironmentOptionsResolvers(ctx, buildManifest, viteCommand) {
|
|
|
4117
4204
|
copyPublicDir: false,
|
|
4118
4205
|
// Assets in the public directory are only used by the client
|
|
4119
4206
|
rollupOptions: {
|
|
4207
|
+
input: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ?? virtual.serverBuild.id,
|
|
4120
4208
|
output: {
|
|
4121
4209
|
entryFileNames: serverBuildFile,
|
|
4122
4210
|
format: serverModuleFormat
|
|
@@ -4148,12 +4236,15 @@ async function getEnvironmentOptionsResolvers(ctx, buildManifest, viteCommand) {
|
|
|
4148
4236
|
}
|
|
4149
4237
|
)
|
|
4150
4238
|
],
|
|
4151
|
-
output: {
|
|
4152
|
-
entryFileNames({ moduleIds }) {
|
|
4239
|
+
output: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.rollupOptions?.output : viteUserConfig?.build?.rollupOptions?.output) ?? {
|
|
4240
|
+
entryFileNames: ({ moduleIds }) => {
|
|
4153
4241
|
let routeChunkModuleId = moduleIds.find(isRouteChunkModuleId);
|
|
4154
4242
|
let routeChunkName = routeChunkModuleId ? getRouteChunkNameFromModuleId(routeChunkModuleId) : null;
|
|
4155
4243
|
let routeChunkSuffix = routeChunkName ? `-${(0, import_kebabCase.default)(routeChunkName)}` : "";
|
|
4156
|
-
return
|
|
4244
|
+
return path6.posix.join(
|
|
4245
|
+
(ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.assetsDir : viteUserConfig?.build?.assetsDir) ?? "assets",
|
|
4246
|
+
`[name]${routeChunkSuffix}-[hash].js`
|
|
4247
|
+
);
|
|
4157
4248
|
}
|
|
4158
4249
|
}
|
|
4159
4250
|
},
|
|
@@ -4161,22 +4252,17 @@ async function getEnvironmentOptionsResolvers(ctx, buildManifest, viteCommand) {
|
|
|
4161
4252
|
}
|
|
4162
4253
|
})
|
|
4163
4254
|
};
|
|
4164
|
-
|
|
4165
|
-
|
|
4166
|
-
|
|
4167
|
-
|
|
4168
|
-
const serverBundleEnvironmentId = serverBundleId.replaceAll("-", "_");
|
|
4169
|
-
const environmentName = `${SSR_BUNDLE_PREFIX}${serverBundleEnvironmentId}`;
|
|
4255
|
+
let serverBundleIds = getServerBundleIds(ctx);
|
|
4256
|
+
if (serverBundleIds) {
|
|
4257
|
+
for (let serverBundleId of serverBundleIds) {
|
|
4258
|
+
const environmentName = `${SSR_BUNDLE_PREFIX}${serverBundleId}`;
|
|
4170
4259
|
environmentOptionsResolvers[environmentName] = ({ viteUserConfig }) => mergeEnvironmentOptions(
|
|
4171
4260
|
getBaseServerOptions({ viteUserConfig }),
|
|
4172
4261
|
{
|
|
4173
4262
|
build: {
|
|
4174
|
-
outDir: getServerBuildDirectory(ctx, {
|
|
4175
|
-
|
|
4176
|
-
|
|
4177
|
-
routes
|
|
4178
|
-
).join(",")}`
|
|
4179
|
-
}
|
|
4263
|
+
outDir: getServerBuildDirectory(ctx.reactRouterConfig, {
|
|
4264
|
+
serverBundleId
|
|
4265
|
+
})
|
|
4180
4266
|
}
|
|
4181
4267
|
},
|
|
4182
4268
|
// Ensure server bundle environments extend the user's SSR
|
|
@@ -4187,10 +4273,7 @@ async function getEnvironmentOptionsResolvers(ctx, buildManifest, viteCommand) {
|
|
|
4187
4273
|
} else {
|
|
4188
4274
|
environmentOptionsResolvers.ssr = ({ viteUserConfig }) => mergeEnvironmentOptions(getBaseServerOptions({ viteUserConfig }), {
|
|
4189
4275
|
build: {
|
|
4190
|
-
outDir: getServerBuildDirectory(ctx)
|
|
4191
|
-
rollupOptions: {
|
|
4192
|
-
input: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ?? virtual.serverBuild.id
|
|
4193
|
-
}
|
|
4276
|
+
outDir: getServerBuildDirectory(ctx.reactRouterConfig)
|
|
4194
4277
|
},
|
|
4195
4278
|
optimizeDeps: ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteUserConfig.environments?.ssr?.optimizeDeps?.noDiscovery === false ? {
|
|
4196
4279
|
entries: [
|
|
@@ -4222,10 +4305,9 @@ function resolveEnvironmentsOptions(environmentResolvers, resolverOptions) {
|
|
|
4222
4305
|
}
|
|
4223
4306
|
return environmentOptions;
|
|
4224
4307
|
}
|
|
4225
|
-
async function getEnvironmentsOptions(ctx,
|
|
4308
|
+
async function getEnvironmentsOptions(ctx, viteCommand, resolverOptions) {
|
|
4226
4309
|
let environmentOptionsResolvers = await getEnvironmentOptionsResolvers(
|
|
4227
4310
|
ctx,
|
|
4228
|
-
buildManifest,
|
|
4229
4311
|
viteCommand
|
|
4230
4312
|
);
|
|
4231
4313
|
return resolveEnvironmentsOptions(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-router/dev",
|
|
3
|
-
"version": "0.0.0-experimental-
|
|
3
|
+
"version": "0.0.0-experimental-58439e382",
|
|
4
4
|
"description": "Dev tools and CLI for React Router",
|
|
5
5
|
"homepage": "https://reactrouter.com",
|
|
6
6
|
"bugs": {
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"set-cookie-parser": "^2.6.0",
|
|
89
89
|
"valibot": "^0.41.0",
|
|
90
90
|
"vite-node": "3.0.0-beta.2",
|
|
91
|
-
"@react-router/node": "0.0.0-experimental-
|
|
91
|
+
"@react-router/node": "0.0.0-experimental-58439e382"
|
|
92
92
|
},
|
|
93
93
|
"devDependencies": {
|
|
94
94
|
"@types/babel__core": "^7.20.5",
|
|
@@ -114,18 +114,18 @@
|
|
|
114
114
|
"tiny-invariant": "^1.2.0",
|
|
115
115
|
"tsup": "^8.3.0",
|
|
116
116
|
"typescript": "^5.1.6",
|
|
117
|
-
"vite": "^6.
|
|
117
|
+
"vite": "^6.1.0",
|
|
118
118
|
"wireit": "0.14.9",
|
|
119
|
-
"wrangler": "^3.
|
|
120
|
-
"@react-router/serve": "0.0.0-experimental-
|
|
121
|
-
"react-router": "^0.0.0-experimental-
|
|
119
|
+
"wrangler": "^3.109.2",
|
|
120
|
+
"@react-router/serve": "0.0.0-experimental-58439e382",
|
|
121
|
+
"react-router": "^0.0.0-experimental-58439e382"
|
|
122
122
|
},
|
|
123
123
|
"peerDependencies": {
|
|
124
124
|
"typescript": "^5.1.0",
|
|
125
125
|
"vite": "^5.1.0 || ^6.0.0",
|
|
126
126
|
"wrangler": "^3.28.2",
|
|
127
|
-
"@react-router/serve": "^0.0.0-experimental-
|
|
128
|
-
"react-router": "^0.0.0-experimental-
|
|
127
|
+
"@react-router/serve": "^0.0.0-experimental-58439e382",
|
|
128
|
+
"react-router": "^0.0.0-experimental-58439e382"
|
|
129
129
|
},
|
|
130
130
|
"peerDependenciesMeta": {
|
|
131
131
|
"@react-router/serve": {
|