@react-router/dev 0.0.0-experimental-89dc2043e → 0.0.0-experimental-6844c5934
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 +48 -0
- package/bin.js +13 -0
- package/dist/cli/index.js +177 -107
- package/dist/config/defaults/entry.server.node.tsx +5 -7
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/vite/cloudflare.js +1 -1
- package/dist/vite.js +209 -151
- package/package.json +11 -11
- package/dist/cli/dev.d.ts +0 -22
- package/dist/cli/dev.js +0 -155
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-6844c5934
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -47,7 +47,7 @@ module.exports = __toCommonJS(vite_exports);
|
|
|
47
47
|
// vite/plugin.ts
|
|
48
48
|
var import_node_crypto = require("crypto");
|
|
49
49
|
var path4 = __toESM(require("path"));
|
|
50
|
-
var
|
|
50
|
+
var url = __toESM(require("url"));
|
|
51
51
|
var fse = __toESM(require("fs-extra"));
|
|
52
52
|
var babel = __toESM(require("@babel/core"));
|
|
53
53
|
var import_react_router2 = require("react-router");
|
|
@@ -119,11 +119,11 @@ async function createContext(viteConfig = {}) {
|
|
|
119
119
|
const runner = new import_client.ViteNodeRunner({
|
|
120
120
|
root: devServer.config.root,
|
|
121
121
|
base: devServer.config.base,
|
|
122
|
-
fetchModule(
|
|
123
|
-
return server.fetchModule(
|
|
122
|
+
fetchModule(id) {
|
|
123
|
+
return server.fetchModule(id);
|
|
124
124
|
},
|
|
125
|
-
resolveId(
|
|
126
|
-
return server.resolveId(
|
|
125
|
+
resolveId(id, importer) {
|
|
126
|
+
return server.resolveId(id, importer);
|
|
127
127
|
}
|
|
128
128
|
});
|
|
129
129
|
return { devServer, server, runner };
|
|
@@ -195,24 +195,24 @@ ${message}`
|
|
|
195
195
|
function configRoutesToRouteManifest(appDirectory, routes, rootId = "root") {
|
|
196
196
|
let routeManifest = {};
|
|
197
197
|
function walk(route, parentId) {
|
|
198
|
-
let
|
|
198
|
+
let id = route.id || createRouteId(route.file);
|
|
199
199
|
let manifestItem = {
|
|
200
|
-
id
|
|
200
|
+
id,
|
|
201
201
|
parentId,
|
|
202
202
|
file: Path.isAbsolute(route.file) ? Path.relative(appDirectory, route.file) : route.file,
|
|
203
203
|
path: route.path,
|
|
204
204
|
index: route.index,
|
|
205
205
|
caseSensitive: route.caseSensitive
|
|
206
206
|
};
|
|
207
|
-
if (routeManifest.hasOwnProperty(
|
|
207
|
+
if (routeManifest.hasOwnProperty(id)) {
|
|
208
208
|
throw new Error(
|
|
209
|
-
`Unable to define routes with duplicate route id: "${
|
|
209
|
+
`Unable to define routes with duplicate route id: "${id}"`
|
|
210
210
|
);
|
|
211
211
|
}
|
|
212
|
-
routeManifest[
|
|
212
|
+
routeManifest[id] = manifestItem;
|
|
213
213
|
if (route.children) {
|
|
214
214
|
for (let child of route.children) {
|
|
215
|
-
walk(child,
|
|
215
|
+
walk(child, id);
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
}
|
|
@@ -641,7 +641,7 @@ function generate(ctx, route) {
|
|
|
641
641
|
const indent = i === 0 ? "" : " ".repeat(2);
|
|
642
642
|
let source = noExtension(rel);
|
|
643
643
|
if (!source.startsWith("../")) source = "./" + source;
|
|
644
|
-
return `${indent}import type { Info as Parent${i} } from "${source}"`;
|
|
644
|
+
return `${indent}import type { Info as Parent${i} } from "${source}.js"`;
|
|
645
645
|
}).join("\n");
|
|
646
646
|
return import_dedent.default`
|
|
647
647
|
// React Router generated types for route:
|
|
@@ -651,14 +651,16 @@ function generate(ctx, route) {
|
|
|
651
651
|
|
|
652
652
|
${parentTypeImports}
|
|
653
653
|
|
|
654
|
-
type Module = typeof import("../${Pathe2.filename(route.file)}")
|
|
654
|
+
type Module = typeof import("../${Pathe2.filename(route.file)}.js")
|
|
655
655
|
|
|
656
656
|
export type Info = {
|
|
657
657
|
parents: [${parents.map((_, i) => `Parent${i}`).join(", ")}],
|
|
658
658
|
id: "${route.id}"
|
|
659
659
|
file: "${route.file}"
|
|
660
660
|
path: "${route.path}"
|
|
661
|
-
params: {${formatParamProperties(
|
|
661
|
+
params: {${formatParamProperties(
|
|
662
|
+
urlpath
|
|
663
|
+
)}} & { [key: string]: string | undefined }
|
|
662
664
|
module: Module
|
|
663
665
|
loaderData: T.CreateLoaderData<Module>
|
|
664
666
|
actionData: T.CreateActionData<Module>
|
|
@@ -810,7 +812,7 @@ function fromNodeRequest(nodeReq, nodeRes) {
|
|
|
810
812
|
nodeReq.originalUrl,
|
|
811
813
|
"Expected `nodeReq.originalUrl` to be defined"
|
|
812
814
|
);
|
|
813
|
-
let
|
|
815
|
+
let url2 = new URL(nodeReq.originalUrl, origin);
|
|
814
816
|
let controller = new AbortController();
|
|
815
817
|
let init = {
|
|
816
818
|
method: nodeReq.method,
|
|
@@ -823,7 +825,7 @@ function fromNodeRequest(nodeReq, nodeRes) {
|
|
|
823
825
|
init.body = (0, import_node.createReadableStreamFromReadable)(nodeReq);
|
|
824
826
|
init.duplex = "half";
|
|
825
827
|
}
|
|
826
|
-
return new Request(
|
|
828
|
+
return new Request(url2.href, init);
|
|
827
829
|
}
|
|
828
830
|
async function toNodeRequest(res, nodeRes) {
|
|
829
831
|
nodeRes.statusCode = res.status;
|
|
@@ -869,8 +871,8 @@ var cssModulesRegExp = new RegExp(`\\.module${cssFileRegExp.source}`);
|
|
|
869
871
|
var isCssFile = (file) => cssFileRegExp.test(file);
|
|
870
872
|
var isCssModulesFile = (file) => cssModulesRegExp.test(file);
|
|
871
873
|
var cssUrlParamsWithoutSideEffects = ["url", "inline", "raw", "inline-css"];
|
|
872
|
-
var isCssUrlWithoutSideEffects = (
|
|
873
|
-
let queryString =
|
|
874
|
+
var isCssUrlWithoutSideEffects = (url2) => {
|
|
875
|
+
let queryString = url2.split("?")[1];
|
|
874
876
|
if (!queryString) {
|
|
875
877
|
return false;
|
|
876
878
|
}
|
|
@@ -878,19 +880,22 @@ var isCssUrlWithoutSideEffects = (url3) => {
|
|
|
878
880
|
for (let paramWithoutSideEffects of cssUrlParamsWithoutSideEffects) {
|
|
879
881
|
if (
|
|
880
882
|
// Parameter is blank and not explicitly set, i.e. "?url", not "?url="
|
|
881
|
-
params.get(paramWithoutSideEffects) === "" && !
|
|
883
|
+
params.get(paramWithoutSideEffects) === "" && !url2.includes(`?${paramWithoutSideEffects}=`) && !url2.includes(`&${paramWithoutSideEffects}=`)
|
|
882
884
|
) {
|
|
883
885
|
return true;
|
|
884
886
|
}
|
|
885
887
|
}
|
|
886
888
|
return false;
|
|
887
889
|
};
|
|
890
|
+
var injectQuery = (url2, query) => url2.includes("?") ? url2.replace("?", `?${query}&`) : `${url2}?${query}`;
|
|
888
891
|
var getStylesForFiles = async ({
|
|
889
892
|
viteDevServer,
|
|
890
893
|
rootDirectory,
|
|
891
894
|
cssModulesManifest,
|
|
892
895
|
files
|
|
893
896
|
}) => {
|
|
897
|
+
let vite2 = importViteEsmSync();
|
|
898
|
+
let viteMajor = parseInt(vite2.version.split(".")[0], 10);
|
|
894
899
|
let styles = {};
|
|
895
900
|
let deps = /* @__PURE__ */ new Set();
|
|
896
901
|
try {
|
|
@@ -919,7 +924,15 @@ var getStylesForFiles = async ({
|
|
|
919
924
|
for (let dep of deps) {
|
|
920
925
|
if (dep.file && isCssFile(dep.file) && !isCssUrlWithoutSideEffects(dep.url)) {
|
|
921
926
|
try {
|
|
922
|
-
let css = isCssModulesFile(dep.file) ? cssModulesManifest[dep.file] : (await viteDevServer.ssrLoadModule(
|
|
927
|
+
let css = isCssModulesFile(dep.file) ? cssModulesManifest[dep.file] : (await viteDevServer.ssrLoadModule(
|
|
928
|
+
// We need the ?inline query in Vite v6 when loading CSS in SSR
|
|
929
|
+
// since it does not expose the default export for CSS in a
|
|
930
|
+
// server environment. This is to align with non-SSR
|
|
931
|
+
// environments. For backwards compatibility with v5 we keep
|
|
932
|
+
// using the URL without ?inline query because the HMR code was
|
|
933
|
+
// relying on the implicit SSR-client module graph relationship.
|
|
934
|
+
viteMajor >= 6 ? injectQuery(dep.url, "inline") : dep.url
|
|
935
|
+
)).default;
|
|
923
936
|
if (css === void 0) {
|
|
924
937
|
throw new Error();
|
|
925
938
|
}
|
|
@@ -943,8 +956,8 @@ var findDeps = async (vite2, node, deps) => {
|
|
|
943
956
|
await findDeps(vite2, node2, deps);
|
|
944
957
|
}
|
|
945
958
|
}
|
|
946
|
-
async function addFromUrl(
|
|
947
|
-
let node2 = await vite2.moduleGraph.getModuleByUrl(
|
|
959
|
+
async function addFromUrl(url2) {
|
|
960
|
+
let node2 = await vite2.moduleGraph.getModuleByUrl(url2);
|
|
948
961
|
if (node2) {
|
|
949
962
|
await addFromNode(node2);
|
|
950
963
|
}
|
|
@@ -952,7 +965,7 @@ var findDeps = async (vite2, node, deps) => {
|
|
|
952
965
|
if (node.ssrTransformResult) {
|
|
953
966
|
if (node.ssrTransformResult.deps) {
|
|
954
967
|
node.ssrTransformResult.deps.forEach(
|
|
955
|
-
(
|
|
968
|
+
(url2) => branches.push(addFromUrl(url2))
|
|
956
969
|
);
|
|
957
970
|
}
|
|
958
971
|
} else {
|
|
@@ -986,14 +999,14 @@ var getStylesForUrl = async ({
|
|
|
986
999
|
entryClientFilePath,
|
|
987
1000
|
cssModulesManifest,
|
|
988
1001
|
build,
|
|
989
|
-
url:
|
|
1002
|
+
url: url2
|
|
990
1003
|
}) => {
|
|
991
|
-
if (
|
|
1004
|
+
if (url2 === void 0 || url2.includes("?_data=")) {
|
|
992
1005
|
return void 0;
|
|
993
1006
|
}
|
|
994
1007
|
let routes = createRoutes(build.routes);
|
|
995
1008
|
let appPath = path3.relative(process.cwd(), reactRouterConfig.appDirectory);
|
|
996
|
-
let documentRouteFiles = (0, import_react_router.matchRoutes)(routes,
|
|
1009
|
+
let documentRouteFiles = (0, import_react_router.matchRoutes)(routes, url2, build.basename)?.map(
|
|
997
1010
|
(match) => path3.resolve(appPath, reactRouterConfig.routes[match.route.id].file)
|
|
998
1011
|
) ?? [];
|
|
999
1012
|
let styles = await getStylesForFiles({
|
|
@@ -1010,10 +1023,15 @@ var getStylesForUrl = async ({
|
|
|
1010
1023
|
return styles;
|
|
1011
1024
|
};
|
|
1012
1025
|
|
|
1013
|
-
// vite/
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1026
|
+
// vite/virtual-module.ts
|
|
1027
|
+
function create(name) {
|
|
1028
|
+
let id = `virtual:react-router/${name}`;
|
|
1029
|
+
return {
|
|
1030
|
+
id,
|
|
1031
|
+
resolvedId: `\0${id}`,
|
|
1032
|
+
url: `/@id/__x00__${id}`
|
|
1033
|
+
};
|
|
1034
|
+
}
|
|
1017
1035
|
|
|
1018
1036
|
// vite/combine-urls.ts
|
|
1019
1037
|
function combineURLs(baseURL, relativeURL) {
|
|
@@ -1062,14 +1080,14 @@ var removeExports = (ast, exportsToRemove) => {
|
|
|
1062
1080
|
}
|
|
1063
1081
|
}
|
|
1064
1082
|
if (path5.node.declaration?.type === "FunctionDeclaration") {
|
|
1065
|
-
let
|
|
1066
|
-
if (
|
|
1083
|
+
let id = path5.node.declaration.id;
|
|
1084
|
+
if (id && exportsToRemove.includes(id.name)) {
|
|
1067
1085
|
markedForRemoval.add(path5);
|
|
1068
1086
|
}
|
|
1069
1087
|
}
|
|
1070
1088
|
if (path5.node.declaration?.type === "ClassDeclaration") {
|
|
1071
|
-
let
|
|
1072
|
-
if (
|
|
1089
|
+
let id = path5.node.declaration.id;
|
|
1090
|
+
if (id && exportsToRemove.includes(id.name)) {
|
|
1073
1091
|
markedForRemoval.add(path5);
|
|
1074
1092
|
}
|
|
1075
1093
|
}
|
|
@@ -1086,9 +1104,9 @@ var removeExports = (ast, exportsToRemove) => {
|
|
|
1086
1104
|
(0, import_babel_dead_code_elimination.deadCodeElimination)(ast, previouslyReferencedIdentifiers);
|
|
1087
1105
|
}
|
|
1088
1106
|
};
|
|
1089
|
-
function validateDestructuredExports(
|
|
1090
|
-
if (
|
|
1091
|
-
for (let element of
|
|
1107
|
+
function validateDestructuredExports(id, exportsToRemove) {
|
|
1108
|
+
if (id.type === "ArrayPattern") {
|
|
1109
|
+
for (let element of id.elements) {
|
|
1092
1110
|
if (!element) {
|
|
1093
1111
|
continue;
|
|
1094
1112
|
}
|
|
@@ -1103,8 +1121,8 @@ function validateDestructuredExports(id2, exportsToRemove) {
|
|
|
1103
1121
|
}
|
|
1104
1122
|
}
|
|
1105
1123
|
}
|
|
1106
|
-
if (
|
|
1107
|
-
for (let property of
|
|
1124
|
+
if (id.type === "ObjectPattern") {
|
|
1125
|
+
for (let property of id.properties) {
|
|
1108
1126
|
if (!property) {
|
|
1109
1127
|
continue;
|
|
1110
1128
|
}
|
|
@@ -1128,16 +1146,16 @@ function invalidDestructureError(name) {
|
|
|
1128
1146
|
|
|
1129
1147
|
// vite/with-props.ts
|
|
1130
1148
|
var import_dedent2 = __toESM(require("dedent"));
|
|
1131
|
-
var
|
|
1149
|
+
var vmod = create("with-props");
|
|
1132
1150
|
var NAMED_COMPONENT_EXPORTS = ["HydrateFallback", "ErrorBoundary"];
|
|
1133
1151
|
var plugin = {
|
|
1134
1152
|
name: "react-router-with-props",
|
|
1135
1153
|
enforce: "pre",
|
|
1136
|
-
resolveId(
|
|
1137
|
-
if (
|
|
1154
|
+
resolveId(id) {
|
|
1155
|
+
if (id === vmod.id) return vmod.resolvedId;
|
|
1138
1156
|
},
|
|
1139
|
-
async load(
|
|
1140
|
-
if (
|
|
1157
|
+
async load(id) {
|
|
1158
|
+
if (id !== vmod.resolvedId) return;
|
|
1141
1159
|
return import_dedent2.default`
|
|
1142
1160
|
import { createElement as h } from "react";
|
|
1143
1161
|
import { useActionData, useLoaderData, useMatches, useParams, useRouteError } from "react-router";
|
|
@@ -1199,12 +1217,12 @@ var transform = (ast) => {
|
|
|
1199
1217
|
const decl = path5.get("declaration");
|
|
1200
1218
|
if (decl.isVariableDeclaration()) {
|
|
1201
1219
|
decl.get("declarations").forEach((varDeclarator) => {
|
|
1202
|
-
const
|
|
1220
|
+
const id = varDeclarator.get("id");
|
|
1203
1221
|
const init = varDeclarator.get("init");
|
|
1204
1222
|
const expr = init.node;
|
|
1205
1223
|
if (!expr) return;
|
|
1206
|
-
if (!
|
|
1207
|
-
const { name } =
|
|
1224
|
+
if (!id.isIdentifier()) return;
|
|
1225
|
+
const { name } = id.node;
|
|
1208
1226
|
if (!NAMED_COMPONENT_EXPORTS.includes(name)) return;
|
|
1209
1227
|
const uid = getHocUid(path5, `with${name}Props`);
|
|
1210
1228
|
init.replaceWith(t.callExpression(uid, [expr]));
|
|
@@ -1212,9 +1230,9 @@ var transform = (ast) => {
|
|
|
1212
1230
|
return;
|
|
1213
1231
|
}
|
|
1214
1232
|
if (decl.isFunctionDeclaration()) {
|
|
1215
|
-
const { id
|
|
1216
|
-
if (!
|
|
1217
|
-
const { name } =
|
|
1233
|
+
const { id } = decl.node;
|
|
1234
|
+
if (!id) return;
|
|
1235
|
+
const { name } = id;
|
|
1218
1236
|
if (!NAMED_COMPONENT_EXPORTS.includes(name)) return;
|
|
1219
1237
|
const uid = getHocUid(path5, `with${name}Props`);
|
|
1220
1238
|
decl.replaceWith(
|
|
@@ -1235,7 +1253,7 @@ var transform = (ast) => {
|
|
|
1235
1253
|
hocs.map(
|
|
1236
1254
|
([name, identifier]) => t.importSpecifier(identifier, t.identifier(name))
|
|
1237
1255
|
),
|
|
1238
|
-
t.stringLiteral(
|
|
1256
|
+
t.stringLiteral(vmod.id)
|
|
1239
1257
|
)
|
|
1240
1258
|
);
|
|
1241
1259
|
}
|
|
@@ -1264,27 +1282,23 @@ var CLIENT_ROUTE_EXPORTS = [
|
|
|
1264
1282
|
"meta",
|
|
1265
1283
|
"shouldRevalidate"
|
|
1266
1284
|
];
|
|
1267
|
-
var
|
|
1268
|
-
var
|
|
1269
|
-
|
|
1270
|
-
};
|
|
1271
|
-
var serverBuildId = id("server-build");
|
|
1272
|
-
var serverManifestId = id("server-manifest");
|
|
1273
|
-
var browserManifestId = id("browser-manifest");
|
|
1274
|
-
var hmrRuntimeId = id("hmr-runtime");
|
|
1275
|
-
var injectHmrRuntimeId = id("inject-hmr-runtime");
|
|
1285
|
+
var BUILD_CLIENT_ROUTE_QUERY_STRING = "?__react-router-build-client-route";
|
|
1286
|
+
var virtualHmrRuntime = create("hmr-runtime");
|
|
1287
|
+
var virtualInjectHmrRuntime = create("inject-hmr-runtime");
|
|
1276
1288
|
var resolveRelativeRouteFilePath = (route, reactRouterConfig) => {
|
|
1277
1289
|
let vite2 = importViteEsmSync();
|
|
1278
1290
|
let file = route.file;
|
|
1279
1291
|
let fullPath = path4.resolve(reactRouterConfig.appDirectory, file);
|
|
1280
1292
|
return vite2.normalizePath(fullPath);
|
|
1281
1293
|
};
|
|
1282
|
-
var
|
|
1294
|
+
var virtual = {
|
|
1295
|
+
serverBuild: create("server-build"),
|
|
1296
|
+
serverManifest: create("server-manifest"),
|
|
1297
|
+
browserManifest: create("browser-manifest")
|
|
1298
|
+
};
|
|
1283
1299
|
var invalidateVirtualModules = (viteDevServer) => {
|
|
1284
|
-
|
|
1285
|
-
let mod = viteDevServer.moduleGraph.getModuleById(
|
|
1286
|
-
resolve3(vmod)
|
|
1287
|
-
);
|
|
1300
|
+
Object.values(virtual).forEach((vmod2) => {
|
|
1301
|
+
let mod = viteDevServer.moduleGraph.getModuleById(vmod2.resolvedId);
|
|
1288
1302
|
if (mod) {
|
|
1289
1303
|
viteDevServer.moduleGraph.invalidateModule(mod);
|
|
1290
1304
|
}
|
|
@@ -1299,7 +1313,7 @@ var resolveChunk = (ctx, viteManifest, absoluteFilePath) => {
|
|
|
1299
1313
|
let rootRelativeFilePath = vite2.normalizePath(
|
|
1300
1314
|
path4.relative(ctx.rootDirectory, absoluteFilePath)
|
|
1301
1315
|
);
|
|
1302
|
-
let entryChunk = viteManifest[rootRelativeFilePath +
|
|
1316
|
+
let entryChunk = viteManifest[rootRelativeFilePath + BUILD_CLIENT_ROUTE_QUERY_STRING] ?? viteManifest[rootRelativeFilePath];
|
|
1303
1317
|
if (!entryChunk) {
|
|
1304
1318
|
let knownManifestKeys = Object.keys(viteManifest).map((key) => '"' + key + '"').join(", ");
|
|
1305
1319
|
throw new Error(
|
|
@@ -1372,19 +1386,19 @@ var getRouteModuleExports = async (viteChildCompiler, ctx, routeFile, readRouteF
|
|
|
1372
1386
|
let ssr = true;
|
|
1373
1387
|
let { pluginContainer, moduleGraph } = viteChildCompiler;
|
|
1374
1388
|
let routePath = path4.resolve(ctx.reactRouterConfig.appDirectory, routeFile);
|
|
1375
|
-
let
|
|
1389
|
+
let url2 = resolveFileUrl(ctx, routePath);
|
|
1376
1390
|
let resolveId = async () => {
|
|
1377
|
-
let result = await pluginContainer.resolveId(
|
|
1378
|
-
if (!result) throw new Error(`Could not resolve module ID for ${
|
|
1391
|
+
let result = await pluginContainer.resolveId(url2, void 0, { ssr });
|
|
1392
|
+
if (!result) throw new Error(`Could not resolve module ID for ${url2}`);
|
|
1379
1393
|
return result.id;
|
|
1380
1394
|
};
|
|
1381
|
-
let [
|
|
1395
|
+
let [id, code] = await Promise.all([
|
|
1382
1396
|
resolveId(),
|
|
1383
1397
|
readRouteFile?.() ?? fse.readFile(routePath, "utf-8"),
|
|
1384
1398
|
// pluginContainer.transform(...) fails if we don't do this first:
|
|
1385
|
-
moduleGraph.ensureEntryFromUrl(
|
|
1399
|
+
moduleGraph.ensureEntryFromUrl(url2, ssr)
|
|
1386
1400
|
]);
|
|
1387
|
-
let transformed = await pluginContainer.transform(code,
|
|
1401
|
+
let transformed = await pluginContainer.transform(code, id, { ssr });
|
|
1388
1402
|
let [, exports2] = (0, import_es_module_lexer.parse)(transformed.code);
|
|
1389
1403
|
let exportNames = exports2.map((e) => e.n);
|
|
1390
1404
|
return exportNames;
|
|
@@ -1489,10 +1503,12 @@ var reactRouterVitePlugin = () => {
|
|
|
1489
1503
|
resolveFileUrl(
|
|
1490
1504
|
ctx,
|
|
1491
1505
|
resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
|
|
1492
|
-
)
|
|
1506
|
+
)
|
|
1493
1507
|
)};`;
|
|
1494
1508
|
}).join("\n")}
|
|
1495
|
-
export { default as assets } from ${JSON.stringify(
|
|
1509
|
+
export { default as assets } from ${JSON.stringify(
|
|
1510
|
+
virtual.serverManifest.id
|
|
1511
|
+
)};
|
|
1496
1512
|
export const assetsBuildDirectory = ${JSON.stringify(
|
|
1497
1513
|
path4.relative(
|
|
1498
1514
|
ctx.rootDirectory,
|
|
@@ -1595,8 +1611,8 @@ var reactRouterVitePlugin = () => {
|
|
|
1595
1611
|
viteConfig.build.assetsDir,
|
|
1596
1612
|
`manifest-${version}.js`
|
|
1597
1613
|
);
|
|
1598
|
-
let
|
|
1599
|
-
let nonFingerprintedValues = { url:
|
|
1614
|
+
let url2 = `${ctx.publicPath}${manifestPath}`;
|
|
1615
|
+
let nonFingerprintedValues = { url: url2, version };
|
|
1600
1616
|
let reactRouterBrowserManifest = {
|
|
1601
1617
|
...fingerprintedValues,
|
|
1602
1618
|
...nonFingerprintedValues
|
|
@@ -1632,10 +1648,10 @@ var reactRouterVitePlugin = () => {
|
|
|
1632
1648
|
caseSensitive: route.caseSensitive,
|
|
1633
1649
|
module: combineURLs(
|
|
1634
1650
|
ctx.publicPath,
|
|
1635
|
-
|
|
1651
|
+
resolveFileUrl(
|
|
1636
1652
|
ctx,
|
|
1637
1653
|
resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)
|
|
1638
|
-
)
|
|
1654
|
+
)
|
|
1639
1655
|
),
|
|
1640
1656
|
hasAction: sourceExports.includes("action"),
|
|
1641
1657
|
hasLoader: sourceExports.includes("loader"),
|
|
@@ -1647,12 +1663,9 @@ var reactRouterVitePlugin = () => {
|
|
|
1647
1663
|
}
|
|
1648
1664
|
return {
|
|
1649
1665
|
version: String(Math.random()),
|
|
1650
|
-
url: combineURLs(ctx.publicPath, url
|
|
1666
|
+
url: combineURLs(ctx.publicPath, virtual.browserManifest.url),
|
|
1651
1667
|
hmr: {
|
|
1652
|
-
runtime: combineURLs(
|
|
1653
|
-
ctx.publicPath,
|
|
1654
|
-
url(injectHmrRuntimeId)
|
|
1655
|
-
)
|
|
1668
|
+
runtime: combineURLs(ctx.publicPath, virtualInjectHmrRuntime.url)
|
|
1656
1669
|
},
|
|
1657
1670
|
entry: {
|
|
1658
1671
|
module: combineURLs(
|
|
@@ -1789,7 +1802,7 @@ var reactRouterVitePlugin = () => {
|
|
|
1789
1802
|
(route) => `${path4.resolve(
|
|
1790
1803
|
ctx.reactRouterConfig.appDirectory,
|
|
1791
1804
|
route.file
|
|
1792
|
-
)}${
|
|
1805
|
+
)}${BUILD_CLIENT_ROUTE_QUERY_STRING}`
|
|
1793
1806
|
)
|
|
1794
1807
|
]
|
|
1795
1808
|
}
|
|
@@ -1808,7 +1821,7 @@ var reactRouterVitePlugin = () => {
|
|
|
1808
1821
|
rollupOptions: {
|
|
1809
1822
|
...baseRollupOptions,
|
|
1810
1823
|
preserveEntrySignatures: "exports-only",
|
|
1811
|
-
input: viteUserConfig.build?.rollupOptions?.input ??
|
|
1824
|
+
input: viteUserConfig.build?.rollupOptions?.input ?? virtual.serverBuild.id,
|
|
1812
1825
|
output: {
|
|
1813
1826
|
entryFileNames: ctx.reactRouterConfig.serverBuildFile,
|
|
1814
1827
|
format: ctx.reactRouterConfig.serverModuleFormat
|
|
@@ -1871,15 +1884,15 @@ var reactRouterVitePlugin = () => {
|
|
|
1871
1884
|
envFile: false,
|
|
1872
1885
|
plugins: [
|
|
1873
1886
|
...(childCompilerConfigFile.config.plugins ?? []).flat().filter(
|
|
1874
|
-
(plugin2) => typeof plugin2 === "object" && plugin2 !== null && "name" in plugin2 && plugin2.name !== "react-router" && plugin2.name !== "react-router
|
|
1887
|
+
(plugin2) => typeof plugin2 === "object" && plugin2 !== null && "name" in plugin2 && plugin2.name !== "react-router" && plugin2.name !== "react-router:route-exports" && plugin2.name !== "react-router:hmr-updates"
|
|
1875
1888
|
)
|
|
1876
1889
|
]
|
|
1877
1890
|
});
|
|
1878
1891
|
await viteChildCompiler.pluginContainer.buildStart({});
|
|
1879
1892
|
},
|
|
1880
|
-
async transform(code,
|
|
1881
|
-
if (isCssModulesFile(
|
|
1882
|
-
cssModulesManifest[
|
|
1893
|
+
async transform(code, id) {
|
|
1894
|
+
if (isCssModulesFile(id)) {
|
|
1895
|
+
cssModulesManifest[id] = code;
|
|
1883
1896
|
}
|
|
1884
1897
|
},
|
|
1885
1898
|
buildStart() {
|
|
@@ -1903,7 +1916,7 @@ var reactRouterVitePlugin = () => {
|
|
|
1903
1916
|
(0, import_react_router2.unstable_setDevServerHooks)({
|
|
1904
1917
|
// Give the request handler access to the critical CSS in dev to avoid a
|
|
1905
1918
|
// flash of unstyled content since Vite injects CSS file contents via JS
|
|
1906
|
-
getCriticalCss: async (build,
|
|
1919
|
+
getCriticalCss: async (build, url2) => {
|
|
1907
1920
|
return getStylesForUrl({
|
|
1908
1921
|
rootDirectory: ctx.rootDirectory,
|
|
1909
1922
|
entryClientFilePath: ctx.entryClientFilePath,
|
|
@@ -1911,7 +1924,7 @@ var reactRouterVitePlugin = () => {
|
|
|
1911
1924
|
viteDevServer,
|
|
1912
1925
|
cssModulesManifest,
|
|
1913
1926
|
build,
|
|
1914
|
-
url:
|
|
1927
|
+
url: url2
|
|
1915
1928
|
});
|
|
1916
1929
|
},
|
|
1917
1930
|
// If an error is caught within the request handler, let Vite fix the
|
|
@@ -1959,7 +1972,7 @@ var reactRouterVitePlugin = () => {
|
|
|
1959
1972
|
viteDevServer.middlewares.use(async (req, res, next) => {
|
|
1960
1973
|
try {
|
|
1961
1974
|
let build = await viteDevServer.ssrLoadModule(
|
|
1962
|
-
|
|
1975
|
+
virtual.serverBuild.id
|
|
1963
1976
|
);
|
|
1964
1977
|
let handler = (0, import_react_router2.createRequestHandler)(build, "development");
|
|
1965
1978
|
let nodeHandler = async (nodeReq, nodeRes) => {
|
|
@@ -2059,11 +2072,11 @@ var reactRouterVitePlugin = () => {
|
|
|
2059
2072
|
}
|
|
2060
2073
|
},
|
|
2061
2074
|
{
|
|
2062
|
-
name: "react-router-route
|
|
2075
|
+
name: "react-router:build-client-route",
|
|
2063
2076
|
enforce: "pre",
|
|
2064
|
-
async transform(_code,
|
|
2065
|
-
if (!
|
|
2066
|
-
let routeModuleId =
|
|
2077
|
+
async transform(_code, id, options) {
|
|
2078
|
+
if (!id.endsWith(BUILD_CLIENT_ROUTE_QUERY_STRING)) return;
|
|
2079
|
+
let routeModuleId = id.replace(BUILD_CLIENT_ROUTE_QUERY_STRING, "");
|
|
2067
2080
|
let routeFileName = path4.basename(routeModuleId);
|
|
2068
2081
|
let sourceExports = await getRouteModuleExports(
|
|
2069
2082
|
viteChildCompiler,
|
|
@@ -2077,23 +2090,24 @@ var reactRouterVitePlugin = () => {
|
|
|
2077
2090
|
}
|
|
2078
2091
|
},
|
|
2079
2092
|
{
|
|
2080
|
-
name: "react-router
|
|
2093
|
+
name: "react-router:virtual-modules",
|
|
2081
2094
|
enforce: "pre",
|
|
2082
|
-
resolveId(
|
|
2083
|
-
|
|
2095
|
+
resolveId(id) {
|
|
2096
|
+
const vmod2 = Object.values(virtual).find((vmod3) => vmod3.id === id);
|
|
2097
|
+
if (vmod2) return vmod2.resolvedId;
|
|
2084
2098
|
},
|
|
2085
|
-
async load(
|
|
2086
|
-
switch (
|
|
2087
|
-
case
|
|
2099
|
+
async load(id) {
|
|
2100
|
+
switch (id) {
|
|
2101
|
+
case virtual.serverBuild.resolvedId: {
|
|
2088
2102
|
return await getServerEntry();
|
|
2089
2103
|
}
|
|
2090
|
-
case
|
|
2104
|
+
case virtual.serverManifest.resolvedId: {
|
|
2091
2105
|
let reactRouterManifest = ctx.isSsrBuild ? await ctx.getReactRouterServerManifest() : await getReactRouterManifestForDev();
|
|
2092
2106
|
return `export default ${(0, import_jsesc.default)(reactRouterManifest, {
|
|
2093
2107
|
es6: true
|
|
2094
2108
|
})};`;
|
|
2095
2109
|
}
|
|
2096
|
-
case
|
|
2110
|
+
case virtual.browserManifest.resolvedId: {
|
|
2097
2111
|
if (viteCommand === "build") {
|
|
2098
2112
|
throw new Error("This module only exists in development");
|
|
2099
2113
|
}
|
|
@@ -2107,15 +2121,15 @@ var reactRouterVitePlugin = () => {
|
|
|
2107
2121
|
}
|
|
2108
2122
|
},
|
|
2109
2123
|
{
|
|
2110
|
-
name: "react-router
|
|
2124
|
+
name: "react-router:dot-server",
|
|
2111
2125
|
enforce: "pre",
|
|
2112
|
-
async resolveId(
|
|
2126
|
+
async resolveId(id, importer, options) {
|
|
2113
2127
|
let isOptimizeDeps = viteCommand === "serve" && options?.scan === true;
|
|
2114
2128
|
if (isOptimizeDeps || options?.ssr) return;
|
|
2115
|
-
let isResolving = options?.custom?.["react-router
|
|
2129
|
+
let isResolving = options?.custom?.["react-router:dot-server"] ?? false;
|
|
2116
2130
|
if (isResolving) return;
|
|
2117
|
-
options.custom = { ...options.custom, "react-router
|
|
2118
|
-
let resolved = await this.resolve(
|
|
2131
|
+
options.custom = { ...options.custom, "react-router:dot-server": true };
|
|
2132
|
+
let resolved = await this.resolve(id, importer, options);
|
|
2119
2133
|
if (!resolved) return;
|
|
2120
2134
|
let serverFileRE = /\.server(\.[cm]?[jt]sx?)?$/;
|
|
2121
2135
|
let serverDirRE = /\/\.server\//;
|
|
@@ -2138,12 +2152,12 @@ var reactRouterVitePlugin = () => {
|
|
|
2138
2152
|
[
|
|
2139
2153
|
import_picocolors3.default.red(`Server-only module referenced by client`),
|
|
2140
2154
|
"",
|
|
2141
|
-
` '${
|
|
2155
|
+
` '${id}' imported by route '${importerShort}'`,
|
|
2142
2156
|
"",
|
|
2143
2157
|
` React Router automatically removes server-code from these exports:`,
|
|
2144
2158
|
` ${serverOnlyExports}`,
|
|
2145
2159
|
"",
|
|
2146
|
-
` But other route exports in '${importerShort}' depend on '${
|
|
2160
|
+
` But other route exports in '${importerShort}' depend on '${id}'.`,
|
|
2147
2161
|
"",
|
|
2148
2162
|
" See https://remix.run/docs/en/main/guides/vite#splitting-up-client-and-server-code",
|
|
2149
2163
|
""
|
|
@@ -2154,7 +2168,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2154
2168
|
[
|
|
2155
2169
|
import_picocolors3.default.red(`Server-only module referenced by client`),
|
|
2156
2170
|
"",
|
|
2157
|
-
` '${
|
|
2171
|
+
` '${id}' imported by '${importerShort}'`,
|
|
2158
2172
|
"",
|
|
2159
2173
|
" See https://remix.run/docs/en/main/guides/vite#splitting-up-client-and-server-code",
|
|
2160
2174
|
""
|
|
@@ -2163,12 +2177,12 @@ var reactRouterVitePlugin = () => {
|
|
|
2163
2177
|
}
|
|
2164
2178
|
},
|
|
2165
2179
|
{
|
|
2166
|
-
name: "react-router
|
|
2167
|
-
async transform(code,
|
|
2180
|
+
name: "react-router:dot-client",
|
|
2181
|
+
async transform(code, id, options) {
|
|
2168
2182
|
if (!options?.ssr) return;
|
|
2169
2183
|
let clientFileRE = /\.client(\.[cm]?[jt]sx?)?$/;
|
|
2170
2184
|
let clientDirRE = /\/\.client\//;
|
|
2171
|
-
if (clientFileRE.test(
|
|
2185
|
+
if (clientFileRE.test(id) || clientDirRE.test(id)) {
|
|
2172
2186
|
let exports2 = (0, import_es_module_lexer.parse)(code)[1];
|
|
2173
2187
|
return {
|
|
2174
2188
|
code: exports2.map(
|
|
@@ -2181,9 +2195,9 @@ var reactRouterVitePlugin = () => {
|
|
|
2181
2195
|
},
|
|
2182
2196
|
plugin,
|
|
2183
2197
|
{
|
|
2184
|
-
name: "react-router
|
|
2185
|
-
async transform(code,
|
|
2186
|
-
let route = getRoute(ctx.reactRouterConfig,
|
|
2198
|
+
name: "react-router:route-exports",
|
|
2199
|
+
async transform(code, id, options) {
|
|
2200
|
+
let route = getRoute(ctx.reactRouterConfig, id);
|
|
2187
2201
|
if (!route) return;
|
|
2188
2202
|
if (!options?.ssr && !ctx.reactRouterConfig.ssr) {
|
|
2189
2203
|
let serverOnlyExports = (0, import_es_module_lexer.parse)(code)[1].map((exp) => exp.n).filter((exp) => SERVER_ONLY_ROUTE_EXPORTS.includes(exp));
|
|
@@ -2200,7 +2214,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2200
2214
|
}
|
|
2201
2215
|
}
|
|
2202
2216
|
}
|
|
2203
|
-
let [filepath] =
|
|
2217
|
+
let [filepath] = id.split("?");
|
|
2204
2218
|
let ast = (0, import_parser.parse)(code, { sourceType: "module" });
|
|
2205
2219
|
if (!options?.ssr) {
|
|
2206
2220
|
removeExports(ast, SERVER_ONLY_ROUTE_EXPORTS);
|
|
@@ -2208,22 +2222,23 @@ var reactRouterVitePlugin = () => {
|
|
|
2208
2222
|
transform(ast);
|
|
2209
2223
|
return generate2(ast, {
|
|
2210
2224
|
sourceMaps: true,
|
|
2211
|
-
filename:
|
|
2225
|
+
filename: id,
|
|
2212
2226
|
sourceFileName: filepath
|
|
2213
2227
|
});
|
|
2214
2228
|
}
|
|
2215
2229
|
},
|
|
2216
2230
|
{
|
|
2217
|
-
name: "react-router
|
|
2231
|
+
name: "react-router:inject-hmr-runtime",
|
|
2218
2232
|
enforce: "pre",
|
|
2219
|
-
resolveId(
|
|
2220
|
-
if (
|
|
2221
|
-
return
|
|
2233
|
+
resolveId(id) {
|
|
2234
|
+
if (id === virtualInjectHmrRuntime.id) {
|
|
2235
|
+
return virtualInjectHmrRuntime.resolvedId;
|
|
2236
|
+
}
|
|
2222
2237
|
},
|
|
2223
|
-
async load(
|
|
2224
|
-
if (
|
|
2238
|
+
async load(id) {
|
|
2239
|
+
if (id !== virtualInjectHmrRuntime.resolvedId) return;
|
|
2225
2240
|
return [
|
|
2226
|
-
`import RefreshRuntime from "${
|
|
2241
|
+
`import RefreshRuntime from "${virtualHmrRuntime.id}"`,
|
|
2227
2242
|
"RefreshRuntime.injectIntoGlobalHook(window)",
|
|
2228
2243
|
"window.$RefreshReg$ = () => {}",
|
|
2229
2244
|
"window.$RefreshSig$ = () => (type) => type",
|
|
@@ -2232,13 +2247,13 @@ var reactRouterVitePlugin = () => {
|
|
|
2232
2247
|
}
|
|
2233
2248
|
},
|
|
2234
2249
|
{
|
|
2235
|
-
name: "react-router
|
|
2250
|
+
name: "react-router:hmr-runtime",
|
|
2236
2251
|
enforce: "pre",
|
|
2237
|
-
resolveId(
|
|
2238
|
-
if (
|
|
2252
|
+
resolveId(id) {
|
|
2253
|
+
if (id === virtualHmrRuntime.id) return virtualHmrRuntime.resolvedId;
|
|
2239
2254
|
},
|
|
2240
|
-
async load(
|
|
2241
|
-
if (
|
|
2255
|
+
async load(id) {
|
|
2256
|
+
if (id !== virtualHmrRuntime.resolvedId) return;
|
|
2242
2257
|
let reactRefreshDir = path4.dirname(
|
|
2243
2258
|
require.resolve("react-refresh/package.json")
|
|
2244
2259
|
);
|
|
@@ -2258,11 +2273,11 @@ var reactRouterVitePlugin = () => {
|
|
|
2258
2273
|
}
|
|
2259
2274
|
},
|
|
2260
2275
|
{
|
|
2261
|
-
name: "react-router
|
|
2262
|
-
async transform(code,
|
|
2276
|
+
name: "react-router:react-refresh-babel",
|
|
2277
|
+
async transform(code, id, options) {
|
|
2263
2278
|
if (viteCommand !== "serve") return;
|
|
2264
|
-
if (
|
|
2265
|
-
let [filepath] =
|
|
2279
|
+
if (id.includes("/node_modules/")) return;
|
|
2280
|
+
let [filepath] = id.split("?");
|
|
2266
2281
|
let extensionsRE = /\.(jsx?|tsx?|mdx?)$/;
|
|
2267
2282
|
if (!extensionsRE.test(filepath)) return;
|
|
2268
2283
|
let devRuntime = "react/jsx-dev-runtime";
|
|
@@ -2270,13 +2285,10 @@ var reactRouterVitePlugin = () => {
|
|
|
2270
2285
|
let isJSX = filepath.endsWith("x");
|
|
2271
2286
|
let useFastRefresh = !ssr && (isJSX || code.includes(devRuntime));
|
|
2272
2287
|
if (!useFastRefresh) return;
|
|
2273
|
-
if (isRouteEntry(id2)) {
|
|
2274
|
-
return { code: addRefreshWrapper(ctx.reactRouterConfig, code, id2) };
|
|
2275
|
-
}
|
|
2276
2288
|
let result = await babel.transformAsync(code, {
|
|
2277
2289
|
babelrc: false,
|
|
2278
2290
|
configFile: false,
|
|
2279
|
-
filename:
|
|
2291
|
+
filename: id,
|
|
2280
2292
|
sourceFileName: filepath,
|
|
2281
2293
|
parserOpts: {
|
|
2282
2294
|
sourceType: "module",
|
|
@@ -2289,18 +2301,18 @@ var reactRouterVitePlugin = () => {
|
|
|
2289
2301
|
code = result.code;
|
|
2290
2302
|
let refreshContentRE = /\$Refresh(?:Reg|Sig)\$\(/;
|
|
2291
2303
|
if (refreshContentRE.test(code)) {
|
|
2292
|
-
code = addRefreshWrapper(ctx.reactRouterConfig, code,
|
|
2304
|
+
code = addRefreshWrapper(ctx.reactRouterConfig, code, id);
|
|
2293
2305
|
}
|
|
2294
2306
|
return { code, map: result.map };
|
|
2295
2307
|
}
|
|
2296
2308
|
},
|
|
2297
2309
|
{
|
|
2298
|
-
name: "react-router
|
|
2310
|
+
name: "react-router:hmr-updates",
|
|
2299
2311
|
async handleHotUpdate({ server, file, modules, read }) {
|
|
2300
2312
|
let route = getRoute(ctx.reactRouterConfig, file);
|
|
2301
2313
|
let hmrEventData = { route: null };
|
|
2302
2314
|
if (route) {
|
|
2303
|
-
let serverManifest = (await server.ssrLoadModule(
|
|
2315
|
+
let serverManifest = (await server.ssrLoadModule(virtual.serverManifest.id)).default;
|
|
2304
2316
|
let oldRouteMetadata = serverManifest.routes[route.id];
|
|
2305
2317
|
let newRouteMetadata = await getRouteMetadata(
|
|
2306
2318
|
ctx,
|
|
@@ -2326,12 +2338,58 @@ var reactRouterVitePlugin = () => {
|
|
|
2326
2338
|
});
|
|
2327
2339
|
return modules;
|
|
2328
2340
|
}
|
|
2341
|
+
},
|
|
2342
|
+
{
|
|
2343
|
+
name: "react-router-server-change-trigger-client-hmr",
|
|
2344
|
+
// This hook is only available in Vite v6+ so this is a no-op in v5.
|
|
2345
|
+
// Previously the server and client modules were shared in a single module
|
|
2346
|
+
// graph. This meant that changes to server code automatically resulted in
|
|
2347
|
+
// client HMR updates. In Vite v6+ these module graphs are separate from
|
|
2348
|
+
// each other so we need to manually trigger client HMR updates if server
|
|
2349
|
+
// code has changed.
|
|
2350
|
+
hotUpdate({ server, modules }) {
|
|
2351
|
+
if (this.environment.name !== "ssr" && modules.length <= 0) {
|
|
2352
|
+
return;
|
|
2353
|
+
}
|
|
2354
|
+
let clientModules = uniqueNodes(
|
|
2355
|
+
modules.flatMap(
|
|
2356
|
+
(mod) => getParentClientNodes(server.environments.client.moduleGraph, mod)
|
|
2357
|
+
)
|
|
2358
|
+
);
|
|
2359
|
+
for (let clientModule of clientModules) {
|
|
2360
|
+
server.environments.client.reloadModule(clientModule);
|
|
2361
|
+
}
|
|
2362
|
+
}
|
|
2329
2363
|
}
|
|
2330
2364
|
];
|
|
2331
2365
|
};
|
|
2332
|
-
function
|
|
2333
|
-
|
|
2334
|
-
|
|
2366
|
+
function getParentClientNodes(clientModuleGraph, module2) {
|
|
2367
|
+
if (!module2.id) {
|
|
2368
|
+
return [];
|
|
2369
|
+
}
|
|
2370
|
+
let clientModule = clientModuleGraph.getModuleById(module2.id);
|
|
2371
|
+
if (clientModule) {
|
|
2372
|
+
return [clientModule];
|
|
2373
|
+
}
|
|
2374
|
+
return [...module2.importers].flatMap(
|
|
2375
|
+
(importer) => getParentClientNodes(clientModuleGraph, importer)
|
|
2376
|
+
);
|
|
2377
|
+
}
|
|
2378
|
+
function uniqueNodes(nodes) {
|
|
2379
|
+
let nodeUrls = /* @__PURE__ */ new Set();
|
|
2380
|
+
let unique = [];
|
|
2381
|
+
for (let node of nodes) {
|
|
2382
|
+
if (nodeUrls.has(node.url)) {
|
|
2383
|
+
continue;
|
|
2384
|
+
}
|
|
2385
|
+
nodeUrls.add(node.url);
|
|
2386
|
+
unique.push(node);
|
|
2387
|
+
}
|
|
2388
|
+
return unique;
|
|
2389
|
+
}
|
|
2390
|
+
function addRefreshWrapper(reactRouterConfig, code, id) {
|
|
2391
|
+
let route = getRoute(reactRouterConfig, id);
|
|
2392
|
+
let acceptExports = route ? [
|
|
2335
2393
|
"clientAction",
|
|
2336
2394
|
"clientLoader",
|
|
2337
2395
|
"handle",
|
|
@@ -2341,10 +2399,10 @@ function addRefreshWrapper(reactRouterConfig, code, id2) {
|
|
|
2341
2399
|
] : [];
|
|
2342
2400
|
return "\n\n" + withCommentBoundaries(
|
|
2343
2401
|
"REACT REFRESH HEADER",
|
|
2344
|
-
REACT_REFRESH_HEADER.replaceAll("__SOURCE__", JSON.stringify(
|
|
2402
|
+
REACT_REFRESH_HEADER.replaceAll("__SOURCE__", JSON.stringify(id))
|
|
2345
2403
|
) + "\n\n" + withCommentBoundaries("REACT REFRESH BODY", code) + "\n\n" + withCommentBoundaries(
|
|
2346
2404
|
"REACT REFRESH FOOTER",
|
|
2347
|
-
REACT_REFRESH_FOOTER.replaceAll("__SOURCE__", JSON.stringify(
|
|
2405
|
+
REACT_REFRESH_FOOTER.replaceAll("__SOURCE__", JSON.stringify(id)).replaceAll("__ACCEPT_EXPORTS__", JSON.stringify(acceptExports)).replaceAll("__ROUTE_ID__", JSON.stringify(route?.id))
|
|
2348
2406
|
) + "\n";
|
|
2349
2407
|
}
|
|
2350
2408
|
function withCommentBoundaries(label, text) {
|
|
@@ -2357,7 +2415,7 @@ ${text}
|
|
|
2357
2415
|
${end}`;
|
|
2358
2416
|
}
|
|
2359
2417
|
var REACT_REFRESH_HEADER = `
|
|
2360
|
-
import RefreshRuntime from "${
|
|
2418
|
+
import RefreshRuntime from "${virtualHmrRuntime.id}";
|
|
2361
2419
|
|
|
2362
2420
|
const inWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;
|
|
2363
2421
|
let prevRefreshReg;
|
|
@@ -2443,7 +2501,7 @@ async function getPrerenderBuildAndHandler(viteConfig, reactRouterConfig, server
|
|
|
2443
2501
|
serverBuildDirectory,
|
|
2444
2502
|
reactRouterConfig.serverBuildFile
|
|
2445
2503
|
);
|
|
2446
|
-
let build = await import(
|
|
2504
|
+
let build = await import(url.pathToFileURL(serverBuildPath).toString());
|
|
2447
2505
|
let { createRequestHandler: createHandler } = await import("react-router");
|
|
2448
2506
|
return {
|
|
2449
2507
|
build,
|