@react-router/dev 0.0.0-experimental-6844c5934 → 0.0.0-experimental-e41ede670

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/CHANGELOG.md CHANGED
@@ -1,35 +1,5 @@
1
1
  # `@react-router/dev`
2
2
 
3
- ## 7.1.1
4
-
5
- ### Patch Changes
6
-
7
- - Fix for a crash when optional args are passed to the CLI ([`5b1ca202f`](https://github.com/remix-run/react-router/commit/5b1ca202f77ef342db0109c6b791d33188077cd0))
8
- - Updated dependencies:
9
- - `react-router@7.1.1`
10
- - `@react-router/node@7.1.1`
11
- - `@react-router/serve@7.1.1`
12
-
13
- ## 7.1.0
14
-
15
- ### Minor Changes
16
-
17
- - Add support for Vite v6 ([#12469](https://github.com/remix-run/react-router/pull/12469))
18
-
19
- ### Patch Changes
20
-
21
- - Properly initialize `NODE_ENV` if not already set for compatibility with React 19 ([#12578](https://github.com/remix-run/react-router/pull/12578))
22
-
23
- - Remove the leftover/unused `abortDelay` prop from `ServerRouter` and update the default `entry.server.tsx` to use the new `streamTimeout` value for Single Fetch ([#12478](https://github.com/remix-run/react-router/pull/12478))
24
-
25
- - The `abortDelay` functionality was removed in v7 as it was coupled to the `defer` implementation from Remix v2, but this removal of this prop was missed
26
- - If you were still using this prop in your `entry.server` file, it's likely your app is not aborting streams as you would expect and you will need to adopt the new [`streamTimeout`](https://reactrouter.com/explanation/special-files#streamtimeout) value introduced with Single Fetch
27
-
28
- - Updated dependencies:
29
- - `react-router@7.1.0`
30
- - `@react-router/node@7.1.0`
31
- - `@react-router/serve@7.1.0`
32
-
33
3
  ## 7.0.2
34
4
 
35
5
  ### Patch Changes
package/bin.js CHANGED
@@ -1,15 +1,2 @@
1
1
  #!/usr/bin/env node
2
- let arg = require("arg");
3
-
4
- // Minimal replication of our actual parsing in `run.ts`. If not already set,
5
- // default `NODE_ENV` so React loads the proper version in it's CJS entry script.
6
- // We have to do this before importing `run.ts` since that is what imports
7
- // `react` (indirectly via `react-router`)
8
- let args = arg({}, { argv: process.argv.slice(2), stopAtPositional: true });
9
- if (args._[0] === "dev") {
10
- process.env.NODE_ENV = process.env.NODE_ENV ?? "development";
11
- } else {
12
- process.env.NODE_ENV = process.env.NODE_ENV ?? "production";
13
- }
14
-
15
2
  require("./dist/cli/index");
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-6844c5934
3
+ * @react-router/dev v0.0.0-experimental-e41ede670
4
4
  *
5
5
  * Copyright (c) Remix Software Inc.
6
6
  *
@@ -100,11 +100,11 @@ async function createContext(viteConfig = {}) {
100
100
  const runner = new import_client.ViteNodeRunner({
101
101
  root: devServer.config.root,
102
102
  base: devServer.config.base,
103
- fetchModule(id) {
104
- return server.fetchModule(id);
103
+ fetchModule(id2) {
104
+ return server.fetchModule(id2);
105
105
  },
106
- resolveId(id, importer) {
107
- return server.resolveId(id, importer);
106
+ resolveId(id2, importer) {
107
+ return server.resolveId(id2, importer);
108
108
  }
109
109
  });
110
110
  return { devServer, server, runner };
@@ -160,24 +160,24 @@ ${message}`
160
160
  function configRoutesToRouteManifest(appDirectory, routes2, rootId = "root") {
161
161
  let routeManifest = {};
162
162
  function walk(route, parentId) {
163
- let id = route.id || createRouteId(route.file);
163
+ let id2 = route.id || createRouteId(route.file);
164
164
  let manifestItem = {
165
- id,
165
+ id: id2,
166
166
  parentId,
167
167
  file: Path.isAbsolute(route.file) ? Path.relative(appDirectory, route.file) : route.file,
168
168
  path: route.path,
169
169
  index: route.index,
170
170
  caseSensitive: route.caseSensitive
171
171
  };
172
- if (routeManifest.hasOwnProperty(id)) {
172
+ if (routeManifest.hasOwnProperty(id2)) {
173
173
  throw new Error(
174
- `Unable to define routes with duplicate route id: "${id}"`
174
+ `Unable to define routes with duplicate route id: "${id2}"`
175
175
  );
176
176
  }
177
- routeManifest[id] = manifestItem;
177
+ routeManifest[id2] = manifestItem;
178
178
  if (route.children) {
179
179
  for (let child of route.children) {
180
- walk(child, id);
180
+ walk(child, id2);
181
181
  }
182
182
  }
183
183
  }
@@ -636,6 +636,10 @@ function generate(ctx, route) {
636
636
  export type HeadersArgs = T.HeadersArgs
637
637
  export type HeadersFunction = (args: HeadersArgs) => Headers | HeadersInit
638
638
 
639
+ export type MiddlewareArgs = T.CreateServerMiddlewareArgs<Info>
640
+ export type MiddlewareNextFunction = T.ServerMiddlewareNextFunction
641
+ export type ClientMiddlewareArgs = T.CreateClientMiddlewareArgs<Info>
642
+ export type ClientMiddlewareNextFunction = T.ClientMiddlewareNextFunction
639
643
  export type LoaderArgs = T.CreateServerLoaderArgs<Info>
640
644
  export type ClientLoaderArgs = T.CreateClientLoaderArgs<Info>
641
645
  export type ActionArgs = T.CreateServerActionArgs<Info>
@@ -808,24 +812,17 @@ var init_styles = __esm({
808
812
  path3 = __toESM(require("path"));
809
813
  import_react_router = require("react-router");
810
814
  init_resolve_file_url();
811
- init_import_vite_esm_sync();
812
815
  cssFileRegExp = /\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:$|\?)/;
813
816
  cssModulesRegExp = new RegExp(`\\.module${cssFileRegExp.source}`);
814
817
  }
815
818
  });
816
819
 
817
- // vite/virtual-module.ts
818
- function create(name) {
819
- let id = `virtual:react-router/${name}`;
820
- return {
821
- id,
822
- resolvedId: `\0${id}`,
823
- url: `/@id/__x00__${id}`
824
- };
825
- }
826
- var init_virtual_module = __esm({
827
- "vite/virtual-module.ts"() {
820
+ // vite/vmod.ts
821
+ var id;
822
+ var init_vmod = __esm({
823
+ "vite/vmod.ts"() {
828
824
  "use strict";
825
+ id = (name) => `virtual:react-router/${name}`;
829
826
  }
830
827
  });
831
828
 
@@ -847,14 +844,14 @@ var init_remove_exports = __esm({
847
844
  });
848
845
 
849
846
  // vite/with-props.ts
850
- var import_dedent2, vmod;
847
+ var import_dedent2, vmodId;
851
848
  var init_with_props = __esm({
852
849
  "vite/with-props.ts"() {
853
850
  "use strict";
854
851
  import_dedent2 = __toESM(require("dedent"));
855
852
  init_babel();
856
- init_virtual_module();
857
- vmod = create("with-props");
853
+ init_vmod();
854
+ vmodId = id("with-props");
858
855
  }
859
856
  });
860
857
 
@@ -919,7 +916,7 @@ function findConfig(dir, basename2, extensions) {
919
916
  }
920
917
  return void 0;
921
918
  }
922
- var import_node_crypto, path4, url, fse, babel, import_react_router2, import_es_module_lexer, import_jsesc, import_picocolors3, virtualHmrRuntime, virtualInjectHmrRuntime, virtual, getServerBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER, REACT_REFRESH_FOOTER;
919
+ var import_node_crypto, path4, url, fse, babel, import_react_router2, import_es_module_lexer, import_jsesc, import_picocolors3, serverBuildId, serverManifestId, browserManifestId, hmrRuntimeId, injectHmrRuntimeId, getServerBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER, REACT_REFRESH_FOOTER;
923
920
  var init_plugin = __esm({
924
921
  "vite/plugin.ts"() {
925
922
  "use strict";
@@ -937,20 +934,18 @@ var init_plugin = __esm({
937
934
  init_babel();
938
935
  init_node_adapter();
939
936
  init_styles();
940
- init_virtual_module();
937
+ init_vmod();
941
938
  init_resolve_file_url();
942
939
  init_combine_urls();
943
940
  init_remove_exports();
944
941
  init_import_vite_esm_sync();
945
942
  init_config();
946
943
  init_with_props();
947
- virtualHmrRuntime = create("hmr-runtime");
948
- virtualInjectHmrRuntime = create("inject-hmr-runtime");
949
- virtual = {
950
- serverBuild: create("server-build"),
951
- serverManifest: create("server-manifest"),
952
- browserManifest: create("browser-manifest")
953
- };
944
+ serverBuildId = id("server-build");
945
+ serverManifestId = id("server-manifest");
946
+ browserManifestId = id("browser-manifest");
947
+ hmrRuntimeId = id("hmr-runtime");
948
+ injectHmrRuntimeId = id("inject-hmr-runtime");
954
949
  getServerBuildDirectory = (ctx) => path4.join(
955
950
  ctx.reactRouterConfig.buildDirectory,
956
951
  "server",
@@ -965,7 +960,7 @@ var init_plugin = __esm({
965
960
  defaultEntries = fse.readdirSync(defaultEntriesDir).map((filename3) => path4.join(defaultEntriesDir, filename3));
966
961
  invariant(defaultEntries.length > 0, "No default entries found");
967
962
  REACT_REFRESH_HEADER = `
968
- import RefreshRuntime from "${virtualHmrRuntime.id}";
963
+ import RefreshRuntime from "${hmrRuntimeId}";
969
964
 
970
965
  const inWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;
971
966
  let prevRefreshReg;
@@ -1048,8 +1043,8 @@ __export(build_exports, {
1048
1043
  });
1049
1044
  function getAddressableRoutes(routes2) {
1050
1045
  let nonAddressableIds = /* @__PURE__ */ new Set();
1051
- for (let id in routes2) {
1052
- let route = routes2[id];
1046
+ for (let id2 in routes2) {
1047
+ let route = routes2[id2];
1053
1048
  if (route.index) {
1054
1049
  invariant(
1055
1050
  route.parentId,
@@ -1058,7 +1053,7 @@ function getAddressableRoutes(routes2) {
1058
1053
  nonAddressableIds.add(route.parentId);
1059
1054
  }
1060
1055
  if (typeof route.path !== "string" && !route.index) {
1061
- nonAddressableIds.add(id);
1056
+ nonAddressableIds.add(id2);
1062
1057
  }
1063
1058
  }
1064
1059
  return Object.values(routes2).filter(
@@ -1089,12 +1084,12 @@ async function getServerBuilds(ctx) {
1089
1084
  let { normalizePath } = await import("vite");
1090
1085
  let resolvedAppDirectory = import_node_path2.default.resolve(rootDirectory, appDirectory);
1091
1086
  let rootRelativeRoutes = Object.fromEntries(
1092
- Object.entries(routes2).map(([id, route]) => {
1087
+ Object.entries(routes2).map(([id2, route]) => {
1093
1088
  let filePath = import_node_path2.default.join(resolvedAppDirectory, route.file);
1094
1089
  let rootRelativeFilePath = normalizePath(
1095
1090
  import_node_path2.default.relative(rootDirectory, filePath)
1096
1091
  );
1097
- return [id, { ...route, file: rootRelativeFilePath }];
1092
+ return [id2, { ...route, file: rootRelativeFilePath }];
1098
1093
  })
1099
1094
  );
1100
1095
  let buildManifest = {
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-6844c5934
2
+ * @react-router/dev v0.0.0-experimental-e41ede670
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-6844c5934
2
+ * @react-router/dev v0.0.0-experimental-e41ede670
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-6844c5934
2
+ * @react-router/dev v0.0.0-experimental-e41ede670
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/vite.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-6844c5934
2
+ * @react-router/dev v0.0.0-experimental-e41ede670
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -47,7 +47,7 @@ module.exports = __toCommonJS(vite_exports);
47
47
  // vite/plugin.ts
48
48
  var import_node_crypto = require("crypto");
49
49
  var path4 = __toESM(require("path"));
50
- var url = __toESM(require("url"));
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");
@@ -119,11 +119,11 @@ async function createContext(viteConfig = {}) {
119
119
  const runner = new import_client.ViteNodeRunner({
120
120
  root: devServer.config.root,
121
121
  base: devServer.config.base,
122
- fetchModule(id) {
123
- return server.fetchModule(id);
122
+ fetchModule(id2) {
123
+ return server.fetchModule(id2);
124
124
  },
125
- resolveId(id, importer) {
126
- return server.resolveId(id, importer);
125
+ resolveId(id2, importer) {
126
+ return server.resolveId(id2, importer);
127
127
  }
128
128
  });
129
129
  return { devServer, server, runner };
@@ -195,24 +195,24 @@ ${message}`
195
195
  function configRoutesToRouteManifest(appDirectory, routes, rootId = "root") {
196
196
  let routeManifest = {};
197
197
  function walk(route, parentId) {
198
- let id = route.id || createRouteId(route.file);
198
+ let id2 = route.id || createRouteId(route.file);
199
199
  let manifestItem = {
200
- id,
200
+ id: id2,
201
201
  parentId,
202
202
  file: Path.isAbsolute(route.file) ? Path.relative(appDirectory, route.file) : route.file,
203
203
  path: route.path,
204
204
  index: route.index,
205
205
  caseSensitive: route.caseSensitive
206
206
  };
207
- if (routeManifest.hasOwnProperty(id)) {
207
+ if (routeManifest.hasOwnProperty(id2)) {
208
208
  throw new Error(
209
- `Unable to define routes with duplicate route id: "${id}"`
209
+ `Unable to define routes with duplicate route id: "${id2}"`
210
210
  );
211
211
  }
212
- routeManifest[id] = manifestItem;
212
+ routeManifest[id2] = manifestItem;
213
213
  if (route.children) {
214
214
  for (let child of route.children) {
215
- walk(child, id);
215
+ walk(child, id2);
216
216
  }
217
217
  }
218
218
  }
@@ -677,6 +677,10 @@ function generate(ctx, route) {
677
677
  export type HeadersArgs = T.HeadersArgs
678
678
  export type HeadersFunction = (args: HeadersArgs) => Headers | HeadersInit
679
679
 
680
+ export type MiddlewareArgs = T.CreateServerMiddlewareArgs<Info>
681
+ export type MiddlewareNextFunction = T.ServerMiddlewareNextFunction
682
+ export type ClientMiddlewareArgs = T.CreateClientMiddlewareArgs<Info>
683
+ export type ClientMiddlewareNextFunction = T.ClientMiddlewareNextFunction
680
684
  export type LoaderArgs = T.CreateServerLoaderArgs<Info>
681
685
  export type ClientLoaderArgs = T.CreateClientLoaderArgs<Info>
682
686
  export type ActionArgs = T.CreateServerActionArgs<Info>
@@ -812,7 +816,7 @@ function fromNodeRequest(nodeReq, nodeRes) {
812
816
  nodeReq.originalUrl,
813
817
  "Expected `nodeReq.originalUrl` to be defined"
814
818
  );
815
- let url2 = new URL(nodeReq.originalUrl, origin);
819
+ let url3 = new URL(nodeReq.originalUrl, origin);
816
820
  let controller = new AbortController();
817
821
  let init = {
818
822
  method: nodeReq.method,
@@ -825,7 +829,7 @@ function fromNodeRequest(nodeReq, nodeRes) {
825
829
  init.body = (0, import_node.createReadableStreamFromReadable)(nodeReq);
826
830
  init.duplex = "half";
827
831
  }
828
- return new Request(url2.href, init);
832
+ return new Request(url3.href, init);
829
833
  }
830
834
  async function toNodeRequest(res, nodeRes) {
831
835
  nodeRes.statusCode = res.status;
@@ -871,8 +875,8 @@ var cssModulesRegExp = new RegExp(`\\.module${cssFileRegExp.source}`);
871
875
  var isCssFile = (file) => cssFileRegExp.test(file);
872
876
  var isCssModulesFile = (file) => cssModulesRegExp.test(file);
873
877
  var cssUrlParamsWithoutSideEffects = ["url", "inline", "raw", "inline-css"];
874
- var isCssUrlWithoutSideEffects = (url2) => {
875
- let queryString = url2.split("?")[1];
878
+ var isCssUrlWithoutSideEffects = (url3) => {
879
+ let queryString = url3.split("?")[1];
876
880
  if (!queryString) {
877
881
  return false;
878
882
  }
@@ -880,22 +884,19 @@ var isCssUrlWithoutSideEffects = (url2) => {
880
884
  for (let paramWithoutSideEffects of cssUrlParamsWithoutSideEffects) {
881
885
  if (
882
886
  // Parameter is blank and not explicitly set, i.e. "?url", not "?url="
883
- params.get(paramWithoutSideEffects) === "" && !url2.includes(`?${paramWithoutSideEffects}=`) && !url2.includes(`&${paramWithoutSideEffects}=`)
887
+ params.get(paramWithoutSideEffects) === "" && !url3.includes(`?${paramWithoutSideEffects}=`) && !url3.includes(`&${paramWithoutSideEffects}=`)
884
888
  ) {
885
889
  return true;
886
890
  }
887
891
  }
888
892
  return false;
889
893
  };
890
- var injectQuery = (url2, query) => url2.includes("?") ? url2.replace("?", `?${query}&`) : `${url2}?${query}`;
891
894
  var getStylesForFiles = async ({
892
895
  viteDevServer,
893
896
  rootDirectory,
894
897
  cssModulesManifest,
895
898
  files
896
899
  }) => {
897
- let vite2 = importViteEsmSync();
898
- let viteMajor = parseInt(vite2.version.split(".")[0], 10);
899
900
  let styles = {};
900
901
  let deps = /* @__PURE__ */ new Set();
901
902
  try {
@@ -924,15 +925,7 @@ var getStylesForFiles = async ({
924
925
  for (let dep of deps) {
925
926
  if (dep.file && isCssFile(dep.file) && !isCssUrlWithoutSideEffects(dep.url)) {
926
927
  try {
927
- let css = isCssModulesFile(dep.file) ? cssModulesManifest[dep.file] : (await viteDevServer.ssrLoadModule(
928
- // We need the ?inline query in Vite v6 when loading CSS in SSR
929
- // since it does not expose the default export for CSS in a
930
- // server environment. This is to align with non-SSR
931
- // environments. For backwards compatibility with v5 we keep
932
- // using the URL without ?inline query because the HMR code was
933
- // relying on the implicit SSR-client module graph relationship.
934
- viteMajor >= 6 ? injectQuery(dep.url, "inline") : dep.url
935
- )).default;
928
+ let css = isCssModulesFile(dep.file) ? cssModulesManifest[dep.file] : (await viteDevServer.ssrLoadModule(dep.url)).default;
936
929
  if (css === void 0) {
937
930
  throw new Error();
938
931
  }
@@ -956,8 +949,8 @@ var findDeps = async (vite2, node, deps) => {
956
949
  await findDeps(vite2, node2, deps);
957
950
  }
958
951
  }
959
- async function addFromUrl(url2) {
960
- let node2 = await vite2.moduleGraph.getModuleByUrl(url2);
952
+ async function addFromUrl(url3) {
953
+ let node2 = await vite2.moduleGraph.getModuleByUrl(url3);
961
954
  if (node2) {
962
955
  await addFromNode(node2);
963
956
  }
@@ -965,7 +958,7 @@ var findDeps = async (vite2, node, deps) => {
965
958
  if (node.ssrTransformResult) {
966
959
  if (node.ssrTransformResult.deps) {
967
960
  node.ssrTransformResult.deps.forEach(
968
- (url2) => branches.push(addFromUrl(url2))
961
+ (url3) => branches.push(addFromUrl(url3))
969
962
  );
970
963
  }
971
964
  } else {
@@ -999,14 +992,14 @@ var getStylesForUrl = async ({
999
992
  entryClientFilePath,
1000
993
  cssModulesManifest,
1001
994
  build,
1002
- url: url2
995
+ url: url3
1003
996
  }) => {
1004
- if (url2 === void 0 || url2.includes("?_data=")) {
997
+ if (url3 === void 0 || url3.includes("?_data=")) {
1005
998
  return void 0;
1006
999
  }
1007
1000
  let routes = createRoutes(build.routes);
1008
1001
  let appPath = path3.relative(process.cwd(), reactRouterConfig.appDirectory);
1009
- let documentRouteFiles = (0, import_react_router.matchRoutes)(routes, url2, build.basename)?.map(
1002
+ let documentRouteFiles = (0, import_react_router.matchRoutes)(routes, url3, build.basename)?.map(
1010
1003
  (match) => path3.resolve(appPath, reactRouterConfig.routes[match.route.id].file)
1011
1004
  ) ?? [];
1012
1005
  let styles = await getStylesForFiles({
@@ -1023,15 +1016,10 @@ var getStylesForUrl = async ({
1023
1016
  return styles;
1024
1017
  };
1025
1018
 
1026
- // vite/virtual-module.ts
1027
- function create(name) {
1028
- let id = `virtual:react-router/${name}`;
1029
- return {
1030
- id,
1031
- resolvedId: `\0${id}`,
1032
- url: `/@id/__x00__${id}`
1033
- };
1034
- }
1019
+ // vite/vmod.ts
1020
+ var id = (name) => `virtual:react-router/${name}`;
1021
+ var resolve3 = (id2) => `\0${id2}`;
1022
+ var url = (id2) => `/@id/__x00__${id2}`;
1035
1023
 
1036
1024
  // vite/combine-urls.ts
1037
1025
  function combineURLs(baseURL, relativeURL) {
@@ -1080,14 +1068,14 @@ var removeExports = (ast, exportsToRemove) => {
1080
1068
  }
1081
1069
  }
1082
1070
  if (path5.node.declaration?.type === "FunctionDeclaration") {
1083
- let id = path5.node.declaration.id;
1084
- if (id && exportsToRemove.includes(id.name)) {
1071
+ let id2 = path5.node.declaration.id;
1072
+ if (id2 && exportsToRemove.includes(id2.name)) {
1085
1073
  markedForRemoval.add(path5);
1086
1074
  }
1087
1075
  }
1088
1076
  if (path5.node.declaration?.type === "ClassDeclaration") {
1089
- let id = path5.node.declaration.id;
1090
- if (id && exportsToRemove.includes(id.name)) {
1077
+ let id2 = path5.node.declaration.id;
1078
+ if (id2 && exportsToRemove.includes(id2.name)) {
1091
1079
  markedForRemoval.add(path5);
1092
1080
  }
1093
1081
  }
@@ -1104,9 +1092,9 @@ var removeExports = (ast, exportsToRemove) => {
1104
1092
  (0, import_babel_dead_code_elimination.deadCodeElimination)(ast, previouslyReferencedIdentifiers);
1105
1093
  }
1106
1094
  };
1107
- function validateDestructuredExports(id, exportsToRemove) {
1108
- if (id.type === "ArrayPattern") {
1109
- for (let element of id.elements) {
1095
+ function validateDestructuredExports(id2, exportsToRemove) {
1096
+ if (id2.type === "ArrayPattern") {
1097
+ for (let element of id2.elements) {
1110
1098
  if (!element) {
1111
1099
  continue;
1112
1100
  }
@@ -1121,8 +1109,8 @@ function validateDestructuredExports(id, exportsToRemove) {
1121
1109
  }
1122
1110
  }
1123
1111
  }
1124
- if (id.type === "ObjectPattern") {
1125
- for (let property of id.properties) {
1112
+ if (id2.type === "ObjectPattern") {
1113
+ for (let property of id2.properties) {
1126
1114
  if (!property) {
1127
1115
  continue;
1128
1116
  }
@@ -1146,16 +1134,16 @@ function invalidDestructureError(name) {
1146
1134
 
1147
1135
  // vite/with-props.ts
1148
1136
  var import_dedent2 = __toESM(require("dedent"));
1149
- var vmod = create("with-props");
1137
+ var vmodId = id("with-props");
1150
1138
  var NAMED_COMPONENT_EXPORTS = ["HydrateFallback", "ErrorBoundary"];
1151
1139
  var plugin = {
1152
1140
  name: "react-router-with-props",
1153
1141
  enforce: "pre",
1154
- resolveId(id) {
1155
- if (id === vmod.id) return vmod.resolvedId;
1142
+ resolveId(id2) {
1143
+ if (id2 === vmodId) return resolve3(vmodId);
1156
1144
  },
1157
- async load(id) {
1158
- if (id !== vmod.resolvedId) return;
1145
+ async load(id2) {
1146
+ if (id2 !== resolve3(vmodId)) return;
1159
1147
  return import_dedent2.default`
1160
1148
  import { createElement as h } from "react";
1161
1149
  import { useActionData, useLoaderData, useMatches, useParams, useRouteError } from "react-router";
@@ -1217,12 +1205,12 @@ var transform = (ast) => {
1217
1205
  const decl = path5.get("declaration");
1218
1206
  if (decl.isVariableDeclaration()) {
1219
1207
  decl.get("declarations").forEach((varDeclarator) => {
1220
- const id = varDeclarator.get("id");
1208
+ const id2 = varDeclarator.get("id");
1221
1209
  const init = varDeclarator.get("init");
1222
1210
  const expr = init.node;
1223
1211
  if (!expr) return;
1224
- if (!id.isIdentifier()) return;
1225
- const { name } = id.node;
1212
+ if (!id2.isIdentifier()) return;
1213
+ const { name } = id2.node;
1226
1214
  if (!NAMED_COMPONENT_EXPORTS.includes(name)) return;
1227
1215
  const uid = getHocUid(path5, `with${name}Props`);
1228
1216
  init.replaceWith(t.callExpression(uid, [expr]));
@@ -1230,9 +1218,9 @@ var transform = (ast) => {
1230
1218
  return;
1231
1219
  }
1232
1220
  if (decl.isFunctionDeclaration()) {
1233
- const { id } = decl.node;
1234
- if (!id) return;
1235
- const { name } = id;
1221
+ const { id: id2 } = decl.node;
1222
+ if (!id2) return;
1223
+ const { name } = id2;
1236
1224
  if (!NAMED_COMPONENT_EXPORTS.includes(name)) return;
1237
1225
  const uid = getHocUid(path5, `with${name}Props`);
1238
1226
  decl.replaceWith(
@@ -1253,7 +1241,7 @@ var transform = (ast) => {
1253
1241
  hocs.map(
1254
1242
  ([name, identifier]) => t.importSpecifier(identifier, t.identifier(name))
1255
1243
  ),
1256
- t.stringLiteral(vmod.id)
1244
+ t.stringLiteral(vmodId)
1257
1245
  )
1258
1246
  );
1259
1247
  }
@@ -1269,10 +1257,11 @@ function toFunctionExpression(decl) {
1269
1257
  }
1270
1258
 
1271
1259
  // vite/plugin.ts
1272
- var SERVER_ONLY_ROUTE_EXPORTS = ["loader", "action", "headers"];
1260
+ var SERVER_ONLY_ROUTE_EXPORTS = ["loader", "action", "middleware", "headers"];
1273
1261
  var CLIENT_ROUTE_EXPORTS = [
1274
1262
  "clientAction",
1275
1263
  "clientLoader",
1264
+ "clientMiddleware",
1276
1265
  "default",
1277
1266
  "ErrorBoundary",
1278
1267
  "handle",
@@ -1282,23 +1271,27 @@ var CLIENT_ROUTE_EXPORTS = [
1282
1271
  "meta",
1283
1272
  "shouldRevalidate"
1284
1273
  ];
1285
- var BUILD_CLIENT_ROUTE_QUERY_STRING = "?__react-router-build-client-route";
1286
- var virtualHmrRuntime = create("hmr-runtime");
1287
- var virtualInjectHmrRuntime = create("inject-hmr-runtime");
1274
+ var ROUTE_ENTRY_QUERY_STRING = "?route-entry=1";
1275
+ var isRouteEntry = (id2) => {
1276
+ return id2.endsWith(ROUTE_ENTRY_QUERY_STRING);
1277
+ };
1278
+ var serverBuildId = id("server-build");
1279
+ var serverManifestId = id("server-manifest");
1280
+ var browserManifestId = id("browser-manifest");
1281
+ var hmrRuntimeId = id("hmr-runtime");
1282
+ var injectHmrRuntimeId = id("inject-hmr-runtime");
1288
1283
  var resolveRelativeRouteFilePath = (route, reactRouterConfig) => {
1289
1284
  let vite2 = importViteEsmSync();
1290
1285
  let file = route.file;
1291
1286
  let fullPath = path4.resolve(reactRouterConfig.appDirectory, file);
1292
1287
  return vite2.normalizePath(fullPath);
1293
1288
  };
1294
- var virtual = {
1295
- serverBuild: create("server-build"),
1296
- serverManifest: create("server-manifest"),
1297
- browserManifest: create("browser-manifest")
1298
- };
1289
+ var vmods = [serverBuildId, serverManifestId, browserManifestId];
1299
1290
  var invalidateVirtualModules = (viteDevServer) => {
1300
- Object.values(virtual).forEach((vmod2) => {
1301
- let mod = viteDevServer.moduleGraph.getModuleById(vmod2.resolvedId);
1291
+ vmods.forEach((vmod) => {
1292
+ let mod = viteDevServer.moduleGraph.getModuleById(
1293
+ resolve3(vmod)
1294
+ );
1302
1295
  if (mod) {
1303
1296
  viteDevServer.moduleGraph.invalidateModule(mod);
1304
1297
  }
@@ -1313,7 +1306,7 @@ var resolveChunk = (ctx, viteManifest, absoluteFilePath) => {
1313
1306
  let rootRelativeFilePath = vite2.normalizePath(
1314
1307
  path4.relative(ctx.rootDirectory, absoluteFilePath)
1315
1308
  );
1316
- let entryChunk = viteManifest[rootRelativeFilePath + BUILD_CLIENT_ROUTE_QUERY_STRING] ?? viteManifest[rootRelativeFilePath];
1309
+ let entryChunk = viteManifest[rootRelativeFilePath + ROUTE_ENTRY_QUERY_STRING] ?? viteManifest[rootRelativeFilePath];
1317
1310
  if (!entryChunk) {
1318
1311
  let knownManifestKeys = Object.keys(viteManifest).map((key) => '"' + key + '"').join(", ");
1319
1312
  throw new Error(
@@ -1386,19 +1379,19 @@ var getRouteModuleExports = async (viteChildCompiler, ctx, routeFile, readRouteF
1386
1379
  let ssr = true;
1387
1380
  let { pluginContainer, moduleGraph } = viteChildCompiler;
1388
1381
  let routePath = path4.resolve(ctx.reactRouterConfig.appDirectory, routeFile);
1389
- let url2 = resolveFileUrl(ctx, routePath);
1382
+ let url3 = resolveFileUrl(ctx, routePath);
1390
1383
  let resolveId = async () => {
1391
- let result = await pluginContainer.resolveId(url2, void 0, { ssr });
1392
- if (!result) throw new Error(`Could not resolve module ID for ${url2}`);
1384
+ let result = await pluginContainer.resolveId(url3, void 0, { ssr });
1385
+ if (!result) throw new Error(`Could not resolve module ID for ${url3}`);
1393
1386
  return result.id;
1394
1387
  };
1395
- let [id, code] = await Promise.all([
1388
+ let [id2, code] = await Promise.all([
1396
1389
  resolveId(),
1397
1390
  readRouteFile?.() ?? fse.readFile(routePath, "utf-8"),
1398
1391
  // pluginContainer.transform(...) fails if we don't do this first:
1399
- moduleGraph.ensureEntryFromUrl(url2, ssr)
1392
+ moduleGraph.ensureEntryFromUrl(url3, ssr)
1400
1393
  ]);
1401
- let transformed = await pluginContainer.transform(code, id, { ssr });
1394
+ let transformed = await pluginContainer.transform(code, id2, { ssr });
1402
1395
  let [, exports2] = (0, import_es_module_lexer.parse)(transformed.code);
1403
1396
  let exportNames = exports2.map((e) => e.n);
1404
1397
  return exportNames;
@@ -1503,12 +1496,10 @@ var reactRouterVitePlugin = () => {
1503
1496
  resolveFileUrl(
1504
1497
  ctx,
1505
1498
  resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
1506
- )
1499
+ ) + ROUTE_ENTRY_QUERY_STRING
1507
1500
  )};`;
1508
1501
  }).join("\n")}
1509
- export { default as assets } from ${JSON.stringify(
1510
- virtual.serverManifest.id
1511
- )};
1502
+ export { default as assets } from ${JSON.stringify(serverManifestId)};
1512
1503
  export const assetsBuildDirectory = ${JSON.stringify(
1513
1504
  path4.relative(
1514
1505
  ctx.rootDirectory,
@@ -1611,8 +1602,8 @@ var reactRouterVitePlugin = () => {
1611
1602
  viteConfig.build.assetsDir,
1612
1603
  `manifest-${version}.js`
1613
1604
  );
1614
- let url2 = `${ctx.publicPath}${manifestPath}`;
1615
- let nonFingerprintedValues = { url: url2, version };
1605
+ let url3 = `${ctx.publicPath}${manifestPath}`;
1606
+ let nonFingerprintedValues = { url: url3, version };
1616
1607
  let reactRouterBrowserManifest = {
1617
1608
  ...fingerprintedValues,
1618
1609
  ...nonFingerprintedValues
@@ -1648,10 +1639,10 @@ var reactRouterVitePlugin = () => {
1648
1639
  caseSensitive: route.caseSensitive,
1649
1640
  module: combineURLs(
1650
1641
  ctx.publicPath,
1651
- resolveFileUrl(
1642
+ `${resolveFileUrl(
1652
1643
  ctx,
1653
1644
  resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
1654
- )
1645
+ )}${ROUTE_ENTRY_QUERY_STRING}`
1655
1646
  ),
1656
1647
  hasAction: sourceExports.includes("action"),
1657
1648
  hasLoader: sourceExports.includes("loader"),
@@ -1663,9 +1654,12 @@ var reactRouterVitePlugin = () => {
1663
1654
  }
1664
1655
  return {
1665
1656
  version: String(Math.random()),
1666
- url: combineURLs(ctx.publicPath, virtual.browserManifest.url),
1657
+ url: combineURLs(ctx.publicPath, url(browserManifestId)),
1667
1658
  hmr: {
1668
- runtime: combineURLs(ctx.publicPath, virtualInjectHmrRuntime.url)
1659
+ runtime: combineURLs(
1660
+ ctx.publicPath,
1661
+ url(injectHmrRuntimeId)
1662
+ )
1669
1663
  },
1670
1664
  entry: {
1671
1665
  module: combineURLs(
@@ -1802,7 +1796,7 @@ var reactRouterVitePlugin = () => {
1802
1796
  (route) => `${path4.resolve(
1803
1797
  ctx.reactRouterConfig.appDirectory,
1804
1798
  route.file
1805
- )}${BUILD_CLIENT_ROUTE_QUERY_STRING}`
1799
+ )}${ROUTE_ENTRY_QUERY_STRING}`
1806
1800
  )
1807
1801
  ]
1808
1802
  }
@@ -1821,7 +1815,7 @@ var reactRouterVitePlugin = () => {
1821
1815
  rollupOptions: {
1822
1816
  ...baseRollupOptions,
1823
1817
  preserveEntrySignatures: "exports-only",
1824
- input: viteUserConfig.build?.rollupOptions?.input ?? virtual.serverBuild.id,
1818
+ input: viteUserConfig.build?.rollupOptions?.input ?? serverBuildId,
1825
1819
  output: {
1826
1820
  entryFileNames: ctx.reactRouterConfig.serverBuildFile,
1827
1821
  format: ctx.reactRouterConfig.serverModuleFormat
@@ -1884,15 +1878,15 @@ var reactRouterVitePlugin = () => {
1884
1878
  envFile: false,
1885
1879
  plugins: [
1886
1880
  ...(childCompilerConfigFile.config.plugins ?? []).flat().filter(
1887
- (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"
1881
+ (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"
1888
1882
  )
1889
1883
  ]
1890
1884
  });
1891
1885
  await viteChildCompiler.pluginContainer.buildStart({});
1892
1886
  },
1893
- async transform(code, id) {
1894
- if (isCssModulesFile(id)) {
1895
- cssModulesManifest[id] = code;
1887
+ async transform(code, id2) {
1888
+ if (isCssModulesFile(id2)) {
1889
+ cssModulesManifest[id2] = code;
1896
1890
  }
1897
1891
  },
1898
1892
  buildStart() {
@@ -1916,7 +1910,7 @@ var reactRouterVitePlugin = () => {
1916
1910
  (0, import_react_router2.unstable_setDevServerHooks)({
1917
1911
  // Give the request handler access to the critical CSS in dev to avoid a
1918
1912
  // flash of unstyled content since Vite injects CSS file contents via JS
1919
- getCriticalCss: async (build, url2) => {
1913
+ getCriticalCss: async (build, url3) => {
1920
1914
  return getStylesForUrl({
1921
1915
  rootDirectory: ctx.rootDirectory,
1922
1916
  entryClientFilePath: ctx.entryClientFilePath,
@@ -1924,7 +1918,7 @@ var reactRouterVitePlugin = () => {
1924
1918
  viteDevServer,
1925
1919
  cssModulesManifest,
1926
1920
  build,
1927
- url: url2
1921
+ url: url3
1928
1922
  });
1929
1923
  },
1930
1924
  // If an error is caught within the request handler, let Vite fix the
@@ -1972,7 +1966,7 @@ var reactRouterVitePlugin = () => {
1972
1966
  viteDevServer.middlewares.use(async (req, res, next) => {
1973
1967
  try {
1974
1968
  let build = await viteDevServer.ssrLoadModule(
1975
- virtual.serverBuild.id
1969
+ serverBuildId
1976
1970
  );
1977
1971
  let handler = (0, import_react_router2.createRequestHandler)(build, "development");
1978
1972
  let nodeHandler = async (nodeReq, nodeRes) => {
@@ -2072,11 +2066,11 @@ var reactRouterVitePlugin = () => {
2072
2066
  }
2073
2067
  },
2074
2068
  {
2075
- name: "react-router:build-client-route",
2069
+ name: "react-router-route-entry",
2076
2070
  enforce: "pre",
2077
- async transform(_code, id, options) {
2078
- if (!id.endsWith(BUILD_CLIENT_ROUTE_QUERY_STRING)) return;
2079
- let routeModuleId = id.replace(BUILD_CLIENT_ROUTE_QUERY_STRING, "");
2071
+ async transform(_code, id2, options) {
2072
+ if (!isRouteEntry(id2)) return;
2073
+ let routeModuleId = id2.replace(ROUTE_ENTRY_QUERY_STRING, "");
2080
2074
  let routeFileName = path4.basename(routeModuleId);
2081
2075
  let sourceExports = await getRouteModuleExports(
2082
2076
  viteChildCompiler,
@@ -2090,24 +2084,23 @@ var reactRouterVitePlugin = () => {
2090
2084
  }
2091
2085
  },
2092
2086
  {
2093
- name: "react-router:virtual-modules",
2087
+ name: "react-router-virtual-modules",
2094
2088
  enforce: "pre",
2095
- resolveId(id) {
2096
- const vmod2 = Object.values(virtual).find((vmod3) => vmod3.id === id);
2097
- if (vmod2) return vmod2.resolvedId;
2089
+ resolveId(id2) {
2090
+ if (vmods.includes(id2)) return resolve3(id2);
2098
2091
  },
2099
- async load(id) {
2100
- switch (id) {
2101
- case virtual.serverBuild.resolvedId: {
2092
+ async load(id2) {
2093
+ switch (id2) {
2094
+ case resolve3(serverBuildId): {
2102
2095
  return await getServerEntry();
2103
2096
  }
2104
- case virtual.serverManifest.resolvedId: {
2097
+ case resolve3(serverManifestId): {
2105
2098
  let reactRouterManifest = ctx.isSsrBuild ? await ctx.getReactRouterServerManifest() : await getReactRouterManifestForDev();
2106
2099
  return `export default ${(0, import_jsesc.default)(reactRouterManifest, {
2107
2100
  es6: true
2108
2101
  })};`;
2109
2102
  }
2110
- case virtual.browserManifest.resolvedId: {
2103
+ case resolve3(browserManifestId): {
2111
2104
  if (viteCommand === "build") {
2112
2105
  throw new Error("This module only exists in development");
2113
2106
  }
@@ -2121,15 +2114,15 @@ var reactRouterVitePlugin = () => {
2121
2114
  }
2122
2115
  },
2123
2116
  {
2124
- name: "react-router:dot-server",
2117
+ name: "react-router-dot-server",
2125
2118
  enforce: "pre",
2126
- async resolveId(id, importer, options) {
2119
+ async resolveId(id2, importer, options) {
2127
2120
  let isOptimizeDeps = viteCommand === "serve" && options?.scan === true;
2128
2121
  if (isOptimizeDeps || options?.ssr) return;
2129
- let isResolving = options?.custom?.["react-router:dot-server"] ?? false;
2122
+ let isResolving = options?.custom?.["react-router-dot-server"] ?? false;
2130
2123
  if (isResolving) return;
2131
- options.custom = { ...options.custom, "react-router:dot-server": true };
2132
- let resolved = await this.resolve(id, importer, options);
2124
+ options.custom = { ...options.custom, "react-router-dot-server": true };
2125
+ let resolved = await this.resolve(id2, importer, options);
2133
2126
  if (!resolved) return;
2134
2127
  let serverFileRE = /\.server(\.[cm]?[jt]sx?)?$/;
2135
2128
  let serverDirRE = /\/\.server\//;
@@ -2152,12 +2145,12 @@ var reactRouterVitePlugin = () => {
2152
2145
  [
2153
2146
  import_picocolors3.default.red(`Server-only module referenced by client`),
2154
2147
  "",
2155
- ` '${id}' imported by route '${importerShort}'`,
2148
+ ` '${id2}' imported by route '${importerShort}'`,
2156
2149
  "",
2157
2150
  ` React Router automatically removes server-code from these exports:`,
2158
2151
  ` ${serverOnlyExports}`,
2159
2152
  "",
2160
- ` But other route exports in '${importerShort}' depend on '${id}'.`,
2153
+ ` But other route exports in '${importerShort}' depend on '${id2}'.`,
2161
2154
  "",
2162
2155
  " See https://remix.run/docs/en/main/guides/vite#splitting-up-client-and-server-code",
2163
2156
  ""
@@ -2168,7 +2161,7 @@ var reactRouterVitePlugin = () => {
2168
2161
  [
2169
2162
  import_picocolors3.default.red(`Server-only module referenced by client`),
2170
2163
  "",
2171
- ` '${id}' imported by '${importerShort}'`,
2164
+ ` '${id2}' imported by '${importerShort}'`,
2172
2165
  "",
2173
2166
  " See https://remix.run/docs/en/main/guides/vite#splitting-up-client-and-server-code",
2174
2167
  ""
@@ -2177,12 +2170,12 @@ var reactRouterVitePlugin = () => {
2177
2170
  }
2178
2171
  },
2179
2172
  {
2180
- name: "react-router:dot-client",
2181
- async transform(code, id, options) {
2173
+ name: "react-router-dot-client",
2174
+ async transform(code, id2, options) {
2182
2175
  if (!options?.ssr) return;
2183
2176
  let clientFileRE = /\.client(\.[cm]?[jt]sx?)?$/;
2184
2177
  let clientDirRE = /\/\.client\//;
2185
- if (clientFileRE.test(id) || clientDirRE.test(id)) {
2178
+ if (clientFileRE.test(id2) || clientDirRE.test(id2)) {
2186
2179
  let exports2 = (0, import_es_module_lexer.parse)(code)[1];
2187
2180
  return {
2188
2181
  code: exports2.map(
@@ -2195,9 +2188,9 @@ var reactRouterVitePlugin = () => {
2195
2188
  },
2196
2189
  plugin,
2197
2190
  {
2198
- name: "react-router:route-exports",
2199
- async transform(code, id, options) {
2200
- let route = getRoute(ctx.reactRouterConfig, id);
2191
+ name: "react-router-route-exports",
2192
+ async transform(code, id2, options) {
2193
+ let route = getRoute(ctx.reactRouterConfig, id2);
2201
2194
  if (!route) return;
2202
2195
  if (!options?.ssr && !ctx.reactRouterConfig.ssr) {
2203
2196
  let serverOnlyExports = (0, import_es_module_lexer.parse)(code)[1].map((exp) => exp.n).filter((exp) => SERVER_ONLY_ROUTE_EXPORTS.includes(exp));
@@ -2214,7 +2207,7 @@ var reactRouterVitePlugin = () => {
2214
2207
  }
2215
2208
  }
2216
2209
  }
2217
- let [filepath] = id.split("?");
2210
+ let [filepath] = id2.split("?");
2218
2211
  let ast = (0, import_parser.parse)(code, { sourceType: "module" });
2219
2212
  if (!options?.ssr) {
2220
2213
  removeExports(ast, SERVER_ONLY_ROUTE_EXPORTS);
@@ -2222,23 +2215,22 @@ var reactRouterVitePlugin = () => {
2222
2215
  transform(ast);
2223
2216
  return generate2(ast, {
2224
2217
  sourceMaps: true,
2225
- filename: id,
2218
+ filename: id2,
2226
2219
  sourceFileName: filepath
2227
2220
  });
2228
2221
  }
2229
2222
  },
2230
2223
  {
2231
- name: "react-router:inject-hmr-runtime",
2224
+ name: "react-router-inject-hmr-runtime",
2232
2225
  enforce: "pre",
2233
- resolveId(id) {
2234
- if (id === virtualInjectHmrRuntime.id) {
2235
- return virtualInjectHmrRuntime.resolvedId;
2236
- }
2226
+ resolveId(id2) {
2227
+ if (id2 === injectHmrRuntimeId)
2228
+ return resolve3(injectHmrRuntimeId);
2237
2229
  },
2238
- async load(id) {
2239
- if (id !== virtualInjectHmrRuntime.resolvedId) return;
2230
+ async load(id2) {
2231
+ if (id2 !== resolve3(injectHmrRuntimeId)) return;
2240
2232
  return [
2241
- `import RefreshRuntime from "${virtualHmrRuntime.id}"`,
2233
+ `import RefreshRuntime from "${hmrRuntimeId}"`,
2242
2234
  "RefreshRuntime.injectIntoGlobalHook(window)",
2243
2235
  "window.$RefreshReg$ = () => {}",
2244
2236
  "window.$RefreshSig$ = () => (type) => type",
@@ -2247,13 +2239,13 @@ var reactRouterVitePlugin = () => {
2247
2239
  }
2248
2240
  },
2249
2241
  {
2250
- name: "react-router:hmr-runtime",
2242
+ name: "react-router-hmr-runtime",
2251
2243
  enforce: "pre",
2252
- resolveId(id) {
2253
- if (id === virtualHmrRuntime.id) return virtualHmrRuntime.resolvedId;
2244
+ resolveId(id2) {
2245
+ if (id2 === hmrRuntimeId) return resolve3(hmrRuntimeId);
2254
2246
  },
2255
- async load(id) {
2256
- if (id !== virtualHmrRuntime.resolvedId) return;
2247
+ async load(id2) {
2248
+ if (id2 !== resolve3(hmrRuntimeId)) return;
2257
2249
  let reactRefreshDir = path4.dirname(
2258
2250
  require.resolve("react-refresh/package.json")
2259
2251
  );
@@ -2273,11 +2265,11 @@ var reactRouterVitePlugin = () => {
2273
2265
  }
2274
2266
  },
2275
2267
  {
2276
- name: "react-router:react-refresh-babel",
2277
- async transform(code, id, options) {
2268
+ name: "react-router-react-refresh-babel",
2269
+ async transform(code, id2, options) {
2278
2270
  if (viteCommand !== "serve") return;
2279
- if (id.includes("/node_modules/")) return;
2280
- let [filepath] = id.split("?");
2271
+ if (id2.includes("/node_modules/")) return;
2272
+ let [filepath] = id2.split("?");
2281
2273
  let extensionsRE = /\.(jsx?|tsx?|mdx?)$/;
2282
2274
  if (!extensionsRE.test(filepath)) return;
2283
2275
  let devRuntime = "react/jsx-dev-runtime";
@@ -2285,10 +2277,13 @@ var reactRouterVitePlugin = () => {
2285
2277
  let isJSX = filepath.endsWith("x");
2286
2278
  let useFastRefresh = !ssr && (isJSX || code.includes(devRuntime));
2287
2279
  if (!useFastRefresh) return;
2280
+ if (isRouteEntry(id2)) {
2281
+ return { code: addRefreshWrapper(ctx.reactRouterConfig, code, id2) };
2282
+ }
2288
2283
  let result = await babel.transformAsync(code, {
2289
2284
  babelrc: false,
2290
2285
  configFile: false,
2291
- filename: id,
2286
+ filename: id2,
2292
2287
  sourceFileName: filepath,
2293
2288
  parserOpts: {
2294
2289
  sourceType: "module",
@@ -2301,18 +2296,18 @@ var reactRouterVitePlugin = () => {
2301
2296
  code = result.code;
2302
2297
  let refreshContentRE = /\$Refresh(?:Reg|Sig)\$\(/;
2303
2298
  if (refreshContentRE.test(code)) {
2304
- code = addRefreshWrapper(ctx.reactRouterConfig, code, id);
2299
+ code = addRefreshWrapper(ctx.reactRouterConfig, code, id2);
2305
2300
  }
2306
2301
  return { code, map: result.map };
2307
2302
  }
2308
2303
  },
2309
2304
  {
2310
- name: "react-router:hmr-updates",
2305
+ name: "react-router-hmr-updates",
2311
2306
  async handleHotUpdate({ server, file, modules, read }) {
2312
2307
  let route = getRoute(ctx.reactRouterConfig, file);
2313
2308
  let hmrEventData = { route: null };
2314
2309
  if (route) {
2315
- let serverManifest = (await server.ssrLoadModule(virtual.serverManifest.id)).default;
2310
+ let serverManifest = (await server.ssrLoadModule(serverManifestId)).default;
2316
2311
  let oldRouteMetadata = serverManifest.routes[route.id];
2317
2312
  let newRouteMetadata = await getRouteMetadata(
2318
2313
  ctx,
@@ -2338,60 +2333,15 @@ var reactRouterVitePlugin = () => {
2338
2333
  });
2339
2334
  return modules;
2340
2335
  }
2341
- },
2342
- {
2343
- name: "react-router-server-change-trigger-client-hmr",
2344
- // This hook is only available in Vite v6+ so this is a no-op in v5.
2345
- // Previously the server and client modules were shared in a single module
2346
- // graph. This meant that changes to server code automatically resulted in
2347
- // client HMR updates. In Vite v6+ these module graphs are separate from
2348
- // each other so we need to manually trigger client HMR updates if server
2349
- // code has changed.
2350
- hotUpdate({ server, modules }) {
2351
- if (this.environment.name !== "ssr" && modules.length <= 0) {
2352
- return;
2353
- }
2354
- let clientModules = uniqueNodes(
2355
- modules.flatMap(
2356
- (mod) => getParentClientNodes(server.environments.client.moduleGraph, mod)
2357
- )
2358
- );
2359
- for (let clientModule of clientModules) {
2360
- server.environments.client.reloadModule(clientModule);
2361
- }
2362
- }
2363
2336
  }
2364
2337
  ];
2365
2338
  };
2366
- function getParentClientNodes(clientModuleGraph, module2) {
2367
- if (!module2.id) {
2368
- return [];
2369
- }
2370
- let clientModule = clientModuleGraph.getModuleById(module2.id);
2371
- if (clientModule) {
2372
- return [clientModule];
2373
- }
2374
- return [...module2.importers].flatMap(
2375
- (importer) => getParentClientNodes(clientModuleGraph, importer)
2376
- );
2377
- }
2378
- function uniqueNodes(nodes) {
2379
- let nodeUrls = /* @__PURE__ */ new Set();
2380
- let unique = [];
2381
- for (let node of nodes) {
2382
- if (nodeUrls.has(node.url)) {
2383
- continue;
2384
- }
2385
- nodeUrls.add(node.url);
2386
- unique.push(node);
2387
- }
2388
- return unique;
2389
- }
2390
- function addRefreshWrapper(reactRouterConfig, code, id) {
2391
- let route = getRoute(reactRouterConfig, id);
2392
- let acceptExports = route ? [
2339
+ function addRefreshWrapper(reactRouterConfig, code, id2) {
2340
+ let route = getRoute(reactRouterConfig, id2);
2341
+ let acceptExports = route || isRouteEntry(id2) ? [
2393
2342
  "clientAction",
2394
2343
  "clientLoader",
2344
+ "clientMiddleware",
2395
2345
  "handle",
2396
2346
  "meta",
2397
2347
  "links",
@@ -2399,10 +2349,10 @@ function addRefreshWrapper(reactRouterConfig, code, id) {
2399
2349
  ] : [];
2400
2350
  return "\n\n" + withCommentBoundaries(
2401
2351
  "REACT REFRESH HEADER",
2402
- REACT_REFRESH_HEADER.replaceAll("__SOURCE__", JSON.stringify(id))
2352
+ REACT_REFRESH_HEADER.replaceAll("__SOURCE__", JSON.stringify(id2))
2403
2353
  ) + "\n\n" + withCommentBoundaries("REACT REFRESH BODY", code) + "\n\n" + withCommentBoundaries(
2404
2354
  "REACT REFRESH FOOTER",
2405
- REACT_REFRESH_FOOTER.replaceAll("__SOURCE__", JSON.stringify(id)).replaceAll("__ACCEPT_EXPORTS__", JSON.stringify(acceptExports)).replaceAll("__ROUTE_ID__", JSON.stringify(route?.id))
2355
+ REACT_REFRESH_FOOTER.replaceAll("__SOURCE__", JSON.stringify(id2)).replaceAll("__ACCEPT_EXPORTS__", JSON.stringify(acceptExports)).replaceAll("__ROUTE_ID__", JSON.stringify(route?.id))
2406
2356
  ) + "\n";
2407
2357
  }
2408
2358
  function withCommentBoundaries(label, text) {
@@ -2415,7 +2365,7 @@ ${text}
2415
2365
  ${end}`;
2416
2366
  }
2417
2367
  var REACT_REFRESH_HEADER = `
2418
- import RefreshRuntime from "${virtualHmrRuntime.id}";
2368
+ import RefreshRuntime from "${hmrRuntimeId}";
2419
2369
 
2420
2370
  const inWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;
2421
2371
  let prevRefreshReg;
@@ -2501,7 +2451,7 @@ async function getPrerenderBuildAndHandler(viteConfig, reactRouterConfig, server
2501
2451
  serverBuildDirectory,
2502
2452
  reactRouterConfig.serverBuildFile
2503
2453
  );
2504
- let build = await import(url.pathToFileURL(serverBuildPath).toString());
2454
+ let build = await import(url2.pathToFileURL(serverBuildPath).toString());
2505
2455
  let { createRequestHandler: createHandler } = await import("react-router");
2506
2456
  return {
2507
2457
  build,
@@ -2724,6 +2674,8 @@ function createPrerenderRoutes(manifest, parentId = "", routesByParentId = group
2724
2674
  loader: route.module.loader ? () => null : void 0,
2725
2675
  action: void 0,
2726
2676
  handle: route.module.handle
2677
+ // middleware is not necessary here since we just need to know which
2678
+ // routes have loaders so we know what paths to prerender
2727
2679
  };
2728
2680
  return route.index ? {
2729
2681
  index: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-router/dev",
3
- "version": "0.0.0-experimental-6844c5934",
3
+ "version": "0.0.0-experimental-e41ede670",
4
4
  "description": "Dev tools and CLI for React Router",
5
5
  "homepage": "https://reactrouter.com",
6
6
  "bugs": {
@@ -80,8 +80,8 @@
80
80
  "semver": "^7.3.7",
81
81
  "set-cookie-parser": "^2.6.0",
82
82
  "valibot": "^0.41.0",
83
- "vite-node": "3.0.0-beta.2",
84
- "@react-router/node": "0.0.0-experimental-6844c5934"
83
+ "vite-node": "^1.6.0",
84
+ "@react-router/node": "0.0.0-experimental-e41ede670"
85
85
  },
86
86
  "devDependencies": {
87
87
  "@types/babel__core": "^7.20.5",
@@ -93,7 +93,7 @@
93
93
  "@types/gunzip-maybe": "^1.4.0",
94
94
  "@types/jsesc": "^3.0.1",
95
95
  "@types/lodash": "^4.14.182",
96
- "@types/node": "^20.0.0",
96
+ "@types/node": "^18.17.1",
97
97
  "@types/npmcli__package-json": "^4.0.0",
98
98
  "@types/picomatch": "^2.3.0",
99
99
  "@types/prettier": "^2.7.3",
@@ -107,18 +107,18 @@
107
107
  "tiny-invariant": "^1.2.0",
108
108
  "tsup": "^8.3.0",
109
109
  "typescript": "^5.1.6",
110
- "vite": "^6.0.0",
110
+ "vite": "^5.1.0",
111
111
  "wireit": "0.14.9",
112
112
  "wrangler": "^3.28.2",
113
- "@react-router/serve": "0.0.0-experimental-6844c5934",
114
- "react-router": "^0.0.0-experimental-6844c5934"
113
+ "@react-router/serve": "0.0.0-experimental-e41ede670",
114
+ "react-router": "^0.0.0-experimental-e41ede670"
115
115
  },
116
116
  "peerDependencies": {
117
117
  "typescript": "^5.1.0",
118
- "vite": "^5.1.0 || ^6.0.0",
118
+ "vite": "^5.1.0",
119
119
  "wrangler": "^3.28.2",
120
- "react-router": "^0.0.0-experimental-6844c5934",
121
- "@react-router/serve": "^0.0.0-experimental-6844c5934"
120
+ "@react-router/serve": "^0.0.0-experimental-e41ede670",
121
+ "react-router": "^0.0.0-experimental-e41ede670"
122
122
  },
123
123
  "peerDependenciesMeta": {
124
124
  "@react-router/serve": {