@react-router/dev 0.0.0-experimental-afe1c2609 → 0.0.0-experimental-e2130f538
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 +28 -0
- package/dist/cli/index.js +11 -30
- package/dist/config.d.ts +4 -14
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/vite/cloudflare.js +11 -20
- package/dist/vite.js +86 -236
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# `@react-router/dev`
|
|
2
2
|
|
|
3
|
+
## 7.9.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies:
|
|
8
|
+
- `react-router@7.9.3`
|
|
9
|
+
- `@react-router/node@7.9.3`
|
|
10
|
+
- `@react-router/serve@7.9.3`
|
|
11
|
+
|
|
12
|
+
## 7.9.2
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Fix preset future flags being ignored during config resolution ([#14369](https://github.com/remix-run/react-router/pull/14369))
|
|
17
|
+
|
|
18
|
+
Fixes a bug where future flags defined by presets were completely ignored. The config resolution was incorrectly reading from `reactRouterUserConfig.future` instead of the merged `userAndPresetConfigs.future`, causing all preset-defined future flags to be lost.
|
|
19
|
+
|
|
20
|
+
This fix ensures presets can properly enable experimental features as intended by the preset system design.
|
|
21
|
+
|
|
22
|
+
- Add unstable support for RSC Framework Mode ([#14336](https://github.com/remix-run/react-router/pull/14336))
|
|
23
|
+
|
|
24
|
+
- Switch internal vite plugin Response logic to use `@remix-run/node-fetch-server` ([#13927](https://github.com/remix-run/react-router/pull/13927))
|
|
25
|
+
|
|
26
|
+
- Updated dependencies:
|
|
27
|
+
- `react-router@7.9.2`
|
|
28
|
+
- `@react-router/serve@7.9.2`
|
|
29
|
+
- `@react-router/node@7.9.2`
|
|
30
|
+
|
|
3
31
|
## 7.9.1
|
|
4
32
|
|
|
5
33
|
### Patch Changes
|
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-e2130f538
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) Remix Software Inc.
|
|
6
6
|
*
|
|
@@ -390,20 +390,11 @@ async function resolveConfig({
|
|
|
390
390
|
if (!ssr && serverBundles) {
|
|
391
391
|
serverBundles = void 0;
|
|
392
392
|
}
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
"The `prerender`/`prerender.paths` config must be a boolean, an array of string paths, or a function returning a boolean or array of string paths."
|
|
399
|
-
);
|
|
400
|
-
}
|
|
401
|
-
let isValidConcurrencyConfig = typeof prerender != "object" || !("unstable_concurrency" in prerender) || typeof prerender.unstable_concurrency === "number" && Number.isInteger(prerender.unstable_concurrency) && prerender.unstable_concurrency > 0;
|
|
402
|
-
if (!isValidConcurrencyConfig) {
|
|
403
|
-
return err(
|
|
404
|
-
"The `prerender.unstable_concurrency` config must be a positive integer if specified."
|
|
405
|
-
);
|
|
406
|
-
}
|
|
393
|
+
let isValidPrerenderConfig = prerender == null || typeof prerender === "boolean" || Array.isArray(prerender) || typeof prerender === "function";
|
|
394
|
+
if (!isValidPrerenderConfig) {
|
|
395
|
+
return err(
|
|
396
|
+
"The `prerender` config must be a boolean, an array of string paths, or a function returning a boolean or array of string paths"
|
|
397
|
+
);
|
|
407
398
|
}
|
|
408
399
|
let routeDiscovery;
|
|
409
400
|
if (userRouteDiscovery == null) {
|
|
@@ -493,11 +484,11 @@ async function resolveConfig({
|
|
|
493
484
|
}
|
|
494
485
|
}
|
|
495
486
|
let future = {
|
|
496
|
-
v8_middleware:
|
|
497
|
-
unstable_optimizeDeps:
|
|
498
|
-
unstable_splitRouteModules:
|
|
499
|
-
unstable_subResourceIntegrity:
|
|
500
|
-
unstable_viteEnvironmentApi:
|
|
487
|
+
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
488
|
+
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
489
|
+
unstable_splitRouteModules: userAndPresetConfigs.future?.unstable_splitRouteModules ?? false,
|
|
490
|
+
unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
|
|
491
|
+
unstable_viteEnvironmentApi: userAndPresetConfigs.future?.unstable_viteEnvironmentApi ?? false
|
|
501
492
|
};
|
|
502
493
|
let reactRouterConfig = deepFreeze({
|
|
503
494
|
appDirectory,
|
|
@@ -1520,15 +1511,6 @@ var init_warn_on_client_source_maps = __esm({
|
|
|
1520
1511
|
}
|
|
1521
1512
|
});
|
|
1522
1513
|
|
|
1523
|
-
// vite/pmap.js
|
|
1524
|
-
var pMapSkip;
|
|
1525
|
-
var init_pmap = __esm({
|
|
1526
|
-
"vite/pmap.js"() {
|
|
1527
|
-
"use strict";
|
|
1528
|
-
pMapSkip = Symbol("skip");
|
|
1529
|
-
}
|
|
1530
|
-
});
|
|
1531
|
-
|
|
1532
1514
|
// vite/plugin.ts
|
|
1533
1515
|
async function resolveViteConfig({
|
|
1534
1516
|
configFile,
|
|
@@ -1803,7 +1785,6 @@ var init_plugin = __esm({
|
|
|
1803
1785
|
init_load_dotenv();
|
|
1804
1786
|
init_validate_plugin_order();
|
|
1805
1787
|
init_warn_on_client_source_maps();
|
|
1806
|
-
init_pmap();
|
|
1807
1788
|
CLIENT_NON_COMPONENT_EXPORTS = [
|
|
1808
1789
|
"clientAction",
|
|
1809
1790
|
"clientLoader",
|
package/dist/config.d.ts
CHANGED
|
@@ -58,9 +58,6 @@ type BuildEndHook = (args: {
|
|
|
58
58
|
reactRouterConfig: ResolvedReactRouterConfig;
|
|
59
59
|
viteConfig: Vite.ResolvedConfig;
|
|
60
60
|
}) => void | Promise<void>;
|
|
61
|
-
type PrerenderPaths = boolean | Array<string> | ((args: {
|
|
62
|
-
getStaticPaths: () => string[];
|
|
63
|
-
}) => Array<string> | Promise<Array<string>>);
|
|
64
61
|
/**
|
|
65
62
|
* Config to be exported via the default export from `react-router.config.ts`.
|
|
66
63
|
*/
|
|
@@ -96,17 +93,10 @@ type ReactRouterConfig = {
|
|
|
96
93
|
/**
|
|
97
94
|
* An array of URLs to prerender to HTML files at build time. Can also be a
|
|
98
95
|
* function returning an array to dynamically generate URLs.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
* but may consume more resources, and send more concurrent requests to the
|
|
104
|
-
* server/CMS.
|
|
105
|
-
*/
|
|
106
|
-
prerender?: PrerenderPaths | {
|
|
107
|
-
paths: PrerenderPaths;
|
|
108
|
-
unstable_concurrency?: number;
|
|
109
|
-
};
|
|
96
|
+
*/
|
|
97
|
+
prerender?: boolean | Array<string> | ((args: {
|
|
98
|
+
getStaticPaths: () => string[];
|
|
99
|
+
}) => Array<string> | Promise<Array<string>>);
|
|
110
100
|
/**
|
|
111
101
|
* An array of React Router plugin config presets to ease integration with
|
|
112
102
|
* other platforms and tools.
|
package/dist/config.js
CHANGED
package/dist/routes.js
CHANGED
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-e2130f538
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -420,20 +420,11 @@ async function resolveConfig({
|
|
|
420
420
|
if (!ssr && serverBundles) {
|
|
421
421
|
serverBundles = void 0;
|
|
422
422
|
}
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
"The `prerender`/`prerender.paths` config must be a boolean, an array of string paths, or a function returning a boolean or array of string paths."
|
|
429
|
-
);
|
|
430
|
-
}
|
|
431
|
-
let isValidConcurrencyConfig = typeof prerender != "object" || !("unstable_concurrency" in prerender) || typeof prerender.unstable_concurrency === "number" && Number.isInteger(prerender.unstable_concurrency) && prerender.unstable_concurrency > 0;
|
|
432
|
-
if (!isValidConcurrencyConfig) {
|
|
433
|
-
return err(
|
|
434
|
-
"The `prerender.unstable_concurrency` config must be a positive integer if specified."
|
|
435
|
-
);
|
|
436
|
-
}
|
|
423
|
+
let isValidPrerenderConfig = prerender == null || typeof prerender === "boolean" || Array.isArray(prerender) || typeof prerender === "function";
|
|
424
|
+
if (!isValidPrerenderConfig) {
|
|
425
|
+
return err(
|
|
426
|
+
"The `prerender` config must be a boolean, an array of string paths, or a function returning a boolean or array of string paths"
|
|
427
|
+
);
|
|
437
428
|
}
|
|
438
429
|
let routeDiscovery;
|
|
439
430
|
if (userRouteDiscovery == null) {
|
|
@@ -523,11 +514,11 @@ async function resolveConfig({
|
|
|
523
514
|
}
|
|
524
515
|
}
|
|
525
516
|
let future = {
|
|
526
|
-
v8_middleware:
|
|
527
|
-
unstable_optimizeDeps:
|
|
528
|
-
unstable_splitRouteModules:
|
|
529
|
-
unstable_subResourceIntegrity:
|
|
530
|
-
unstable_viteEnvironmentApi:
|
|
517
|
+
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
518
|
+
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
519
|
+
unstable_splitRouteModules: userAndPresetConfigs.future?.unstable_splitRouteModules ?? false,
|
|
520
|
+
unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
|
|
521
|
+
unstable_viteEnvironmentApi: userAndPresetConfigs.future?.unstable_viteEnvironmentApi ?? false
|
|
531
522
|
};
|
|
532
523
|
let reactRouterConfig = deepFreeze({
|
|
533
524
|
appDirectory,
|
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-e2130f538
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -447,20 +447,11 @@ async function resolveConfig({
|
|
|
447
447
|
if (!ssr && serverBundles) {
|
|
448
448
|
serverBundles = void 0;
|
|
449
449
|
}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
"The `prerender`/`prerender.paths` config must be a boolean, an array of string paths, or a function returning a boolean or array of string paths."
|
|
456
|
-
);
|
|
457
|
-
}
|
|
458
|
-
let isValidConcurrencyConfig = typeof prerender != "object" || !("unstable_concurrency" in prerender) || typeof prerender.unstable_concurrency === "number" && Number.isInteger(prerender.unstable_concurrency) && prerender.unstable_concurrency > 0;
|
|
459
|
-
if (!isValidConcurrencyConfig) {
|
|
460
|
-
return err(
|
|
461
|
-
"The `prerender.unstable_concurrency` config must be a positive integer if specified."
|
|
462
|
-
);
|
|
463
|
-
}
|
|
450
|
+
let isValidPrerenderConfig = prerender == null || typeof prerender === "boolean" || Array.isArray(prerender) || typeof prerender === "function";
|
|
451
|
+
if (!isValidPrerenderConfig) {
|
|
452
|
+
return err(
|
|
453
|
+
"The `prerender` config must be a boolean, an array of string paths, or a function returning a boolean or array of string paths"
|
|
454
|
+
);
|
|
464
455
|
}
|
|
465
456
|
let routeDiscovery;
|
|
466
457
|
if (userRouteDiscovery == null) {
|
|
@@ -550,11 +541,11 @@ async function resolveConfig({
|
|
|
550
541
|
}
|
|
551
542
|
}
|
|
552
543
|
let future = {
|
|
553
|
-
v8_middleware:
|
|
554
|
-
unstable_optimizeDeps:
|
|
555
|
-
unstable_splitRouteModules:
|
|
556
|
-
unstable_subResourceIntegrity:
|
|
557
|
-
unstable_viteEnvironmentApi:
|
|
544
|
+
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
545
|
+
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
546
|
+
unstable_splitRouteModules: userAndPresetConfigs.future?.unstable_splitRouteModules ?? false,
|
|
547
|
+
unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
|
|
548
|
+
unstable_viteEnvironmentApi: userAndPresetConfigs.future?.unstable_viteEnvironmentApi ?? false
|
|
558
549
|
};
|
|
559
550
|
let reactRouterConfig = deepFreeze({
|
|
560
551
|
appDirectory,
|
|
@@ -2421,129 +2412,6 @@ function warnOnClientSourceMaps() {
|
|
|
2421
2412
|
};
|
|
2422
2413
|
}
|
|
2423
2414
|
|
|
2424
|
-
// vite/pmap.js
|
|
2425
|
-
async function pMap(iterable, mapper, {
|
|
2426
|
-
concurrency = Number.POSITIVE_INFINITY,
|
|
2427
|
-
stopOnError = true,
|
|
2428
|
-
signal
|
|
2429
|
-
} = {}) {
|
|
2430
|
-
return new Promise((resolve_, reject_) => {
|
|
2431
|
-
if (iterable[Symbol.iterator] === void 0 && iterable[Symbol.asyncIterator] === void 0) {
|
|
2432
|
-
throw new TypeError(`Expected \`input\` to be either an \`Iterable\` or \`AsyncIterable\`, got (${typeof iterable})`);
|
|
2433
|
-
}
|
|
2434
|
-
if (typeof mapper !== "function") {
|
|
2435
|
-
throw new TypeError("Mapper function is required");
|
|
2436
|
-
}
|
|
2437
|
-
if (!(Number.isSafeInteger(concurrency) && concurrency >= 1 || concurrency === Number.POSITIVE_INFINITY)) {
|
|
2438
|
-
throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${concurrency}\` (${typeof concurrency})`);
|
|
2439
|
-
}
|
|
2440
|
-
const result = [];
|
|
2441
|
-
const errors = [];
|
|
2442
|
-
const skippedIndexesMap = /* @__PURE__ */ new Map();
|
|
2443
|
-
let isRejected = false;
|
|
2444
|
-
let isResolved = false;
|
|
2445
|
-
let isIterableDone = false;
|
|
2446
|
-
let resolvingCount = 0;
|
|
2447
|
-
let currentIndex = 0;
|
|
2448
|
-
const iterator = iterable[Symbol.iterator] === void 0 ? iterable[Symbol.asyncIterator]() : iterable[Symbol.iterator]();
|
|
2449
|
-
const signalListener = () => {
|
|
2450
|
-
reject(signal.reason);
|
|
2451
|
-
};
|
|
2452
|
-
const cleanup = () => {
|
|
2453
|
-
signal?.removeEventListener("abort", signalListener);
|
|
2454
|
-
};
|
|
2455
|
-
const resolve6 = (value) => {
|
|
2456
|
-
resolve_(value);
|
|
2457
|
-
cleanup();
|
|
2458
|
-
};
|
|
2459
|
-
const reject = (reason) => {
|
|
2460
|
-
isRejected = true;
|
|
2461
|
-
isResolved = true;
|
|
2462
|
-
reject_(reason);
|
|
2463
|
-
cleanup();
|
|
2464
|
-
};
|
|
2465
|
-
if (signal) {
|
|
2466
|
-
if (signal.aborted) {
|
|
2467
|
-
reject(signal.reason);
|
|
2468
|
-
}
|
|
2469
|
-
signal.addEventListener("abort", signalListener, { once: true });
|
|
2470
|
-
}
|
|
2471
|
-
const next = async () => {
|
|
2472
|
-
if (isResolved) {
|
|
2473
|
-
return;
|
|
2474
|
-
}
|
|
2475
|
-
const nextItem = await iterator.next();
|
|
2476
|
-
const index = currentIndex;
|
|
2477
|
-
currentIndex++;
|
|
2478
|
-
if (nextItem.done) {
|
|
2479
|
-
isIterableDone = true;
|
|
2480
|
-
if (resolvingCount === 0 && !isResolved) {
|
|
2481
|
-
if (!stopOnError && errors.length > 0) {
|
|
2482
|
-
reject(new AggregateError(errors));
|
|
2483
|
-
return;
|
|
2484
|
-
}
|
|
2485
|
-
isResolved = true;
|
|
2486
|
-
if (skippedIndexesMap.size === 0) {
|
|
2487
|
-
resolve6(result);
|
|
2488
|
-
return;
|
|
2489
|
-
}
|
|
2490
|
-
const pureResult = [];
|
|
2491
|
-
for (const [index2, value] of result.entries()) {
|
|
2492
|
-
if (skippedIndexesMap.get(index2) === pMapSkip) {
|
|
2493
|
-
continue;
|
|
2494
|
-
}
|
|
2495
|
-
pureResult.push(value);
|
|
2496
|
-
}
|
|
2497
|
-
resolve6(pureResult);
|
|
2498
|
-
}
|
|
2499
|
-
return;
|
|
2500
|
-
}
|
|
2501
|
-
resolvingCount++;
|
|
2502
|
-
(async () => {
|
|
2503
|
-
try {
|
|
2504
|
-
const element = await nextItem.value;
|
|
2505
|
-
if (isResolved) {
|
|
2506
|
-
return;
|
|
2507
|
-
}
|
|
2508
|
-
const value = await mapper(element, index);
|
|
2509
|
-
if (value === pMapSkip) {
|
|
2510
|
-
skippedIndexesMap.set(index, value);
|
|
2511
|
-
}
|
|
2512
|
-
result[index] = value;
|
|
2513
|
-
resolvingCount--;
|
|
2514
|
-
await next();
|
|
2515
|
-
} catch (error) {
|
|
2516
|
-
if (stopOnError) {
|
|
2517
|
-
reject(error);
|
|
2518
|
-
} else {
|
|
2519
|
-
errors.push(error);
|
|
2520
|
-
resolvingCount--;
|
|
2521
|
-
try {
|
|
2522
|
-
await next();
|
|
2523
|
-
} catch (error2) {
|
|
2524
|
-
reject(error2);
|
|
2525
|
-
}
|
|
2526
|
-
}
|
|
2527
|
-
}
|
|
2528
|
-
})();
|
|
2529
|
-
};
|
|
2530
|
-
(async () => {
|
|
2531
|
-
for (let index = 0; index < concurrency; index++) {
|
|
2532
|
-
try {
|
|
2533
|
-
await next();
|
|
2534
|
-
} catch (error) {
|
|
2535
|
-
reject(error);
|
|
2536
|
-
break;
|
|
2537
|
-
}
|
|
2538
|
-
if (isIterableDone || isRejected) {
|
|
2539
|
-
break;
|
|
2540
|
-
}
|
|
2541
|
-
}
|
|
2542
|
-
})();
|
|
2543
|
-
});
|
|
2544
|
-
}
|
|
2545
|
-
var pMapSkip = Symbol("skip");
|
|
2546
|
-
|
|
2547
2415
|
// vite/plugin.ts
|
|
2548
2416
|
function extractPluginContext(viteConfig) {
|
|
2549
2417
|
return viteConfig["__reactRouterPluginContext"];
|
|
@@ -4311,76 +4179,67 @@ async function handlePrerender(viteConfig, reactRouterConfig, serverBuildDirecto
|
|
|
4311
4179
|
}
|
|
4312
4180
|
}
|
|
4313
4181
|
let buildRoutes = createPrerenderRoutes(build.routes);
|
|
4314
|
-
|
|
4315
|
-
|
|
4316
|
-
|
|
4317
|
-
|
|
4318
|
-
|
|
4319
|
-
|
|
4320
|
-
|
|
4321
|
-
|
|
4322
|
-
|
|
4323
|
-
|
|
4324
|
-
|
|
4325
|
-
|
|
4326
|
-
|
|
4327
|
-
|
|
4328
|
-
|
|
4329
|
-
|
|
4330
|
-
|
|
4331
|
-
|
|
4332
|
-
|
|
4333
|
-
|
|
4334
|
-
|
|
4335
|
-
|
|
4336
|
-
|
|
4337
|
-
|
|
4338
|
-
|
|
4339
|
-
|
|
4340
|
-
|
|
4341
|
-
path9,
|
|
4342
|
-
clientBuildDirectory,
|
|
4343
|
-
reactRouterConfig,
|
|
4344
|
-
viteConfig
|
|
4345
|
-
);
|
|
4346
|
-
} else {
|
|
4347
|
-
viteConfig.logger.warn(
|
|
4348
|
-
`\u26A0\uFE0F Skipping prerendering for resource route without a loader: ${leafRoute?.id}`
|
|
4349
|
-
);
|
|
4350
|
-
}
|
|
4182
|
+
for (let path9 of build.prerender) {
|
|
4183
|
+
let matches = (0, import_react_router2.matchRoutes)(buildRoutes, `/${path9}/`.replace(/^\/\/+/, "/"));
|
|
4184
|
+
if (!matches) {
|
|
4185
|
+
continue;
|
|
4186
|
+
}
|
|
4187
|
+
let leafRoute = matches ? matches[matches.length - 1].route : null;
|
|
4188
|
+
let manifestRoute = leafRoute ? build.routes[leafRoute.id]?.module : null;
|
|
4189
|
+
let isResourceRoute = manifestRoute && !manifestRoute.default && !manifestRoute.ErrorBoundary;
|
|
4190
|
+
if (isResourceRoute) {
|
|
4191
|
+
invariant(leafRoute);
|
|
4192
|
+
invariant(manifestRoute);
|
|
4193
|
+
if (manifestRoute.loader) {
|
|
4194
|
+
await prerenderData(
|
|
4195
|
+
handler,
|
|
4196
|
+
path9,
|
|
4197
|
+
[leafRoute.id],
|
|
4198
|
+
clientBuildDirectory,
|
|
4199
|
+
reactRouterConfig,
|
|
4200
|
+
viteConfig
|
|
4201
|
+
);
|
|
4202
|
+
await prerenderResourceRoute(
|
|
4203
|
+
handler,
|
|
4204
|
+
path9,
|
|
4205
|
+
clientBuildDirectory,
|
|
4206
|
+
reactRouterConfig,
|
|
4207
|
+
viteConfig
|
|
4208
|
+
);
|
|
4351
4209
|
} else {
|
|
4352
|
-
|
|
4353
|
-
|
|
4210
|
+
viteConfig.logger.warn(
|
|
4211
|
+
`\u26A0\uFE0F Skipping prerendering for resource route without a loader: ${leafRoute?.id}`
|
|
4354
4212
|
);
|
|
4355
|
-
|
|
4356
|
-
|
|
4357
|
-
|
|
4358
|
-
|
|
4359
|
-
|
|
4360
|
-
|
|
4361
|
-
|
|
4362
|
-
|
|
4363
|
-
viteConfig
|
|
4364
|
-
);
|
|
4365
|
-
}
|
|
4366
|
-
await prerenderRoute(
|
|
4213
|
+
}
|
|
4214
|
+
} else {
|
|
4215
|
+
let hasLoaders = matches.some(
|
|
4216
|
+
(m) => build.assets.routes[m.route.id]?.hasLoader
|
|
4217
|
+
);
|
|
4218
|
+
let data;
|
|
4219
|
+
if (!isResourceRoute && hasLoaders) {
|
|
4220
|
+
data = await prerenderData(
|
|
4367
4221
|
handler,
|
|
4368
4222
|
path9,
|
|
4223
|
+
null,
|
|
4369
4224
|
clientBuildDirectory,
|
|
4370
4225
|
reactRouterConfig,
|
|
4371
|
-
viteConfig
|
|
4372
|
-
data ? {
|
|
4373
|
-
headers: {
|
|
4374
|
-
"X-React-Router-Prerender-Data": encodeURI(data)
|
|
4375
|
-
}
|
|
4376
|
-
} : void 0
|
|
4226
|
+
viteConfig
|
|
4377
4227
|
);
|
|
4378
4228
|
}
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4229
|
+
await prerenderRoute(
|
|
4230
|
+
handler,
|
|
4231
|
+
path9,
|
|
4232
|
+
clientBuildDirectory,
|
|
4233
|
+
reactRouterConfig,
|
|
4234
|
+
viteConfig,
|
|
4235
|
+
data ? {
|
|
4236
|
+
headers: {
|
|
4237
|
+
"X-React-Router-Prerender-Data": encodeURI(data)
|
|
4238
|
+
}
|
|
4239
|
+
} : void 0
|
|
4240
|
+
);
|
|
4382
4241
|
}
|
|
4383
|
-
|
|
4242
|
+
}
|
|
4384
4243
|
}
|
|
4385
4244
|
function getStaticPrerenderPaths(routes) {
|
|
4386
4245
|
let paths = ["/"];
|
|
@@ -4496,40 +4355,31 @@ ${content.toString("utf8")}`
|
|
|
4496
4355
|
);
|
|
4497
4356
|
}
|
|
4498
4357
|
async function getPrerenderPaths(prerender, ssr, routes, logWarning = false) {
|
|
4499
|
-
|
|
4500
|
-
|
|
4501
|
-
|
|
4502
|
-
|
|
4503
|
-
|
|
4504
|
-
|
|
4505
|
-
|
|
4506
|
-
|
|
4507
|
-
|
|
4508
|
-
|
|
4509
|
-
|
|
4510
|
-
|
|
4511
|
-
|
|
4512
|
-
|
|
4513
|
-
|
|
4514
|
-
|
|
4515
|
-
|
|
4516
|
-
|
|
4517
|
-
|
|
4518
|
-
|
|
4519
|
-
|
|
4520
|
-
|
|
4521
|
-
)
|
|
4522
|
-
);
|
|
4358
|
+
let prerenderPaths = [];
|
|
4359
|
+
if (prerender != null && prerender !== false) {
|
|
4360
|
+
let prerenderRoutes = createPrerenderRoutes(routes);
|
|
4361
|
+
if (prerender === true) {
|
|
4362
|
+
let { paths, paramRoutes } = getStaticPrerenderPaths(prerenderRoutes);
|
|
4363
|
+
if (logWarning && !ssr && paramRoutes.length > 0) {
|
|
4364
|
+
console.warn(
|
|
4365
|
+
import_picocolors4.default.yellow(
|
|
4366
|
+
[
|
|
4367
|
+
"\u26A0\uFE0F Paths with dynamic/splat params cannot be prerendered when using `prerender: true`. You may want to use the `prerender()` API to prerender the following paths:",
|
|
4368
|
+
...paramRoutes.map((p) => " - " + p)
|
|
4369
|
+
].join("\n")
|
|
4370
|
+
)
|
|
4371
|
+
);
|
|
4372
|
+
}
|
|
4373
|
+
prerenderPaths = paths;
|
|
4374
|
+
} else if (typeof prerender === "function") {
|
|
4375
|
+
prerenderPaths = await prerender({
|
|
4376
|
+
getStaticPaths: () => getStaticPrerenderPaths(prerenderRoutes).paths
|
|
4377
|
+
});
|
|
4378
|
+
} else {
|
|
4379
|
+
prerenderPaths = prerender || ["/"];
|
|
4523
4380
|
}
|
|
4524
|
-
return paths;
|
|
4525
|
-
}
|
|
4526
|
-
if (typeof pathsConfig === "function") {
|
|
4527
|
-
let paths = await pathsConfig({
|
|
4528
|
-
getStaticPaths: () => getStaticPrerenderPaths(prerenderRoutes).paths
|
|
4529
|
-
});
|
|
4530
|
-
return paths;
|
|
4531
4381
|
}
|
|
4532
|
-
return
|
|
4382
|
+
return prerenderPaths;
|
|
4533
4383
|
}
|
|
4534
4384
|
function groupRoutesByParentId2(manifest) {
|
|
4535
4385
|
let routes = {};
|
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-e2130f538",
|
|
4
4
|
"description": "Dev tools and CLI for React Router",
|
|
5
5
|
"homepage": "https://reactrouter.com",
|
|
6
6
|
"bugs": {
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"tinyglobby": "^0.2.14",
|
|
87
87
|
"valibot": "^0.41.0",
|
|
88
88
|
"vite-node": "^3.2.2",
|
|
89
|
-
"@react-router/node": "0.0.0-experimental-
|
|
89
|
+
"@react-router/node": "0.0.0-experimental-e2130f538"
|
|
90
90
|
},
|
|
91
91
|
"devDependencies": {
|
|
92
92
|
"@types/babel__core": "^7.20.5",
|
|
@@ -109,16 +109,16 @@
|
|
|
109
109
|
"vite": "^6.1.0",
|
|
110
110
|
"wireit": "0.14.9",
|
|
111
111
|
"wrangler": "^4.23.0",
|
|
112
|
-
"react-router": "
|
|
113
|
-
"
|
|
112
|
+
"@react-router/serve": "0.0.0-experimental-e2130f538",
|
|
113
|
+
"react-router": "^0.0.0-experimental-e2130f538"
|
|
114
114
|
},
|
|
115
115
|
"peerDependencies": {
|
|
116
116
|
"@vitejs/plugin-rsc": "*",
|
|
117
117
|
"typescript": "^5.1.0",
|
|
118
118
|
"vite": "^5.1.0 || ^6.0.0 || ^7.0.0",
|
|
119
119
|
"wrangler": "^3.28.2 || ^4.0.0",
|
|
120
|
-
"@react-router/serve": "^0.0.0-experimental-
|
|
121
|
-
"react-router": "^0.0.0-experimental-
|
|
120
|
+
"@react-router/serve": "^0.0.0-experimental-e2130f538",
|
|
121
|
+
"react-router": "^0.0.0-experimental-e2130f538"
|
|
122
122
|
},
|
|
123
123
|
"peerDependenciesMeta": {
|
|
124
124
|
"@vitejs/plugin-rsc": {
|