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