@react-router/dev 0.0.0-experimental-2bfe0a2f2 → 0.0.0-experimental-d312c78a4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * @react-router/dev v0.0.0-experimental-2bfe0a2f2
3
+ * @react-router/dev v0.0.0-experimental-d312c78a4
4
4
  *
5
5
  * Copyright (c) Remix Software Inc.
6
6
  *
@@ -55,26 +55,55 @@ var init_invariant = __esm({
55
55
  }
56
56
  });
57
57
 
58
- // vite/import-vite-esm-sync.ts
59
- async function preloadViteEsm() {
60
- vite = await import("vite");
58
+ // config/is-react-router-repo.ts
59
+ function isReactRouterRepo() {
60
+ let serverRuntimePath = import_pathe.default.dirname(
61
+ require.resolve("@react-router/node/package.json")
62
+ );
63
+ let serverRuntimeParentDir = import_pathe.default.basename(
64
+ import_pathe.default.resolve(serverRuntimePath, "..")
65
+ );
66
+ return serverRuntimeParentDir === "packages";
67
+ }
68
+ var import_pathe;
69
+ var init_is_react_router_repo = __esm({
70
+ "config/is-react-router-repo.ts"() {
71
+ "use strict";
72
+ import_pathe = __toESM(require("pathe"));
73
+ }
74
+ });
75
+
76
+ // vite/vite.ts
77
+ async function preloadVite() {
78
+ vite = await import(viteImportSpecifier);
61
79
  }
62
- function importViteEsmSync() {
63
- invariant(vite, "importViteEsmSync() called before preloadViteEsm()");
80
+ function getVite() {
81
+ invariant(vite, "getVite() called before preloadVite()");
64
82
  return vite;
65
83
  }
66
- var vite;
67
- var init_import_vite_esm_sync = __esm({
68
- "vite/import-vite-esm-sync.ts"() {
84
+ var import_pathe2, vite, viteImportSpecifier;
85
+ var init_vite = __esm({
86
+ "vite/vite.ts"() {
69
87
  "use strict";
88
+ import_pathe2 = __toESM(require("pathe"));
70
89
  init_invariant();
90
+ init_is_react_router_repo();
91
+ viteImportSpecifier = isReactRouterRepo() ? (
92
+ // Support testing against different versions of Vite by ensuring that Vite
93
+ // is resolved from the current working directory when running within this
94
+ // repo. If we don't do this, Vite will always be imported relative to this
95
+ // file, which means that it will always resolve to Vite 6.
96
+ `file:///${import_pathe2.default.normalize(
97
+ require.resolve("vite/package.json", { paths: [process.cwd()] })
98
+ ).replace("package.json", "dist/node/index.js")}`
99
+ ) : "vite";
71
100
  }
72
101
  });
73
102
 
74
103
  // vite/vite-node.ts
75
104
  async function createContext(viteConfig = {}) {
76
- await preloadViteEsm();
77
- const vite2 = importViteEsmSync();
105
+ await preloadVite();
106
+ const vite2 = getVite();
78
107
  const devServer = await vite2.createServer(
79
108
  vite2.mergeConfig(
80
109
  {
@@ -100,11 +129,11 @@ async function createContext(viteConfig = {}) {
100
129
  const runner = new import_client.ViteNodeRunner({
101
130
  root: devServer.config.root,
102
131
  base: devServer.config.base,
103
- fetchModule(id2) {
104
- return server.fetchModule(id2);
132
+ fetchModule(id) {
133
+ return server.fetchModule(id);
105
134
  },
106
- resolveId(id2, importer) {
107
- return server.resolveId(id2, importer);
135
+ resolveId(id, importer) {
136
+ return server.resolveId(id, importer);
108
137
  }
109
138
  });
110
139
  return { devServer, server, runner };
@@ -116,7 +145,7 @@ var init_vite_node = __esm({
116
145
  import_server = require("vite-node/server");
117
146
  import_client = require("vite-node/client");
118
147
  import_source_map = require("vite-node/source-map");
119
- init_import_vite_esm_sync();
148
+ init_vite();
120
149
  }
121
150
  });
122
151
 
@@ -149,7 +178,7 @@ function validateRouteConfig({
149
178
  `Route config in "${routeConfigFile}" is invalid.`,
150
179
  root ? `${root}` : [],
151
180
  nested ? Object.entries(nested).map(
152
- ([path8, message]) => `Path: routes.${path8}
181
+ ([path10, message]) => `Path: routes.${path10}
153
182
  ${message}`
154
183
  ) : []
155
184
  ].flat().join("\n\n")
@@ -160,24 +189,24 @@ ${message}`
160
189
  function configRoutesToRouteManifest(appDirectory, routes2, rootId = "root") {
161
190
  let routeManifest = {};
162
191
  function walk(route, parentId) {
163
- let id2 = route.id || createRouteId(route.file);
192
+ let id = route.id || createRouteId(route.file);
164
193
  let manifestItem = {
165
- id: id2,
194
+ id,
166
195
  parentId,
167
196
  file: Path.isAbsolute(route.file) ? Path.relative(appDirectory, route.file) : route.file,
168
197
  path: route.path,
169
198
  index: route.index,
170
199
  caseSensitive: route.caseSensitive
171
200
  };
172
- if (routeManifest.hasOwnProperty(id2)) {
201
+ if (routeManifest.hasOwnProperty(id)) {
173
202
  throw new Error(
174
- `Unable to define routes with duplicate route id: "${id2}"`
203
+ `Unable to define routes with duplicate route id: "${id}"`
175
204
  );
176
205
  }
177
- routeManifest[id2] = manifestItem;
206
+ routeManifest[id] = manifestItem;
178
207
  if (route.children) {
179
208
  for (let child of route.children) {
180
- walk(child, id2);
209
+ walk(child, id);
181
210
  }
182
211
  }
183
212
  }
@@ -288,6 +317,7 @@ async function resolveConfig({
288
317
  basename: basename2,
289
318
  buildDirectory: userBuildDirectory,
290
319
  buildEnd,
320
+ future: userFuture,
291
321
  prerender,
292
322
  serverBuildFile,
293
323
  serverBundles,
@@ -307,13 +337,13 @@ async function resolveConfig({
307
337
  "The `prerender` config must be a boolean, an array of string paths, or a function returning a boolean or array of string paths"
308
338
  );
309
339
  }
310
- let appDirectory = import_pathe.default.resolve(root, userAppDirectory || "app");
311
- let buildDirectory = import_pathe.default.resolve(root, userBuildDirectory);
340
+ let appDirectory = import_pathe3.default.resolve(root, userAppDirectory || "app");
341
+ let buildDirectory = import_pathe3.default.resolve(root, userBuildDirectory);
312
342
  let rootRouteFile = findEntry(appDirectory, "root");
313
343
  if (!rootRouteFile) {
314
- let rootRouteDisplayPath = import_pathe.default.relative(
344
+ let rootRouteDisplayPath = import_pathe3.default.relative(
315
345
  root,
316
- import_pathe.default.join(appDirectory, "root.tsx")
346
+ import_pathe3.default.join(appDirectory, "root.tsx")
317
347
  );
318
348
  return err(
319
349
  `Could not find a root route module in the app directory as "${rootRouteDisplayPath}"`
@@ -325,15 +355,15 @@ async function resolveConfig({
325
355
  let routeConfigFile = findEntry(appDirectory, "routes");
326
356
  try {
327
357
  if (!routeConfigFile) {
328
- let routeConfigDisplayPath = import_pathe.default.relative(
358
+ let routeConfigDisplayPath = import_pathe3.default.relative(
329
359
  root,
330
- import_pathe.default.join(appDirectory, "routes.ts")
360
+ import_pathe3.default.join(appDirectory, "routes.ts")
331
361
  );
332
362
  return err(`Route config file not found at "${routeConfigDisplayPath}".`);
333
363
  }
334
364
  setAppDirectory(appDirectory);
335
365
  let routeConfigExport = (await viteNodeContext.runner.executeFile(
336
- import_pathe.default.join(appDirectory, routeConfigFile)
366
+ import_pathe3.default.join(appDirectory, routeConfigFile)
337
367
  )).default;
338
368
  let routeConfig = await routeConfigExport;
339
369
  let result = validateRouteConfig({
@@ -353,14 +383,15 @@ async function resolveConfig({
353
383
  import_picocolors.default.red(`Route config in "${routeConfigFile}" is invalid.`),
354
384
  "",
355
385
  error.loc?.file && error.loc?.column && error.frame ? [
356
- import_pathe.default.relative(appDirectory, error.loc.file) + ":" + error.loc.line + ":" + error.loc.column,
386
+ import_pathe3.default.relative(appDirectory, error.loc.file) + ":" + error.loc.line + ":" + error.loc.column,
357
387
  error.frame.trim?.()
358
388
  ] : error.stack
359
389
  ].flat().join("\n")
360
390
  );
361
391
  }
362
392
  let future = {
363
- unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false
393
+ unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false,
394
+ unstable_routeChunks: userFuture?.unstable_routeChunks ?? false
364
395
  };
365
396
  let reactRouterConfig = deepFreeze({
366
397
  appDirectory,
@@ -425,8 +456,8 @@ async function createConfigLoader({
425
456
  );
426
457
  fsWatcher.on("all", async (...args) => {
427
458
  let [event, rawFilepath] = args;
428
- let filepath = import_pathe.default.normalize(rawFilepath);
429
- let appFileAddedOrRemoved = appDirectory && (event === "add" || event === "unlink") && filepath.startsWith(import_pathe.default.normalize(appDirectory));
459
+ let filepath = import_pathe3.default.normalize(rawFilepath);
460
+ let appFileAddedOrRemoved = appDirectory && (event === "add" || event === "unlink") && filepath.startsWith(import_pathe3.default.normalize(appDirectory));
430
461
  let configCodeUpdated = Boolean(
431
462
  viteNodeContext.devServer?.moduleGraph.getModuleById(filepath)
432
463
  );
@@ -467,25 +498,16 @@ async function createConfigLoader({
467
498
  }
468
499
  };
469
500
  }
470
- function isInReactRouterMonorepo() {
471
- let serverRuntimePath = import_pathe.default.dirname(
472
- require.resolve("@react-router/node/package.json")
473
- );
474
- let serverRuntimeParentDir = import_pathe.default.basename(
475
- import_pathe.default.resolve(serverRuntimePath, "..")
476
- );
477
- return serverRuntimeParentDir === "packages";
478
- }
479
501
  function findEntry(dir, basename2, options) {
480
502
  for (let ext of entryExts) {
481
- let file = import_pathe.default.resolve(dir, basename2 + ext);
503
+ let file = import_pathe3.default.resolve(dir, basename2 + ext);
482
504
  if (import_node_fs.default.existsSync(file)) {
483
- return options?.absolute ?? false ? file : import_pathe.default.relative(dir, file);
505
+ return options?.absolute ?? false ? file : import_pathe3.default.relative(dir, file);
484
506
  }
485
507
  }
486
508
  return void 0;
487
509
  }
488
- var import_node_fs, import_node_child_process, import_package_json, import_pathe, import_chokidar, import_picocolors, import_pick2, import_omit, import_cloneDeep, import_isEqual, excludedConfigPresetKeys, branchRouteProperties, configRouteToBranchRoute, mergeReactRouterConfig, deepFreeze, ssrExternals, entryExts;
510
+ var import_node_fs, import_node_child_process, import_package_json, import_pathe3, import_chokidar, import_picocolors, import_pick2, import_omit, import_cloneDeep, import_isEqual, excludedConfigPresetKeys, branchRouteProperties, configRouteToBranchRoute, mergeReactRouterConfig, deepFreeze, ssrExternals, entryExts;
489
511
  var init_config = __esm({
490
512
  "config/config.ts"() {
491
513
  "use strict";
@@ -493,7 +515,7 @@ var init_config = __esm({
493
515
  import_node_child_process = require("child_process");
494
516
  import_package_json = __toESM(require("@npmcli/package-json"));
495
517
  init_vite_node();
496
- import_pathe = __toESM(require("pathe"));
518
+ import_pathe3 = __toESM(require("pathe"));
497
519
  import_chokidar = __toESM(require("chokidar"));
498
520
  import_picocolors = __toESM(require("picocolors"));
499
521
  import_pick2 = __toESM(require("lodash/pick"));
@@ -502,6 +524,7 @@ var init_config = __esm({
502
524
  import_isEqual = __toESM(require("lodash/isEqual"));
503
525
  init_routes();
504
526
  init_detectPackageManager();
527
+ init_is_react_router_repo();
505
528
  excludedConfigPresetKeys = ["presets"];
506
529
  branchRouteProperties = [
507
530
  "id",
@@ -548,7 +571,7 @@ var init_config = __esm({
548
571
  });
549
572
  return o;
550
573
  };
551
- ssrExternals = isInReactRouterMonorepo() ? [
574
+ ssrExternals = isReactRouterRepo() ? [
552
575
  // This is only needed within this repo because these packages
553
576
  // are linked to a directory outside of node_modules so Vite
554
577
  // treats them as internal code by default.
@@ -636,8 +659,6 @@ function generate(ctx, route) {
636
659
  export type HeadersArgs = T.HeadersArgs
637
660
  export type HeadersFunction = (args: HeadersArgs) => Headers | HeadersInit
638
661
 
639
- export type MiddlewareArgs = T.CreateServerMiddlewareArgs<Info>
640
- export type ClientMiddlewareArgs = T.CreateClientMiddlewareArgs<Info>
641
662
  export type LoaderArgs = T.CreateServerLoaderArgs<Info>
642
663
  export type ClientLoaderArgs = T.CreateClientLoaderArgs<Info>
643
664
  export type ActionArgs = T.CreateServerActionArgs<Info>
@@ -697,7 +718,7 @@ var init_generate = __esm({
697
718
  Path3 = __toESM(require("pathe"));
698
719
  Pathe2 = __toESM(require("pathe/utils"));
699
720
  init_paths();
700
- noExtension = (path8) => Path3.join(Path3.dirname(path8), Pathe2.filename(path8));
721
+ noExtension = (path10) => Path3.join(Path3.dirname(path10), Pathe2.filename(path10));
701
722
  }
702
723
  });
703
724
 
@@ -793,34 +814,41 @@ var init_node_adapter = __esm({
793
814
  });
794
815
 
795
816
  // vite/resolve-file-url.ts
796
- var path2;
817
+ var path4;
797
818
  var init_resolve_file_url = __esm({
798
819
  "vite/resolve-file-url.ts"() {
799
820
  "use strict";
800
- path2 = __toESM(require("path"));
801
- init_import_vite_esm_sync();
821
+ path4 = __toESM(require("path"));
822
+ init_vite();
802
823
  }
803
824
  });
804
825
 
805
826
  // vite/styles.ts
806
- var path3, import_react_router, cssFileRegExp, cssModulesRegExp;
827
+ var path5, import_react_router, cssFileRegExp, cssModulesRegExp;
807
828
  var init_styles = __esm({
808
829
  "vite/styles.ts"() {
809
830
  "use strict";
810
- path3 = __toESM(require("path"));
831
+ path5 = __toESM(require("path"));
811
832
  import_react_router = require("react-router");
812
833
  init_resolve_file_url();
834
+ init_vite();
813
835
  cssFileRegExp = /\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:$|\?)/;
814
836
  cssModulesRegExp = new RegExp(`\\.module${cssFileRegExp.source}`);
815
837
  }
816
838
  });
817
839
 
818
- // vite/vmod.ts
819
- var id;
820
- var init_vmod = __esm({
821
- "vite/vmod.ts"() {
840
+ // vite/virtual-module.ts
841
+ function create(name) {
842
+ let id = `virtual:react-router/${name}`;
843
+ return {
844
+ id,
845
+ resolvedId: `\0${id}`,
846
+ url: `/@id/__x00__${id}`
847
+ };
848
+ }
849
+ var init_virtual_module = __esm({
850
+ "vite/virtual-module.ts"() {
822
851
  "use strict";
823
- id = (name) => `virtual:react-router/${name}`;
824
852
  }
825
853
  });
826
854
 
@@ -841,15 +869,46 @@ var init_remove_exports = __esm({
841
869
  }
842
870
  });
843
871
 
872
+ // vite/cache.ts
873
+ var init_cache = __esm({
874
+ "vite/cache.ts"() {
875
+ "use strict";
876
+ }
877
+ });
878
+
879
+ // vite/route-chunks.ts
880
+ var routeChunkExportNames, routeChunkNames, routeChunkQueryStringPrefix, routeChunkQueryStrings;
881
+ var init_route_chunks = __esm({
882
+ "vite/route-chunks.ts"() {
883
+ "use strict";
884
+ init_invariant();
885
+ init_cache();
886
+ init_babel();
887
+ routeChunkExportNames = [
888
+ "clientAction",
889
+ "clientLoader",
890
+ "HydrateFallback"
891
+ ];
892
+ routeChunkNames = ["main", ...routeChunkExportNames];
893
+ routeChunkQueryStringPrefix = "?route-chunk=";
894
+ routeChunkQueryStrings = {
895
+ main: `${routeChunkQueryStringPrefix}main`,
896
+ clientAction: `${routeChunkQueryStringPrefix}clientAction`,
897
+ clientLoader: `${routeChunkQueryStringPrefix}clientLoader`,
898
+ HydrateFallback: `${routeChunkQueryStringPrefix}HydrateFallback`
899
+ };
900
+ }
901
+ });
902
+
844
903
  // vite/with-props.ts
845
- var import_dedent2, vmodId;
904
+ var import_dedent2, vmod;
846
905
  var init_with_props = __esm({
847
906
  "vite/with-props.ts"() {
848
907
  "use strict";
849
908
  import_dedent2 = __toESM(require("dedent"));
850
909
  init_babel();
851
- init_vmod();
852
- vmodId = id("with-props");
910
+ init_virtual_module();
911
+ vmod = create("with-props");
853
912
  }
854
913
  });
855
914
 
@@ -859,7 +918,7 @@ async function resolveViteConfig({
859
918
  mode,
860
919
  root
861
920
  }) {
862
- let vite2 = await import("vite");
921
+ let vite2 = getVite();
863
922
  let viteConfig = await vite2.resolveConfig(
864
923
  { mode, configFile, root },
865
924
  "build",
@@ -909,17 +968,17 @@ async function loadPluginContext({
909
968
  function findConfig(dir, basename2, extensions) {
910
969
  for (let ext of extensions) {
911
970
  let name = basename2 + ext;
912
- let file = path4.join(dir, name);
971
+ let file = path6.join(dir, name);
913
972
  if (fse.existsSync(file)) return file;
914
973
  }
915
974
  return void 0;
916
975
  }
917
- 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;
976
+ var import_node_crypto, path6, url, fse, babel, import_react_router2, import_es_module_lexer, import_jsesc, import_picocolors3, virtualHmrRuntime, virtualInjectHmrRuntime, virtual, getServerBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER;
918
977
  var init_plugin = __esm({
919
978
  "vite/plugin.ts"() {
920
979
  "use strict";
921
980
  import_node_crypto = require("crypto");
922
- path4 = __toESM(require("path"));
981
+ path6 = __toESM(require("path"));
923
982
  url = __toESM(require("url"));
924
983
  fse = __toESM(require("fs-extra"));
925
984
  babel = __toESM(require("@babel/core"));
@@ -932,33 +991,36 @@ var init_plugin = __esm({
932
991
  init_babel();
933
992
  init_node_adapter();
934
993
  init_styles();
935
- init_vmod();
994
+ init_virtual_module();
936
995
  init_resolve_file_url();
937
996
  init_combine_urls();
938
997
  init_remove_exports();
939
- init_import_vite_esm_sync();
998
+ init_route_chunks();
999
+ init_vite();
940
1000
  init_config();
941
1001
  init_with_props();
942
- serverBuildId = id("server-build");
943
- serverManifestId = id("server-manifest");
944
- browserManifestId = id("browser-manifest");
945
- hmrRuntimeId = id("hmr-runtime");
946
- injectHmrRuntimeId = id("inject-hmr-runtime");
947
- getServerBuildDirectory = (ctx) => path4.join(
1002
+ virtualHmrRuntime = create("hmr-runtime");
1003
+ virtualInjectHmrRuntime = create("inject-hmr-runtime");
1004
+ virtual = {
1005
+ serverBuild: create("server-build"),
1006
+ serverManifest: create("server-manifest"),
1007
+ browserManifest: create("browser-manifest")
1008
+ };
1009
+ getServerBuildDirectory = (ctx) => path6.join(
948
1010
  ctx.reactRouterConfig.buildDirectory,
949
1011
  "server",
950
1012
  ...ctx.serverBundleBuildConfig ? [ctx.serverBundleBuildConfig.serverBundleId] : []
951
1013
  );
952
- defaultEntriesDir = path4.resolve(
953
- path4.dirname(require.resolve("@react-router/dev/package.json")),
1014
+ defaultEntriesDir = path6.resolve(
1015
+ path6.dirname(require.resolve("@react-router/dev/package.json")),
954
1016
  "dist",
955
1017
  "config",
956
1018
  "defaults"
957
1019
  );
958
- defaultEntries = fse.readdirSync(defaultEntriesDir).map((filename3) => path4.join(defaultEntriesDir, filename3));
1020
+ defaultEntries = fse.readdirSync(defaultEntriesDir).map((filename3) => path6.join(defaultEntriesDir, filename3));
959
1021
  invariant(defaultEntries.length > 0, "No default entries found");
960
1022
  REACT_REFRESH_HEADER = `
961
- import RefreshRuntime from "${hmrRuntimeId}";
1023
+ import RefreshRuntime from "${virtualHmrRuntime.id}";
962
1024
 
963
1025
  const inWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;
964
1026
  let prevRefreshReg;
@@ -977,21 +1039,7 @@ if (import.meta.hot && !inWebWorker) {
977
1039
  RefreshRuntime.register(type, __SOURCE__ + " " + id)
978
1040
  };
979
1041
  window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform;
980
- }`.trim();
981
- REACT_REFRESH_FOOTER = `
982
- if (import.meta.hot && !inWebWorker) {
983
- window.$RefreshReg$ = prevRefreshReg;
984
- window.$RefreshSig$ = prevRefreshSig;
985
- RefreshRuntime.__hmr_import(import.meta.url).then((currentExports) => {
986
- RefreshRuntime.registerExportsForReactRefresh(__SOURCE__, currentExports);
987
- import.meta.hot.accept((nextExports) => {
988
- if (!nextExports) return;
989
- __ROUTE_ID__ && window.__reactRouterRouteModuleUpdates.set(__ROUTE_ID__, nextExports);
990
- const invalidateMessage = RefreshRuntime.validateRefreshBoundaryAndEnqueueUpdate(currentExports, nextExports, __ACCEPT_EXPORTS__);
991
- if (invalidateMessage) import.meta.hot.invalidate(invalidateMessage);
992
- });
993
- });
994
- }`.trim();
1042
+ }`.replaceAll("\n", "");
995
1043
  }
996
1044
  });
997
1045
 
@@ -1041,8 +1089,8 @@ __export(build_exports, {
1041
1089
  });
1042
1090
  function getAddressableRoutes(routes2) {
1043
1091
  let nonAddressableIds = /* @__PURE__ */ new Set();
1044
- for (let id2 in routes2) {
1045
- let route = routes2[id2];
1092
+ for (let id in routes2) {
1093
+ let route = routes2[id];
1046
1094
  if (route.index) {
1047
1095
  invariant(
1048
1096
  route.parentId,
@@ -1051,7 +1099,7 @@ function getAddressableRoutes(routes2) {
1051
1099
  nonAddressableIds.add(route.parentId);
1052
1100
  }
1053
1101
  if (typeof route.path !== "string" && !route.index) {
1054
- nonAddressableIds.add(id2);
1102
+ nonAddressableIds.add(id);
1055
1103
  }
1056
1104
  }
1057
1105
  return Object.values(routes2).filter(
@@ -1082,12 +1130,12 @@ async function getServerBuilds(ctx) {
1082
1130
  let { normalizePath } = await import("vite");
1083
1131
  let resolvedAppDirectory = import_node_path2.default.resolve(rootDirectory, appDirectory);
1084
1132
  let rootRelativeRoutes = Object.fromEntries(
1085
- Object.entries(routes2).map(([id2, route]) => {
1133
+ Object.entries(routes2).map(([id, route]) => {
1086
1134
  let filePath = import_node_path2.default.join(resolvedAppDirectory, route.file);
1087
1135
  let rootRelativeFilePath = normalizePath(
1088
1136
  import_node_path2.default.relative(rootDirectory, filePath)
1089
1137
  );
1090
- return [id2, { ...route, file: rootRelativeFilePath }];
1138
+ return [id, { ...route, file: rootRelativeFilePath }];
1091
1139
  })
1092
1140
  );
1093
1141
  let buildManifest = {
@@ -1188,7 +1236,7 @@ async function build(root, {
1188
1236
  sourcemapClient,
1189
1237
  sourcemapServer
1190
1238
  }) {
1191
- await preloadViteEsm();
1239
+ await preloadVite();
1192
1240
  let viteConfig = await resolveViteConfig({ configFile, mode, root });
1193
1241
  const ctx = await extractPluginContext(viteConfig);
1194
1242
  if (!ctx) {
@@ -1198,7 +1246,7 @@ async function build(root, {
1198
1246
  process.exit(1);
1199
1247
  }
1200
1248
  let { reactRouterConfig } = ctx;
1201
- let vite2 = await import("vite");
1249
+ let vite2 = getVite();
1202
1250
  async function viteBuild({
1203
1251
  ssr,
1204
1252
  serverBundleBuildConfig
@@ -1255,7 +1303,7 @@ var init_build = __esm({
1255
1303
  init_plugin();
1256
1304
  init_config();
1257
1305
  init_invariant();
1258
- init_import_vite_esm_sync();
1306
+ init_vite();
1259
1307
  }
1260
1308
  });
1261
1309
 
@@ -1276,8 +1324,8 @@ async function dev(root, {
1276
1324
  port,
1277
1325
  strictPort
1278
1326
  }) {
1279
- await preloadViteEsm();
1280
- let vite2 = await import("vite");
1327
+ await preloadVite();
1328
+ let vite2 = getVite();
1281
1329
  let server = await vite2.createServer({
1282
1330
  root,
1283
1331
  mode,
@@ -1317,7 +1365,7 @@ var init_dev = __esm({
1317
1365
  "vite/dev.ts"() {
1318
1366
  "use strict";
1319
1367
  import_picocolors6 = __toESM(require("picocolors"));
1320
- init_import_vite_esm_sync();
1368
+ init_vite();
1321
1369
  init_profiler();
1322
1370
  }
1323
1371
  });
@@ -1328,7 +1376,7 @@ var import_semver = __toESM(require("semver"));
1328
1376
  var import_picocolors8 = __toESM(require("picocolors"));
1329
1377
 
1330
1378
  // cli/commands.ts
1331
- var path7 = __toESM(require("path"));
1379
+ var path9 = __toESM(require("path"));
1332
1380
  var import_fs_extra2 = __toESM(require("fs-extra"));
1333
1381
  var import_package_json2 = __toESM(require("@npmcli/package-json"));
1334
1382
  var import_exit_hook = __toESM(require("exit-hook"));
@@ -1414,7 +1462,7 @@ function transpile(tsx, options = {}) {
1414
1462
  // cli/commands.ts
1415
1463
  init_profiler();
1416
1464
  init_typegen();
1417
- init_import_vite_esm_sync();
1465
+ init_vite();
1418
1466
  async function routes(reactRouterRoot, flags = {}) {
1419
1467
  let ctx = await loadPluginContext({
1420
1468
  root: reactRouterRoot,
@@ -1486,14 +1534,14 @@ async function generateEntry(entry, reactRouterRoot, flags = {}) {
1486
1534
  console.error(import_picocolors7.default.red(`No default server entry detected.`));
1487
1535
  return;
1488
1536
  }
1489
- let defaultsDirectory = path7.resolve(
1490
- path7.dirname(require.resolve("@react-router/dev/package.json")),
1537
+ let defaultsDirectory = path9.resolve(
1538
+ path9.dirname(require.resolve("@react-router/dev/package.json")),
1491
1539
  "dist",
1492
1540
  "config",
1493
1541
  "defaults"
1494
1542
  );
1495
- let defaultEntryClient = path7.resolve(defaultsDirectory, "entry.client.tsx");
1496
- let defaultEntryServer = path7.resolve(
1543
+ let defaultEntryClient = path9.resolve(defaultsDirectory, "entry.client.tsx");
1544
+ let defaultEntryServer = path9.resolve(
1497
1545
  defaultsDirectory,
1498
1546
  `entry.server.node.tsx`
1499
1547
  );
@@ -1502,7 +1550,7 @@ async function generateEntry(entry, reactRouterRoot, flags = {}) {
1502
1550
  let useTypeScript = flags.typescript ?? true;
1503
1551
  let outputExtension = useTypeScript ? "tsx" : "jsx";
1504
1552
  let outputEntry = `${entry}.${outputExtension}`;
1505
- let outputFile2 = path7.resolve(appDirectory, outputEntry);
1553
+ let outputFile2 = path9.resolve(appDirectory, outputEntry);
1506
1554
  if (!useTypeScript) {
1507
1555
  let javascript = transpile(contents, {
1508
1556
  cwd: rootDirectory,
@@ -1514,7 +1562,7 @@ async function generateEntry(entry, reactRouterRoot, flags = {}) {
1514
1562
  }
1515
1563
  console.log(
1516
1564
  import_picocolors7.default.blue(
1517
- `Entry file ${entry} created at ${path7.relative(
1565
+ `Entry file ${entry} created at ${path9.relative(
1518
1566
  rootDirectory,
1519
1567
  outputFile2
1520
1568
  )}.`
@@ -1523,10 +1571,10 @@ async function generateEntry(entry, reactRouterRoot, flags = {}) {
1523
1571
  }
1524
1572
  async function checkForEntry(rootDirectory, appDirectory, entries2) {
1525
1573
  for (let entry of entries2) {
1526
- let entryPath = path7.resolve(appDirectory, entry);
1574
+ let entryPath = path9.resolve(appDirectory, entry);
1527
1575
  let exists = await import_fs_extra2.default.pathExists(entryPath);
1528
1576
  if (exists) {
1529
- let relative8 = path7.relative(rootDirectory, entryPath);
1577
+ let relative8 = path9.relative(rootDirectory, entryPath);
1530
1578
  console.error(import_picocolors7.default.red(`Entry file ${relative8} already exists.`));
1531
1579
  return process.exit(1);
1532
1580
  }
@@ -1545,8 +1593,8 @@ async function createClientEntry(rootDirectory, appDirectory, inputFile) {
1545
1593
  async function typegen(root, flags) {
1546
1594
  root ??= process.cwd();
1547
1595
  if (flags.watch) {
1548
- await preloadViteEsm();
1549
- const vite2 = importViteEsmSync();
1596
+ await preloadVite();
1597
+ const vite2 = getVite();
1550
1598
  const logger = vite2.createLogger("info", { prefix: "[react-router]" });
1551
1599
  await watch(root, { logger });
1552
1600
  await new Promise(() => {
package/dist/config.d.ts CHANGED
@@ -38,6 +38,10 @@ type ServerBundlesBuildManifest = BaseBuildManifest & {
38
38
  type ServerModuleFormat = "esm" | "cjs";
39
39
  interface FutureConfig {
40
40
  unstable_optimizeDeps: boolean;
41
+ /**
42
+ * Automatically split route modules into multiple chunks when possible.
43
+ */
44
+ unstable_routeChunks?: boolean | "enforce";
41
45
  }
42
46
  type BuildManifest = DefaultBuildManifest | ServerBundlesBuildManifest;
43
47
  type BuildEndHook = (args: {
@@ -129,7 +133,7 @@ type ResolvedReactRouterConfig = Readonly<{
129
133
  /**
130
134
  * Enabled future flags
131
135
  */
132
- future: FutureConfig;
136
+ future: Required<FutureConfig>;
133
137
  /**
134
138
  * An array of URLs to prerender to HTML files at build time. Can also be a
135
139
  * function returning an array to dynamically generate URLs.
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-2bfe0a2f2
2
+ * @react-router/dev v0.0.0-experimental-d312c78a4
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-2bfe0a2f2
2
+ * @react-router/dev v0.0.0-experimental-d312c78a4
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *