@react-router/dev 0.0.0-experimental-b571356c3 → 0.0.0-experimental-ab0e85b04
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 +240 -154
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/vite/cloudflare.js +163 -80
- package/dist/vite.js +368 -294
- package/package.json +6 -6
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-ab0e85b04
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) Remix Software Inc.
|
|
6
6
|
*
|
|
@@ -125,13 +125,15 @@ var init_ssr_externals = __esm({
|
|
|
125
125
|
// vite/vite-node.ts
|
|
126
126
|
async function createContext({
|
|
127
127
|
root,
|
|
128
|
-
mode
|
|
128
|
+
mode,
|
|
129
|
+
customLogger
|
|
129
130
|
}) {
|
|
130
131
|
await preloadVite();
|
|
131
132
|
const vite2 = getVite();
|
|
132
133
|
const devServer = await vite2.createServer({
|
|
133
134
|
root,
|
|
134
135
|
mode,
|
|
136
|
+
customLogger,
|
|
135
137
|
server: {
|
|
136
138
|
preTransformRequests: false,
|
|
137
139
|
hmr: false,
|
|
@@ -214,7 +216,7 @@ function validateRouteConfig({
|
|
|
214
216
|
`Route config in "${routeConfigFile}" is invalid.`,
|
|
215
217
|
root ? `${root}` : [],
|
|
216
218
|
nested ? Object.entries(nested).map(
|
|
217
|
-
([
|
|
219
|
+
([path8, message]) => `Path: routes.${path8}
|
|
218
220
|
${message}`
|
|
219
221
|
) : []
|
|
220
222
|
].flat().join("\n\n")
|
|
@@ -299,7 +301,8 @@ function err(error) {
|
|
|
299
301
|
async function resolveConfig({
|
|
300
302
|
root,
|
|
301
303
|
viteNodeContext,
|
|
302
|
-
reactRouterConfigFile
|
|
304
|
+
reactRouterConfigFile,
|
|
305
|
+
skipRoutes
|
|
303
306
|
}) {
|
|
304
307
|
let reactRouterUserConfig = {};
|
|
305
308
|
if (reactRouterConfigFile) {
|
|
@@ -415,45 +418,50 @@ async function resolveConfig({
|
|
|
415
418
|
`Could not find a root route module in the app directory as "${rootRouteDisplayPath}"`
|
|
416
419
|
);
|
|
417
420
|
}
|
|
418
|
-
let routes2 = {
|
|
419
|
-
|
|
420
|
-
};
|
|
421
|
-
let routeConfigFile = findEntry(appDirectory, "routes");
|
|
422
|
-
try {
|
|
423
|
-
if (!routeConfigFile) {
|
|
424
|
-
let routeConfigDisplayPath = import_pathe3.default.relative(
|
|
425
|
-
root,
|
|
426
|
-
import_pathe3.default.join(appDirectory, "routes.ts")
|
|
427
|
-
);
|
|
428
|
-
return err(`Route config file not found at "${routeConfigDisplayPath}".`);
|
|
429
|
-
}
|
|
430
|
-
setAppDirectory(appDirectory);
|
|
431
|
-
let routeConfigExport = (await viteNodeContext.runner.executeFile(
|
|
432
|
-
import_pathe3.default.join(appDirectory, routeConfigFile)
|
|
433
|
-
)).default;
|
|
434
|
-
let routeConfig = await routeConfigExport;
|
|
435
|
-
let result = validateRouteConfig({
|
|
436
|
-
routeConfigFile,
|
|
437
|
-
routeConfig
|
|
438
|
-
});
|
|
439
|
-
if (!result.valid) {
|
|
440
|
-
return err(result.message);
|
|
441
|
-
}
|
|
421
|
+
let routes2 = {};
|
|
422
|
+
if (!skipRoutes) {
|
|
442
423
|
routes2 = {
|
|
443
|
-
|
|
444
|
-
...configRoutesToRouteManifest(appDirectory, routeConfig)
|
|
424
|
+
root: { path: "", id: "root", file: rootRouteFile }
|
|
445
425
|
};
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
426
|
+
let routeConfigFile = findEntry(appDirectory, "routes");
|
|
427
|
+
try {
|
|
428
|
+
if (!routeConfigFile) {
|
|
429
|
+
let routeConfigDisplayPath = import_pathe3.default.relative(
|
|
430
|
+
root,
|
|
431
|
+
import_pathe3.default.join(appDirectory, "routes.ts")
|
|
432
|
+
);
|
|
433
|
+
return err(
|
|
434
|
+
`Route config file not found at "${routeConfigDisplayPath}".`
|
|
435
|
+
);
|
|
436
|
+
}
|
|
437
|
+
setAppDirectory(appDirectory);
|
|
438
|
+
let routeConfigExport = (await viteNodeContext.runner.executeFile(
|
|
439
|
+
import_pathe3.default.join(appDirectory, routeConfigFile)
|
|
440
|
+
)).default;
|
|
441
|
+
let routeConfig = await routeConfigExport;
|
|
442
|
+
let result = validateRouteConfig({
|
|
443
|
+
routeConfigFile,
|
|
444
|
+
routeConfig
|
|
445
|
+
});
|
|
446
|
+
if (!result.valid) {
|
|
447
|
+
return err(result.message);
|
|
448
|
+
}
|
|
449
|
+
routes2 = {
|
|
450
|
+
...routes2,
|
|
451
|
+
...configRoutesToRouteManifest(appDirectory, routeConfig)
|
|
452
|
+
};
|
|
453
|
+
} catch (error) {
|
|
454
|
+
return err(
|
|
455
|
+
[
|
|
456
|
+
import_picocolors.default.red(`Route config in "${routeConfigFile}" is invalid.`),
|
|
457
|
+
"",
|
|
458
|
+
error.loc?.file && error.loc?.column && error.frame ? [
|
|
459
|
+
import_pathe3.default.relative(appDirectory, error.loc.file) + ":" + error.loc.line + ":" + error.loc.column,
|
|
460
|
+
error.frame.trim?.()
|
|
461
|
+
] : error.stack
|
|
462
|
+
].flat().join("\n")
|
|
463
|
+
);
|
|
464
|
+
}
|
|
457
465
|
}
|
|
458
466
|
let future = {
|
|
459
467
|
unstable_middleware: reactRouterUserConfig.future?.unstable_middleware ?? false,
|
|
@@ -484,24 +492,34 @@ async function resolveConfig({
|
|
|
484
492
|
async function createConfigLoader({
|
|
485
493
|
rootDirectory: root,
|
|
486
494
|
watch: watch2,
|
|
487
|
-
mode
|
|
495
|
+
mode,
|
|
496
|
+
skipRoutes
|
|
488
497
|
}) {
|
|
489
|
-
root = root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd();
|
|
498
|
+
root = import_pathe3.default.normalize(root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd());
|
|
499
|
+
let vite2 = await import("vite");
|
|
490
500
|
let viteNodeContext = await createContext({
|
|
491
501
|
root,
|
|
492
|
-
mode
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
502
|
+
mode,
|
|
503
|
+
// Filter out any info level logs from vite-node
|
|
504
|
+
customLogger: vite2.createLogger("warn", {
|
|
505
|
+
prefix: "[react-router]"
|
|
506
|
+
})
|
|
496
507
|
});
|
|
497
|
-
let
|
|
508
|
+
let reactRouterConfigFile;
|
|
509
|
+
let updateReactRouterConfigFile = () => {
|
|
510
|
+
reactRouterConfigFile = findEntry(root, "react-router.config", {
|
|
511
|
+
absolute: true
|
|
512
|
+
});
|
|
513
|
+
};
|
|
514
|
+
updateReactRouterConfigFile();
|
|
515
|
+
let getConfig = () => resolveConfig({ root, viteNodeContext, reactRouterConfigFile, skipRoutes });
|
|
498
516
|
let appDirectory;
|
|
499
517
|
let initialConfigResult = await getConfig();
|
|
500
518
|
if (!initialConfigResult.ok) {
|
|
501
519
|
throw new Error(initialConfigResult.error);
|
|
502
520
|
}
|
|
503
|
-
appDirectory = initialConfigResult.value.appDirectory;
|
|
504
|
-
let
|
|
521
|
+
appDirectory = import_pathe3.default.normalize(initialConfigResult.value.appDirectory);
|
|
522
|
+
let currentConfig = initialConfigResult.value;
|
|
505
523
|
let fsWatcher;
|
|
506
524
|
let changeHandlers = [];
|
|
507
525
|
return {
|
|
@@ -514,41 +532,71 @@ async function createConfigLoader({
|
|
|
514
532
|
}
|
|
515
533
|
changeHandlers.push(handler);
|
|
516
534
|
if (!fsWatcher) {
|
|
517
|
-
fsWatcher = import_chokidar.default.watch(
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
535
|
+
fsWatcher = import_chokidar.default.watch([root, appDirectory], {
|
|
536
|
+
ignoreInitial: true,
|
|
537
|
+
ignored: (path8) => {
|
|
538
|
+
let dirname6 = import_pathe3.default.dirname(path8);
|
|
539
|
+
return !dirname6.startsWith(appDirectory) && // Ensure we're only watching files outside of the app directory
|
|
540
|
+
// that are at the root level, not nested in subdirectories
|
|
541
|
+
path8 !== root && // Watch the root directory itself
|
|
542
|
+
dirname6 !== root;
|
|
543
|
+
}
|
|
544
|
+
});
|
|
524
545
|
fsWatcher.on("all", async (...args) => {
|
|
525
546
|
let [event, rawFilepath] = args;
|
|
526
547
|
let filepath = import_pathe3.default.normalize(rawFilepath);
|
|
527
|
-
let
|
|
528
|
-
let
|
|
548
|
+
let fileAddedOrRemoved = event === "add" || event === "unlink";
|
|
549
|
+
let appFileAddedOrRemoved = fileAddedOrRemoved && filepath.startsWith(import_pathe3.default.normalize(appDirectory));
|
|
550
|
+
let rootRelativeFilepath = import_pathe3.default.relative(root, filepath);
|
|
551
|
+
let configFileAddedOrRemoved = fileAddedOrRemoved && isEntryFile("react-router.config", rootRelativeFilepath);
|
|
552
|
+
if (configFileAddedOrRemoved) {
|
|
553
|
+
updateReactRouterConfigFile();
|
|
554
|
+
}
|
|
555
|
+
let moduleGraphChanged = configFileAddedOrRemoved || Boolean(
|
|
529
556
|
viteNodeContext.devServer?.moduleGraph.getModuleById(filepath)
|
|
530
557
|
);
|
|
531
|
-
if (
|
|
532
|
-
|
|
533
|
-
viteNodeContext.runner?.moduleCache.clear();
|
|
558
|
+
if (!moduleGraphChanged && !appFileAddedOrRemoved) {
|
|
559
|
+
return;
|
|
534
560
|
}
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
561
|
+
viteNodeContext.devServer?.moduleGraph.invalidateAll();
|
|
562
|
+
viteNodeContext.runner?.moduleCache.clear();
|
|
563
|
+
let result = await getConfig();
|
|
564
|
+
let prevAppDirectory = appDirectory;
|
|
565
|
+
appDirectory = import_pathe3.default.normalize(
|
|
566
|
+
(result.value ?? currentConfig).appDirectory
|
|
567
|
+
);
|
|
568
|
+
if (appDirectory !== prevAppDirectory) {
|
|
569
|
+
fsWatcher.unwatch(prevAppDirectory);
|
|
570
|
+
fsWatcher.add(appDirectory);
|
|
571
|
+
}
|
|
572
|
+
let configCodeChanged = configFileAddedOrRemoved || reactRouterConfigFile !== void 0 && isEntryFileDependency(
|
|
573
|
+
viteNodeContext.devServer.moduleGraph,
|
|
574
|
+
reactRouterConfigFile,
|
|
575
|
+
filepath
|
|
576
|
+
);
|
|
577
|
+
let routeConfigFile = !skipRoutes ? findEntry(appDirectory, "routes", {
|
|
578
|
+
absolute: true
|
|
579
|
+
}) : void 0;
|
|
580
|
+
let routeConfigCodeChanged = routeConfigFile !== void 0 && isEntryFileDependency(
|
|
581
|
+
viteNodeContext.devServer.moduleGraph,
|
|
582
|
+
routeConfigFile,
|
|
583
|
+
filepath
|
|
584
|
+
);
|
|
585
|
+
let configChanged = result.ok && !(0, import_isEqual.default)(omitRoutes(currentConfig), omitRoutes(result.value));
|
|
586
|
+
let routeConfigChanged = result.ok && !(0, import_isEqual.default)(currentConfig?.routes, result.value.routes);
|
|
587
|
+
for (let handler2 of changeHandlers) {
|
|
588
|
+
handler2({
|
|
589
|
+
result,
|
|
590
|
+
configCodeChanged,
|
|
591
|
+
routeConfigCodeChanged,
|
|
592
|
+
configChanged,
|
|
593
|
+
routeConfigChanged,
|
|
594
|
+
path: filepath,
|
|
595
|
+
event
|
|
596
|
+
});
|
|
597
|
+
}
|
|
598
|
+
if (result.ok) {
|
|
599
|
+
currentConfig = result.value;
|
|
552
600
|
}
|
|
553
601
|
});
|
|
554
602
|
}
|
|
@@ -567,17 +615,28 @@ async function createConfigLoader({
|
|
|
567
615
|
}
|
|
568
616
|
async function loadConfig({
|
|
569
617
|
rootDirectory,
|
|
570
|
-
mode
|
|
618
|
+
mode,
|
|
619
|
+
skipRoutes
|
|
571
620
|
}) {
|
|
572
621
|
let configLoader = await createConfigLoader({
|
|
573
622
|
rootDirectory,
|
|
574
623
|
mode,
|
|
624
|
+
skipRoutes,
|
|
575
625
|
watch: false
|
|
576
626
|
});
|
|
577
627
|
let config = await configLoader.getConfig();
|
|
578
628
|
await configLoader.close();
|
|
579
629
|
return config;
|
|
580
630
|
}
|
|
631
|
+
function omitRoutes(config) {
|
|
632
|
+
return {
|
|
633
|
+
...config,
|
|
634
|
+
routes: {}
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
function isEntryFile(entryBasename, filename3) {
|
|
638
|
+
return entryExts.some((ext) => filename3 === `${entryBasename}${ext}`);
|
|
639
|
+
}
|
|
581
640
|
function findEntry(dir, basename2, options) {
|
|
582
641
|
let currentDir = import_pathe3.default.resolve(dir);
|
|
583
642
|
let { root } = import_pathe3.default.parse(currentDir);
|
|
@@ -598,6 +657,30 @@ function findEntry(dir, basename2, options) {
|
|
|
598
657
|
currentDir = parentDir;
|
|
599
658
|
}
|
|
600
659
|
}
|
|
660
|
+
function isEntryFileDependency(moduleGraph, entryFilepath, filepath, visited = /* @__PURE__ */ new Set()) {
|
|
661
|
+
entryFilepath = import_pathe3.default.normalize(entryFilepath);
|
|
662
|
+
filepath = import_pathe3.default.normalize(filepath);
|
|
663
|
+
if (visited.has(filepath)) {
|
|
664
|
+
return false;
|
|
665
|
+
}
|
|
666
|
+
visited.add(filepath);
|
|
667
|
+
if (filepath === entryFilepath) {
|
|
668
|
+
return true;
|
|
669
|
+
}
|
|
670
|
+
let mod = moduleGraph.getModuleById(filepath);
|
|
671
|
+
if (!mod) {
|
|
672
|
+
return false;
|
|
673
|
+
}
|
|
674
|
+
for (let importer of mod.importers) {
|
|
675
|
+
if (!importer.id) {
|
|
676
|
+
continue;
|
|
677
|
+
}
|
|
678
|
+
if (importer.id === entryFilepath || isEntryFileDependency(moduleGraph, entryFilepath, importer.id, visited)) {
|
|
679
|
+
return true;
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
return false;
|
|
683
|
+
}
|
|
601
684
|
var import_node_fs, import_node_child_process, import_package_json, import_pathe3, import_chokidar, import_picocolors, import_pick2, import_omit, import_cloneDeep, import_isEqual, excludedConfigPresetKeys, mergeReactRouterConfig, deepFreeze, entryExts;
|
|
602
685
|
var init_config = __esm({
|
|
603
686
|
"config/config.ts"() {
|
|
@@ -718,21 +801,21 @@ var init_babel = __esm({
|
|
|
718
801
|
|
|
719
802
|
// typegen/paths.ts
|
|
720
803
|
function getTypesDir(ctx) {
|
|
721
|
-
return
|
|
804
|
+
return Path3.join(ctx.rootDirectory, ".react-router/types");
|
|
722
805
|
}
|
|
723
806
|
function getTypesPath(ctx, route) {
|
|
724
|
-
return
|
|
807
|
+
return Path3.join(
|
|
725
808
|
getTypesDir(ctx),
|
|
726
|
-
|
|
727
|
-
|
|
809
|
+
Path3.relative(ctx.rootDirectory, ctx.config.appDirectory),
|
|
810
|
+
Path3.dirname(route.file),
|
|
728
811
|
"+types/" + Pathe.filename(route.file) + ".ts"
|
|
729
812
|
);
|
|
730
813
|
}
|
|
731
|
-
var
|
|
814
|
+
var Path3, Pathe;
|
|
732
815
|
var init_paths = __esm({
|
|
733
816
|
"typegen/paths.ts"() {
|
|
734
817
|
"use strict";
|
|
735
|
-
|
|
818
|
+
Path3 = __toESM(require("pathe"));
|
|
736
819
|
Pathe = __toESM(require("pathe/utils"));
|
|
737
820
|
}
|
|
738
821
|
});
|
|
@@ -772,7 +855,7 @@ function lineage(routes2, route) {
|
|
|
772
855
|
}
|
|
773
856
|
function fullpath(lineage2) {
|
|
774
857
|
if (lineage2.length === 1 && lineage2[0].id === "root") return "/";
|
|
775
|
-
return "/" + lineage2.map((route) => route.path?.replace(/^\//, "")?.replace(/\/$/, "")).filter((
|
|
858
|
+
return "/" + lineage2.map((route) => route.path?.replace(/^\//, "")?.replace(/\/$/, "")).filter((path8) => path8 !== void 0 && path8 !== "").join("/");
|
|
776
859
|
}
|
|
777
860
|
var init_route = __esm({
|
|
778
861
|
"typegen/route.ts"() {
|
|
@@ -787,8 +870,8 @@ function generate2(ctx, route) {
|
|
|
787
870
|
const typesPath = getTypesPath(ctx, route);
|
|
788
871
|
const parents = lineage2.slice(0, -1);
|
|
789
872
|
const parentTypeImports = parents.map((parent, i) => {
|
|
790
|
-
const rel =
|
|
791
|
-
|
|
873
|
+
const rel = Path4.relative(
|
|
874
|
+
Path4.dirname(typesPath),
|
|
792
875
|
getTypesPath(ctx, parent)
|
|
793
876
|
);
|
|
794
877
|
const indent = i === 0 ? "" : " ".repeat(2);
|
|
@@ -850,17 +933,17 @@ function formatParamProperties(fullpath2) {
|
|
|
850
933
|
);
|
|
851
934
|
return properties.join("; ");
|
|
852
935
|
}
|
|
853
|
-
var import_dedent,
|
|
936
|
+
var import_dedent, Path4, Pathe2, noExtension;
|
|
854
937
|
var init_generate = __esm({
|
|
855
938
|
"typegen/generate.ts"() {
|
|
856
939
|
"use strict";
|
|
857
940
|
import_dedent = __toESM(require("dedent"));
|
|
858
|
-
|
|
941
|
+
Path4 = __toESM(require("pathe"));
|
|
859
942
|
Pathe2 = __toESM(require("pathe/utils"));
|
|
860
943
|
init_paths();
|
|
861
944
|
init_params();
|
|
862
945
|
init_route();
|
|
863
|
-
noExtension = (
|
|
946
|
+
noExtension = (path8) => Path4.join(Path4.dirname(path8), Pathe2.filename(path8));
|
|
864
947
|
}
|
|
865
948
|
});
|
|
866
949
|
|
|
@@ -873,20 +956,22 @@ async function watch(rootDirectory, { mode, logger }) {
|
|
|
873
956
|
const ctx = await createContext2({ rootDirectory, mode, watch: true });
|
|
874
957
|
await writeAll(ctx);
|
|
875
958
|
logger?.info(import_picocolors3.default.green("generated types"), { timestamp: true, clear: true });
|
|
876
|
-
ctx.configLoader.onChange(
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
959
|
+
ctx.configLoader.onChange(
|
|
960
|
+
async ({ result, configChanged, routeConfigChanged }) => {
|
|
961
|
+
if (!result.ok) {
|
|
962
|
+
logger?.error(import_picocolors3.default.red(result.error), { timestamp: true, clear: true });
|
|
963
|
+
return;
|
|
964
|
+
}
|
|
965
|
+
ctx.config = result.value;
|
|
966
|
+
if (configChanged || routeConfigChanged) {
|
|
967
|
+
await writeAll(ctx);
|
|
968
|
+
logger?.info(import_picocolors3.default.green("regenerated types"), {
|
|
969
|
+
timestamp: true,
|
|
970
|
+
clear: true
|
|
971
|
+
});
|
|
972
|
+
}
|
|
888
973
|
}
|
|
889
|
-
|
|
974
|
+
);
|
|
890
975
|
return {
|
|
891
976
|
close: async () => await ctx.configLoader.close()
|
|
892
977
|
};
|
|
@@ -914,12 +999,12 @@ async function writeAll(ctx) {
|
|
|
914
999
|
Object.values(ctx.config.routes).forEach((route) => {
|
|
915
1000
|
const typesPath = getTypesPath(ctx, route);
|
|
916
1001
|
const content = generate2(ctx, route);
|
|
917
|
-
import_node_fs3.default.mkdirSync(
|
|
1002
|
+
import_node_fs3.default.mkdirSync(Path5.dirname(typesPath), { recursive: true });
|
|
918
1003
|
import_node_fs3.default.writeFileSync(typesPath, content);
|
|
919
1004
|
});
|
|
920
|
-
const registerPath =
|
|
1005
|
+
const registerPath = Path5.join(typegenDir, "+register.ts");
|
|
921
1006
|
import_node_fs3.default.writeFileSync(registerPath, register(ctx));
|
|
922
|
-
const virtualPath =
|
|
1007
|
+
const virtualPath = Path5.join(typegenDir, "+virtual.d.ts");
|
|
923
1008
|
import_node_fs3.default.writeFileSync(virtualPath, virtual);
|
|
924
1009
|
}
|
|
925
1010
|
function register(ctx) {
|
|
@@ -930,24 +1015,25 @@ function register(ctx) {
|
|
|
930
1015
|
interface Register {
|
|
931
1016
|
params: Params;
|
|
932
1017
|
}
|
|
1018
|
+
|
|
1019
|
+
interface Future {
|
|
1020
|
+
unstable_middleware: ${ctx.config.future.unstable_middleware}
|
|
1021
|
+
}
|
|
933
1022
|
}
|
|
934
1023
|
`;
|
|
935
1024
|
const { t: t2 } = babel_exports;
|
|
936
|
-
const fullpaths =
|
|
937
|
-
|
|
938
|
-
if (route.id !== "root" && !route.path)
|
|
1025
|
+
const fullpaths = /* @__PURE__ */ new Set();
|
|
1026
|
+
Object.values(ctx.config.routes).forEach((route) => {
|
|
1027
|
+
if (route.id !== "root" && !route.path) return;
|
|
939
1028
|
const lineage2 = lineage(ctx.config.routes, route);
|
|
940
1029
|
const fullpath2 = fullpath(lineage2);
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
fullpaths[fullpath2] = lineage2;
|
|
944
|
-
}
|
|
945
|
-
}
|
|
1030
|
+
fullpaths.add(fullpath2);
|
|
1031
|
+
});
|
|
946
1032
|
const typeParams = t2.tsTypeAliasDeclaration(
|
|
947
1033
|
t2.identifier("Params"),
|
|
948
1034
|
null,
|
|
949
1035
|
t2.tsTypeLiteral(
|
|
950
|
-
|
|
1036
|
+
Array.from(fullpaths).map((fullpath2) => {
|
|
951
1037
|
const params = parse2(fullpath2);
|
|
952
1038
|
return t2.tsPropertySignature(
|
|
953
1039
|
t2.stringLiteral(fullpath2),
|
|
@@ -969,13 +1055,13 @@ function register(ctx) {
|
|
|
969
1055
|
);
|
|
970
1056
|
return [register2, generate(typeParams).code].join("\n\n");
|
|
971
1057
|
}
|
|
972
|
-
var import_node_fs3, import_dedent2,
|
|
1058
|
+
var import_node_fs3, import_dedent2, Path5, import_picocolors3, virtual;
|
|
973
1059
|
var init_typegen = __esm({
|
|
974
1060
|
"typegen/index.ts"() {
|
|
975
1061
|
"use strict";
|
|
976
1062
|
import_node_fs3 = __toESM(require("fs"));
|
|
977
1063
|
import_dedent2 = __toESM(require("dedent"));
|
|
978
|
-
|
|
1064
|
+
Path5 = __toESM(require("pathe"));
|
|
979
1065
|
import_picocolors3 = __toESM(require("picocolors"));
|
|
980
1066
|
init_config();
|
|
981
1067
|
init_babel();
|
|
@@ -1017,23 +1103,24 @@ var init_node_adapter = __esm({
|
|
|
1017
1103
|
});
|
|
1018
1104
|
|
|
1019
1105
|
// vite/resolve-file-url.ts
|
|
1020
|
-
var
|
|
1106
|
+
var path4;
|
|
1021
1107
|
var init_resolve_file_url = __esm({
|
|
1022
1108
|
"vite/resolve-file-url.ts"() {
|
|
1023
1109
|
"use strict";
|
|
1024
|
-
|
|
1110
|
+
path4 = __toESM(require("path"));
|
|
1025
1111
|
init_vite();
|
|
1026
1112
|
}
|
|
1027
1113
|
});
|
|
1028
1114
|
|
|
1029
1115
|
// vite/styles.ts
|
|
1030
|
-
var
|
|
1116
|
+
var path5, import_react_router, cssFileRegExp, cssModulesRegExp;
|
|
1031
1117
|
var init_styles = __esm({
|
|
1032
1118
|
"vite/styles.ts"() {
|
|
1033
1119
|
"use strict";
|
|
1034
|
-
|
|
1120
|
+
path5 = __toESM(require("path"));
|
|
1035
1121
|
import_react_router = require("react-router");
|
|
1036
1122
|
init_resolve_file_url();
|
|
1123
|
+
init_babel();
|
|
1037
1124
|
cssFileRegExp = /\.(css|less|sass|scss|styl|stylus|pcss|postcss|sss)(?:$|\?)/;
|
|
1038
1125
|
cssModulesRegExp = new RegExp(`\\.module${cssFileRegExp.source}`);
|
|
1039
1126
|
}
|
|
@@ -1180,8 +1267,8 @@ function getServerBundleIds(ctx) {
|
|
|
1180
1267
|
async function cleanBuildDirectory(viteConfig, ctx) {
|
|
1181
1268
|
let buildDirectory = ctx.reactRouterConfig.buildDirectory;
|
|
1182
1269
|
let isWithinRoot = () => {
|
|
1183
|
-
let relativePath =
|
|
1184
|
-
return !relativePath.startsWith("..") && !
|
|
1270
|
+
let relativePath = path6.relative(ctx.rootDirectory, buildDirectory);
|
|
1271
|
+
return !relativePath.startsWith("..") && !path6.isAbsolute(relativePath);
|
|
1185
1272
|
};
|
|
1186
1273
|
if (viteConfig.build.emptyOutDir ?? isWithinRoot()) {
|
|
1187
1274
|
await fse.remove(buildDirectory);
|
|
@@ -1192,7 +1279,7 @@ async function cleanViteManifests(environmentsOptions, ctx) {
|
|
|
1192
1279
|
([environmentName, options]) => {
|
|
1193
1280
|
let outDir = options.build?.outDir;
|
|
1194
1281
|
invariant(outDir, `Expected build.outDir for ${environmentName}`);
|
|
1195
|
-
return
|
|
1282
|
+
return path6.join(outDir, ".vite/manifest.json");
|
|
1196
1283
|
}
|
|
1197
1284
|
);
|
|
1198
1285
|
await Promise.all(
|
|
@@ -1202,7 +1289,7 @@ async function cleanViteManifests(environmentsOptions, ctx) {
|
|
|
1202
1289
|
if (!ctx.viteManifestEnabled) {
|
|
1203
1290
|
await fse.remove(viteManifestPath);
|
|
1204
1291
|
}
|
|
1205
|
-
let viteDir =
|
|
1292
|
+
let viteDir = path6.dirname(viteManifestPath);
|
|
1206
1293
|
let viteDirFiles = await fse.readdir(viteDir);
|
|
1207
1294
|
if (viteDirFiles.length === 0) {
|
|
1208
1295
|
await fse.remove(viteDir);
|
|
@@ -1219,10 +1306,10 @@ function mergeEnvironmentOptions(base, ...overrides) {
|
|
|
1219
1306
|
}
|
|
1220
1307
|
async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
1221
1308
|
let { serverBuildFile, serverModuleFormat } = ctx.reactRouterConfig;
|
|
1222
|
-
let packageRoot =
|
|
1309
|
+
let packageRoot = path6.dirname(
|
|
1223
1310
|
require.resolve("@react-router/dev/package.json")
|
|
1224
1311
|
);
|
|
1225
|
-
let { moduleSyncEnabled } = await import(`file:///${
|
|
1312
|
+
let { moduleSyncEnabled } = await import(`file:///${path6.join(packageRoot, "module-sync-enabled/index.mjs")}`);
|
|
1226
1313
|
let vite2 = getVite();
|
|
1227
1314
|
let viteServerConditions = [
|
|
1228
1315
|
...vite2.defaultServerConditions ?? [],
|
|
@@ -1296,7 +1383,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1296
1383
|
ctx.entryClientFilePath,
|
|
1297
1384
|
...Object.values(ctx.reactRouterConfig.routes).flatMap(
|
|
1298
1385
|
(route) => {
|
|
1299
|
-
let routeFilePath =
|
|
1386
|
+
let routeFilePath = path6.resolve(
|
|
1300
1387
|
ctx.reactRouterConfig.appDirectory,
|
|
1301
1388
|
route.file
|
|
1302
1389
|
);
|
|
@@ -1320,7 +1407,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1320
1407
|
) : null;
|
|
1321
1408
|
let routeChunkSuffix = routeChunkName ? `-${(0, import_kebabCase.default)(routeChunkName)}` : "";
|
|
1322
1409
|
let assetsDir = (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig?.environments?.client?.build?.assetsDir : null) ?? viteUserConfig?.build?.assetsDir ?? "assets";
|
|
1323
|
-
return
|
|
1410
|
+
return path6.posix.join(
|
|
1324
1411
|
assetsDir,
|
|
1325
1412
|
`[name]${routeChunkSuffix}-[hash].js`
|
|
1326
1413
|
);
|
|
@@ -1356,9 +1443,6 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1356
1443
|
}
|
|
1357
1444
|
});
|
|
1358
1445
|
}
|
|
1359
|
-
if (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteCommand === "serve") {
|
|
1360
|
-
environmentOptionsResolvers[CSS_DEV_HELPER_ENVIRONMENT_NAME] = () => ({});
|
|
1361
|
-
}
|
|
1362
1446
|
return environmentOptionsResolvers;
|
|
1363
1447
|
}
|
|
1364
1448
|
function resolveEnvironmentsOptions(environmentResolvers, resolverOptions) {
|
|
@@ -1373,13 +1457,13 @@ function resolveEnvironmentsOptions(environmentResolvers, resolverOptions) {
|
|
|
1373
1457
|
function isNonNullable(x) {
|
|
1374
1458
|
return x != null;
|
|
1375
1459
|
}
|
|
1376
|
-
var import_node_crypto, fs4,
|
|
1460
|
+
var import_node_crypto, fs4, path6, url, fse, babel2, import_react_router2, import_es_module_lexer, import_pick3, import_jsesc, import_picocolors4, import_kebabCase, CLIENT_NON_COMPONENT_EXPORTS, CLIENT_ROUTE_EXPORTS, BUILD_CLIENT_ROUTE_QUERY_STRING, SSR_BUNDLE_PREFIX, virtualHmrRuntime, virtualInjectHmrRuntime, virtual2, getServerBuildDirectory, getClientBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER;
|
|
1377
1461
|
var init_plugin = __esm({
|
|
1378
1462
|
"vite/plugin.ts"() {
|
|
1379
1463
|
"use strict";
|
|
1380
1464
|
import_node_crypto = require("crypto");
|
|
1381
1465
|
fs4 = __toESM(require("fs"));
|
|
1382
|
-
|
|
1466
|
+
path6 = __toESM(require("path"));
|
|
1383
1467
|
url = __toESM(require("url"));
|
|
1384
1468
|
fse = __toESM(require("fs-extra"));
|
|
1385
1469
|
babel2 = __toESM(require("@babel/core"));
|
|
@@ -1421,7 +1505,6 @@ var init_plugin = __esm({
|
|
|
1421
1505
|
];
|
|
1422
1506
|
BUILD_CLIENT_ROUTE_QUERY_STRING = "?__react-router-build-client-route";
|
|
1423
1507
|
SSR_BUNDLE_PREFIX = "ssrBundle_";
|
|
1424
|
-
CSS_DEV_HELPER_ENVIRONMENT_NAME = "__react_router_css_dev_helper__";
|
|
1425
1508
|
virtualHmrRuntime = create("hmr-runtime");
|
|
1426
1509
|
virtualInjectHmrRuntime = create("inject-hmr-runtime");
|
|
1427
1510
|
virtual2 = {
|
|
@@ -1429,19 +1512,19 @@ var init_plugin = __esm({
|
|
|
1429
1512
|
serverManifest: create("server-manifest"),
|
|
1430
1513
|
browserManifest: create("browser-manifest")
|
|
1431
1514
|
};
|
|
1432
|
-
getServerBuildDirectory = (reactRouterConfig, { serverBundleId } = {}) =>
|
|
1515
|
+
getServerBuildDirectory = (reactRouterConfig, { serverBundleId } = {}) => path6.join(
|
|
1433
1516
|
reactRouterConfig.buildDirectory,
|
|
1434
1517
|
"server",
|
|
1435
1518
|
...serverBundleId ? [serverBundleId] : []
|
|
1436
1519
|
);
|
|
1437
|
-
getClientBuildDirectory = (reactRouterConfig) =>
|
|
1438
|
-
defaultEntriesDir =
|
|
1439
|
-
|
|
1520
|
+
getClientBuildDirectory = (reactRouterConfig) => path6.join(reactRouterConfig.buildDirectory, "client");
|
|
1521
|
+
defaultEntriesDir = path6.resolve(
|
|
1522
|
+
path6.dirname(require.resolve("@react-router/dev/package.json")),
|
|
1440
1523
|
"dist",
|
|
1441
1524
|
"config",
|
|
1442
1525
|
"defaults"
|
|
1443
1526
|
);
|
|
1444
|
-
defaultEntries = fse.readdirSync(defaultEntriesDir).map((filename3) =>
|
|
1527
|
+
defaultEntries = fse.readdirSync(defaultEntriesDir).map((filename3) => path6.join(defaultEntriesDir, filename3));
|
|
1445
1528
|
invariant(defaultEntries.length > 0, "No default entries found");
|
|
1446
1529
|
REACT_REFRESH_HEADER = `
|
|
1447
1530
|
import RefreshRuntime from "${virtualHmrRuntime.id}";
|
|
@@ -1477,7 +1560,10 @@ async function build(root, viteBuildOptions) {
|
|
|
1477
1560
|
let vite2 = getVite();
|
|
1478
1561
|
let configResult = await loadConfig({
|
|
1479
1562
|
rootDirectory: root,
|
|
1480
|
-
mode: viteBuildOptions.mode ?? "production"
|
|
1563
|
+
mode: viteBuildOptions.mode ?? "production",
|
|
1564
|
+
// In this scope we only need future flags, so we can skip evaluating
|
|
1565
|
+
// routes.ts until we're within the Vite build context
|
|
1566
|
+
skipRoutes: true
|
|
1481
1567
|
});
|
|
1482
1568
|
if (!configResult.ok) {
|
|
1483
1569
|
throw new Error(configResult.error);
|
|
@@ -1718,7 +1804,7 @@ var import_semver = __toESM(require("semver"));
|
|
|
1718
1804
|
var import_picocolors8 = __toESM(require("picocolors"));
|
|
1719
1805
|
|
|
1720
1806
|
// cli/commands.ts
|
|
1721
|
-
var
|
|
1807
|
+
var path7 = __toESM(require("path"));
|
|
1722
1808
|
var import_fs_extra = __toESM(require("fs-extra"));
|
|
1723
1809
|
var import_package_json2 = __toESM(require("@npmcli/package-json"));
|
|
1724
1810
|
var import_exit_hook = __toESM(require("exit-hook"));
|
|
@@ -1877,14 +1963,14 @@ async function generateEntry(entry, rootDirectory, flags = {}) {
|
|
|
1877
1963
|
console.error(import_picocolors7.default.red(`No default server entry detected.`));
|
|
1878
1964
|
return;
|
|
1879
1965
|
}
|
|
1880
|
-
let defaultsDirectory =
|
|
1881
|
-
|
|
1966
|
+
let defaultsDirectory = path7.resolve(
|
|
1967
|
+
path7.dirname(require.resolve("@react-router/dev/package.json")),
|
|
1882
1968
|
"dist",
|
|
1883
1969
|
"config",
|
|
1884
1970
|
"defaults"
|
|
1885
1971
|
);
|
|
1886
|
-
let defaultEntryClient =
|
|
1887
|
-
let defaultEntryServer =
|
|
1972
|
+
let defaultEntryClient = path7.resolve(defaultsDirectory, "entry.client.tsx");
|
|
1973
|
+
let defaultEntryServer = path7.resolve(
|
|
1888
1974
|
defaultsDirectory,
|
|
1889
1975
|
`entry.server.node.tsx`
|
|
1890
1976
|
);
|
|
@@ -1893,7 +1979,7 @@ async function generateEntry(entry, rootDirectory, flags = {}) {
|
|
|
1893
1979
|
let useTypeScript = flags.typescript ?? true;
|
|
1894
1980
|
let outputExtension = useTypeScript ? "tsx" : "jsx";
|
|
1895
1981
|
let outputEntry = `${entry}.${outputExtension}`;
|
|
1896
|
-
let outputFile2 =
|
|
1982
|
+
let outputFile2 = path7.resolve(appDirectory, outputEntry);
|
|
1897
1983
|
if (!useTypeScript) {
|
|
1898
1984
|
let javascript = transpile(contents, {
|
|
1899
1985
|
cwd: rootDirectory,
|
|
@@ -1905,7 +1991,7 @@ async function generateEntry(entry, rootDirectory, flags = {}) {
|
|
|
1905
1991
|
}
|
|
1906
1992
|
console.log(
|
|
1907
1993
|
import_picocolors7.default.blue(
|
|
1908
|
-
`Entry file ${entry} created at ${
|
|
1994
|
+
`Entry file ${entry} created at ${path7.relative(
|
|
1909
1995
|
rootDirectory,
|
|
1910
1996
|
outputFile2
|
|
1911
1997
|
)}.`
|
|
@@ -1914,16 +2000,16 @@ async function generateEntry(entry, rootDirectory, flags = {}) {
|
|
|
1914
2000
|
}
|
|
1915
2001
|
function resolveRootDirectory(root, flags) {
|
|
1916
2002
|
if (root) {
|
|
1917
|
-
return
|
|
2003
|
+
return path7.resolve(root);
|
|
1918
2004
|
}
|
|
1919
|
-
return process.env.REACT_ROUTER_ROOT || (flags?.config ?
|
|
2005
|
+
return process.env.REACT_ROUTER_ROOT || (flags?.config ? path7.dirname(path7.resolve(flags.config)) : process.cwd());
|
|
1920
2006
|
}
|
|
1921
2007
|
async function checkForEntry(rootDirectory, appDirectory, entries2) {
|
|
1922
2008
|
for (let entry of entries2) {
|
|
1923
|
-
let entryPath =
|
|
2009
|
+
let entryPath = path7.resolve(appDirectory, entry);
|
|
1924
2010
|
let exists = await import_fs_extra.default.pathExists(entryPath);
|
|
1925
2011
|
if (exists) {
|
|
1926
|
-
let relative8 =
|
|
2012
|
+
let relative8 = path7.relative(rootDirectory, entryPath);
|
|
1927
2013
|
console.error(import_picocolors7.default.red(`Entry file ${relative8} already exists.`));
|
|
1928
2014
|
return process.exit(1);
|
|
1929
2015
|
}
|