@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/CHANGELOG.md +30 -0
- package/bin.js +13 -0
- package/dist/cli/index.js +166 -118
- package/dist/config.d.ts +5 -1
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/static/refresh-utils.cjs +1 -0
- package/dist/vite/cloudflare.js +48 -7
- package/dist/vite.js +1306 -349
- package/package.json +10 -10
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* @react-router/dev v0.0.0-experimental-
|
|
3
|
+
* @react-router/dev v0.0.0-experimental-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
|
-
//
|
|
59
|
-
|
|
60
|
-
|
|
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
|
|
63
|
-
invariant(vite, "
|
|
80
|
+
function getVite() {
|
|
81
|
+
invariant(vite, "getVite() called before preloadVite()");
|
|
64
82
|
return vite;
|
|
65
83
|
}
|
|
66
|
-
var vite;
|
|
67
|
-
var
|
|
68
|
-
"vite/
|
|
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
|
|
77
|
-
const vite2 =
|
|
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(
|
|
104
|
-
return server.fetchModule(
|
|
132
|
+
fetchModule(id) {
|
|
133
|
+
return server.fetchModule(id);
|
|
105
134
|
},
|
|
106
|
-
resolveId(
|
|
107
|
-
return server.resolveId(
|
|
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
|
-
|
|
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
|
-
([
|
|
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
|
|
192
|
+
let id = route.id || createRouteId(route.file);
|
|
164
193
|
let manifestItem = {
|
|
165
|
-
id
|
|
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(
|
|
201
|
+
if (routeManifest.hasOwnProperty(id)) {
|
|
173
202
|
throw new Error(
|
|
174
|
-
`Unable to define routes with duplicate route id: "${
|
|
203
|
+
`Unable to define routes with duplicate route id: "${id}"`
|
|
175
204
|
);
|
|
176
205
|
}
|
|
177
|
-
routeManifest[
|
|
206
|
+
routeManifest[id] = manifestItem;
|
|
178
207
|
if (route.children) {
|
|
179
208
|
for (let child of route.children) {
|
|
180
|
-
walk(child,
|
|
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 =
|
|
311
|
-
let buildDirectory =
|
|
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 =
|
|
344
|
+
let rootRouteDisplayPath = import_pathe3.default.relative(
|
|
315
345
|
root,
|
|
316
|
-
|
|
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 =
|
|
358
|
+
let routeConfigDisplayPath = import_pathe3.default.relative(
|
|
329
359
|
root,
|
|
330
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
429
|
-
let appFileAddedOrRemoved = appDirectory && (event === "add" || event === "unlink") && filepath.startsWith(
|
|
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 =
|
|
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 :
|
|
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,
|
|
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
|
-
|
|
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 =
|
|
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 = (
|
|
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
|
|
817
|
+
var path4;
|
|
797
818
|
var init_resolve_file_url = __esm({
|
|
798
819
|
"vite/resolve-file-url.ts"() {
|
|
799
820
|
"use strict";
|
|
800
|
-
|
|
801
|
-
|
|
821
|
+
path4 = __toESM(require("path"));
|
|
822
|
+
init_vite();
|
|
802
823
|
}
|
|
803
824
|
});
|
|
804
825
|
|
|
805
826
|
// vite/styles.ts
|
|
806
|
-
var
|
|
827
|
+
var path5, import_react_router, cssFileRegExp, cssModulesRegExp;
|
|
807
828
|
var init_styles = __esm({
|
|
808
829
|
"vite/styles.ts"() {
|
|
809
830
|
"use strict";
|
|
810
|
-
|
|
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/
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
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,
|
|
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
|
-
|
|
852
|
-
|
|
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 =
|
|
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 =
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
994
|
+
init_virtual_module();
|
|
936
995
|
init_resolve_file_url();
|
|
937
996
|
init_combine_urls();
|
|
938
997
|
init_remove_exports();
|
|
939
|
-
|
|
998
|
+
init_route_chunks();
|
|
999
|
+
init_vite();
|
|
940
1000
|
init_config();
|
|
941
1001
|
init_with_props();
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
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 =
|
|
953
|
-
|
|
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) =>
|
|
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 "${
|
|
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
|
-
}`.
|
|
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
|
|
1045
|
-
let route = routes2[
|
|
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(
|
|
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(([
|
|
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 [
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
|
1280
|
-
let vite2 =
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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 =
|
|
1490
|
-
|
|
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 =
|
|
1496
|
-
let defaultEntryServer =
|
|
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 =
|
|
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 ${
|
|
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 =
|
|
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 =
|
|
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
|
|
1549
|
-
const vite2 =
|
|
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
package/dist/routes.js
CHANGED