@react-router/dev 0.0.0-experimental-5509a3c42 → 0.0.0-experimental-2bfe0a2f2

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/vite.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-5509a3c42
2
+ * @react-router/dev v0.0.0-experimental-2bfe0a2f2
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -46,8 +46,8 @@ module.exports = __toCommonJS(vite_exports);
46
46
 
47
47
  // vite/plugin.ts
48
48
  var import_node_crypto = require("crypto");
49
- var path6 = __toESM(require("path"));
50
- var url = __toESM(require("url"));
49
+ var path4 = __toESM(require("path"));
50
+ var url2 = __toESM(require("url"));
51
51
  var fse = __toESM(require("fs-extra"));
52
52
  var babel = __toESM(require("@babel/core"));
53
53
  var import_react_router2 = require("react-router");
@@ -70,9 +70,6 @@ var import_server = require("vite-node/server");
70
70
  var import_client = require("vite-node/client");
71
71
  var import_source_map = require("vite-node/source-map");
72
72
 
73
- // vite/vite.ts
74
- var import_pathe2 = __toESM(require("pathe"));
75
-
76
73
  // invariant.ts
77
74
  function invariant(value, message) {
78
75
  if (value === false || value === null || typeof value === "undefined") {
@@ -83,41 +80,20 @@ function invariant(value, message) {
83
80
  }
84
81
  }
85
82
 
86
- // config/is-react-router-repo.ts
87
- var import_pathe = __toESM(require("pathe"));
88
- function isReactRouterRepo() {
89
- let serverRuntimePath = import_pathe.default.dirname(
90
- require.resolve("@react-router/node/package.json")
91
- );
92
- let serverRuntimeParentDir = import_pathe.default.basename(
93
- import_pathe.default.resolve(serverRuntimePath, "..")
94
- );
95
- return serverRuntimeParentDir === "packages";
96
- }
97
-
98
- // vite/vite.ts
83
+ // vite/import-vite-esm-sync.ts
99
84
  var vite;
100
- var viteImportSpecifier = isReactRouterRepo() ? (
101
- // Support testing against different versions of Vite by ensuring that Vite
102
- // is resolved from the current working directory when running within this
103
- // repo. If we don't do this, Vite will always be imported relative to this
104
- // file, which means that it will always resolve to Vite 6.
105
- `file:///${import_pathe2.default.normalize(
106
- require.resolve("vite/package.json", { paths: [process.cwd()] })
107
- ).replace("package.json", "dist/node/index.js")}`
108
- ) : "vite";
109
- async function preloadVite() {
110
- vite = await import(viteImportSpecifier);
85
+ async function preloadViteEsm() {
86
+ vite = await import("vite");
111
87
  }
112
- function getVite() {
113
- invariant(vite, "getVite() called before preloadVite()");
88
+ function importViteEsmSync() {
89
+ invariant(vite, "importViteEsmSync() called before preloadViteEsm()");
114
90
  return vite;
115
91
  }
116
92
 
117
93
  // vite/vite-node.ts
118
94
  async function createContext(viteConfig = {}) {
119
- await preloadVite();
120
- const vite2 = getVite();
95
+ await preloadViteEsm();
96
+ const vite2 = importViteEsmSync();
121
97
  const devServer = await vite2.createServer(
122
98
  vite2.mergeConfig(
123
99
  {
@@ -143,18 +119,18 @@ async function createContext(viteConfig = {}) {
143
119
  const runner = new import_client.ViteNodeRunner({
144
120
  root: devServer.config.root,
145
121
  base: devServer.config.base,
146
- fetchModule(id) {
147
- return server.fetchModule(id);
122
+ fetchModule(id2) {
123
+ return server.fetchModule(id2);
148
124
  },
149
- resolveId(id, importer) {
150
- return server.resolveId(id, importer);
125
+ resolveId(id2, importer) {
126
+ return server.resolveId(id2, importer);
151
127
  }
152
128
  });
153
129
  return { devServer, server, runner };
154
130
  }
155
131
 
156
132
  // config/config.ts
157
- var import_pathe3 = __toESM(require("pathe"));
133
+ var import_pathe = __toESM(require("pathe"));
158
134
  var import_chokidar = __toESM(require("chokidar"));
159
135
  var import_picocolors = __toESM(require("picocolors"));
160
136
  var import_pick2 = __toESM(require("lodash/pick"));
@@ -208,7 +184,7 @@ function validateRouteConfig({
208
184
  `Route config in "${routeConfigFile}" is invalid.`,
209
185
  root ? `${root}` : [],
210
186
  nested ? Object.entries(nested).map(
211
- ([path7, message]) => `Path: routes.${path7}
187
+ ([path5, message]) => `Path: routes.${path5}
212
188
  ${message}`
213
189
  ) : []
214
190
  ].flat().join("\n\n")
@@ -219,24 +195,24 @@ ${message}`
219
195
  function configRoutesToRouteManifest(appDirectory, routes, rootId = "root") {
220
196
  let routeManifest = {};
221
197
  function walk(route, parentId) {
222
- let id = route.id || createRouteId(route.file);
198
+ let id2 = route.id || createRouteId(route.file);
223
199
  let manifestItem = {
224
- id,
200
+ id: id2,
225
201
  parentId,
226
202
  file: Path.isAbsolute(route.file) ? Path.relative(appDirectory, route.file) : route.file,
227
203
  path: route.path,
228
204
  index: route.index,
229
205
  caseSensitive: route.caseSensitive
230
206
  };
231
- if (routeManifest.hasOwnProperty(id)) {
207
+ if (routeManifest.hasOwnProperty(id2)) {
232
208
  throw new Error(
233
- `Unable to define routes with duplicate route id: "${id}"`
209
+ `Unable to define routes with duplicate route id: "${id2}"`
234
210
  );
235
211
  }
236
- routeManifest[id] = manifestItem;
212
+ routeManifest[id2] = manifestItem;
237
213
  if (route.children) {
238
214
  for (let child of route.children) {
239
- walk(child, id);
215
+ walk(child, id2);
240
216
  }
241
217
  }
242
218
  }
@@ -390,13 +366,13 @@ async function resolveConfig({
390
366
  "The `prerender` config must be a boolean, an array of string paths, or a function returning a boolean or array of string paths"
391
367
  );
392
368
  }
393
- let appDirectory = import_pathe3.default.resolve(root, userAppDirectory || "app");
394
- let buildDirectory = import_pathe3.default.resolve(root, userBuildDirectory);
369
+ let appDirectory = import_pathe.default.resolve(root, userAppDirectory || "app");
370
+ let buildDirectory = import_pathe.default.resolve(root, userBuildDirectory);
395
371
  let rootRouteFile = findEntry(appDirectory, "root");
396
372
  if (!rootRouteFile) {
397
- let rootRouteDisplayPath = import_pathe3.default.relative(
373
+ let rootRouteDisplayPath = import_pathe.default.relative(
398
374
  root,
399
- import_pathe3.default.join(appDirectory, "root.tsx")
375
+ import_pathe.default.join(appDirectory, "root.tsx")
400
376
  );
401
377
  return err(
402
378
  `Could not find a root route module in the app directory as "${rootRouteDisplayPath}"`
@@ -408,15 +384,15 @@ async function resolveConfig({
408
384
  let routeConfigFile = findEntry(appDirectory, "routes");
409
385
  try {
410
386
  if (!routeConfigFile) {
411
- let routeConfigDisplayPath = import_pathe3.default.relative(
387
+ let routeConfigDisplayPath = import_pathe.default.relative(
412
388
  root,
413
- import_pathe3.default.join(appDirectory, "routes.ts")
389
+ import_pathe.default.join(appDirectory, "routes.ts")
414
390
  );
415
391
  return err(`Route config file not found at "${routeConfigDisplayPath}".`);
416
392
  }
417
393
  setAppDirectory(appDirectory);
418
394
  let routeConfigExport = (await viteNodeContext.runner.executeFile(
419
- import_pathe3.default.join(appDirectory, routeConfigFile)
395
+ import_pathe.default.join(appDirectory, routeConfigFile)
420
396
  )).default;
421
397
  let routeConfig = await routeConfigExport;
422
398
  let result = validateRouteConfig({
@@ -436,7 +412,7 @@ async function resolveConfig({
436
412
  import_picocolors.default.red(`Route config in "${routeConfigFile}" is invalid.`),
437
413
  "",
438
414
  error.loc?.file && error.loc?.column && error.frame ? [
439
- import_pathe3.default.relative(appDirectory, error.loc.file) + ":" + error.loc.line + ":" + error.loc.column,
415
+ import_pathe.default.relative(appDirectory, error.loc.file) + ":" + error.loc.line + ":" + error.loc.column,
440
416
  error.frame.trim?.()
441
417
  ] : error.stack
442
418
  ].flat().join("\n")
@@ -508,8 +484,8 @@ async function createConfigLoader({
508
484
  );
509
485
  fsWatcher.on("all", async (...args) => {
510
486
  let [event, rawFilepath] = args;
511
- let filepath = import_pathe3.default.normalize(rawFilepath);
512
- let appFileAddedOrRemoved = appDirectory && (event === "add" || event === "unlink") && filepath.startsWith(import_pathe3.default.normalize(appDirectory));
487
+ let filepath = import_pathe.default.normalize(rawFilepath);
488
+ let appFileAddedOrRemoved = appDirectory && (event === "add" || event === "unlink") && filepath.startsWith(import_pathe.default.normalize(appDirectory));
513
489
  let configCodeUpdated = Boolean(
514
490
  viteNodeContext.devServer?.moduleGraph.getModuleById(filepath)
515
491
  );
@@ -555,8 +531,8 @@ async function resolveEntryFiles({
555
531
  reactRouterConfig
556
532
  }) {
557
533
  let { appDirectory } = reactRouterConfig;
558
- let defaultsDirectory = import_pathe3.default.resolve(
559
- import_pathe3.default.dirname(require.resolve("@react-router/dev/package.json")),
534
+ let defaultsDirectory = import_pathe.default.resolve(
535
+ import_pathe.default.dirname(require.resolve("@react-router/dev/package.json")),
560
536
  "dist",
561
537
  "config",
562
538
  "defaults"
@@ -594,11 +570,11 @@ async function resolveEntryFiles({
594
570
  }
595
571
  entryServerFile = `entry.server.node.tsx`;
596
572
  }
597
- let entryClientFilePath = userEntryClientFile ? import_pathe3.default.resolve(reactRouterConfig.appDirectory, userEntryClientFile) : import_pathe3.default.resolve(defaultsDirectory, entryClientFile);
598
- let entryServerFilePath = userEntryServerFile ? import_pathe3.default.resolve(reactRouterConfig.appDirectory, userEntryServerFile) : import_pathe3.default.resolve(defaultsDirectory, entryServerFile);
573
+ let entryClientFilePath = userEntryClientFile ? import_pathe.default.resolve(reactRouterConfig.appDirectory, userEntryClientFile) : import_pathe.default.resolve(defaultsDirectory, entryClientFile);
574
+ let entryServerFilePath = userEntryServerFile ? import_pathe.default.resolve(reactRouterConfig.appDirectory, userEntryServerFile) : import_pathe.default.resolve(defaultsDirectory, entryServerFile);
599
575
  return { entryClientFilePath, entryServerFilePath };
600
576
  }
601
- var ssrExternals = isReactRouterRepo() ? [
577
+ var ssrExternals = isInReactRouterMonorepo() ? [
602
578
  // This is only needed within this repo because these packages
603
579
  // are linked to a directory outside of node_modules so Vite
604
580
  // treats them as internal code by default.
@@ -611,12 +587,21 @@ var ssrExternals = isReactRouterRepo() ? [
611
587
  "@react-router/node",
612
588
  "@react-router/serve"
613
589
  ] : void 0;
590
+ function isInReactRouterMonorepo() {
591
+ let serverRuntimePath = import_pathe.default.dirname(
592
+ require.resolve("@react-router/node/package.json")
593
+ );
594
+ let serverRuntimeParentDir = import_pathe.default.basename(
595
+ import_pathe.default.resolve(serverRuntimePath, "..")
596
+ );
597
+ return serverRuntimeParentDir === "packages";
598
+ }
614
599
  var entryExts = [".js", ".jsx", ".ts", ".tsx"];
615
600
  function findEntry(dir, basename2, options) {
616
601
  for (let ext of entryExts) {
617
- let file = import_pathe3.default.resolve(dir, basename2 + ext);
602
+ let file = import_pathe.default.resolve(dir, basename2 + ext);
618
603
  if (import_node_fs.default.existsSync(file)) {
619
- return options?.absolute ?? false ? file : import_pathe3.default.relative(dir, file);
604
+ return options?.absolute ?? false ? file : import_pathe.default.relative(dir, file);
620
605
  }
621
606
  }
622
607
  return void 0;
@@ -692,6 +677,8 @@ function generate(ctx, route) {
692
677
  export type HeadersArgs = T.HeadersArgs
693
678
  export type HeadersFunction = (args: HeadersArgs) => Headers | HeadersInit
694
679
 
680
+ export type MiddlewareArgs = T.CreateServerMiddlewareArgs<Info>
681
+ export type ClientMiddlewareArgs = T.CreateClientMiddlewareArgs<Info>
695
682
  export type LoaderArgs = T.CreateServerLoaderArgs<Info>
696
683
  export type ClientLoaderArgs = T.CreateClientLoaderArgs<Info>
697
684
  export type ActionArgs = T.CreateServerActionArgs<Info>
@@ -703,7 +690,7 @@ function generate(ctx, route) {
703
690
  }
704
691
  `;
705
692
  }
706
- var noExtension = (path7) => Path3.join(Path3.dirname(path7), Pathe2.filename(path7));
693
+ var noExtension = (path5) => Path3.join(Path3.dirname(path5), Pathe2.filename(path5));
707
694
  function getRouteLineage(routes, route) {
708
695
  const result = [];
709
696
  while (route) {
@@ -827,7 +814,7 @@ function fromNodeRequest(nodeReq, nodeRes) {
827
814
  nodeReq.originalUrl,
828
815
  "Expected `nodeReq.originalUrl` to be defined"
829
816
  );
830
- let url2 = new URL(nodeReq.originalUrl, origin);
817
+ let url3 = new URL(nodeReq.originalUrl, origin);
831
818
  let controller = new AbortController();
832
819
  let init = {
833
820
  method: nodeReq.method,
@@ -840,7 +827,7 @@ function fromNodeRequest(nodeReq, nodeRes) {
840
827
  init.body = (0, import_node.createReadableStreamFromReadable)(nodeReq);
841
828
  init.duplex = "half";
842
829
  }
843
- return new Request(url2.href, init);
830
+ return new Request(url3.href, init);
844
831
  }
845
832
  async function toNodeRequest(res, nodeRes) {
846
833
  nodeRes.statusCode = res.status;
@@ -865,17 +852,17 @@ async function toNodeRequest(res, nodeRes) {
865
852
  }
866
853
 
867
854
  // vite/styles.ts
868
- var path5 = __toESM(require("path"));
855
+ var path3 = __toESM(require("path"));
869
856
  var import_react_router = require("react-router");
870
857
 
871
858
  // vite/resolve-file-url.ts
872
- var path4 = __toESM(require("path"));
859
+ var path2 = __toESM(require("path"));
873
860
  var resolveFileUrl = ({ rootDirectory }, filePath) => {
874
- let vite2 = getVite();
875
- let relativePath = path4.relative(rootDirectory, filePath);
876
- let isWithinRoot = !relativePath.startsWith("..") && !path4.isAbsolute(relativePath);
861
+ let vite2 = importViteEsmSync();
862
+ let relativePath = path2.relative(rootDirectory, filePath);
863
+ let isWithinRoot = !relativePath.startsWith("..") && !path2.isAbsolute(relativePath);
877
864
  if (!isWithinRoot) {
878
- return path4.posix.join("/@fs", vite2.normalizePath(filePath));
865
+ return path2.posix.join("/@fs", vite2.normalizePath(filePath));
879
866
  }
880
867
  return "/" + vite2.normalizePath(relativePath);
881
868
  };
@@ -886,8 +873,8 @@ var cssModulesRegExp = new RegExp(`\\.module${cssFileRegExp.source}`);
886
873
  var isCssFile = (file) => cssFileRegExp.test(file);
887
874
  var isCssModulesFile = (file) => cssModulesRegExp.test(file);
888
875
  var cssUrlParamsWithoutSideEffects = ["url", "inline", "raw", "inline-css"];
889
- var isCssUrlWithoutSideEffects = (url2) => {
890
- let queryString = url2.split("?")[1];
876
+ var isCssUrlWithoutSideEffects = (url3) => {
877
+ let queryString = url3.split("?")[1];
891
878
  if (!queryString) {
892
879
  return false;
893
880
  }
@@ -895,27 +882,24 @@ var isCssUrlWithoutSideEffects = (url2) => {
895
882
  for (let paramWithoutSideEffects of cssUrlParamsWithoutSideEffects) {
896
883
  if (
897
884
  // Parameter is blank and not explicitly set, i.e. "?url", not "?url="
898
- params.get(paramWithoutSideEffects) === "" && !url2.includes(`?${paramWithoutSideEffects}=`) && !url2.includes(`&${paramWithoutSideEffects}=`)
885
+ params.get(paramWithoutSideEffects) === "" && !url3.includes(`?${paramWithoutSideEffects}=`) && !url3.includes(`&${paramWithoutSideEffects}=`)
899
886
  ) {
900
887
  return true;
901
888
  }
902
889
  }
903
890
  return false;
904
891
  };
905
- var injectQuery = (url2, query) => url2.includes("?") ? url2.replace("?", `?${query}&`) : `${url2}?${query}`;
906
892
  var getStylesForFiles = async ({
907
893
  viteDevServer,
908
894
  rootDirectory,
909
895
  cssModulesManifest,
910
896
  files
911
897
  }) => {
912
- let vite2 = getVite();
913
- let viteMajor = parseInt(vite2.version.split(".")[0], 10);
914
898
  let styles = {};
915
899
  let deps = /* @__PURE__ */ new Set();
916
900
  try {
917
901
  for (let file of files) {
918
- let normalizedPath = path5.resolve(rootDirectory, file).replace(/\\/g, "/");
902
+ let normalizedPath = path3.resolve(rootDirectory, file).replace(/\\/g, "/");
919
903
  let node = await viteDevServer.moduleGraph.getModuleById(normalizedPath);
920
904
  if (!node) {
921
905
  try {
@@ -939,15 +923,7 @@ var getStylesForFiles = async ({
939
923
  for (let dep of deps) {
940
924
  if (dep.file && isCssFile(dep.file) && !isCssUrlWithoutSideEffects(dep.url)) {
941
925
  try {
942
- let css = isCssModulesFile(dep.file) ? cssModulesManifest[dep.file] : (await viteDevServer.ssrLoadModule(
943
- // We need the ?inline query in Vite v6 when loading CSS in SSR
944
- // since it does not expose the default export for CSS in a
945
- // server environment. This is to align with non-SSR
946
- // environments. For backwards compatibility with v5 we keep
947
- // using the URL without ?inline query because the HMR code was
948
- // relying on the implicit SSR-client module graph relationship.
949
- viteMajor >= 6 ? injectQuery(dep.url, "inline") : dep.url
950
- )).default;
926
+ let css = isCssModulesFile(dep.file) ? cssModulesManifest[dep.file] : (await viteDevServer.ssrLoadModule(dep.url)).default;
951
927
  if (css === void 0) {
952
928
  throw new Error();
953
929
  }
@@ -971,8 +947,8 @@ var findDeps = async (vite2, node, deps) => {
971
947
  await findDeps(vite2, node2, deps);
972
948
  }
973
949
  }
974
- async function addFromUrl(url2) {
975
- let node2 = await vite2.moduleGraph.getModuleByUrl(url2);
950
+ async function addFromUrl(url3) {
951
+ let node2 = await vite2.moduleGraph.getModuleByUrl(url3);
976
952
  if (node2) {
977
953
  await addFromNode(node2);
978
954
  }
@@ -980,7 +956,7 @@ var findDeps = async (vite2, node, deps) => {
980
956
  if (node.ssrTransformResult) {
981
957
  if (node.ssrTransformResult.deps) {
982
958
  node.ssrTransformResult.deps.forEach(
983
- (url2) => branches.push(addFromUrl(url2))
959
+ (url3) => branches.push(addFromUrl(url3))
984
960
  );
985
961
  }
986
962
  } else {
@@ -1014,15 +990,15 @@ var getStylesForUrl = async ({
1014
990
  entryClientFilePath,
1015
991
  cssModulesManifest,
1016
992
  build,
1017
- url: url2
993
+ url: url3
1018
994
  }) => {
1019
- if (url2 === void 0 || url2.includes("?_data=")) {
995
+ if (url3 === void 0 || url3.includes("?_data=")) {
1020
996
  return void 0;
1021
997
  }
1022
998
  let routes = createRoutes(build.routes);
1023
- let appPath = path5.relative(process.cwd(), reactRouterConfig.appDirectory);
1024
- let documentRouteFiles = (0, import_react_router.matchRoutes)(routes, url2, build.basename)?.map(
1025
- (match) => path5.resolve(appPath, reactRouterConfig.routes[match.route.id].file)
999
+ let appPath = path3.relative(process.cwd(), reactRouterConfig.appDirectory);
1000
+ let documentRouteFiles = (0, import_react_router.matchRoutes)(routes, url3, build.basename)?.map(
1001
+ (match) => path3.resolve(appPath, reactRouterConfig.routes[match.route.id].file)
1026
1002
  ) ?? [];
1027
1003
  let styles = await getStylesForFiles({
1028
1004
  viteDevServer,
@@ -1030,7 +1006,7 @@ var getStylesForUrl = async ({
1030
1006
  cssModulesManifest,
1031
1007
  files: [
1032
1008
  // Always include the client entry file when crawling the module graph for CSS
1033
- path5.relative(rootDirectory, entryClientFilePath),
1009
+ path3.relative(rootDirectory, entryClientFilePath),
1034
1010
  // Then include any styles from the matched routes
1035
1011
  ...documentRouteFiles
1036
1012
  ]
@@ -1038,15 +1014,10 @@ var getStylesForUrl = async ({
1038
1014
  return styles;
1039
1015
  };
1040
1016
 
1041
- // vite/virtual-module.ts
1042
- function create(name) {
1043
- let id = `virtual:react-router/${name}`;
1044
- return {
1045
- id,
1046
- resolvedId: `\0${id}`,
1047
- url: `/@id/__x00__${id}`
1048
- };
1049
- }
1017
+ // vite/vmod.ts
1018
+ var id = (name) => `virtual:react-router/${name}`;
1019
+ var resolve3 = (id2) => `\0${id2}`;
1020
+ var url = (id2) => `/@id/__x00__${id2}`;
1050
1021
 
1051
1022
  // vite/combine-urls.ts
1052
1023
  function combineURLs(baseURL, relativeURL) {
@@ -1060,10 +1031,10 @@ var removeExports = (ast, exportsToRemove) => {
1060
1031
  let exportsFiltered = false;
1061
1032
  let markedForRemoval = /* @__PURE__ */ new Set();
1062
1033
  traverse(ast, {
1063
- ExportDeclaration(path7) {
1064
- if (path7.node.type === "ExportNamedDeclaration") {
1065
- if (path7.node.specifiers.length) {
1066
- path7.node.specifiers = path7.node.specifiers.filter((specifier) => {
1034
+ ExportDeclaration(path5) {
1035
+ if (path5.node.type === "ExportNamedDeclaration") {
1036
+ if (path5.node.specifiers.length) {
1037
+ path5.node.specifiers = path5.node.specifiers.filter((specifier) => {
1067
1038
  if (specifier.type === "ExportSpecifier" && specifier.exported.type === "Identifier") {
1068
1039
  if (exportsToRemove.includes(specifier.exported.name)) {
1069
1040
  exportsFiltered = true;
@@ -1072,12 +1043,12 @@ var removeExports = (ast, exportsToRemove) => {
1072
1043
  }
1073
1044
  return true;
1074
1045
  });
1075
- if (path7.node.specifiers.length === 0) {
1076
- markedForRemoval.add(path7);
1046
+ if (path5.node.specifiers.length === 0) {
1047
+ markedForRemoval.add(path5);
1077
1048
  }
1078
1049
  }
1079
- if (path7.node.declaration?.type === "VariableDeclaration") {
1080
- let declaration = path7.node.declaration;
1050
+ if (path5.node.declaration?.type === "VariableDeclaration") {
1051
+ let declaration = path5.node.declaration;
1081
1052
  declaration.declarations = declaration.declarations.filter(
1082
1053
  (declaration2) => {
1083
1054
  if (declaration2.id.type === "Identifier" && exportsToRemove.includes(declaration2.id.name)) {
@@ -1091,37 +1062,37 @@ var removeExports = (ast, exportsToRemove) => {
1091
1062
  }
1092
1063
  );
1093
1064
  if (declaration.declarations.length === 0) {
1094
- markedForRemoval.add(path7);
1065
+ markedForRemoval.add(path5);
1095
1066
  }
1096
1067
  }
1097
- if (path7.node.declaration?.type === "FunctionDeclaration") {
1098
- let id = path7.node.declaration.id;
1099
- if (id && exportsToRemove.includes(id.name)) {
1100
- markedForRemoval.add(path7);
1068
+ if (path5.node.declaration?.type === "FunctionDeclaration") {
1069
+ let id2 = path5.node.declaration.id;
1070
+ if (id2 && exportsToRemove.includes(id2.name)) {
1071
+ markedForRemoval.add(path5);
1101
1072
  }
1102
1073
  }
1103
- if (path7.node.declaration?.type === "ClassDeclaration") {
1104
- let id = path7.node.declaration.id;
1105
- if (id && exportsToRemove.includes(id.name)) {
1106
- markedForRemoval.add(path7);
1074
+ if (path5.node.declaration?.type === "ClassDeclaration") {
1075
+ let id2 = path5.node.declaration.id;
1076
+ if (id2 && exportsToRemove.includes(id2.name)) {
1077
+ markedForRemoval.add(path5);
1107
1078
  }
1108
1079
  }
1109
1080
  }
1110
- if (path7.node.type === "ExportDefaultDeclaration" && exportsToRemove.includes("default")) {
1111
- markedForRemoval.add(path7);
1081
+ if (path5.node.type === "ExportDefaultDeclaration" && exportsToRemove.includes("default")) {
1082
+ markedForRemoval.add(path5);
1112
1083
  }
1113
1084
  }
1114
1085
  });
1115
1086
  if (markedForRemoval.size > 0 || exportsFiltered) {
1116
- for (let path7 of markedForRemoval) {
1117
- path7.remove();
1087
+ for (let path5 of markedForRemoval) {
1088
+ path5.remove();
1118
1089
  }
1119
1090
  (0, import_babel_dead_code_elimination.deadCodeElimination)(ast, previouslyReferencedIdentifiers);
1120
1091
  }
1121
1092
  };
1122
- function validateDestructuredExports(id, exportsToRemove) {
1123
- if (id.type === "ArrayPattern") {
1124
- for (let element of id.elements) {
1093
+ function validateDestructuredExports(id2, exportsToRemove) {
1094
+ if (id2.type === "ArrayPattern") {
1095
+ for (let element of id2.elements) {
1125
1096
  if (!element) {
1126
1097
  continue;
1127
1098
  }
@@ -1136,8 +1107,8 @@ function validateDestructuredExports(id, exportsToRemove) {
1136
1107
  }
1137
1108
  }
1138
1109
  }
1139
- if (id.type === "ObjectPattern") {
1140
- for (let property of id.properties) {
1110
+ if (id2.type === "ObjectPattern") {
1111
+ for (let property of id2.properties) {
1141
1112
  if (!property) {
1142
1113
  continue;
1143
1114
  }
@@ -1161,16 +1132,16 @@ function invalidDestructureError(name) {
1161
1132
 
1162
1133
  // vite/with-props.ts
1163
1134
  var import_dedent2 = __toESM(require("dedent"));
1164
- var vmod = create("with-props");
1135
+ var vmodId = id("with-props");
1165
1136
  var NAMED_COMPONENT_EXPORTS = ["HydrateFallback", "ErrorBoundary"];
1166
1137
  var plugin = {
1167
1138
  name: "react-router-with-props",
1168
1139
  enforce: "pre",
1169
- resolveId(id) {
1170
- if (id === vmod.id) return vmod.resolvedId;
1140
+ resolveId(id2) {
1141
+ if (id2 === vmodId) return resolve3(vmodId);
1171
1142
  },
1172
- async load(id) {
1173
- if (id !== vmod.resolvedId) return;
1143
+ async load(id2) {
1144
+ if (id2 !== resolve3(vmodId)) return;
1174
1145
  return import_dedent2.default`
1175
1146
  import { createElement as h } from "react";
1176
1147
  import { useActionData, useLoaderData, useMatches, useParams, useRouteError } from "react-router";
@@ -1212,44 +1183,44 @@ var plugin = {
1212
1183
  };
1213
1184
  var transform = (ast) => {
1214
1185
  const hocs = [];
1215
- function getHocUid(path7, hocName) {
1216
- const uid = path7.scope.generateUidIdentifier(hocName);
1186
+ function getHocUid(path5, hocName) {
1187
+ const uid = path5.scope.generateUidIdentifier(hocName);
1217
1188
  hocs.push([hocName, uid]);
1218
1189
  return uid;
1219
1190
  }
1220
1191
  traverse(ast, {
1221
- ExportDeclaration(path7) {
1222
- if (path7.isExportDefaultDeclaration()) {
1223
- const declaration = path7.get("declaration");
1192
+ ExportDeclaration(path5) {
1193
+ if (path5.isExportDefaultDeclaration()) {
1194
+ const declaration = path5.get("declaration");
1224
1195
  const expr = declaration.isExpression() ? declaration.node : declaration.isFunctionDeclaration() ? toFunctionExpression(declaration.node) : void 0;
1225
1196
  if (expr) {
1226
- const uid = getHocUid(path7, "withComponentProps");
1197
+ const uid = getHocUid(path5, "withComponentProps");
1227
1198
  declaration.replaceWith(t.callExpression(uid, [expr]));
1228
1199
  }
1229
1200
  return;
1230
1201
  }
1231
- if (path7.isExportNamedDeclaration()) {
1232
- const decl = path7.get("declaration");
1202
+ if (path5.isExportNamedDeclaration()) {
1203
+ const decl = path5.get("declaration");
1233
1204
  if (decl.isVariableDeclaration()) {
1234
1205
  decl.get("declarations").forEach((varDeclarator) => {
1235
- const id = varDeclarator.get("id");
1206
+ const id2 = varDeclarator.get("id");
1236
1207
  const init = varDeclarator.get("init");
1237
1208
  const expr = init.node;
1238
1209
  if (!expr) return;
1239
- if (!id.isIdentifier()) return;
1240
- const { name } = id.node;
1210
+ if (!id2.isIdentifier()) return;
1211
+ const { name } = id2.node;
1241
1212
  if (!NAMED_COMPONENT_EXPORTS.includes(name)) return;
1242
- const uid = getHocUid(path7, `with${name}Props`);
1213
+ const uid = getHocUid(path5, `with${name}Props`);
1243
1214
  init.replaceWith(t.callExpression(uid, [expr]));
1244
1215
  });
1245
1216
  return;
1246
1217
  }
1247
1218
  if (decl.isFunctionDeclaration()) {
1248
- const { id } = decl.node;
1249
- if (!id) return;
1250
- const { name } = id;
1219
+ const { id: id2 } = decl.node;
1220
+ if (!id2) return;
1221
+ const { name } = id2;
1251
1222
  if (!NAMED_COMPONENT_EXPORTS.includes(name)) return;
1252
- const uid = getHocUid(path7, `with${name}Props`);
1223
+ const uid = getHocUid(path5, `with${name}Props`);
1253
1224
  decl.replaceWith(
1254
1225
  t.variableDeclaration("const", [
1255
1226
  t.variableDeclarator(
@@ -1268,7 +1239,7 @@ var transform = (ast) => {
1268
1239
  hocs.map(
1269
1240
  ([name, identifier]) => t.importSpecifier(identifier, t.identifier(name))
1270
1241
  ),
1271
- t.stringLiteral(vmod.id)
1242
+ t.stringLiteral(vmodId)
1272
1243
  )
1273
1244
  );
1274
1245
  }
@@ -1284,10 +1255,11 @@ function toFunctionExpression(decl) {
1284
1255
  }
1285
1256
 
1286
1257
  // vite/plugin.ts
1287
- var SERVER_ONLY_ROUTE_EXPORTS = ["loader", "action", "headers"];
1258
+ var SERVER_ONLY_ROUTE_EXPORTS = ["loader", "action", "middleware", "headers"];
1288
1259
  var CLIENT_ROUTE_EXPORTS = [
1289
1260
  "clientAction",
1290
1261
  "clientLoader",
1262
+ "clientMiddleware",
1291
1263
  "default",
1292
1264
  "ErrorBoundary",
1293
1265
  "handle",
@@ -1297,23 +1269,27 @@ var CLIENT_ROUTE_EXPORTS = [
1297
1269
  "meta",
1298
1270
  "shouldRevalidate"
1299
1271
  ];
1300
- var BUILD_CLIENT_ROUTE_QUERY_STRING = "?__react-router-build-client-route";
1301
- var virtualHmrRuntime = create("hmr-runtime");
1302
- var virtualInjectHmrRuntime = create("inject-hmr-runtime");
1272
+ var ROUTE_ENTRY_QUERY_STRING = "?route-entry=1";
1273
+ var isRouteEntry = (id2) => {
1274
+ return id2.endsWith(ROUTE_ENTRY_QUERY_STRING);
1275
+ };
1276
+ var serverBuildId = id("server-build");
1277
+ var serverManifestId = id("server-manifest");
1278
+ var browserManifestId = id("browser-manifest");
1279
+ var hmrRuntimeId = id("hmr-runtime");
1280
+ var injectHmrRuntimeId = id("inject-hmr-runtime");
1303
1281
  var resolveRelativeRouteFilePath = (route, reactRouterConfig) => {
1304
- let vite2 = getVite();
1282
+ let vite2 = importViteEsmSync();
1305
1283
  let file = route.file;
1306
- let fullPath = path6.resolve(reactRouterConfig.appDirectory, file);
1284
+ let fullPath = path4.resolve(reactRouterConfig.appDirectory, file);
1307
1285
  return vite2.normalizePath(fullPath);
1308
1286
  };
1309
- var virtual = {
1310
- serverBuild: create("server-build"),
1311
- serverManifest: create("server-manifest"),
1312
- browserManifest: create("browser-manifest")
1313
- };
1287
+ var vmods = [serverBuildId, serverManifestId, browserManifestId];
1314
1288
  var invalidateVirtualModules = (viteDevServer) => {
1315
- Object.values(virtual).forEach((vmod2) => {
1316
- let mod = viteDevServer.moduleGraph.getModuleById(vmod2.resolvedId);
1289
+ vmods.forEach((vmod) => {
1290
+ let mod = viteDevServer.moduleGraph.getModuleById(
1291
+ resolve3(vmod)
1292
+ );
1317
1293
  if (mod) {
1318
1294
  viteDevServer.moduleGraph.invalidateModule(mod);
1319
1295
  }
@@ -1324,11 +1300,11 @@ var getHash = (source, maxLength) => {
1324
1300
  return typeof maxLength === "number" ? hash.slice(0, maxLength) : hash;
1325
1301
  };
1326
1302
  var resolveChunk = (ctx, viteManifest, absoluteFilePath) => {
1327
- let vite2 = getVite();
1303
+ let vite2 = importViteEsmSync();
1328
1304
  let rootRelativeFilePath = vite2.normalizePath(
1329
- path6.relative(ctx.rootDirectory, absoluteFilePath)
1305
+ path4.relative(ctx.rootDirectory, absoluteFilePath)
1330
1306
  );
1331
- let entryChunk = viteManifest[rootRelativeFilePath + BUILD_CLIENT_ROUTE_QUERY_STRING] ?? viteManifest[rootRelativeFilePath];
1307
+ let entryChunk = viteManifest[rootRelativeFilePath + ROUTE_ENTRY_QUERY_STRING] ?? viteManifest[rootRelativeFilePath];
1332
1308
  if (!entryChunk) {
1333
1309
  let knownManifestKeys = Object.keys(viteManifest).map((key) => '"' + key + '"').join(", ");
1334
1310
  throw new Error(
@@ -1378,7 +1354,7 @@ function dedupe(array2) {
1378
1354
  return [...new Set(array2)];
1379
1355
  }
1380
1356
  var writeFileSafe = async (file, contents) => {
1381
- await fse.ensureDir(path6.dirname(file));
1357
+ await fse.ensureDir(path4.dirname(file));
1382
1358
  await fse.writeFile(file, contents);
1383
1359
  };
1384
1360
  var getRouteManifestModuleExports = async (viteChildCompiler, ctx) => {
@@ -1400,20 +1376,20 @@ var getRouteModuleExports = async (viteChildCompiler, ctx, routeFile, readRouteF
1400
1376
  }
1401
1377
  let ssr = true;
1402
1378
  let { pluginContainer, moduleGraph } = viteChildCompiler;
1403
- let routePath = path6.resolve(ctx.reactRouterConfig.appDirectory, routeFile);
1404
- let url2 = resolveFileUrl(ctx, routePath);
1379
+ let routePath = path4.resolve(ctx.reactRouterConfig.appDirectory, routeFile);
1380
+ let url3 = resolveFileUrl(ctx, routePath);
1405
1381
  let resolveId = async () => {
1406
- let result = await pluginContainer.resolveId(url2, void 0, { ssr });
1407
- if (!result) throw new Error(`Could not resolve module ID for ${url2}`);
1382
+ let result = await pluginContainer.resolveId(url3, void 0, { ssr });
1383
+ if (!result) throw new Error(`Could not resolve module ID for ${url3}`);
1408
1384
  return result.id;
1409
1385
  };
1410
- let [id, code] = await Promise.all([
1386
+ let [id2, code] = await Promise.all([
1411
1387
  resolveId(),
1412
1388
  readRouteFile?.() ?? fse.readFile(routePath, "utf-8"),
1413
1389
  // pluginContainer.transform(...) fails if we don't do this first:
1414
- moduleGraph.ensureEntryFromUrl(url2, ssr)
1390
+ moduleGraph.ensureEntryFromUrl(url3, ssr)
1415
1391
  ]);
1416
- let transformed = await pluginContainer.transform(code, id, { ssr });
1392
+ let transformed = await pluginContainer.transform(code, id2, { ssr });
1417
1393
  let [, exports2] = (0, import_es_module_lexer.parse)(transformed.code);
1418
1394
  let exportNames = exports2.map((e) => e.n);
1419
1395
  return exportNames;
@@ -1424,19 +1400,19 @@ var getServerBundleBuildConfig = (viteUserConfig) => {
1424
1400
  }
1425
1401
  return viteUserConfig.__reactRouterServerBundleBuildConfig;
1426
1402
  };
1427
- var getServerBuildDirectory = (ctx) => path6.join(
1403
+ var getServerBuildDirectory = (ctx) => path4.join(
1428
1404
  ctx.reactRouterConfig.buildDirectory,
1429
1405
  "server",
1430
1406
  ...ctx.serverBundleBuildConfig ? [ctx.serverBundleBuildConfig.serverBundleId] : []
1431
1407
  );
1432
- var getClientBuildDirectory = (reactRouterConfig) => path6.join(reactRouterConfig.buildDirectory, "client");
1433
- var defaultEntriesDir = path6.resolve(
1434
- path6.dirname(require.resolve("@react-router/dev/package.json")),
1408
+ var getClientBuildDirectory = (reactRouterConfig) => path4.join(reactRouterConfig.buildDirectory, "client");
1409
+ var defaultEntriesDir = path4.resolve(
1410
+ path4.dirname(require.resolve("@react-router/dev/package.json")),
1435
1411
  "dist",
1436
1412
  "config",
1437
1413
  "defaults"
1438
1414
  );
1439
- var defaultEntries = fse.readdirSync(defaultEntriesDir).map((filename3) => path6.join(defaultEntriesDir, filename3));
1415
+ var defaultEntries = fse.readdirSync(defaultEntriesDir).map((filename3) => path4.join(defaultEntriesDir, filename3));
1440
1416
  invariant(defaultEntries.length > 0, "No default entries found");
1441
1417
  var reactRouterDevLoadContext = () => ({});
1442
1418
  var reactRouterVitePlugin = () => {
@@ -1518,14 +1494,12 @@ var reactRouterVitePlugin = () => {
1518
1494
  resolveFileUrl(
1519
1495
  ctx,
1520
1496
  resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
1521
- )
1497
+ ) + ROUTE_ENTRY_QUERY_STRING
1522
1498
  )};`;
1523
1499
  }).join("\n")}
1524
- export { default as assets } from ${JSON.stringify(
1525
- virtual.serverManifest.id
1526
- )};
1500
+ export { default as assets } from ${JSON.stringify(serverManifestId)};
1527
1501
  export const assetsBuildDirectory = ${JSON.stringify(
1528
- path6.relative(
1502
+ path4.relative(
1529
1503
  ctx.rootDirectory,
1530
1504
  getClientBuildDirectory(ctx.reactRouterConfig)
1531
1505
  )
@@ -1551,7 +1525,7 @@ var reactRouterVitePlugin = () => {
1551
1525
  };
1552
1526
  let loadViteManifest = async (directory) => {
1553
1527
  let manifestContents = await fse.readFile(
1554
- path6.resolve(directory, ".vite", "manifest.json"),
1528
+ path4.resolve(directory, ".vite", "manifest.json"),
1555
1529
  "utf-8"
1556
1530
  );
1557
1531
  return JSON.parse(manifestContents);
@@ -1587,7 +1561,7 @@ var reactRouterVitePlugin = () => {
1587
1561
  ctx
1588
1562
  );
1589
1563
  for (let [key, route] of Object.entries(ctx.reactRouterConfig.routes)) {
1590
- let routeFilePath = path6.join(
1564
+ let routeFilePath = path4.join(
1591
1565
  ctx.reactRouterConfig.appDirectory,
1592
1566
  route.file
1593
1567
  );
@@ -1622,18 +1596,18 @@ var reactRouterVitePlugin = () => {
1622
1596
  }
1623
1597
  let fingerprintedValues = { entry, routes: browserRoutes };
1624
1598
  let version = getHash(JSON.stringify(fingerprintedValues), 8);
1625
- let manifestPath = path6.posix.join(
1599
+ let manifestPath = path4.posix.join(
1626
1600
  viteConfig.build.assetsDir,
1627
1601
  `manifest-${version}.js`
1628
1602
  );
1629
- let url2 = `${ctx.publicPath}${manifestPath}`;
1630
- let nonFingerprintedValues = { url: url2, version };
1603
+ let url3 = `${ctx.publicPath}${manifestPath}`;
1604
+ let nonFingerprintedValues = { url: url3, version };
1631
1605
  let reactRouterBrowserManifest = {
1632
1606
  ...fingerprintedValues,
1633
1607
  ...nonFingerprintedValues
1634
1608
  };
1635
1609
  await writeFileSafe(
1636
- path6.join(getClientBuildDirectory(ctx.reactRouterConfig), manifestPath),
1610
+ path4.join(getClientBuildDirectory(ctx.reactRouterConfig), manifestPath),
1637
1611
  `window.__reactRouterManifest=${JSON.stringify(
1638
1612
  reactRouterBrowserManifest
1639
1613
  )};`
@@ -1663,10 +1637,10 @@ var reactRouterVitePlugin = () => {
1663
1637
  caseSensitive: route.caseSensitive,
1664
1638
  module: combineURLs(
1665
1639
  ctx.publicPath,
1666
- resolveFileUrl(
1640
+ `${resolveFileUrl(
1667
1641
  ctx,
1668
1642
  resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
1669
- )
1643
+ )}${ROUTE_ENTRY_QUERY_STRING}`
1670
1644
  ),
1671
1645
  hasAction: sourceExports.includes("action"),
1672
1646
  hasLoader: sourceExports.includes("loader"),
@@ -1678,9 +1652,12 @@ var reactRouterVitePlugin = () => {
1678
1652
  }
1679
1653
  return {
1680
1654
  version: String(Math.random()),
1681
- url: combineURLs(ctx.publicPath, virtual.browserManifest.url),
1655
+ url: combineURLs(ctx.publicPath, url(browserManifestId)),
1682
1656
  hmr: {
1683
- runtime: combineURLs(ctx.publicPath, virtualInjectHmrRuntime.url)
1657
+ runtime: combineURLs(
1658
+ ctx.publicPath,
1659
+ url(injectHmrRuntimeId)
1660
+ )
1684
1661
  },
1685
1662
  entry: {
1686
1663
  module: combineURLs(
@@ -1696,22 +1673,11 @@ var reactRouterVitePlugin = () => {
1696
1673
  {
1697
1674
  name: "react-router",
1698
1675
  config: async (_viteUserConfig, _viteConfigEnv) => {
1699
- await preloadVite();
1700
- let vite2 = getVite();
1676
+ await preloadViteEsm();
1677
+ let vite2 = importViteEsmSync();
1701
1678
  viteUserConfig = _viteUserConfig;
1702
1679
  viteConfigEnv = _viteConfigEnv;
1703
1680
  viteCommand = viteConfigEnv.command;
1704
- let viteClientConditions = [
1705
- ...vite2.defaultClientConditions ?? []
1706
- ];
1707
- let packageRoot = path6.dirname(
1708
- require.resolve("@react-router/dev/package.json")
1709
- );
1710
- let { moduleSyncEnabled } = await import(`file:///${path6.join(packageRoot, "module-sync-enabled/index.mjs")}`);
1711
- let viteServerConditions = [
1712
- ...vite2.defaultServerConditions ?? [],
1713
- ...moduleSyncEnabled ? ["module-sync"] : []
1714
- ];
1715
1681
  logger = vite2.createLogger(viteUserConfig.logLevel, {
1716
1682
  prefix: "[react-router]"
1717
1683
  });
@@ -1761,15 +1727,15 @@ var reactRouterVitePlugin = () => {
1761
1727
  ssr: {
1762
1728
  external: ssrExternals,
1763
1729
  resolve: {
1764
- conditions: viteCommand === "build" ? viteServerConditions : ["development", ...viteServerConditions],
1765
- externalConditions: viteCommand === "build" ? viteServerConditions : ["development", ...viteServerConditions]
1730
+ conditions: viteCommand === "build" ? [] : ["development"],
1731
+ externalConditions: viteCommand === "build" ? [] : ["development"]
1766
1732
  }
1767
1733
  },
1768
1734
  optimizeDeps: {
1769
1735
  entries: ctx.reactRouterConfig.future.unstable_optimizeDeps ? [
1770
1736
  ctx.entryClientFilePath,
1771
1737
  ...Object.values(ctx.reactRouterConfig.routes).map(
1772
- (route) => path6.join(ctx.reactRouterConfig.appDirectory, route.file)
1738
+ (route) => path4.join(ctx.reactRouterConfig.appDirectory, route.file)
1773
1739
  )
1774
1740
  ] : [],
1775
1741
  include: [
@@ -1803,7 +1769,7 @@ var reactRouterVitePlugin = () => {
1803
1769
  "react-router/dom",
1804
1770
  "react-router-dom"
1805
1771
  ],
1806
- conditions: viteCommand === "build" ? viteClientConditions : ["development", ...viteClientConditions]
1772
+ conditions: viteCommand === "build" ? [] : ["development"]
1807
1773
  },
1808
1774
  base: viteUserConfig.base,
1809
1775
  // When consumer provides an allow list for files that can be read by
@@ -1825,10 +1791,10 @@ var reactRouterVitePlugin = () => {
1825
1791
  input: [
1826
1792
  ctx.entryClientFilePath,
1827
1793
  ...Object.values(ctx.reactRouterConfig.routes).map(
1828
- (route) => `${path6.resolve(
1794
+ (route) => `${path4.resolve(
1829
1795
  ctx.reactRouterConfig.appDirectory,
1830
1796
  route.file
1831
- )}${BUILD_CLIENT_ROUTE_QUERY_STRING}`
1797
+ )}${ROUTE_ENTRY_QUERY_STRING}`
1832
1798
  )
1833
1799
  ]
1834
1800
  }
@@ -1847,7 +1813,7 @@ var reactRouterVitePlugin = () => {
1847
1813
  rollupOptions: {
1848
1814
  ...baseRollupOptions,
1849
1815
  preserveEntrySignatures: "exports-only",
1850
- input: viteUserConfig.build?.rollupOptions?.input ?? virtual.serverBuild.id,
1816
+ input: viteUserConfig.build?.rollupOptions?.input ?? serverBuildId,
1851
1817
  output: {
1852
1818
  entryFileNames: ctx.reactRouterConfig.serverBuildFile,
1853
1819
  format: ctx.reactRouterConfig.serverModuleFormat
@@ -1874,7 +1840,7 @@ var reactRouterVitePlugin = () => {
1874
1840
  "The React Router Vite plugin requires the use of a Vite config file"
1875
1841
  );
1876
1842
  }
1877
- let vite2 = getVite();
1843
+ let vite2 = importViteEsmSync();
1878
1844
  let childCompilerConfigFile = await vite2.loadConfigFromFile(
1879
1845
  {
1880
1846
  command: viteConfig.command,
@@ -1910,15 +1876,15 @@ var reactRouterVitePlugin = () => {
1910
1876
  envFile: false,
1911
1877
  plugins: [
1912
1878
  ...(childCompilerConfigFile.config.plugins ?? []).flat().filter(
1913
- (plugin2) => typeof plugin2 === "object" && plugin2 !== null && "name" in plugin2 && plugin2.name !== "react-router" && plugin2.name !== "react-router:route-exports" && plugin2.name !== "react-router:hmr-updates"
1879
+ (plugin2) => typeof plugin2 === "object" && plugin2 !== null && "name" in plugin2 && plugin2.name !== "react-router" && plugin2.name !== "react-router-route-exports" && plugin2.name !== "react-router-hmr-updates"
1914
1880
  )
1915
1881
  ]
1916
1882
  });
1917
1883
  await viteChildCompiler.pluginContainer.buildStart({});
1918
1884
  },
1919
- async transform(code, id) {
1920
- if (isCssModulesFile(id)) {
1921
- cssModulesManifest[id] = code;
1885
+ async transform(code, id2) {
1886
+ if (isCssModulesFile(id2)) {
1887
+ cssModulesManifest[id2] = code;
1922
1888
  }
1923
1889
  },
1924
1890
  buildStart() {
@@ -1942,7 +1908,7 @@ var reactRouterVitePlugin = () => {
1942
1908
  (0, import_react_router2.unstable_setDevServerHooks)({
1943
1909
  // Give the request handler access to the critical CSS in dev to avoid a
1944
1910
  // flash of unstyled content since Vite injects CSS file contents via JS
1945
- getCriticalCss: async (build, url2) => {
1911
+ getCriticalCss: async (build, url3) => {
1946
1912
  return getStylesForUrl({
1947
1913
  rootDirectory: ctx.rootDirectory,
1948
1914
  entryClientFilePath: ctx.entryClientFilePath,
@@ -1950,7 +1916,7 @@ var reactRouterVitePlugin = () => {
1950
1916
  viteDevServer,
1951
1917
  cssModulesManifest,
1952
1918
  build,
1953
- url: url2
1919
+ url: url3
1954
1920
  });
1955
1921
  },
1956
1922
  // If an error is caught within the request handler, let Vite fix the
@@ -1998,7 +1964,7 @@ var reactRouterVitePlugin = () => {
1998
1964
  viteDevServer.middlewares.use(async (req, res, next) => {
1999
1965
  try {
2000
1966
  let build = await viteDevServer.ssrLoadModule(
2001
- virtual.serverBuild.id
1967
+ serverBuildId
2002
1968
  );
2003
1969
  let handler = (0, import_react_router2.createRequestHandler)(build, "development");
2004
1970
  let nodeHandler = async (nodeReq, nodeRes) => {
@@ -2033,8 +1999,8 @@ var reactRouterVitePlugin = () => {
2033
1999
  let ssrAssetPaths = getViteManifestAssetPaths(ssrViteManifest);
2034
2000
  let movedAssetPaths = [];
2035
2001
  for (let ssrAssetPath of ssrAssetPaths) {
2036
- let src = path6.join(serverBuildDirectory, ssrAssetPath);
2037
- let dest = path6.join(clientBuildDirectory, ssrAssetPath);
2002
+ let src = path4.join(serverBuildDirectory, ssrAssetPath);
2003
+ let dest = path4.join(clientBuildDirectory, ssrAssetPath);
2038
2004
  if (!fse.existsSync(dest)) {
2039
2005
  await fse.move(src, dest);
2040
2006
  movedAssetPaths.push(dest);
@@ -2047,7 +2013,7 @@ var reactRouterVitePlugin = () => {
2047
2013
  );
2048
2014
  await Promise.all(
2049
2015
  ssrCssPaths.map(
2050
- (cssPath) => fse.remove(path6.join(serverBuildDirectory, cssPath))
2016
+ (cssPath) => fse.remove(path4.join(serverBuildDirectory, cssPath))
2051
2017
  )
2052
2018
  );
2053
2019
  if (movedAssetPaths.length) {
@@ -2056,7 +2022,7 @@ var reactRouterVitePlugin = () => {
2056
2022
  "",
2057
2023
  `${import_picocolors3.default.green("\u2713")} ${movedAssetPaths.length} asset${movedAssetPaths.length > 1 ? "s" : ""} moved from React Router server build to client assets.`,
2058
2024
  ...movedAssetPaths.map(
2059
- (movedAssetPath) => import_picocolors3.default.dim(path6.relative(ctx.rootDirectory, movedAssetPath))
2025
+ (movedAssetPath) => import_picocolors3.default.dim(path4.relative(ctx.rootDirectory, movedAssetPath))
2060
2026
  ),
2061
2027
  ""
2062
2028
  ].join("\n")
@@ -2098,12 +2064,12 @@ var reactRouterVitePlugin = () => {
2098
2064
  }
2099
2065
  },
2100
2066
  {
2101
- name: "react-router:build-client-route",
2067
+ name: "react-router-route-entry",
2102
2068
  enforce: "pre",
2103
- async transform(_code, id, options) {
2104
- if (!id.endsWith(BUILD_CLIENT_ROUTE_QUERY_STRING)) return;
2105
- let routeModuleId = id.replace(BUILD_CLIENT_ROUTE_QUERY_STRING, "");
2106
- let routeFileName = path6.basename(routeModuleId);
2069
+ async transform(_code, id2, options) {
2070
+ if (!isRouteEntry(id2)) return;
2071
+ let routeModuleId = id2.replace(ROUTE_ENTRY_QUERY_STRING, "");
2072
+ let routeFileName = path4.basename(routeModuleId);
2107
2073
  let sourceExports = await getRouteModuleExports(
2108
2074
  viteChildCompiler,
2109
2075
  ctx,
@@ -2116,24 +2082,23 @@ var reactRouterVitePlugin = () => {
2116
2082
  }
2117
2083
  },
2118
2084
  {
2119
- name: "react-router:virtual-modules",
2085
+ name: "react-router-virtual-modules",
2120
2086
  enforce: "pre",
2121
- resolveId(id) {
2122
- const vmod2 = Object.values(virtual).find((vmod3) => vmod3.id === id);
2123
- if (vmod2) return vmod2.resolvedId;
2087
+ resolveId(id2) {
2088
+ if (vmods.includes(id2)) return resolve3(id2);
2124
2089
  },
2125
- async load(id) {
2126
- switch (id) {
2127
- case virtual.serverBuild.resolvedId: {
2090
+ async load(id2) {
2091
+ switch (id2) {
2092
+ case resolve3(serverBuildId): {
2128
2093
  return await getServerEntry();
2129
2094
  }
2130
- case virtual.serverManifest.resolvedId: {
2095
+ case resolve3(serverManifestId): {
2131
2096
  let reactRouterManifest = ctx.isSsrBuild ? await ctx.getReactRouterServerManifest() : await getReactRouterManifestForDev();
2132
2097
  return `export default ${(0, import_jsesc.default)(reactRouterManifest, {
2133
2098
  es6: true
2134
2099
  })};`;
2135
2100
  }
2136
- case virtual.browserManifest.resolvedId: {
2101
+ case resolve3(browserManifestId): {
2137
2102
  if (viteCommand === "build") {
2138
2103
  throw new Error("This module only exists in development");
2139
2104
  }
@@ -2147,15 +2112,15 @@ var reactRouterVitePlugin = () => {
2147
2112
  }
2148
2113
  },
2149
2114
  {
2150
- name: "react-router:dot-server",
2115
+ name: "react-router-dot-server",
2151
2116
  enforce: "pre",
2152
- async resolveId(id, importer, options) {
2117
+ async resolveId(id2, importer, options) {
2153
2118
  let isOptimizeDeps = viteCommand === "serve" && options?.scan === true;
2154
2119
  if (isOptimizeDeps || options?.ssr) return;
2155
- let isResolving = options?.custom?.["react-router:dot-server"] ?? false;
2120
+ let isResolving = options?.custom?.["react-router-dot-server"] ?? false;
2156
2121
  if (isResolving) return;
2157
- options.custom = { ...options.custom, "react-router:dot-server": true };
2158
- let resolved = await this.resolve(id, importer, options);
2122
+ options.custom = { ...options.custom, "react-router-dot-server": true };
2123
+ let resolved = await this.resolve(id2, importer, options);
2159
2124
  if (!resolved) return;
2160
2125
  let serverFileRE = /\.server(\.[cm]?[jt]sx?)?$/;
2161
2126
  let serverDirRE = /\/\.server\//;
@@ -2165,9 +2130,9 @@ var reactRouterVitePlugin = () => {
2165
2130
  if (viteCommand !== "build" && importer.endsWith(".html")) {
2166
2131
  return;
2167
2132
  }
2168
- let vite2 = getVite();
2133
+ let vite2 = importViteEsmSync();
2169
2134
  let importerShort = vite2.normalizePath(
2170
- path6.relative(ctx.rootDirectory, importer)
2135
+ path4.relative(ctx.rootDirectory, importer)
2171
2136
  );
2172
2137
  let isRoute = getRoute(ctx.reactRouterConfig, importer);
2173
2138
  if (isRoute) {
@@ -2178,12 +2143,12 @@ var reactRouterVitePlugin = () => {
2178
2143
  [
2179
2144
  import_picocolors3.default.red(`Server-only module referenced by client`),
2180
2145
  "",
2181
- ` '${id}' imported by route '${importerShort}'`,
2146
+ ` '${id2}' imported by route '${importerShort}'`,
2182
2147
  "",
2183
2148
  ` React Router automatically removes server-code from these exports:`,
2184
2149
  ` ${serverOnlyExports}`,
2185
2150
  "",
2186
- ` But other route exports in '${importerShort}' depend on '${id}'.`,
2151
+ ` But other route exports in '${importerShort}' depend on '${id2}'.`,
2187
2152
  "",
2188
2153
  " See https://remix.run/docs/en/main/guides/vite#splitting-up-client-and-server-code",
2189
2154
  ""
@@ -2194,7 +2159,7 @@ var reactRouterVitePlugin = () => {
2194
2159
  [
2195
2160
  import_picocolors3.default.red(`Server-only module referenced by client`),
2196
2161
  "",
2197
- ` '${id}' imported by '${importerShort}'`,
2162
+ ` '${id2}' imported by '${importerShort}'`,
2198
2163
  "",
2199
2164
  " See https://remix.run/docs/en/main/guides/vite#splitting-up-client-and-server-code",
2200
2165
  ""
@@ -2203,12 +2168,12 @@ var reactRouterVitePlugin = () => {
2203
2168
  }
2204
2169
  },
2205
2170
  {
2206
- name: "react-router:dot-client",
2207
- async transform(code, id, options) {
2171
+ name: "react-router-dot-client",
2172
+ async transform(code, id2, options) {
2208
2173
  if (!options?.ssr) return;
2209
2174
  let clientFileRE = /\.client(\.[cm]?[jt]sx?)?$/;
2210
2175
  let clientDirRE = /\/\.client\//;
2211
- if (clientFileRE.test(id) || clientDirRE.test(id)) {
2176
+ if (clientFileRE.test(id2) || clientDirRE.test(id2)) {
2212
2177
  let exports2 = (0, import_es_module_lexer.parse)(code)[1];
2213
2178
  return {
2214
2179
  code: exports2.map(
@@ -2221,9 +2186,9 @@ var reactRouterVitePlugin = () => {
2221
2186
  },
2222
2187
  plugin,
2223
2188
  {
2224
- name: "react-router:route-exports",
2225
- async transform(code, id, options) {
2226
- let route = getRoute(ctx.reactRouterConfig, id);
2189
+ name: "react-router-route-exports",
2190
+ async transform(code, id2, options) {
2191
+ let route = getRoute(ctx.reactRouterConfig, id2);
2227
2192
  if (!route) return;
2228
2193
  if (!options?.ssr && !ctx.reactRouterConfig.ssr) {
2229
2194
  let serverOnlyExports = (0, import_es_module_lexer.parse)(code)[1].map((exp) => exp.n).filter((exp) => SERVER_ONLY_ROUTE_EXPORTS.includes(exp));
@@ -2240,7 +2205,7 @@ var reactRouterVitePlugin = () => {
2240
2205
  }
2241
2206
  }
2242
2207
  }
2243
- let [filepath] = id.split("?");
2208
+ let [filepath] = id2.split("?");
2244
2209
  let ast = (0, import_parser.parse)(code, { sourceType: "module" });
2245
2210
  if (!options?.ssr) {
2246
2211
  removeExports(ast, SERVER_ONLY_ROUTE_EXPORTS);
@@ -2248,23 +2213,22 @@ var reactRouterVitePlugin = () => {
2248
2213
  transform(ast);
2249
2214
  return generate2(ast, {
2250
2215
  sourceMaps: true,
2251
- filename: id,
2216
+ filename: id2,
2252
2217
  sourceFileName: filepath
2253
2218
  });
2254
2219
  }
2255
2220
  },
2256
2221
  {
2257
- name: "react-router:inject-hmr-runtime",
2222
+ name: "react-router-inject-hmr-runtime",
2258
2223
  enforce: "pre",
2259
- resolveId(id) {
2260
- if (id === virtualInjectHmrRuntime.id) {
2261
- return virtualInjectHmrRuntime.resolvedId;
2262
- }
2224
+ resolveId(id2) {
2225
+ if (id2 === injectHmrRuntimeId)
2226
+ return resolve3(injectHmrRuntimeId);
2263
2227
  },
2264
- async load(id) {
2265
- if (id !== virtualInjectHmrRuntime.resolvedId) return;
2228
+ async load(id2) {
2229
+ if (id2 !== resolve3(injectHmrRuntimeId)) return;
2266
2230
  return [
2267
- `import RefreshRuntime from "${virtualHmrRuntime.id}"`,
2231
+ `import RefreshRuntime from "${hmrRuntimeId}"`,
2268
2232
  "RefreshRuntime.injectIntoGlobalHook(window)",
2269
2233
  "window.$RefreshReg$ = () => {}",
2270
2234
  "window.$RefreshSig$ = () => (type) => type",
@@ -2273,17 +2237,17 @@ var reactRouterVitePlugin = () => {
2273
2237
  }
2274
2238
  },
2275
2239
  {
2276
- name: "react-router:hmr-runtime",
2240
+ name: "react-router-hmr-runtime",
2277
2241
  enforce: "pre",
2278
- resolveId(id) {
2279
- if (id === virtualHmrRuntime.id) return virtualHmrRuntime.resolvedId;
2242
+ resolveId(id2) {
2243
+ if (id2 === hmrRuntimeId) return resolve3(hmrRuntimeId);
2280
2244
  },
2281
- async load(id) {
2282
- if (id !== virtualHmrRuntime.resolvedId) return;
2283
- let reactRefreshDir = path6.dirname(
2245
+ async load(id2) {
2246
+ if (id2 !== resolve3(hmrRuntimeId)) return;
2247
+ let reactRefreshDir = path4.dirname(
2284
2248
  require.resolve("react-refresh/package.json")
2285
2249
  );
2286
- let reactRefreshRuntimePath = path6.join(
2250
+ let reactRefreshRuntimePath = path4.join(
2287
2251
  reactRefreshDir,
2288
2252
  "cjs/react-refresh-runtime.development.js"
2289
2253
  );
@@ -2299,11 +2263,11 @@ var reactRouterVitePlugin = () => {
2299
2263
  }
2300
2264
  },
2301
2265
  {
2302
- name: "react-router:react-refresh-babel",
2303
- async transform(code, id, options) {
2266
+ name: "react-router-react-refresh-babel",
2267
+ async transform(code, id2, options) {
2304
2268
  if (viteCommand !== "serve") return;
2305
- if (id.includes("/node_modules/")) return;
2306
- let [filepath] = id.split("?");
2269
+ if (id2.includes("/node_modules/")) return;
2270
+ let [filepath] = id2.split("?");
2307
2271
  let extensionsRE = /\.(jsx?|tsx?|mdx?)$/;
2308
2272
  if (!extensionsRE.test(filepath)) return;
2309
2273
  let devRuntime = "react/jsx-dev-runtime";
@@ -2311,10 +2275,13 @@ var reactRouterVitePlugin = () => {
2311
2275
  let isJSX = filepath.endsWith("x");
2312
2276
  let useFastRefresh = !ssr && (isJSX || code.includes(devRuntime));
2313
2277
  if (!useFastRefresh) return;
2278
+ if (isRouteEntry(id2)) {
2279
+ return { code: addRefreshWrapper(ctx.reactRouterConfig, code, id2) };
2280
+ }
2314
2281
  let result = await babel.transformAsync(code, {
2315
2282
  babelrc: false,
2316
2283
  configFile: false,
2317
- filename: id,
2284
+ filename: id2,
2318
2285
  sourceFileName: filepath,
2319
2286
  parserOpts: {
2320
2287
  sourceType: "module",
@@ -2327,18 +2294,18 @@ var reactRouterVitePlugin = () => {
2327
2294
  code = result.code;
2328
2295
  let refreshContentRE = /\$Refresh(?:Reg|Sig)\$\(/;
2329
2296
  if (refreshContentRE.test(code)) {
2330
- code = addRefreshWrapper(ctx.reactRouterConfig, code, id);
2297
+ code = addRefreshWrapper(ctx.reactRouterConfig, code, id2);
2331
2298
  }
2332
2299
  return { code, map: result.map };
2333
2300
  }
2334
2301
  },
2335
2302
  {
2336
- name: "react-router:hmr-updates",
2303
+ name: "react-router-hmr-updates",
2337
2304
  async handleHotUpdate({ server, file, modules, read }) {
2338
2305
  let route = getRoute(ctx.reactRouterConfig, file);
2339
2306
  let hmrEventData = { route: null };
2340
2307
  if (route) {
2341
- let serverManifest = (await server.ssrLoadModule(virtual.serverManifest.id)).default;
2308
+ let serverManifest = (await server.ssrLoadModule(serverManifestId)).default;
2342
2309
  let oldRouteMetadata = serverManifest.routes[route.id];
2343
2310
  let newRouteMetadata = await getRouteMetadata(
2344
2311
  ctx,
@@ -2364,69 +2331,39 @@ var reactRouterVitePlugin = () => {
2364
2331
  });
2365
2332
  return modules;
2366
2333
  }
2367
- },
2368
- {
2369
- name: "react-router-server-change-trigger-client-hmr",
2370
- // This hook is only available in Vite v6+ so this is a no-op in v5.
2371
- // Previously the server and client modules were shared in a single module
2372
- // graph. This meant that changes to server code automatically resulted in
2373
- // client HMR updates. In Vite v6+ these module graphs are separate from
2374
- // each other so we need to manually trigger client HMR updates if server
2375
- // code has changed.
2376
- hotUpdate({ server, modules }) {
2377
- if (this.environment.name !== "ssr" && modules.length <= 0) {
2378
- return;
2379
- }
2380
- let clientModules = uniqueNodes(
2381
- modules.flatMap(
2382
- (mod) => getParentClientNodes(server.environments.client.moduleGraph, mod)
2383
- )
2384
- );
2385
- for (let clientModule of clientModules) {
2386
- server.environments.client.reloadModule(clientModule);
2387
- }
2388
- }
2389
2334
  }
2390
2335
  ];
2391
2336
  };
2392
- function getParentClientNodes(clientModuleGraph, module2) {
2393
- if (!module2.id) {
2394
- return [];
2395
- }
2396
- let clientModule = clientModuleGraph.getModuleById(module2.id);
2397
- if (clientModule) {
2398
- return [clientModule];
2399
- }
2400
- return [...module2.importers].flatMap(
2401
- (importer) => getParentClientNodes(clientModuleGraph, importer)
2402
- );
2403
- }
2404
- function uniqueNodes(nodes) {
2405
- let nodeUrls = /* @__PURE__ */ new Set();
2406
- let unique = [];
2407
- for (let node of nodes) {
2408
- if (nodeUrls.has(node.url)) {
2409
- continue;
2410
- }
2411
- nodeUrls.add(node.url);
2412
- unique.push(node);
2413
- }
2414
- return unique;
2415
- }
2416
- function addRefreshWrapper(reactRouterConfig, code, id) {
2417
- let route = getRoute(reactRouterConfig, id);
2418
- let acceptExports = route ? [
2337
+ function addRefreshWrapper(reactRouterConfig, code, id2) {
2338
+ let route = getRoute(reactRouterConfig, id2);
2339
+ let acceptExports = route || isRouteEntry(id2) ? [
2419
2340
  "clientAction",
2420
2341
  "clientLoader",
2342
+ "clientMiddleware",
2421
2343
  "handle",
2422
2344
  "meta",
2423
2345
  "links",
2424
2346
  "shouldRevalidate"
2425
2347
  ] : [];
2426
- return REACT_REFRESH_HEADER.replaceAll("__SOURCE__", JSON.stringify(id)) + code + REACT_REFRESH_FOOTER.replaceAll("__SOURCE__", JSON.stringify(id)).replaceAll("__ACCEPT_EXPORTS__", JSON.stringify(acceptExports)).replaceAll("__ROUTE_ID__", JSON.stringify(route?.id));
2348
+ return "\n\n" + withCommentBoundaries(
2349
+ "REACT REFRESH HEADER",
2350
+ REACT_REFRESH_HEADER.replaceAll("__SOURCE__", JSON.stringify(id2))
2351
+ ) + "\n\n" + withCommentBoundaries("REACT REFRESH BODY", code) + "\n\n" + withCommentBoundaries(
2352
+ "REACT REFRESH FOOTER",
2353
+ REACT_REFRESH_FOOTER.replaceAll("__SOURCE__", JSON.stringify(id2)).replaceAll("__ACCEPT_EXPORTS__", JSON.stringify(acceptExports)).replaceAll("__ROUTE_ID__", JSON.stringify(route?.id))
2354
+ ) + "\n";
2355
+ }
2356
+ function withCommentBoundaries(label, text) {
2357
+ let begin = `// [BEGIN] ${label} `;
2358
+ begin += "-".repeat(80 - begin.length);
2359
+ let end = `// [END] ${label} `;
2360
+ end += "-".repeat(80 - end.length);
2361
+ return `${begin}
2362
+ ${text}
2363
+ ${end}`;
2427
2364
  }
2428
2365
  var REACT_REFRESH_HEADER = `
2429
- import RefreshRuntime from "${virtualHmrRuntime.id}";
2366
+ import RefreshRuntime from "${hmrRuntimeId}";
2430
2367
 
2431
2368
  const inWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;
2432
2369
  let prevRefreshReg;
@@ -2445,7 +2382,7 @@ if (import.meta.hot && !inWebWorker) {
2445
2382
  RefreshRuntime.register(type, __SOURCE__ + " " + id)
2446
2383
  };
2447
2384
  window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
2448
- }`.replaceAll("\n", "");
2385
+ }`.trim();
2449
2386
  var REACT_REFRESH_FOOTER = `
2450
2387
  if (import.meta.hot && !inWebWorker) {
2451
2388
  window.$RefreshReg$ = prevRefreshReg;
@@ -2459,11 +2396,11 @@ if (import.meta.hot && !inWebWorker) {
2459
2396
  if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
2460
2397
  });
2461
2398
  });
2462
- }`;
2399
+ }`.trim();
2463
2400
  function getRoute(pluginConfig, file) {
2464
- let vite2 = getVite();
2401
+ let vite2 = importViteEsmSync();
2465
2402
  let routePath = vite2.normalizePath(
2466
- path6.relative(pluginConfig.appDirectory, file)
2403
+ path4.relative(pluginConfig.appDirectory, file)
2467
2404
  );
2468
2405
  let route = Object.values(pluginConfig.routes).find(
2469
2406
  (r) => vite2.normalizePath(r.file) === routePath
@@ -2485,7 +2422,7 @@ async function getRouteMetadata(ctx, viteChildCompiler, route, readRouteFile) {
2485
2422
  caseSensitive: route.caseSensitive,
2486
2423
  url: combineURLs(
2487
2424
  ctx.publicPath,
2488
- "/" + path6.relative(
2425
+ "/" + path4.relative(
2489
2426
  ctx.rootDirectory,
2490
2427
  resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
2491
2428
  )
@@ -2508,11 +2445,11 @@ async function getRouteMetadata(ctx, viteChildCompiler, route, readRouteFile) {
2508
2445
  return info;
2509
2446
  }
2510
2447
  async function getPrerenderBuildAndHandler(viteConfig, reactRouterConfig, serverBuildDirectory) {
2511
- let serverBuildPath = path6.join(
2448
+ let serverBuildPath = path4.join(
2512
2449
  serverBuildDirectory,
2513
2450
  reactRouterConfig.serverBuildFile
2514
2451
  );
2515
- let build = await import(url.pathToFileURL(serverBuildPath).toString());
2452
+ let build = await import(url2.pathToFileURL(serverBuildPath).toString());
2516
2453
  let { createRequestHandler: createHandler } = await import("react-router");
2517
2454
  return {
2518
2455
  build,
@@ -2530,9 +2467,9 @@ async function handleSpaMode(viteConfig, reactRouterConfig, serverBuildDirectory
2530
2467
  let html = await response.text();
2531
2468
  validatePrerenderedResponse(response, html, "SPA Mode", "/");
2532
2469
  validatePrerenderedHtml(html, "SPA Mode");
2533
- await fse.writeFile(path6.join(clientBuildDirectory, "index.html"), html);
2470
+ await fse.writeFile(path4.join(clientBuildDirectory, "index.html"), html);
2534
2471
  viteConfig.logger.info(
2535
- "SPA Mode: index.html has been written to your " + import_picocolors3.default.bold(path6.relative(process.cwd(), clientBuildDirectory)) + " directory"
2472
+ "SPA Mode: index.html has been written to your " + import_picocolors3.default.bold(path4.relative(process.cwd(), clientBuildDirectory)) + " directory"
2536
2473
  );
2537
2474
  }
2538
2475
  async function handlePrerender(viteConfig, reactRouterConfig, serverBuildDirectory, clientBuildDirectory) {
@@ -2562,14 +2499,14 @@ async function handlePrerender(viteConfig, reactRouterConfig, serverBuildDirecto
2562
2499
  // build time or runtime
2563
2500
  "X-React-Router-Prerender": "yes"
2564
2501
  };
2565
- for (let path7 of routesToPrerender) {
2566
- let matches = (0, import_react_router2.matchRoutes)(routes, `/${path7}/`.replace(/^\/\/+/, "/"));
2502
+ for (let path5 of routesToPrerender) {
2503
+ let matches = (0, import_react_router2.matchRoutes)(routes, path5);
2567
2504
  let hasLoaders = matches?.some((m) => m.route.loader);
2568
2505
  let data;
2569
2506
  if (hasLoaders) {
2570
2507
  data = await prerenderData(
2571
2508
  handler,
2572
- path7,
2509
+ path5,
2573
2510
  clientBuildDirectory,
2574
2511
  reactRouterConfig,
2575
2512
  viteConfig,
@@ -2582,7 +2519,7 @@ async function handlePrerender(viteConfig, reactRouterConfig, serverBuildDirecto
2582
2519
  if (isResourceRoute) {
2583
2520
  await prerenderResourceRoute(
2584
2521
  handler,
2585
- path7,
2522
+ path5,
2586
2523
  clientBuildDirectory,
2587
2524
  reactRouterConfig,
2588
2525
  viteConfig,
@@ -2591,7 +2528,7 @@ async function handlePrerender(viteConfig, reactRouterConfig, serverBuildDirecto
2591
2528
  } else {
2592
2529
  await prerenderRoute(
2593
2530
  handler,
2594
- path7,
2531
+ path5,
2595
2532
  clientBuildDirectory,
2596
2533
  reactRouterConfig,
2597
2534
  viteConfig,
@@ -2648,9 +2585,9 @@ async function prerenderData(handler, prerenderPath, clientBuildDirectory, react
2648
2585
  let response = await handler(request);
2649
2586
  let data = await response.text();
2650
2587
  validatePrerenderedResponse(response, data, "Prerender", normalizedPath);
2651
- let outdir = path6.relative(process.cwd(), clientBuildDirectory);
2652
- let outfile = path6.join(outdir, ...normalizedPath.split("/"));
2653
- await fse.ensureDir(path6.dirname(outfile));
2588
+ let outdir = path4.relative(process.cwd(), clientBuildDirectory);
2589
+ let outfile = path4.join(outdir, ...normalizedPath.split("/"));
2590
+ await fse.ensureDir(path4.dirname(outfile));
2654
2591
  await fse.outputFile(outfile, data);
2655
2592
  viteConfig.logger.info(`Prerender: Generated ${import_picocolors3.default.bold(outfile)}`);
2656
2593
  return data;
@@ -2667,9 +2604,9 @@ async function prerenderRoute(handler, prerenderPath, clientBuildDirectory, reac
2667
2604
  if (!reactRouterConfig.ssr) {
2668
2605
  validatePrerenderedHtml(html, "Prerender");
2669
2606
  }
2670
- let outdir = path6.relative(process.cwd(), clientBuildDirectory);
2671
- let outfile = path6.join(outdir, ...normalizedPath.split("/"), "index.html");
2672
- await fse.ensureDir(path6.dirname(outfile));
2607
+ let outdir = path4.relative(process.cwd(), clientBuildDirectory);
2608
+ let outfile = path4.join(outdir, ...normalizedPath.split("/"), "index.html");
2609
+ await fse.ensureDir(path4.dirname(outfile));
2673
2610
  await fse.outputFile(outfile, html);
2674
2611
  viteConfig.logger.info(`Prerender: Generated ${import_picocolors3.default.bold(outfile)}`);
2675
2612
  }
@@ -2679,9 +2616,9 @@ async function prerenderResourceRoute(handler, prerenderPath, clientBuildDirecto
2679
2616
  let response = await handler(request);
2680
2617
  let text = await response.text();
2681
2618
  validatePrerenderedResponse(response, text, "Prerender", normalizedPath);
2682
- let outdir = path6.relative(process.cwd(), clientBuildDirectory);
2683
- let outfile = path6.join(outdir, ...normalizedPath.split("/"));
2684
- await fse.ensureDir(path6.dirname(outfile));
2619
+ let outdir = path4.relative(process.cwd(), clientBuildDirectory);
2620
+ let outfile = path4.join(outdir, ...normalizedPath.split("/"));
2621
+ await fse.ensureDir(path4.dirname(outfile));
2685
2622
  await fse.outputFile(outfile, text);
2686
2623
  viteConfig.logger.info(`Prerender: Generated ${import_picocolors3.default.bold(outfile)}`);
2687
2624
  }
@@ -2690,17 +2627,17 @@ async function prerenderManifest(build, clientBuildDirectory, reactRouterConfig,
2690
2627
  /\/\/+/g,
2691
2628
  "/"
2692
2629
  );
2693
- let outdir = path6.relative(process.cwd(), clientBuildDirectory);
2694
- let outfile = path6.join(outdir, ...normalizedPath.split("/"));
2695
- await fse.ensureDir(path6.dirname(outfile));
2630
+ let outdir = path4.relative(process.cwd(), clientBuildDirectory);
2631
+ let outfile = path4.join(outdir, ...normalizedPath.split("/"));
2632
+ await fse.ensureDir(path4.dirname(outfile));
2696
2633
  let manifestData = JSON.stringify(build.assets.routes);
2697
2634
  await fse.outputFile(outfile, manifestData);
2698
2635
  viteConfig.logger.info(`Prerender: Generated ${import_picocolors3.default.bold(outfile)}`);
2699
2636
  }
2700
- function validatePrerenderedResponse(response, html, prefix, path7) {
2637
+ function validatePrerenderedResponse(response, html, prefix, path5) {
2701
2638
  if (response.status !== 200) {
2702
2639
  throw new Error(
2703
- `${prefix}: Received a ${response.status} status code from \`entry.server.tsx\` while prerendering the \`${path7}\` path.
2640
+ `${prefix}: Received a ${response.status} status code from \`entry.server.tsx\` while prerendering the \`${path5}\` path.
2704
2641
  ${html}`
2705
2642
  );
2706
2643
  }
@@ -2735,6 +2672,8 @@ function createPrerenderRoutes(manifest, parentId = "", routesByParentId = group
2735
2672
  loader: route.module.loader ? () => null : void 0,
2736
2673
  action: void 0,
2737
2674
  handle: route.module.handle
2675
+ // middleware is not necessary here since we just need to know which
2676
+ // routes have loaders so we know what paths to prerender
2738
2677
  };
2739
2678
  return route.index ? {
2740
2679
  index: true,