@react-router/dev 0.0.0-experimental-4ed3f5da9 → 0.0.0-experimental-fbbd4fd81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands.js +1 -1
- package/dist/cli/detectPackageManager.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/run.js +1 -1
- package/dist/cli/useJavascript.js +1 -1
- package/dist/cli.js +1 -1
- package/dist/colors.js +1 -1
- package/dist/config/findConfig.js +1 -1
- package/dist/config/flatRoutes.js +1 -1
- package/dist/config/format.js +1 -1
- package/dist/config/routes.js +1 -1
- package/dist/config.d.ts +0 -13
- package/dist/config.js +5 -15
- package/dist/index.js +1 -1
- package/dist/invariant.js +1 -1
- package/dist/vite/babel.js +1 -1
- package/dist/vite/build.js +1 -1
- package/dist/vite/cloudflare-proxy-plugin.js +1 -1
- package/dist/vite/dev.js +1 -1
- package/dist/vite/import-vite-esm-sync.js +1 -1
- package/dist/vite/index.js +1 -1
- package/dist/vite/node-adapter.js +1 -1
- package/dist/vite/plugin.js +12 -118
- package/dist/vite/profiler.js +1 -1
- package/dist/vite/remove-exports.js +1 -1
- package/dist/vite/resolve-file-url.js +1 -1
- package/dist/vite/styles.js +1 -1
- package/dist/vite/vmod.js +1 -1
- package/package.json +7 -7
package/dist/cli/commands.js
CHANGED
package/dist/cli/index.js
CHANGED
package/dist/cli/run.js
CHANGED
package/dist/cli.js
CHANGED
package/dist/colors.js
CHANGED
package/dist/config/format.js
CHANGED
package/dist/config/routes.js
CHANGED
package/dist/config.d.ts
CHANGED
|
@@ -93,11 +93,6 @@ export type VitePluginConfig = {
|
|
|
93
93
|
* Defaults to `false`.
|
|
94
94
|
*/
|
|
95
95
|
manifest?: boolean;
|
|
96
|
-
/**
|
|
97
|
-
* An array of URLs to prerender to HTML files at build time. Can also be a
|
|
98
|
-
* function returning an array to dynamically generate URLs.
|
|
99
|
-
*/
|
|
100
|
-
prerender?: Array<string> | (() => Array<string> | Promise<Array<string>>);
|
|
101
96
|
/**
|
|
102
97
|
* An array of React Router plugin config presets to ease integration with
|
|
103
98
|
* other platforms and tools.
|
|
@@ -149,10 +144,6 @@ export type ResolvedVitePluginConfig = Readonly<{
|
|
|
149
144
|
* Defaults to `false`.
|
|
150
145
|
*/
|
|
151
146
|
manifest: boolean;
|
|
152
|
-
/**
|
|
153
|
-
* An array of URLs to prerender to HTML files at build time.
|
|
154
|
-
*/
|
|
155
|
-
prerender: Array<string> | null;
|
|
156
147
|
/**
|
|
157
148
|
* Derived from Vite's `base` config
|
|
158
149
|
* */
|
|
@@ -216,10 +207,6 @@ export declare function resolveReactRouterConfig({ rootDirectory, reactRouterUse
|
|
|
216
207
|
* Defaults to `false`.
|
|
217
208
|
*/
|
|
218
209
|
manifest: boolean;
|
|
219
|
-
/**
|
|
220
|
-
* An array of URLs to prerender to HTML files at build time.
|
|
221
|
-
*/
|
|
222
|
-
prerender: string[] | null;
|
|
223
210
|
/**
|
|
224
211
|
* Derived from Vite's `base` config
|
|
225
212
|
* */
|
package/dist/config.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-fbbd4fd81
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -124,7 +124,6 @@ async function resolveReactRouterConfig({
|
|
|
124
124
|
ignoredRouteFiles,
|
|
125
125
|
manifest,
|
|
126
126
|
routes: userRoutesFunction,
|
|
127
|
-
prerender: prerenderConfig,
|
|
128
127
|
serverBuildFile,
|
|
129
128
|
serverBundles,
|
|
130
129
|
serverModuleFormat,
|
|
@@ -134,21 +133,12 @@ async function resolveReactRouterConfig({
|
|
|
134
133
|
// Default values should be completely overridden by user/preset config, not merged
|
|
135
134
|
...mergeReactRouterConfig(...presets, reactRouterUserConfig)
|
|
136
135
|
};
|
|
136
|
+
let isSpaMode = !ssr;
|
|
137
137
|
// Log warning for incompatible vite config flags
|
|
138
|
-
if (
|
|
138
|
+
if (isSpaMode && serverBundles) {
|
|
139
139
|
console.warn(colors__default["default"].yellow(colors__default["default"].bold("⚠️ SPA Mode: ") + "the `serverBundles` config is invalid with " + "`ssr:false` and will be ignored`"));
|
|
140
140
|
serverBundles = undefined;
|
|
141
141
|
}
|
|
142
|
-
let prerender = null;
|
|
143
|
-
if (prerenderConfig) {
|
|
144
|
-
if (Array.isArray(prerenderConfig)) {
|
|
145
|
-
prerender = prerenderConfig;
|
|
146
|
-
} else if (typeof prerenderConfig === "function") {
|
|
147
|
-
prerender = await prerenderConfig();
|
|
148
|
-
} else {
|
|
149
|
-
throw new Error("The `prerender` config must be an array of string paths, or a function " + "returning an array of string paths");
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
142
|
let appDirectory = path__default["default"].resolve(rootDirectory, userAppDirectory || "app");
|
|
153
143
|
let buildDirectory = path__default["default"].resolve(rootDirectory, userBuildDirectory);
|
|
154
144
|
let publicPath = viteUserConfig.base ?? "/";
|
|
@@ -197,7 +187,6 @@ async function resolveReactRouterConfig({
|
|
|
197
187
|
buildEnd,
|
|
198
188
|
future,
|
|
199
189
|
manifest,
|
|
200
|
-
prerender,
|
|
201
190
|
publicPath,
|
|
202
191
|
routes: routes$1,
|
|
203
192
|
serverBuildFile,
|
|
@@ -221,6 +210,7 @@ async function resolveEntryFiles({
|
|
|
221
210
|
appDirectory,
|
|
222
211
|
future
|
|
223
212
|
} = reactRouterConfig;
|
|
213
|
+
let isSpaMode = !reactRouterConfig.ssr;
|
|
224
214
|
let defaultsDirectory = path__default["default"].resolve(__dirname, "config", "defaults");
|
|
225
215
|
let userEntryClientFile = findEntry(appDirectory, "entry.client");
|
|
226
216
|
let userEntryServerFile = findEntry(appDirectory, "entry.server");
|
|
@@ -228,7 +218,7 @@ async function resolveEntryFiles({
|
|
|
228
218
|
let entryClientFile = userEntryClientFile || "entry.client.tsx";
|
|
229
219
|
let pkgJson = await PackageJson__default["default"].load(rootDirectory);
|
|
230
220
|
let deps = pkgJson.content.dependencies ?? {};
|
|
231
|
-
if (
|
|
221
|
+
if (isSpaMode && (future === null || future === void 0 ? void 0 : future.unstable_singleFetch) != true) {
|
|
232
222
|
// This is a super-simple default since we don't need streaming in SPA Mode.
|
|
233
223
|
// We can include this in a remix-spa template, but right now `npx remix reveal`
|
|
234
224
|
// will still expose the streaming template since that command doesn't have
|
package/dist/index.js
CHANGED
package/dist/invariant.js
CHANGED
package/dist/vite/babel.js
CHANGED
package/dist/vite/build.js
CHANGED
package/dist/vite/dev.js
CHANGED
package/dist/vite/index.js
CHANGED
package/dist/vite/plugin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-fbbd4fd81
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -18,7 +18,6 @@ var url = require('node:url');
|
|
|
18
18
|
var fse = require('fs-extra');
|
|
19
19
|
var babel = require('@babel/core');
|
|
20
20
|
var serverRuntime = require('@react-router/server-runtime');
|
|
21
|
-
var reactRouter = require('react-router');
|
|
22
21
|
var esModuleLexer = require('es-module-lexer');
|
|
23
22
|
var jsesc = require('jsesc');
|
|
24
23
|
var colors = require('picocolors');
|
|
@@ -325,7 +324,7 @@ const reactRouterVitePlugin = _config => {
|
|
|
325
324
|
export const assetsBuildDirectory = ${JSON.stringify(path__namespace.relative(ctx.rootDirectory, getClientBuildDirectory(ctx.reactRouterConfig)))};
|
|
326
325
|
export const basename = ${JSON.stringify(ctx.reactRouterConfig.basename)};
|
|
327
326
|
export const future = ${JSON.stringify(ctx.reactRouterConfig.future)};
|
|
328
|
-
export const isSpaMode = ${!ctx.reactRouterConfig.ssr
|
|
327
|
+
export const isSpaMode = ${!ctx.reactRouterConfig.ssr};
|
|
329
328
|
export const publicPath = ${JSON.stringify(ctx.reactRouterConfig.publicPath)};
|
|
330
329
|
export const entry = { module: entryServer };
|
|
331
330
|
export const routes = {
|
|
@@ -749,19 +748,8 @@ const reactRouterVitePlugin = _config => {
|
|
|
749
748
|
if (movedAssetPaths.length) {
|
|
750
749
|
viteConfig.logger.info(["", `${colors__default["default"].green("✓")} ${movedAssetPaths.length} asset${movedAssetPaths.length > 1 ? "s" : ""} moved from React Router server build to client assets.`, ...movedAssetPaths.map(movedAssetPath => colors__default["default"].dim(path__namespace.relative(ctx.rootDirectory, movedAssetPath))), ""].join("\n"));
|
|
751
750
|
}
|
|
752
|
-
if (ctx.reactRouterConfig.prerender != null) {
|
|
753
|
-
// If we have prerender routes, that takes precedence over SPA mode
|
|
754
|
-
// which is ssr:false and only the rot route being rendered
|
|
755
|
-
await handlePrerender(viteConfig, ctx.reactRouterConfig, serverBuildDirectory, clientBuildDirectory);
|
|
756
|
-
} else if (!ctx.reactRouterConfig.ssr) {
|
|
757
|
-
await handleSpaMode(viteConfig, ctx.reactRouterConfig, serverBuildDirectory, clientBuildDirectory);
|
|
758
|
-
}
|
|
759
|
-
// For both SPA mode and prerendering, we can remove the server builds
|
|
760
|
-
// if ssr:false is set
|
|
761
751
|
if (!ctx.reactRouterConfig.ssr) {
|
|
762
|
-
|
|
763
|
-
viteConfig.logger.info(["Removing the server build in", colors__default["default"].green(serverBuildDirectory), "due to ssr:false"].join(" "));
|
|
764
|
-
fse__namespace.removeSync(serverBuildDirectory);
|
|
752
|
+
await handleSpaMode(serverBuildDirectory, ctx.reactRouterConfig.serverBuildFile, clientBuildDirectory, viteConfig, ctx.reactRouterConfig.basename);
|
|
765
753
|
}
|
|
766
754
|
}
|
|
767
755
|
},
|
|
@@ -1051,23 +1039,17 @@ async function getRouteMetadata(ctx, viteChildCompiler, route, readRouteFile) {
|
|
|
1051
1039
|
};
|
|
1052
1040
|
return info;
|
|
1053
1041
|
}
|
|
1054
|
-
async function
|
|
1055
|
-
|
|
1042
|
+
async function handleSpaMode(serverBuildDirectoryPath, serverBuildFile, clientBuildDirectory, viteConfig, basename) {
|
|
1043
|
+
// Create a handler and call it for the `/` path - rendering down to the
|
|
1044
|
+
// proper HydrateFallback ... or not! Maybe they have a static landing page
|
|
1045
|
+
// generated from routes/_index.tsx.
|
|
1046
|
+
let serverBuildPath = path__namespace.join(serverBuildDirectoryPath, serverBuildFile);
|
|
1056
1047
|
let build = await import(url__namespace.pathToFileURL(serverBuildPath).toString());
|
|
1057
1048
|
let {
|
|
1058
1049
|
createRequestHandler: createHandler
|
|
1059
1050
|
} = await import('@react-router/node');
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
handler: createHandler(build, viteConfig.mode)
|
|
1063
|
-
};
|
|
1064
|
-
}
|
|
1065
|
-
async function handleSpaMode(viteConfig, reactRouterConfig, serverBuildDirectory, clientBuildDirectory) {
|
|
1066
|
-
let {
|
|
1067
|
-
handler
|
|
1068
|
-
} = await getPrerenderBuildAndHandler(viteConfig, reactRouterConfig, serverBuildDirectory);
|
|
1069
|
-
let request = new Request(`http://localhost${reactRouterConfig.basename}`);
|
|
1070
|
-
let response = await handler(request);
|
|
1051
|
+
let handler = createHandler(build, viteConfig.mode);
|
|
1052
|
+
let response = await handler(new Request(`http://localhost${basename}`));
|
|
1071
1053
|
let html = await response.text();
|
|
1072
1054
|
if (response.status !== 200) {
|
|
1073
1055
|
throw new Error(`SPA Mode: Received a ${response.status} status code from ` + `\`entry.server.tsx\` while generating the \`index.html\` file.\n${html}`);
|
|
@@ -1078,96 +1060,8 @@ async function handleSpaMode(viteConfig, reactRouterConfig, serverBuildDirectory
|
|
|
1078
1060
|
// Write out the index.html file for the SPA
|
|
1079
1061
|
await fse__namespace.writeFile(path__namespace.join(clientBuildDirectory, "index.html"), html);
|
|
1080
1062
|
viteConfig.logger.info("SPA Mode: index.html has been written to your " + colors__default["default"].bold(path__namespace.relative(process.cwd(), clientBuildDirectory)) + " directory");
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
let {
|
|
1084
|
-
build,
|
|
1085
|
-
handler
|
|
1086
|
-
} = await getPrerenderBuildAndHandler(viteConfig, reactRouterConfig, serverBuildDirectory);
|
|
1087
|
-
let routes = createPrerenderRoutes(build.routes);
|
|
1088
|
-
let routesToPrerender = reactRouterConfig.prerender || ["/"];
|
|
1089
|
-
let requestInit = {
|
|
1090
|
-
headers: {
|
|
1091
|
-
// Header that can be used in the loader to know if you're running at
|
|
1092
|
-
// build time or runtime
|
|
1093
|
-
"X-React-Router-Prerender": "yes"
|
|
1094
|
-
}
|
|
1095
|
-
};
|
|
1096
|
-
for (let path of routesToPrerender) {
|
|
1097
|
-
var _matchRoutes;
|
|
1098
|
-
let hasLoaders = (_matchRoutes = reactRouter.matchRoutes(routes, path)) === null || _matchRoutes === void 0 ? void 0 : _matchRoutes.some(m => m.route.loader);
|
|
1099
|
-
if (hasLoaders) {
|
|
1100
|
-
await prerenderData(handler, reactRouterConfig.basename, path, clientBuildDirectory, viteConfig, requestInit);
|
|
1101
|
-
}
|
|
1102
|
-
await prerenderRoute(handler, reactRouterConfig.basename, path, clientBuildDirectory, viteConfig, requestInit);
|
|
1103
|
-
}
|
|
1104
|
-
async function prerenderData(handler, basename, prerenderPath, clientBuildDirectory, viteConfig, requestInit) {
|
|
1105
|
-
let normalizedPath = `${basename}${prerenderPath === "/" ? "/_root.data" : `${prerenderPath.replace(/\/$/, "")}.data`}`.replace(/\/\/+/g, "/");
|
|
1106
|
-
let request = new Request(`http://localhost${normalizedPath}`, requestInit);
|
|
1107
|
-
let response = await handler(request);
|
|
1108
|
-
let data = await response.text();
|
|
1109
|
-
if (response.status !== 200) {
|
|
1110
|
-
throw new Error(`Prerender: Received a ${response.status} status code from ` + `\`entry.server.tsx\` while prerendering the \`${normalizedPath}\` ` + `path.\n${data}`);
|
|
1111
|
-
}
|
|
1112
|
-
// Write out the .data file
|
|
1113
|
-
let outdir = path__namespace.relative(process.cwd(), clientBuildDirectory);
|
|
1114
|
-
let outfile = path__namespace.join(outdir, normalizedPath.split("/").join(path__namespace.sep));
|
|
1115
|
-
await fse__namespace.ensureDir(path__namespace.dirname(outfile));
|
|
1116
|
-
await fse__namespace.outputFile(outfile, data);
|
|
1117
|
-
viteConfig.logger.info(`Prerender: Generated ${colors__default["default"].bold(outfile)}`);
|
|
1118
|
-
}
|
|
1119
|
-
}
|
|
1120
|
-
async function prerenderRoute(handler, basename, prerenderPath, clientBuildDirectory, viteConfig, requestInit) {
|
|
1121
|
-
let normalizedPath = `${basename}${prerenderPath}/`.replace(/\/\/+/g, "/");
|
|
1122
|
-
let request = new Request(`http://localhost${normalizedPath}`, requestInit);
|
|
1123
|
-
let response = await handler(request);
|
|
1124
|
-
let html = await response.text();
|
|
1125
|
-
if (response.status !== 200) {
|
|
1126
|
-
throw new Error(`Prerender: Received a ${response.status} status code from ` + `\`entry.server.tsx\` while prerendering the \`${normalizedPath}\` ` + `path.\n${html}`);
|
|
1127
|
-
}
|
|
1128
|
-
if (!html.includes("window.__remixContext =") || !html.includes("window.__remixRouteModules =")) {
|
|
1129
|
-
throw new Error("Prerender: Did you forget to include <Scripts/> in your `root.tsx` " + "`HydrateFallback` component? Your prerendered HTML files cannot " + "hydrate into a SPA without `<Scripts />`.");
|
|
1130
|
-
}
|
|
1131
|
-
// Write out the HTML file
|
|
1132
|
-
let outdir = path__namespace.relative(process.cwd(), clientBuildDirectory);
|
|
1133
|
-
let outfile = path__namespace.join(outdir, ...normalizedPath.split("/"), "index.html");
|
|
1134
|
-
await fse__namespace.ensureDir(path__namespace.dirname(outfile));
|
|
1135
|
-
await fse__namespace.outputFile(outfile, html);
|
|
1136
|
-
viteConfig.logger.info(`Prerender: Generated ${colors__default["default"].bold(outfile)}`);
|
|
1137
|
-
}
|
|
1138
|
-
// Note: Duplicated from remix-server-runtime
|
|
1139
|
-
function groupRoutesByParentId(manifest) {
|
|
1140
|
-
let routes = {};
|
|
1141
|
-
Object.values(manifest).forEach(route => {
|
|
1142
|
-
let parentId = route.parentId || "";
|
|
1143
|
-
if (!routes[parentId]) {
|
|
1144
|
-
routes[parentId] = [];
|
|
1145
|
-
}
|
|
1146
|
-
routes[parentId].push(route);
|
|
1147
|
-
});
|
|
1148
|
-
return routes;
|
|
1149
|
-
}
|
|
1150
|
-
// Note: Duplicated from remix-server-runtime
|
|
1151
|
-
function createPrerenderRoutes(manifest, parentId = "", routesByParentId = groupRoutesByParentId(manifest)) {
|
|
1152
|
-
return (routesByParentId[parentId] || []).map(route => {
|
|
1153
|
-
let commonRoute = {
|
|
1154
|
-
// Always include root due to default boundaries
|
|
1155
|
-
hasErrorBoundary: route.id === "root" || route.module.ErrorBoundary != null,
|
|
1156
|
-
id: route.id,
|
|
1157
|
-
path: route.path,
|
|
1158
|
-
loader: route.module.loader ? () => null : undefined,
|
|
1159
|
-
action: undefined,
|
|
1160
|
-
handle: route.module.handle
|
|
1161
|
-
};
|
|
1162
|
-
return route.index ? {
|
|
1163
|
-
index: true,
|
|
1164
|
-
...commonRoute
|
|
1165
|
-
} : {
|
|
1166
|
-
caseSensitive: route.caseSensitive,
|
|
1167
|
-
children: createPrerenderRoutes(manifest, route.id, routesByParentId),
|
|
1168
|
-
...commonRoute
|
|
1169
|
-
};
|
|
1170
|
-
});
|
|
1063
|
+
// Cleanup - we no longer need the server build assets
|
|
1064
|
+
fse__namespace.removeSync(serverBuildDirectoryPath);
|
|
1171
1065
|
}
|
|
1172
1066
|
|
|
1173
1067
|
exports.extractPluginContext = extractPluginContext;
|
package/dist/vite/profiler.js
CHANGED
package/dist/vite/styles.js
CHANGED
package/dist/vite/vmod.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-router/dev",
|
|
3
|
-
"version": "0.0.0-experimental-
|
|
3
|
+
"version": "0.0.0-experimental-fbbd4fd81",
|
|
4
4
|
"description": "Dev tools and CLI for React Router",
|
|
5
5
|
"homepage": "https://reactrouter.com",
|
|
6
6
|
"bugs": {
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"react-refresh": "^0.14.0",
|
|
43
43
|
"semver": "^7.3.7",
|
|
44
44
|
"set-cookie-parser": "^2.6.0",
|
|
45
|
-
"@react-router/node": "0.0.0-experimental-
|
|
46
|
-
"@react-router/server-runtime": "0.0.0-experimental-
|
|
47
|
-
"react-router": "0.0.0-experimental-
|
|
45
|
+
"@react-router/node": "0.0.0-experimental-fbbd4fd81",
|
|
46
|
+
"@react-router/server-runtime": "0.0.0-experimental-fbbd4fd81",
|
|
47
|
+
"react-router": "0.0.0-experimental-fbbd4fd81"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@types/babel__core": "^7.20.5",
|
|
@@ -69,14 +69,14 @@
|
|
|
69
69
|
"tiny-invariant": "^1.2.0",
|
|
70
70
|
"vite": "^5.1.0",
|
|
71
71
|
"wrangler": "^3.28.2",
|
|
72
|
-
"@react-router/serve": "0.0.0-experimental-
|
|
72
|
+
"@react-router/serve": "0.0.0-experimental-fbbd4fd81"
|
|
73
73
|
},
|
|
74
74
|
"peerDependencies": {
|
|
75
75
|
"typescript": "^5.1.0",
|
|
76
76
|
"vite": "^5.1.0",
|
|
77
77
|
"wrangler": "^3.28.2",
|
|
78
|
-
"
|
|
79
|
-
"react-router": "^0.0.0-experimental-
|
|
78
|
+
"react-router": "^0.0.0-experimental-fbbd4fd81",
|
|
79
|
+
"@react-router/serve": "^0.0.0-experimental-fbbd4fd81"
|
|
80
80
|
},
|
|
81
81
|
"peerDependenciesMeta": {
|
|
82
82
|
"@react-router/serve": {
|