@react-router/dev 0.0.0-experimental-23ff92a9d → 0.0.0-experimental-dcaf20023
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +77 -43
- package/dist/config/defaults/entry.server.node.tsx +2 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/vite/cloudflare.d.ts +3 -2
- package/dist/vite/cloudflare.js +42 -37
- package/dist/vite.js +114 -52
- package/package.json +6 -13
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* @react-router/dev v0.0.0-experimental-
|
|
3
|
+
* @react-router/dev v0.0.0-experimental-dcaf20023
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) Remix Software Inc.
|
|
6
6
|
*
|
|
@@ -100,27 +100,53 @@ var init_vite = __esm({
|
|
|
100
100
|
}
|
|
101
101
|
});
|
|
102
102
|
|
|
103
|
+
// vite/ssr-externals.ts
|
|
104
|
+
var ssrExternals;
|
|
105
|
+
var init_ssr_externals = __esm({
|
|
106
|
+
"vite/ssr-externals.ts"() {
|
|
107
|
+
"use strict";
|
|
108
|
+
init_is_react_router_repo();
|
|
109
|
+
ssrExternals = isReactRouterRepo() ? [
|
|
110
|
+
// This is only needed within this repo because these packages
|
|
111
|
+
// are linked to a directory outside of node_modules so Vite
|
|
112
|
+
// treats them as internal code by default.
|
|
113
|
+
"react-router",
|
|
114
|
+
"react-router-dom",
|
|
115
|
+
"@react-router/architect",
|
|
116
|
+
"@react-router/cloudflare",
|
|
117
|
+
"@react-router/dev",
|
|
118
|
+
"@react-router/express",
|
|
119
|
+
"@react-router/node",
|
|
120
|
+
"@react-router/serve"
|
|
121
|
+
] : void 0;
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
103
125
|
// vite/vite-node.ts
|
|
104
|
-
async function createContext(
|
|
126
|
+
async function createContext({
|
|
127
|
+
root,
|
|
128
|
+
mode
|
|
129
|
+
}) {
|
|
105
130
|
await preloadVite();
|
|
106
131
|
const vite2 = getVite();
|
|
107
|
-
const devServer = await vite2.createServer(
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
132
|
+
const devServer = await vite2.createServer({
|
|
133
|
+
root,
|
|
134
|
+
mode,
|
|
135
|
+
server: {
|
|
136
|
+
preTransformRequests: false,
|
|
137
|
+
hmr: false,
|
|
138
|
+
watch: null
|
|
139
|
+
},
|
|
140
|
+
ssr: {
|
|
141
|
+
external: ssrExternals
|
|
142
|
+
},
|
|
143
|
+
optimizeDeps: {
|
|
144
|
+
noDiscovery: true
|
|
145
|
+
},
|
|
146
|
+
configFile: false,
|
|
147
|
+
envFile: false,
|
|
148
|
+
plugins: []
|
|
149
|
+
});
|
|
124
150
|
await devServer.pluginContainer.buildStart({});
|
|
125
151
|
const server = new import_server.ViteNodeServer(devServer);
|
|
126
152
|
(0, import_source_map.installSourcemapsSupport)({
|
|
@@ -146,6 +172,7 @@ var init_vite_node = __esm({
|
|
|
146
172
|
import_client = require("vite-node/client");
|
|
147
173
|
import_source_map = require("vite-node/source-map");
|
|
148
174
|
init_vite();
|
|
175
|
+
init_ssr_externals();
|
|
149
176
|
}
|
|
150
177
|
});
|
|
151
178
|
|
|
@@ -392,6 +419,7 @@ async function resolveConfig({
|
|
|
392
419
|
unstable_middleware: reactRouterUserConfig.future?.unstable_middleware ?? false,
|
|
393
420
|
unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false,
|
|
394
421
|
unstable_splitRouteModules: reactRouterUserConfig.future?.unstable_splitRouteModules ?? false,
|
|
422
|
+
unstable_subResourceIntegrity: reactRouterUserConfig.future?.unstable_subResourceIntegrity ?? false,
|
|
395
423
|
unstable_viteEnvironmentApi: reactRouterUserConfig.future?.unstable_viteEnvironmentApi ?? false
|
|
396
424
|
};
|
|
397
425
|
let reactRouterConfig = deepFreeze({
|
|
@@ -419,11 +447,7 @@ async function createConfigLoader({
|
|
|
419
447
|
root = root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd();
|
|
420
448
|
let viteNodeContext = await createContext({
|
|
421
449
|
root,
|
|
422
|
-
mode: watch2 ? "development" : "production"
|
|
423
|
-
server: !watch2 ? { watch: null } : {},
|
|
424
|
-
ssr: {
|
|
425
|
-
external: ssrExternals
|
|
426
|
-
}
|
|
450
|
+
mode: watch2 ? "development" : "production"
|
|
427
451
|
});
|
|
428
452
|
let reactRouterConfigFile = findEntry(root, "react-router.config", {
|
|
429
453
|
absolute: true
|
|
@@ -517,7 +541,7 @@ function findEntry(dir, basename2, options) {
|
|
|
517
541
|
}
|
|
518
542
|
return void 0;
|
|
519
543
|
}
|
|
520
|
-
var import_node_fs, import_node_child_process, import_package_json, import_pathe3, import_chokidar, import_picocolors, import_pick2, import_omit, import_cloneDeep, import_isEqual, excludedConfigPresetKeys, mergeReactRouterConfig, deepFreeze,
|
|
544
|
+
var import_node_fs, import_node_child_process, import_package_json, import_pathe3, import_chokidar, import_picocolors, import_pick2, import_omit, import_cloneDeep, import_isEqual, excludedConfigPresetKeys, mergeReactRouterConfig, deepFreeze, entryExts;
|
|
521
545
|
var init_config = __esm({
|
|
522
546
|
"config/config.ts"() {
|
|
523
547
|
"use strict";
|
|
@@ -534,7 +558,6 @@ var init_config = __esm({
|
|
|
534
558
|
import_isEqual = __toESM(require("lodash/isEqual"));
|
|
535
559
|
init_routes();
|
|
536
560
|
init_detectPackageManager();
|
|
537
|
-
init_is_react_router_repo();
|
|
538
561
|
excludedConfigPresetKeys = ["presets"];
|
|
539
562
|
mergeReactRouterConfig = (...configs) => {
|
|
540
563
|
let reducer = (configA, configB) => {
|
|
@@ -574,19 +597,6 @@ var init_config = __esm({
|
|
|
574
597
|
});
|
|
575
598
|
return o;
|
|
576
599
|
};
|
|
577
|
-
ssrExternals = isReactRouterRepo() ? [
|
|
578
|
-
// This is only needed within this repo because these packages
|
|
579
|
-
// are linked to a directory outside of node_modules so Vite
|
|
580
|
-
// treats them as internal code by default.
|
|
581
|
-
"react-router",
|
|
582
|
-
"react-router-dom",
|
|
583
|
-
"@react-router/architect",
|
|
584
|
-
"@react-router/cloudflare",
|
|
585
|
-
"@react-router/dev",
|
|
586
|
-
"@react-router/express",
|
|
587
|
-
"@react-router/node",
|
|
588
|
-
"@react-router/serve"
|
|
589
|
-
] : void 0;
|
|
590
600
|
entryExts = [".js", ".jsx", ".ts", ".tsx"];
|
|
591
601
|
}
|
|
592
602
|
});
|
|
@@ -851,6 +861,8 @@ async function writeAll(ctx) {
|
|
|
851
861
|
});
|
|
852
862
|
const registerPath = Path4.join(typegenDir, "+register.ts");
|
|
853
863
|
import_node_fs3.default.writeFileSync(registerPath, register(ctx));
|
|
864
|
+
const virtualPath = Path4.join(typegenDir, "+virtual.ts");
|
|
865
|
+
import_node_fs3.default.writeFileSync(virtualPath, virtual);
|
|
854
866
|
}
|
|
855
867
|
function register(ctx) {
|
|
856
868
|
const register2 = import_dedent2.default`
|
|
@@ -863,12 +875,16 @@ function register(ctx) {
|
|
|
863
875
|
}
|
|
864
876
|
`;
|
|
865
877
|
const { t: t2 } = babel_exports;
|
|
878
|
+
const indexPaths = new Set(
|
|
879
|
+
Object.values(ctx.config.routes).filter((route) => route.index).map((route) => route.path)
|
|
880
|
+
);
|
|
866
881
|
const typeParams = t2.tsTypeAliasDeclaration(
|
|
867
882
|
t2.identifier("Params"),
|
|
868
883
|
null,
|
|
869
884
|
t2.tsTypeLiteral(
|
|
870
885
|
Object.values(ctx.config.routes).map((route) => {
|
|
871
886
|
if (route.id !== "root" && !route.path) return void 0;
|
|
887
|
+
if (!route.index && indexPaths.has(route.path)) return void 0;
|
|
872
888
|
const lineage2 = lineage(ctx.config.routes, route);
|
|
873
889
|
const fullpath2 = fullpath(lineage2);
|
|
874
890
|
const params = parse2(fullpath2);
|
|
@@ -892,7 +908,7 @@ function register(ctx) {
|
|
|
892
908
|
);
|
|
893
909
|
return [register2, generate(typeParams).code].join("\n\n");
|
|
894
910
|
}
|
|
895
|
-
var import_node_fs3, import_dedent2, Path4, import_picocolors3;
|
|
911
|
+
var import_node_fs3, import_dedent2, Path4, import_picocolors3, virtual;
|
|
896
912
|
var init_typegen = __esm({
|
|
897
913
|
"typegen/index.ts"() {
|
|
898
914
|
"use strict";
|
|
@@ -906,6 +922,22 @@ var init_typegen = __esm({
|
|
|
906
922
|
init_paths();
|
|
907
923
|
init_params();
|
|
908
924
|
init_route();
|
|
925
|
+
virtual = import_dedent2.default`
|
|
926
|
+
declare module "virtual:react-router/server-build" {
|
|
927
|
+
import { ServerBuild } from "react-router";
|
|
928
|
+
export const assets: ServerBuild["assets"];
|
|
929
|
+
export const assetsBuildDirectory: ServerBuild["assetsBuildDirectory"];
|
|
930
|
+
export const basename: ServerBuild["basename"];
|
|
931
|
+
export const entry: ServerBuild["entry"];
|
|
932
|
+
export const future: ServerBuild["future"];
|
|
933
|
+
export const isSpaMode: ServerBuild["isSpaMode"];
|
|
934
|
+
export const prerender: ServerBuild["prerender"];
|
|
935
|
+
export const publicPath: ServerBuild["publicPath"];
|
|
936
|
+
export const routes: ServerBuild["routes"];
|
|
937
|
+
export const ssr: ServerBuild["ssr"];
|
|
938
|
+
export const unstable_getCriticalCss: ServerBuild["unstable_getCriticalCss"];
|
|
939
|
+
}
|
|
940
|
+
`;
|
|
909
941
|
}
|
|
910
942
|
});
|
|
911
943
|
|
|
@@ -1187,7 +1219,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
1187
1219
|
copyPublicDir: false,
|
|
1188
1220
|
// Assets in the public directory are only used by the client
|
|
1189
1221
|
rollupOptions: {
|
|
1190
|
-
input: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ??
|
|
1222
|
+
input: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ?? virtual2.serverBuild.id,
|
|
1191
1223
|
output: {
|
|
1192
1224
|
entryFileNames: serverBuildFile,
|
|
1193
1225
|
format: serverModuleFormat
|
|
@@ -1291,11 +1323,12 @@ function resolveEnvironmentsOptions(environmentResolvers, resolverOptions) {
|
|
|
1291
1323
|
function isNonNullable(x) {
|
|
1292
1324
|
return x != null;
|
|
1293
1325
|
}
|
|
1294
|
-
var import_node_crypto, path7, url, fse, babel2, import_react_router2, import_es_module_lexer, import_pick3, import_jsesc, import_picocolors4, import_kebabCase, CLIENT_NON_COMPONENT_EXPORTS, CLIENT_ROUTE_EXPORTS, BUILD_CLIENT_ROUTE_QUERY_STRING, SSR_BUNDLE_PREFIX, CSS_DEV_HELPER_ENVIRONMENT_NAME, virtualHmrRuntime, virtualInjectHmrRuntime, resolveRelativeRouteFilePath,
|
|
1326
|
+
var import_node_crypto, fs4, path7, url, fse, babel2, import_react_router2, import_es_module_lexer, import_pick3, import_jsesc, import_picocolors4, import_kebabCase, CLIENT_NON_COMPONENT_EXPORTS, CLIENT_ROUTE_EXPORTS, BUILD_CLIENT_ROUTE_QUERY_STRING, SSR_BUNDLE_PREFIX, CSS_DEV_HELPER_ENVIRONMENT_NAME, virtualHmrRuntime, virtualInjectHmrRuntime, resolveRelativeRouteFilePath, virtual2, getServerBuildDirectory, getClientBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER;
|
|
1295
1327
|
var init_plugin = __esm({
|
|
1296
1328
|
"vite/plugin.ts"() {
|
|
1297
1329
|
"use strict";
|
|
1298
1330
|
import_node_crypto = require("crypto");
|
|
1331
|
+
fs4 = __toESM(require("fs"));
|
|
1299
1332
|
path7 = __toESM(require("path"));
|
|
1300
1333
|
url = __toESM(require("url"));
|
|
1301
1334
|
fse = __toESM(require("fs-extra"));
|
|
@@ -1315,6 +1348,7 @@ var init_plugin = __esm({
|
|
|
1315
1348
|
init_resolve_file_url();
|
|
1316
1349
|
init_combine_urls();
|
|
1317
1350
|
init_remove_exports();
|
|
1351
|
+
init_ssr_externals();
|
|
1318
1352
|
init_route_chunks();
|
|
1319
1353
|
init_vite();
|
|
1320
1354
|
init_config();
|
|
@@ -1346,7 +1380,7 @@ var init_plugin = __esm({
|
|
|
1346
1380
|
let fullPath = path7.resolve(reactRouterConfig.appDirectory, file);
|
|
1347
1381
|
return vite2.normalizePath(fullPath);
|
|
1348
1382
|
};
|
|
1349
|
-
|
|
1383
|
+
virtual2 = {
|
|
1350
1384
|
serverBuild: create("server-build"),
|
|
1351
1385
|
serverManifest: create("server-manifest"),
|
|
1352
1386
|
browserManifest: create("browser-manifest")
|
|
@@ -15,6 +15,8 @@ export default function handleRequest(
|
|
|
15
15
|
responseHeaders: Headers,
|
|
16
16
|
routerContext: EntryContext,
|
|
17
17
|
loadContext: AppLoadContext
|
|
18
|
+
// If you have middleware enabled:
|
|
19
|
+
// loadContext: unstable_RouterContextProvider
|
|
18
20
|
) {
|
|
19
21
|
return new Promise((resolve, reject) => {
|
|
20
22
|
let shellRendered = false;
|
package/dist/config.d.ts
CHANGED
package/dist/config.js
CHANGED
package/dist/routes.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { AppLoadContext } from 'react-router';
|
|
1
|
+
import { UNSAFE_MiddlewareEnabled, unstable_InitialContext, AppLoadContext } from 'react-router';
|
|
2
2
|
import { Plugin } from 'vite';
|
|
3
3
|
import { GetPlatformProxyOptions, PlatformProxy } from 'wrangler';
|
|
4
4
|
|
|
5
|
+
type MaybePromise<T> = T | Promise<T>;
|
|
5
6
|
type CfProperties = Record<string, unknown>;
|
|
6
7
|
type LoadContext<Env, Cf extends CfProperties> = {
|
|
7
8
|
cloudflare: Omit<PlatformProxy<Env, Cf>, "dispose">;
|
|
@@ -9,7 +10,7 @@ type LoadContext<Env, Cf extends CfProperties> = {
|
|
|
9
10
|
type GetLoadContext<Env, Cf extends CfProperties> = (args: {
|
|
10
11
|
request: Request;
|
|
11
12
|
context: LoadContext<Env, Cf>;
|
|
12
|
-
}) =>
|
|
13
|
+
}) => UNSAFE_MiddlewareEnabled extends true ? MaybePromise<unstable_InitialContext> : MaybePromise<AppLoadContext>;
|
|
13
14
|
/**
|
|
14
15
|
* Vite plugin that provides [Node proxies to local workerd
|
|
15
16
|
* bindings](https://developers.cloudflare.com/workers/wrangler/api/#getplatformproxy)
|
package/dist/vite/cloudflare.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-dcaf20023
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -176,26 +176,47 @@ var import_package_json = __toESM(require("@npmcli/package-json"));
|
|
|
176
176
|
var import_server = require("vite-node/server");
|
|
177
177
|
var import_client = require("vite-node/client");
|
|
178
178
|
var import_source_map = require("vite-node/source-map");
|
|
179
|
-
|
|
179
|
+
|
|
180
|
+
// vite/ssr-externals.ts
|
|
181
|
+
var ssrExternals = isReactRouterRepo() ? [
|
|
182
|
+
// This is only needed within this repo because these packages
|
|
183
|
+
// are linked to a directory outside of node_modules so Vite
|
|
184
|
+
// treats them as internal code by default.
|
|
185
|
+
"react-router",
|
|
186
|
+
"react-router-dom",
|
|
187
|
+
"@react-router/architect",
|
|
188
|
+
"@react-router/cloudflare",
|
|
189
|
+
"@react-router/dev",
|
|
190
|
+
"@react-router/express",
|
|
191
|
+
"@react-router/node",
|
|
192
|
+
"@react-router/serve"
|
|
193
|
+
] : void 0;
|
|
194
|
+
|
|
195
|
+
// vite/vite-node.ts
|
|
196
|
+
async function createContext({
|
|
197
|
+
root,
|
|
198
|
+
mode
|
|
199
|
+
}) {
|
|
180
200
|
await preloadVite();
|
|
181
201
|
const vite2 = getVite();
|
|
182
|
-
const devServer = await vite2.createServer(
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
202
|
+
const devServer = await vite2.createServer({
|
|
203
|
+
root,
|
|
204
|
+
mode,
|
|
205
|
+
server: {
|
|
206
|
+
preTransformRequests: false,
|
|
207
|
+
hmr: false,
|
|
208
|
+
watch: null
|
|
209
|
+
},
|
|
210
|
+
ssr: {
|
|
211
|
+
external: ssrExternals
|
|
212
|
+
},
|
|
213
|
+
optimizeDeps: {
|
|
214
|
+
noDiscovery: true
|
|
215
|
+
},
|
|
216
|
+
configFile: false,
|
|
217
|
+
envFile: false,
|
|
218
|
+
plugins: []
|
|
219
|
+
});
|
|
199
220
|
await devServer.pluginContainer.buildStart({});
|
|
200
221
|
const server = new import_server.ViteNodeServer(devServer);
|
|
201
222
|
(0, import_source_map.installSourcemapsSupport)({
|
|
@@ -491,6 +512,7 @@ async function resolveConfig({
|
|
|
491
512
|
unstable_middleware: reactRouterUserConfig.future?.unstable_middleware ?? false,
|
|
492
513
|
unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false,
|
|
493
514
|
unstable_splitRouteModules: reactRouterUserConfig.future?.unstable_splitRouteModules ?? false,
|
|
515
|
+
unstable_subResourceIntegrity: reactRouterUserConfig.future?.unstable_subResourceIntegrity ?? false,
|
|
494
516
|
unstable_viteEnvironmentApi: reactRouterUserConfig.future?.unstable_viteEnvironmentApi ?? false
|
|
495
517
|
};
|
|
496
518
|
let reactRouterConfig = deepFreeze({
|
|
@@ -518,11 +540,7 @@ async function createConfigLoader({
|
|
|
518
540
|
root = root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd();
|
|
519
541
|
let viteNodeContext = await createContext({
|
|
520
542
|
root,
|
|
521
|
-
mode: watch ? "development" : "production"
|
|
522
|
-
server: !watch ? { watch: null } : {},
|
|
523
|
-
ssr: {
|
|
524
|
-
external: ssrExternals
|
|
525
|
-
}
|
|
543
|
+
mode: watch ? "development" : "production"
|
|
526
544
|
});
|
|
527
545
|
let reactRouterConfigFile = findEntry(root, "react-router.config", {
|
|
528
546
|
absolute: true
|
|
@@ -607,19 +625,6 @@ async function loadConfig({ rootDirectory }) {
|
|
|
607
625
|
await configLoader.close();
|
|
608
626
|
return config;
|
|
609
627
|
}
|
|
610
|
-
var ssrExternals = isReactRouterRepo() ? [
|
|
611
|
-
// This is only needed within this repo because these packages
|
|
612
|
-
// are linked to a directory outside of node_modules so Vite
|
|
613
|
-
// treats them as internal code by default.
|
|
614
|
-
"react-router",
|
|
615
|
-
"react-router-dom",
|
|
616
|
-
"@react-router/architect",
|
|
617
|
-
"@react-router/cloudflare",
|
|
618
|
-
"@react-router/dev",
|
|
619
|
-
"@react-router/express",
|
|
620
|
-
"@react-router/node",
|
|
621
|
-
"@react-router/serve"
|
|
622
|
-
] : void 0;
|
|
623
628
|
var entryExts = [".js", ".jsx", ".ts", ".tsx"];
|
|
624
629
|
function findEntry(dir, basename, options) {
|
|
625
630
|
for (let ext of entryExts) {
|
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-dcaf20023
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -46,6 +46,7 @@ module.exports = __toCommonJS(vite_exports);
|
|
|
46
46
|
|
|
47
47
|
// vite/plugin.ts
|
|
48
48
|
var import_node_crypto = require("crypto");
|
|
49
|
+
var fs3 = __toESM(require("fs"));
|
|
49
50
|
var path6 = __toESM(require("path"));
|
|
50
51
|
var url = __toESM(require("url"));
|
|
51
52
|
var fse = __toESM(require("fs-extra"));
|
|
@@ -117,27 +118,46 @@ function getVite() {
|
|
|
117
118
|
return vite;
|
|
118
119
|
}
|
|
119
120
|
|
|
121
|
+
// vite/ssr-externals.ts
|
|
122
|
+
var ssrExternals = isReactRouterRepo() ? [
|
|
123
|
+
// This is only needed within this repo because these packages
|
|
124
|
+
// are linked to a directory outside of node_modules so Vite
|
|
125
|
+
// treats them as internal code by default.
|
|
126
|
+
"react-router",
|
|
127
|
+
"react-router-dom",
|
|
128
|
+
"@react-router/architect",
|
|
129
|
+
"@react-router/cloudflare",
|
|
130
|
+
"@react-router/dev",
|
|
131
|
+
"@react-router/express",
|
|
132
|
+
"@react-router/node",
|
|
133
|
+
"@react-router/serve"
|
|
134
|
+
] : void 0;
|
|
135
|
+
|
|
120
136
|
// vite/vite-node.ts
|
|
121
|
-
async function createContext(
|
|
137
|
+
async function createContext({
|
|
138
|
+
root,
|
|
139
|
+
mode
|
|
140
|
+
}) {
|
|
122
141
|
await preloadVite();
|
|
123
142
|
const vite2 = getVite();
|
|
124
|
-
const devServer = await vite2.createServer(
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
143
|
+
const devServer = await vite2.createServer({
|
|
144
|
+
root,
|
|
145
|
+
mode,
|
|
146
|
+
server: {
|
|
147
|
+
preTransformRequests: false,
|
|
148
|
+
hmr: false,
|
|
149
|
+
watch: null
|
|
150
|
+
},
|
|
151
|
+
ssr: {
|
|
152
|
+
external: ssrExternals
|
|
153
|
+
},
|
|
154
|
+
optimizeDeps: {
|
|
155
|
+
noDiscovery: true
|
|
156
|
+
},
|
|
157
|
+
configFile: false,
|
|
158
|
+
envFile: false,
|
|
159
|
+
plugins: []
|
|
160
|
+
});
|
|
141
161
|
await devServer.pluginContainer.buildStart({});
|
|
142
162
|
const server = new import_server.ViteNodeServer(devServer);
|
|
143
163
|
(0, import_source_map.installSourcemapsSupport)({
|
|
@@ -456,6 +476,7 @@ async function resolveConfig({
|
|
|
456
476
|
unstable_middleware: reactRouterUserConfig.future?.unstable_middleware ?? false,
|
|
457
477
|
unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false,
|
|
458
478
|
unstable_splitRouteModules: reactRouterUserConfig.future?.unstable_splitRouteModules ?? false,
|
|
479
|
+
unstable_subResourceIntegrity: reactRouterUserConfig.future?.unstable_subResourceIntegrity ?? false,
|
|
459
480
|
unstable_viteEnvironmentApi: reactRouterUserConfig.future?.unstable_viteEnvironmentApi ?? false
|
|
460
481
|
};
|
|
461
482
|
let reactRouterConfig = deepFreeze({
|
|
@@ -483,11 +504,7 @@ async function createConfigLoader({
|
|
|
483
504
|
root = root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd();
|
|
484
505
|
let viteNodeContext = await createContext({
|
|
485
506
|
root,
|
|
486
|
-
mode: watch2 ? "development" : "production"
|
|
487
|
-
server: !watch2 ? { watch: null } : {},
|
|
488
|
-
ssr: {
|
|
489
|
-
external: ssrExternals
|
|
490
|
-
}
|
|
507
|
+
mode: watch2 ? "development" : "production"
|
|
491
508
|
});
|
|
492
509
|
let reactRouterConfigFile = findEntry(root, "react-router.config", {
|
|
493
510
|
absolute: true
|
|
@@ -611,19 +628,6 @@ async function resolveEntryFiles({
|
|
|
611
628
|
let entryServerFilePath = userEntryServerFile ? import_pathe3.default.resolve(reactRouterConfig.appDirectory, userEntryServerFile) : import_pathe3.default.resolve(defaultsDirectory, entryServerFile);
|
|
612
629
|
return { entryClientFilePath, entryServerFilePath };
|
|
613
630
|
}
|
|
614
|
-
var ssrExternals = isReactRouterRepo() ? [
|
|
615
|
-
// This is only needed within this repo because these packages
|
|
616
|
-
// are linked to a directory outside of node_modules so Vite
|
|
617
|
-
// treats them as internal code by default.
|
|
618
|
-
"react-router",
|
|
619
|
-
"react-router-dom",
|
|
620
|
-
"@react-router/architect",
|
|
621
|
-
"@react-router/cloudflare",
|
|
622
|
-
"@react-router/dev",
|
|
623
|
-
"@react-router/express",
|
|
624
|
-
"@react-router/node",
|
|
625
|
-
"@react-router/serve"
|
|
626
|
-
] : void 0;
|
|
627
631
|
var entryExts = [".js", ".jsx", ".ts", ".tsx"];
|
|
628
632
|
function findEntry(dir, basename2, options) {
|
|
629
633
|
for (let ext of entryExts) {
|
|
@@ -823,6 +827,8 @@ async function writeAll(ctx) {
|
|
|
823
827
|
});
|
|
824
828
|
const registerPath = Path4.join(typegenDir, "+register.ts");
|
|
825
829
|
import_node_fs2.default.writeFileSync(registerPath, register(ctx));
|
|
830
|
+
const virtualPath = Path4.join(typegenDir, "+virtual.ts");
|
|
831
|
+
import_node_fs2.default.writeFileSync(virtualPath, virtual);
|
|
826
832
|
}
|
|
827
833
|
function register(ctx) {
|
|
828
834
|
const register2 = import_dedent2.default`
|
|
@@ -835,12 +841,16 @@ function register(ctx) {
|
|
|
835
841
|
}
|
|
836
842
|
`;
|
|
837
843
|
const { t: t2 } = babel_exports;
|
|
844
|
+
const indexPaths = new Set(
|
|
845
|
+
Object.values(ctx.config.routes).filter((route) => route.index).map((route) => route.path)
|
|
846
|
+
);
|
|
838
847
|
const typeParams = t2.tsTypeAliasDeclaration(
|
|
839
848
|
t2.identifier("Params"),
|
|
840
849
|
null,
|
|
841
850
|
t2.tsTypeLiteral(
|
|
842
851
|
Object.values(ctx.config.routes).map((route) => {
|
|
843
852
|
if (route.id !== "root" && !route.path) return void 0;
|
|
853
|
+
if (!route.index && indexPaths.has(route.path)) return void 0;
|
|
844
854
|
const lineage2 = lineage(ctx.config.routes, route);
|
|
845
855
|
const fullpath2 = fullpath(lineage2);
|
|
846
856
|
const params = parse2(fullpath2);
|
|
@@ -864,6 +874,22 @@ function register(ctx) {
|
|
|
864
874
|
);
|
|
865
875
|
return [register2, generate(typeParams).code].join("\n\n");
|
|
866
876
|
}
|
|
877
|
+
var virtual = import_dedent2.default`
|
|
878
|
+
declare module "virtual:react-router/server-build" {
|
|
879
|
+
import { ServerBuild } from "react-router";
|
|
880
|
+
export const assets: ServerBuild["assets"];
|
|
881
|
+
export const assetsBuildDirectory: ServerBuild["assetsBuildDirectory"];
|
|
882
|
+
export const basename: ServerBuild["basename"];
|
|
883
|
+
export const entry: ServerBuild["entry"];
|
|
884
|
+
export const future: ServerBuild["future"];
|
|
885
|
+
export const isSpaMode: ServerBuild["isSpaMode"];
|
|
886
|
+
export const prerender: ServerBuild["prerender"];
|
|
887
|
+
export const publicPath: ServerBuild["publicPath"];
|
|
888
|
+
export const routes: ServerBuild["routes"];
|
|
889
|
+
export const ssr: ServerBuild["ssr"];
|
|
890
|
+
export const unstable_getCriticalCss: ServerBuild["unstable_getCriticalCss"];
|
|
891
|
+
}
|
|
892
|
+
`;
|
|
867
893
|
|
|
868
894
|
// vite/node-adapter.ts
|
|
869
895
|
var import_node_events = require("events");
|
|
@@ -2008,7 +2034,7 @@ var isRouteVirtualModule = (id) => {
|
|
|
2008
2034
|
return isRouteEntryModuleId(id) || isRouteChunkModuleId(id);
|
|
2009
2035
|
};
|
|
2010
2036
|
var isServerBuildVirtualModuleId = (id) => {
|
|
2011
|
-
return id.split("?")[0] ===
|
|
2037
|
+
return id.split("?")[0] === virtual2.serverBuild.id;
|
|
2012
2038
|
};
|
|
2013
2039
|
var getServerBuildFile = (viteManifest) => {
|
|
2014
2040
|
let serverBuildIds = Object.keys(viteManifest).filter(
|
|
@@ -2038,13 +2064,13 @@ var resolveRelativeRouteFilePath = (route, reactRouterConfig) => {
|
|
|
2038
2064
|
let fullPath = path6.resolve(reactRouterConfig.appDirectory, file);
|
|
2039
2065
|
return vite2.normalizePath(fullPath);
|
|
2040
2066
|
};
|
|
2041
|
-
var
|
|
2067
|
+
var virtual2 = {
|
|
2042
2068
|
serverBuild: create("server-build"),
|
|
2043
2069
|
serverManifest: create("server-manifest"),
|
|
2044
2070
|
browserManifest: create("browser-manifest")
|
|
2045
2071
|
};
|
|
2046
2072
|
var invalidateVirtualModules = (viteDevServer) => {
|
|
2047
|
-
Object.values(
|
|
2073
|
+
Object.values(virtual2).forEach((vmod2) => {
|
|
2048
2074
|
let mod = viteDevServer.moduleGraph.getModuleById(vmod2.resolvedId);
|
|
2049
2075
|
if (mod) {
|
|
2050
2076
|
viteDevServer.moduleGraph.invalidateModule(mod);
|
|
@@ -2316,7 +2342,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2316
2342
|
}
|
|
2317
2343
|
}).join("\n")}
|
|
2318
2344
|
export { default as assets } from ${JSON.stringify(
|
|
2319
|
-
|
|
2345
|
+
virtual2.serverManifest.id
|
|
2320
2346
|
)};
|
|
2321
2347
|
export const assetsBuildDirectory = ${JSON.stringify(
|
|
2322
2348
|
path6.relative(
|
|
@@ -2345,7 +2371,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2345
2371
|
}).join(",\n ")}
|
|
2346
2372
|
};
|
|
2347
2373
|
${ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && viteCommand === "serve" ? `
|
|
2348
|
-
export const
|
|
2374
|
+
export const unstable_getCriticalCss = ({ pathname }) => {
|
|
2349
2375
|
return {
|
|
2350
2376
|
rel: "stylesheet",
|
|
2351
2377
|
href: "${viteUserConfig.base ?? "/"}@react-router/critical.css?pathname=" + pathname,
|
|
@@ -2374,6 +2400,34 @@ var reactRouterVitePlugin = () => {
|
|
|
2374
2400
|
);
|
|
2375
2401
|
return /* @__PURE__ */ new Set([...cssUrlPaths, ...chunkAssetPaths]);
|
|
2376
2402
|
};
|
|
2403
|
+
let generateSriManifest = async (ctx2) => {
|
|
2404
|
+
let clientBuildDirectory = getClientBuildDirectory(ctx2.reactRouterConfig);
|
|
2405
|
+
let entries = fs3.readdirSync(clientBuildDirectory, {
|
|
2406
|
+
withFileTypes: true,
|
|
2407
|
+
recursive: true
|
|
2408
|
+
});
|
|
2409
|
+
let sriManifest = {};
|
|
2410
|
+
for (const entry of entries) {
|
|
2411
|
+
if (entry.isFile() && entry.name.endsWith(".js")) {
|
|
2412
|
+
let contents;
|
|
2413
|
+
try {
|
|
2414
|
+
contents = await fse.readFile(
|
|
2415
|
+
path6.join(entry.path, entry.name),
|
|
2416
|
+
"utf-8"
|
|
2417
|
+
);
|
|
2418
|
+
} catch (e) {
|
|
2419
|
+
logger.error(`Failed to read file for SRI generation: ${entry.name}`);
|
|
2420
|
+
throw e;
|
|
2421
|
+
}
|
|
2422
|
+
let hash = (0, import_node_crypto.createHash)("sha384").update(contents).digest().toString("base64");
|
|
2423
|
+
let filepath = getVite().normalizePath(
|
|
2424
|
+
path6.relative(clientBuildDirectory, path6.join(entry.path, entry.name))
|
|
2425
|
+
);
|
|
2426
|
+
sriManifest[`${ctx2.publicPath}${filepath}`] = `sha384-${hash}`;
|
|
2427
|
+
}
|
|
2428
|
+
}
|
|
2429
|
+
return sriManifest;
|
|
2430
|
+
};
|
|
2377
2431
|
let generateReactRouterManifestsForBuild = async ({
|
|
2378
2432
|
routeIds
|
|
2379
2433
|
}) => {
|
|
@@ -2468,7 +2522,8 @@ var reactRouterVitePlugin = () => {
|
|
|
2468
2522
|
let nonFingerprintedValues = { url: url2, version };
|
|
2469
2523
|
let reactRouterBrowserManifest = {
|
|
2470
2524
|
...fingerprintedValues,
|
|
2471
|
-
...nonFingerprintedValues
|
|
2525
|
+
...nonFingerprintedValues,
|
|
2526
|
+
sri: void 0
|
|
2472
2527
|
};
|
|
2473
2528
|
await writeFileSafe(
|
|
2474
2529
|
path6.join(getClientBuildDirectory(ctx.reactRouterConfig), manifestPath),
|
|
@@ -2476,9 +2531,14 @@ var reactRouterVitePlugin = () => {
|
|
|
2476
2531
|
reactRouterBrowserManifest
|
|
2477
2532
|
)};`
|
|
2478
2533
|
);
|
|
2534
|
+
let sri = void 0;
|
|
2535
|
+
if (ctx.reactRouterConfig.future.unstable_subResourceIntegrity) {
|
|
2536
|
+
sri = await generateSriManifest(ctx);
|
|
2537
|
+
}
|
|
2479
2538
|
let reactRouterServerManifest = {
|
|
2480
2539
|
...reactRouterBrowserManifest,
|
|
2481
|
-
routes: serverRoutes
|
|
2540
|
+
routes: serverRoutes,
|
|
2541
|
+
sri
|
|
2482
2542
|
};
|
|
2483
2543
|
return {
|
|
2484
2544
|
reactRouterBrowserManifest,
|
|
@@ -2542,9 +2602,10 @@ var reactRouterVitePlugin = () => {
|
|
|
2542
2602
|
imports: []
|
|
2543
2603
|
};
|
|
2544
2604
|
}
|
|
2605
|
+
let sri = void 0;
|
|
2545
2606
|
let reactRouterManifestForDev = {
|
|
2546
2607
|
version: String(Math.random()),
|
|
2547
|
-
url: combineURLs(ctx.publicPath,
|
|
2608
|
+
url: combineURLs(ctx.publicPath, virtual2.browserManifest.url),
|
|
2548
2609
|
hmr: {
|
|
2549
2610
|
runtime: combineURLs(ctx.publicPath, virtualInjectHmrRuntime.url)
|
|
2550
2611
|
},
|
|
@@ -2555,6 +2616,7 @@ var reactRouterVitePlugin = () => {
|
|
|
2555
2616
|
),
|
|
2556
2617
|
imports: []
|
|
2557
2618
|
},
|
|
2619
|
+
sri,
|
|
2558
2620
|
routes
|
|
2559
2621
|
};
|
|
2560
2622
|
currentReactRouterManifestForDev = reactRouterManifestForDev;
|
|
@@ -2913,11 +2975,11 @@ var reactRouterVitePlugin = () => {
|
|
|
2913
2975
|
return;
|
|
2914
2976
|
}
|
|
2915
2977
|
build = await ssrEnvironment.runner.import(
|
|
2916
|
-
|
|
2978
|
+
virtual2.serverBuild.id
|
|
2917
2979
|
);
|
|
2918
2980
|
} else {
|
|
2919
2981
|
build = await viteDevServer.ssrLoadModule(
|
|
2920
|
-
|
|
2982
|
+
virtual2.serverBuild.id
|
|
2921
2983
|
);
|
|
2922
2984
|
}
|
|
2923
2985
|
let handler = (0, import_react_router2.createRequestHandler)(build, "development");
|
|
@@ -3138,16 +3200,16 @@ var reactRouterVitePlugin = () => {
|
|
|
3138
3200
|
name: "react-router:virtual-modules",
|
|
3139
3201
|
enforce: "pre",
|
|
3140
3202
|
resolveId(id) {
|
|
3141
|
-
const vmod2 = Object.values(
|
|
3203
|
+
const vmod2 = Object.values(virtual2).find((vmod3) => vmod3.id === id);
|
|
3142
3204
|
if (vmod2) return vmod2.resolvedId;
|
|
3143
3205
|
},
|
|
3144
3206
|
async load(id) {
|
|
3145
3207
|
switch (id) {
|
|
3146
|
-
case
|
|
3208
|
+
case virtual2.serverBuild.resolvedId: {
|
|
3147
3209
|
let routeIds = getServerBundleRouteIds(this, ctx);
|
|
3148
3210
|
return await getServerEntry({ routeIds });
|
|
3149
3211
|
}
|
|
3150
|
-
case
|
|
3212
|
+
case virtual2.serverManifest.resolvedId: {
|
|
3151
3213
|
let routeIds = getServerBundleRouteIds(this, ctx);
|
|
3152
3214
|
let reactRouterManifest = viteCommand === "build" ? (await generateReactRouterManifestsForBuild({
|
|
3153
3215
|
routeIds
|
|
@@ -3165,7 +3227,7 @@ var reactRouterVitePlugin = () => {
|
|
|
3165
3227
|
es6: true
|
|
3166
3228
|
})};`;
|
|
3167
3229
|
}
|
|
3168
|
-
case
|
|
3230
|
+
case virtual2.browserManifest.resolvedId: {
|
|
3169
3231
|
if (viteCommand === "build") {
|
|
3170
3232
|
throw new Error("This module only exists in development");
|
|
3171
3233
|
}
|
|
@@ -4209,7 +4271,7 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
|
|
|
4209
4271
|
copyPublicDir: false,
|
|
4210
4272
|
// Assets in the public directory are only used by the client
|
|
4211
4273
|
rollupOptions: {
|
|
4212
|
-
input: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ??
|
|
4274
|
+
input: (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? viteUserConfig.environments?.ssr?.build?.rollupOptions?.input : viteUserConfig.build?.rollupOptions?.input) ?? virtual2.serverBuild.id,
|
|
4213
4275
|
output: {
|
|
4214
4276
|
entryFileNames: serverBuildFile,
|
|
4215
4277
|
format: serverModuleFormat
|
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-dcaf20023",
|
|
4
4
|
"description": "Dev tools and CLI for React Router",
|
|
5
5
|
"homepage": "https://reactrouter.com",
|
|
6
6
|
"bugs": {
|
|
@@ -76,19 +76,17 @@
|
|
|
76
76
|
"es-module-lexer": "^1.3.1",
|
|
77
77
|
"exit-hook": "2.2.1",
|
|
78
78
|
"fs-extra": "^10.0.0",
|
|
79
|
-
"gunzip-maybe": "^1.4.2",
|
|
80
79
|
"jsesc": "3.0.2",
|
|
81
80
|
"lodash": "^4.17.21",
|
|
82
81
|
"pathe": "^1.1.2",
|
|
83
82
|
"picocolors": "^1.1.1",
|
|
84
|
-
"picomatch": "^2.3.1",
|
|
85
83
|
"prettier": "^2.7.1",
|
|
86
84
|
"react-refresh": "^0.14.0",
|
|
87
85
|
"semver": "^7.3.7",
|
|
88
86
|
"set-cookie-parser": "^2.6.0",
|
|
89
87
|
"valibot": "^0.41.0",
|
|
90
88
|
"vite-node": "3.0.0-beta.2",
|
|
91
|
-
"@react-router/node": "0.0.0-experimental-
|
|
89
|
+
"@react-router/node": "0.0.0-experimental-dcaf20023"
|
|
92
90
|
},
|
|
93
91
|
"devDependencies": {
|
|
94
92
|
"@types/babel__core": "^7.20.5",
|
|
@@ -97,35 +95,30 @@
|
|
|
97
95
|
"@types/dedent": "^0.7.0",
|
|
98
96
|
"@types/express": "^4.17.9",
|
|
99
97
|
"@types/fs-extra": "^8.1.2",
|
|
100
|
-
"@types/gunzip-maybe": "^1.4.0",
|
|
101
98
|
"@types/jsesc": "^3.0.1",
|
|
102
99
|
"@types/lodash": "^4.14.182",
|
|
103
100
|
"@types/node": "^20.0.0",
|
|
104
101
|
"@types/npmcli__package-json": "^4.0.0",
|
|
105
|
-
"@types/picomatch": "^2.3.0",
|
|
106
102
|
"@types/prettier": "^2.7.3",
|
|
107
103
|
"@types/set-cookie-parser": "^2.4.1",
|
|
108
|
-
"dotenv": "^16.0.0",
|
|
109
104
|
"esbuild-register": "^3.6.0",
|
|
110
105
|
"execa": "5.1.1",
|
|
111
106
|
"express": "^4.19.2",
|
|
112
107
|
"fast-glob": "3.2.11",
|
|
113
|
-
"strip-ansi": "^6.0.1",
|
|
114
|
-
"tiny-invariant": "^1.2.0",
|
|
115
108
|
"tsup": "^8.3.0",
|
|
116
109
|
"typescript": "^5.1.6",
|
|
117
110
|
"vite": "^6.1.0",
|
|
118
111
|
"wireit": "0.14.9",
|
|
119
112
|
"wrangler": "^3.109.2",
|
|
120
|
-
"@react-router/serve": "0.0.0-experimental-
|
|
121
|
-
"react-router": "^0.0.0-experimental-
|
|
113
|
+
"@react-router/serve": "0.0.0-experimental-dcaf20023",
|
|
114
|
+
"react-router": "^0.0.0-experimental-dcaf20023"
|
|
122
115
|
},
|
|
123
116
|
"peerDependencies": {
|
|
124
117
|
"typescript": "^5.1.0",
|
|
125
118
|
"vite": "^5.1.0 || ^6.0.0",
|
|
126
119
|
"wrangler": "^3.28.2",
|
|
127
|
-
"@react-router/serve": "^0.0.0-experimental-
|
|
128
|
-
"react-router": "^0.0.0-experimental-
|
|
120
|
+
"@react-router/serve": "^0.0.0-experimental-dcaf20023",
|
|
121
|
+
"react-router": "^0.0.0-experimental-dcaf20023"
|
|
129
122
|
},
|
|
130
123
|
"peerDependenciesMeta": {
|
|
131
124
|
"@react-router/serve": {
|