@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * @react-router/dev v0.0.0-experimental-1b454267f
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, branchRouteProperties, configRouteToBranchRoute, mergeReactRouterConfig, deepFreeze, ssrExternals, entryExts;
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
- async function extractPluginContext(viteConfig) {
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(record, buildManifest) {
1070
+ function getServerEnvironmentEntries(ctx, record) {
1078
1071
  return Object.entries(record).filter(
1079
- ([name]) => buildManifest.serverBundles ? isSeverBundleEnvironmentName(name) : name === "ssr"
1072
+ ([name]) => ctx.buildManifest?.serverBundles ? isSeverBundleEnvironmentName(name) : name === "ssr"
1080
1073
  );
1081
1074
  }
1082
- function getServerEnvironmentKeys(record, buildManifest) {
1083
- return getServerEnvironmentEntries(record, buildManifest).map(([key]) => key);
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 getRoutesByServerBundleId(buildManifest) {
1119
- if (!buildManifest.routeIdToServerBundleId) {
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, buildManifest, viteCommand) {
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: ssrExternals,
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 `assets/[name]${routeChunkSuffix}-[hash].js`;
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
- if (hasServerBundles(buildManifest)) {
1336
- for (let [serverBundleId, routes2] of Object.entries(
1337
- getRoutesByServerBundleId(buildManifest)
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, { serverBundleId }),
1346
- rollupOptions: {
1347
- input: `${virtual.serverBuild.id}?route-ids=${Object.keys(
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 = (ctx, { serverBundleId } = {}) => path7.join(
1444
- ctx.reactRouterConfig.buildDirectory,
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 = await extractPluginContext(viteConfig);
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
- ...{ __reactRouterEnvironmentBuildContext: environmentBuildContext }
1510
+ ...{
1511
+ __reactRouterPluginContext: ctx,
1512
+ __reactRouterEnvironmentBuildContext: environmentBuildContext
1513
+ }
1619
1514
  });
1620
1515
  }
1621
- let { reactRouterConfig } = ctx;
1622
- let buildManifest = await getBuildManifest(ctx);
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
- environmentOptionsResolvers,
1636
- buildManifest
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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-1b454267f
2
+ * @react-router/dev v0.0.0-experimental-58439e382
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/routes.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-1b454267f
2
+ * @react-router/dev v0.0.0-experimental-58439e382
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-1b454267f
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(nodeHeaders) {
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.headers),
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-1b454267f
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(nodeHeaders) {
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.headers),
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(record, buildManifest) {
1984
+ function getServerEnvironmentEntries(ctx, record) {
1968
1985
  return Object.entries(record).filter(
1969
- ([name]) => buildManifest.serverBundles ? isSeverBundleEnvironmentName(name) : name === "ssr"
1986
+ ([name]) => ctx.buildManifest?.serverBundles ? isSeverBundleEnvironmentName(name) : name === "ssr"
1970
1987
  );
1971
1988
  }
1972
- function getServerEnvironmentValues(record, buildManifest) {
1973
- return getServerEnvironmentEntries(record, buildManifest).map(
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 = (ctx, { serverBundleId } = {}) => path6.join(
2150
- ctx.reactRouterConfig.buildDirectory,
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
- import * as entryServer from ${JSON.stringify(
2290
+ import * as entryServer from ${JSON.stringify(
2239
2291
  resolveFileUrl(ctx, ctx.entryServerFilePath)
2240
2292
  )};
2241
- ${Object.keys(routes).map((key, index) => {
2293
+ ${Object.keys(routes).map((key, index) => {
2242
2294
  let route = routes[key];
2243
- return `import * as route${index} from ${JSON.stringify(
2244
- resolveFileUrl(
2245
- ctx,
2246
- resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
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
- `${virtual.serverManifest.id}${routeIds ? `?route-ids=${routeIds.join(",")}` : ""}`
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 = ${isSpaModeEnabled(ctx.reactRouterConfig)};
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
- ctx,
2570
- buildManifest,
2571
- viteCommand,
2572
- { viteUserConfig }
2573
- );
2623
+ let environments = await getEnvironmentsOptions(ctx, viteCommand, {
2624
+ viteUserConfig
2625
+ });
2574
2626
  let serverEnvironment = getServerEnvironmentValues(
2575
- environments,
2576
- buildManifest
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
- builder.environments,
2656
- buildManifest
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 = await viteDevServer.ssrLoadModule(
2844
- virtual.serverBuild.id
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[virtual.serverBuild.id].file,
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[virtual.serverBuild.id].file,
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
- let [baseId, queryString] = id.split("?");
3065
- const vmod2 = Object.values(virtual).find((vmod3) => vmod3.id === baseId);
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
- let [baseId, queryString] = id.split("?");
3071
- switch (baseId) {
3133
+ switch (id) {
3072
3134
  case virtual.serverBuild.resolvedId: {
3073
- let searchParams = new URLSearchParams(queryString);
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 searchParams = new URLSearchParams(queryString);
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(build.routes);
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)(routes, `/${path7}/`.replace(/^\/\/+/, "/"));
3574
- invariant(
3575
- matches,
3576
- `Unable to prerender path because it does not match any routes: ${path7}`
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 hasServerBundles(buildManifest) {
3881
- return Object.keys(buildManifest.serverBundles ?? {}).length > 0;
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(ctx) {
3997
- let { routes, serverBundles, appDirectory } = ctx.reactRouterConfig;
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(ctx);
4003
- let resolvedAppDirectory = path6.resolve(ctx.rootDirectory, appDirectory);
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(ctx.rootDirectory, filePath)
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 (!/^[a-zA-Z0-9-_]+$/.test(serverBundleId)) {
4034
- throw new Error(
4035
- `The "serverBundles" function must only return strings containing alphanumeric characters, hyphens and underscores.`
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
- ctx.rootDirectory,
4123
+ rootDirectory,
4045
4124
  path6.join(serverBuildDirectory, serverBundleId)
4046
4125
  ),
4047
- ctx.reactRouterConfig.serverBuildFile
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, buildManifest, viteCommand) {
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: ssrExternals,
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 `assets/[name]${routeChunkSuffix}-[hash].js`;
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
- if (hasServerBundles(buildManifest)) {
4165
- for (let [serverBundleId, routes] of Object.entries(
4166
- getRoutesByServerBundleId(buildManifest)
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, { serverBundleId }),
4175
- rollupOptions: {
4176
- input: `${virtual.serverBuild.id}?route-ids=${Object.keys(
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, buildManifest, viteCommand, resolverOptions) {
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-1b454267f",
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-1b454267f"
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.0.0",
117
+ "vite": "^6.1.0",
118
118
  "wireit": "0.14.9",
119
- "wrangler": "^3.28.2",
120
- "@react-router/serve": "0.0.0-experimental-1b454267f",
121
- "react-router": "^0.0.0-experimental-1b454267f"
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-1b454267f",
128
- "react-router": "^0.0.0-experimental-1b454267f"
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": {