@react-router/dev 0.0.0-experimental-bfc808d6c → 0.0.0-experimental-3cde40396
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 +11 -0
- package/dist/cli/index.js +1 -1
- package/dist/config/default-rsc-entries/entry.rsc.tsx +33 -11
- package/dist/config/default-rsc-entries/entry.ssr.tsx +20 -13
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/vite/cloudflare.js +1 -1
- package/dist/vite.js +48 -39
- package/package.json +10 -6
- package/rsc-types.d.ts +21 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# `@react-router/dev`
|
|
2
2
|
|
|
3
|
+
## 7.10.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Import ESM package `pkg-types` with a dynamic `import()` to fix issues on Node 20.18 ([#14624](https://github.com/remix-run/react-router/pull/14624))
|
|
8
|
+
- Update `valibot` dependency to `^1.2.0` to address [GHSA-vqpr-j7v3-hqw9](https://github.com/advisories/GHSA-vqpr-j7v3-hqw9) ([#14608](https://github.com/remix-run/react-router/pull/14608))
|
|
9
|
+
- Updated dependencies:
|
|
10
|
+
- `react-router@7.10.1`
|
|
11
|
+
- `@react-router/node@7.10.1`
|
|
12
|
+
- `@react-router/serve@7.10.1`
|
|
13
|
+
|
|
3
14
|
## 7.10.0
|
|
4
15
|
|
|
5
16
|
### Minor Changes
|
package/dist/cli/index.js
CHANGED
|
@@ -6,22 +6,36 @@ import {
|
|
|
6
6
|
loadServerAction,
|
|
7
7
|
renderToReadableStream,
|
|
8
8
|
} from "@vitejs/plugin-rsc/rsc";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
RouterContextProvider,
|
|
11
|
+
unstable_matchRSCServerRequest as matchRSCServerRequest,
|
|
12
|
+
} from "react-router";
|
|
10
13
|
|
|
14
|
+
// Import the routes generated by routes.ts
|
|
11
15
|
import routes from "virtual:react-router/unstable_rsc/routes";
|
|
12
16
|
import basename from "virtual:react-router/unstable_rsc/basename";
|
|
13
17
|
import unstable_reactRouterServeConfig from "virtual:react-router/unstable_rsc/react-router-serve-config";
|
|
14
18
|
|
|
15
|
-
export
|
|
16
|
-
|
|
19
|
+
export { unstable_reactRouterServeConfig };
|
|
20
|
+
|
|
21
|
+
export function fetchServer(
|
|
22
|
+
request: Request,
|
|
23
|
+
requestContext?: RouterContextProvider,
|
|
24
|
+
) {
|
|
25
|
+
return matchRSCServerRequest({
|
|
26
|
+
basename,
|
|
27
|
+
// Provide the React Server touchpoints.
|
|
17
28
|
createTemporaryReferenceSet,
|
|
18
29
|
decodeAction,
|
|
19
30
|
decodeFormState,
|
|
20
31
|
decodeReply,
|
|
21
32
|
loadServerAction,
|
|
33
|
+
// The incoming request.
|
|
22
34
|
request,
|
|
35
|
+
requestContext,
|
|
36
|
+
// The app routes.
|
|
23
37
|
routes,
|
|
24
|
-
|
|
38
|
+
// Encode the match with the React Server implementation.
|
|
25
39
|
generateResponse(match, options) {
|
|
26
40
|
return new Response(renderToReadableStream(match.payload, options), {
|
|
27
41
|
status: match.statusCode,
|
|
@@ -31,14 +45,22 @@ export async function fetchServer(request: Request) {
|
|
|
31
45
|
});
|
|
32
46
|
}
|
|
33
47
|
|
|
34
|
-
export {
|
|
48
|
+
export default {
|
|
49
|
+
async fetch(request: Request, requestContext?: RouterContextProvider) {
|
|
50
|
+
if (requestContext && !(requestContext instanceof RouterContextProvider)) {
|
|
51
|
+
requestContext = undefined;
|
|
52
|
+
}
|
|
35
53
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
54
|
+
const ssr = await import.meta.viteRsc.loadModule<
|
|
55
|
+
typeof import("./entry.ssr.tsx")
|
|
56
|
+
>("ssr", "index");
|
|
57
|
+
|
|
58
|
+
return await ssr.generateHTML(
|
|
59
|
+
request,
|
|
60
|
+
await fetchServer(request, requestContext),
|
|
61
|
+
);
|
|
62
|
+
},
|
|
63
|
+
};
|
|
42
64
|
|
|
43
65
|
if (import.meta.hot) {
|
|
44
66
|
import.meta.hot.accept();
|
|
@@ -1,31 +1,38 @@
|
|
|
1
1
|
import { createFromReadableStream } from "@vitejs/plugin-rsc/ssr";
|
|
2
|
-
// @ts-expect-error
|
|
3
|
-
import
|
|
2
|
+
// @ts-expect-error - no types for this, can import from root once on latest 19
|
|
3
|
+
import { renderToReadableStream } from "react-dom/server.edge";
|
|
4
4
|
import {
|
|
5
|
-
unstable_RSCStaticRouter as RSCStaticRouter,
|
|
6
5
|
unstable_routeRSCServerRequest as routeRSCServerRequest,
|
|
6
|
+
unstable_RSCStaticRouter as RSCStaticRouter,
|
|
7
7
|
} from "react-router";
|
|
8
8
|
|
|
9
|
-
export
|
|
9
|
+
export async function generateHTML(
|
|
10
10
|
request: Request,
|
|
11
11
|
serverResponse: Response,
|
|
12
|
-
) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return routeRSCServerRequest({
|
|
12
|
+
): Promise<Response> {
|
|
13
|
+
return await routeRSCServerRequest({
|
|
14
|
+
// The incoming request.
|
|
17
15
|
request,
|
|
16
|
+
// The response from the RSC server.
|
|
18
17
|
serverResponse,
|
|
18
|
+
// Provide the React Server touchpoints.
|
|
19
19
|
createFromReadableStream,
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
// Render the router to HTML.
|
|
21
|
+
async renderHTML(getPayload, options) {
|
|
22
|
+
const payload = await getPayload();
|
|
23
|
+
const formState =
|
|
24
|
+
payload.type === "render" ? await payload.formState : undefined;
|
|
25
|
+
|
|
26
|
+
const bootstrapScriptContent =
|
|
27
|
+
await import.meta.viteRsc.loadBootstrapScriptContent("index");
|
|
22
28
|
|
|
23
|
-
return
|
|
29
|
+
return await renderToReadableStream(
|
|
24
30
|
<RSCStaticRouter getPayload={getPayload} />,
|
|
25
31
|
{
|
|
32
|
+
...options,
|
|
26
33
|
bootstrapScriptContent,
|
|
34
|
+
formState,
|
|
27
35
|
signal: request.signal,
|
|
28
|
-
formState: await payload.formState,
|
|
29
36
|
},
|
|
30
37
|
);
|
|
31
38
|
},
|
package/dist/config.js
CHANGED
package/dist/routes.js
CHANGED
package/dist/vite/cloudflare.js
CHANGED
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-3cde40396
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -639,11 +639,11 @@ async function createConfigLoader({
|
|
|
639
639
|
fsWatcher = import_chokidar.default.watch([root, appDirectory], {
|
|
640
640
|
ignoreInitial: true,
|
|
641
641
|
ignored: (path9) => {
|
|
642
|
-
let
|
|
643
|
-
return !
|
|
642
|
+
let dirname4 = import_pathe3.default.dirname(path9);
|
|
643
|
+
return !dirname4.startsWith(appDirectory) && // Ensure we're only watching files outside of the app directory
|
|
644
644
|
// that are at the root level, not nested in subdirectories
|
|
645
645
|
path9 !== root && // Watch the root directory itself
|
|
646
|
-
|
|
646
|
+
dirname4 !== root;
|
|
647
647
|
}
|
|
648
648
|
});
|
|
649
649
|
fsWatcher.on("all", async (...args) => {
|
|
@@ -775,6 +775,30 @@ async function resolveEntryFiles({
|
|
|
775
775
|
let entryServerFilePath = userEntryServerFile ? import_pathe3.default.resolve(reactRouterConfig.appDirectory, userEntryServerFile) : import_pathe3.default.resolve(defaultsDirectory, entryServerFile);
|
|
776
776
|
return { entryClientFilePath, entryServerFilePath };
|
|
777
777
|
}
|
|
778
|
+
async function resolveRSCEntryFiles({
|
|
779
|
+
reactRouterConfig
|
|
780
|
+
}) {
|
|
781
|
+
let { appDirectory } = reactRouterConfig;
|
|
782
|
+
let defaultsDirectory = import_pathe3.default.resolve(
|
|
783
|
+
import_pathe3.default.dirname(require.resolve("@react-router/dev/package.json")),
|
|
784
|
+
"dist",
|
|
785
|
+
"config",
|
|
786
|
+
"default-rsc-entries"
|
|
787
|
+
);
|
|
788
|
+
let userEntryClientFile = findEntry(appDirectory, "entry.client", {
|
|
789
|
+
absolute: true
|
|
790
|
+
});
|
|
791
|
+
let userEntryRSCFile = findEntry(appDirectory, "entry.rsc", {
|
|
792
|
+
absolute: true
|
|
793
|
+
});
|
|
794
|
+
let userEntrySSRFile = findEntry(appDirectory, "entry.ssr", {
|
|
795
|
+
absolute: true
|
|
796
|
+
});
|
|
797
|
+
let client = userEntryClientFile ?? import_pathe3.default.join(defaultsDirectory, "entry.client.tsx");
|
|
798
|
+
let rsc = userEntryRSCFile ?? import_pathe3.default.join(defaultsDirectory, "entry.rsc.tsx");
|
|
799
|
+
let ssr = userEntrySSRFile ?? import_pathe3.default.join(defaultsDirectory, "entry.ssr.tsx");
|
|
800
|
+
return { client, rsc, ssr };
|
|
801
|
+
}
|
|
778
802
|
function omitRoutes(config) {
|
|
779
803
|
return {
|
|
780
804
|
...config,
|
|
@@ -5014,7 +5038,6 @@ var import_es_module_lexer3 = require("es-module-lexer");
|
|
|
5014
5038
|
var Path5 = __toESM(require("pathe"));
|
|
5015
5039
|
var babel2 = __toESM(require("@babel/core"));
|
|
5016
5040
|
var import_picocolors5 = __toESM(require("picocolors"));
|
|
5017
|
-
var import_fs = require("fs");
|
|
5018
5041
|
var import_promises3 = require("fs/promises");
|
|
5019
5042
|
var import_pathe6 = __toESM(require("pathe"));
|
|
5020
5043
|
|
|
@@ -5355,7 +5378,7 @@ function reactRouterRSCVitePlugin() {
|
|
|
5355
5378
|
let resolvedViteConfig;
|
|
5356
5379
|
let routeIdByFile;
|
|
5357
5380
|
let logger;
|
|
5358
|
-
|
|
5381
|
+
let entries;
|
|
5359
5382
|
let config;
|
|
5360
5383
|
let rootRouteFile;
|
|
5361
5384
|
function updateConfig(newConfig) {
|
|
@@ -5418,6 +5441,9 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5418
5441
|
logger = vite2.createLogger(viteUserConfig.logLevel, {
|
|
5419
5442
|
prefix: "[react-router]"
|
|
5420
5443
|
});
|
|
5444
|
+
entries = await resolveRSCEntryFiles({
|
|
5445
|
+
reactRouterConfig: config
|
|
5446
|
+
});
|
|
5421
5447
|
return {
|
|
5422
5448
|
resolve: {
|
|
5423
5449
|
dedupe: [
|
|
@@ -5433,7 +5459,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5433
5459
|
},
|
|
5434
5460
|
optimizeDeps: {
|
|
5435
5461
|
entries: getOptimizeDepsEntries({
|
|
5436
|
-
entryClientFilePath:
|
|
5462
|
+
entryClientFilePath: entries.client,
|
|
5437
5463
|
reactRouterConfig: config
|
|
5438
5464
|
}),
|
|
5439
5465
|
esbuildOptions: {
|
|
@@ -5460,7 +5486,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5460
5486
|
build: {
|
|
5461
5487
|
rollupOptions: {
|
|
5462
5488
|
input: {
|
|
5463
|
-
index:
|
|
5489
|
+
index: entries.client
|
|
5464
5490
|
}
|
|
5465
5491
|
},
|
|
5466
5492
|
outDir: (0, import_pathe6.join)(config.buildDirectory, "client")
|
|
@@ -5480,7 +5506,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5480
5506
|
// it as `virtual:react-router/unstable_rsc/rsc-entry`
|
|
5481
5507
|
// without needing to know the actual file path, which is
|
|
5482
5508
|
// important when using the default entries.
|
|
5483
|
-
index:
|
|
5509
|
+
index: entries.rsc
|
|
5484
5510
|
},
|
|
5485
5511
|
output: {
|
|
5486
5512
|
entryFileNames: config.serverBuildFile,
|
|
@@ -5488,13 +5514,18 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5488
5514
|
}
|
|
5489
5515
|
},
|
|
5490
5516
|
outDir: (0, import_pathe6.join)(config.buildDirectory, "server")
|
|
5517
|
+
},
|
|
5518
|
+
resolve: {
|
|
5519
|
+
noExternal: [
|
|
5520
|
+
"@react-router/dev/config/default-rsc-entries/entry.ssr"
|
|
5521
|
+
]
|
|
5491
5522
|
}
|
|
5492
5523
|
},
|
|
5493
5524
|
ssr: {
|
|
5494
5525
|
build: {
|
|
5495
5526
|
rollupOptions: {
|
|
5496
5527
|
input: {
|
|
5497
|
-
index:
|
|
5528
|
+
index: entries.ssr
|
|
5498
5529
|
},
|
|
5499
5530
|
output: {
|
|
5500
5531
|
// Note: We don't set `entryFileNames` here because it's
|
|
@@ -5505,6 +5536,11 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5505
5536
|
}
|
|
5506
5537
|
},
|
|
5507
5538
|
outDir: (0, import_pathe6.join)(config.buildDirectory, "server/__ssr_build")
|
|
5539
|
+
},
|
|
5540
|
+
resolve: {
|
|
5541
|
+
noExternal: [
|
|
5542
|
+
"@react-router/dev/config/default-rsc-entries/entry.rsc"
|
|
5543
|
+
]
|
|
5508
5544
|
}
|
|
5509
5545
|
}
|
|
5510
5546
|
},
|
|
@@ -5611,7 +5647,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5611
5647
|
{
|
|
5612
5648
|
name: "react-router/rsc/virtual-rsc-entry",
|
|
5613
5649
|
resolveId(id) {
|
|
5614
|
-
if (id === virtual2.rscEntry.id) return
|
|
5650
|
+
if (id === virtual2.rscEntry.id) return entries.rsc;
|
|
5615
5651
|
}
|
|
5616
5652
|
},
|
|
5617
5653
|
{
|
|
@@ -5689,7 +5725,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5689
5725
|
const reactRefreshDir = import_pathe6.default.dirname(
|
|
5690
5726
|
require.resolve("react-refresh/package.json")
|
|
5691
5727
|
);
|
|
5692
|
-
const reactRefreshRuntimePath = import_pathe6.
|
|
5728
|
+
const reactRefreshRuntimePath = (0, import_pathe6.join)(
|
|
5693
5729
|
reactRefreshDir,
|
|
5694
5730
|
"cjs/react-refresh-runtime.development.js"
|
|
5695
5731
|
);
|
|
@@ -5832,33 +5868,6 @@ function invalidateVirtualModules2(viteDevServer) {
|
|
|
5832
5868
|
function getRootDirectory(viteUserConfig) {
|
|
5833
5869
|
return viteUserConfig.root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd();
|
|
5834
5870
|
}
|
|
5835
|
-
function getDevPackageRoot() {
|
|
5836
|
-
const currentDir = (0, import_pathe6.dirname)(__dirname);
|
|
5837
|
-
let dir = currentDir;
|
|
5838
|
-
while (dir !== (0, import_pathe6.dirname)(dir)) {
|
|
5839
|
-
try {
|
|
5840
|
-
const packageJsonPath = (0, import_pathe6.join)(dir, "package.json");
|
|
5841
|
-
(0, import_fs.readFileSync)(packageJsonPath, "utf-8");
|
|
5842
|
-
return dir;
|
|
5843
|
-
} catch {
|
|
5844
|
-
dir = (0, import_pathe6.dirname)(dir);
|
|
5845
|
-
}
|
|
5846
|
-
}
|
|
5847
|
-
throw new Error("Could not find package.json");
|
|
5848
|
-
}
|
|
5849
|
-
function getDefaultEntries() {
|
|
5850
|
-
const defaultEntriesDir2 = (0, import_pathe6.join)(
|
|
5851
|
-
getDevPackageRoot(),
|
|
5852
|
-
"dist",
|
|
5853
|
-
"config",
|
|
5854
|
-
"default-rsc-entries"
|
|
5855
|
-
);
|
|
5856
|
-
return {
|
|
5857
|
-
rsc: (0, import_pathe6.join)(defaultEntriesDir2, "entry.rsc.tsx"),
|
|
5858
|
-
ssr: (0, import_pathe6.join)(defaultEntriesDir2, "entry.ssr.tsx"),
|
|
5859
|
-
client: (0, import_pathe6.join)(defaultEntriesDir2, "entry.client.tsx")
|
|
5860
|
-
};
|
|
5861
|
-
}
|
|
5862
5871
|
function getModulesWithImporters(modules) {
|
|
5863
5872
|
const visited = /* @__PURE__ */ new Set();
|
|
5864
5873
|
const result = /* @__PURE__ */ new Set();
|
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-3cde40396",
|
|
4
4
|
"description": "Dev tools and CLI for React Router",
|
|
5
5
|
"homepage": "https://reactrouter.com",
|
|
6
6
|
"bugs": {
|
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
"types": "./dist/routes.d.ts",
|
|
22
22
|
"default": "./dist/routes.js"
|
|
23
23
|
},
|
|
24
|
+
"./rsc-types": "./rsc-types.d.ts",
|
|
25
|
+
"./config/default-rsc-entries/*": "./config/default-rsc-entries/*.tsx",
|
|
24
26
|
"./vite": {
|
|
25
27
|
"types": "./dist/vite.d.ts",
|
|
26
28
|
"default": "./dist/vite.js"
|
|
@@ -87,7 +89,7 @@
|
|
|
87
89
|
"tinyglobby": "^0.2.14",
|
|
88
90
|
"valibot": "^1.2.0",
|
|
89
91
|
"vite-node": "^3.2.2",
|
|
90
|
-
"@react-router/node": "0.0.0-experimental-
|
|
92
|
+
"@react-router/node": "0.0.0-experimental-3cde40396"
|
|
91
93
|
},
|
|
92
94
|
"devDependencies": {
|
|
93
95
|
"@types/babel__core": "^7.20.5",
|
|
@@ -95,6 +97,7 @@
|
|
|
95
97
|
"@types/babel__traverse": "^7.20.7",
|
|
96
98
|
"@types/dedent": "^0.7.0",
|
|
97
99
|
"@types/express": "^4.17.9",
|
|
100
|
+
"@types/jest": "^29.5.4",
|
|
98
101
|
"@types/jsesc": "^3.0.1",
|
|
99
102
|
"@types/lodash": "^4.14.182",
|
|
100
103
|
"@types/node": "^20.0.0",
|
|
@@ -110,16 +113,16 @@
|
|
|
110
113
|
"vite": "^6.3.0",
|
|
111
114
|
"wireit": "0.14.9",
|
|
112
115
|
"wrangler": "^4.23.0",
|
|
113
|
-
"@react-router/serve": "0.0.0-experimental-
|
|
114
|
-
"react-router": "^0.0.0-experimental-
|
|
116
|
+
"@react-router/serve": "0.0.0-experimental-3cde40396",
|
|
117
|
+
"react-router": "^0.0.0-experimental-3cde40396"
|
|
115
118
|
},
|
|
116
119
|
"peerDependencies": {
|
|
117
120
|
"@vitejs/plugin-rsc": "*",
|
|
118
121
|
"typescript": "^5.1.0",
|
|
119
122
|
"vite": "^5.1.0 || ^6.0.0 || ^7.0.0",
|
|
120
123
|
"wrangler": "^3.28.2 || ^4.0.0",
|
|
121
|
-
"@react-router/serve": "^0.0.0-experimental-
|
|
122
|
-
"react-router": "^0.0.0-experimental-
|
|
124
|
+
"@react-router/serve": "^0.0.0-experimental-3cde40396",
|
|
125
|
+
"react-router": "^0.0.0-experimental-3cde40396"
|
|
123
126
|
},
|
|
124
127
|
"peerDependenciesMeta": {
|
|
125
128
|
"@vitejs/plugin-rsc": {
|
|
@@ -142,6 +145,7 @@
|
|
|
142
145
|
"dist/",
|
|
143
146
|
"module-sync-enabled/",
|
|
144
147
|
"bin.js",
|
|
148
|
+
"rsc-types.d.ts",
|
|
145
149
|
"CHANGELOG.md",
|
|
146
150
|
"LICENSE.md",
|
|
147
151
|
"README.md"
|
package/rsc-types.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
declare module "virtual:react-router/unstable_rsc/routes" {
|
|
2
|
+
import type { unstable_RSCRouteConfig as RSCRouteConfig } from "react-router";
|
|
3
|
+
|
|
4
|
+
const routes: RSCRouteConfig;
|
|
5
|
+
export default routes;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
declare module "virtual:react-router/unstable_rsc/basename" {
|
|
9
|
+
const basename: string;
|
|
10
|
+
export default basename;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
declare module "virtual:react-router/unstable_rsc/react-router-serve-config" {
|
|
14
|
+
const unstable_reactRouterServeConfig: {
|
|
15
|
+
publicPath: string;
|
|
16
|
+
assetsBuildDirectory: string;
|
|
17
|
+
};
|
|
18
|
+
export default unstable_reactRouterServeConfig;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
declare module "virtual:react-router/unstable_rsc/inject-hmr-runtime" {}
|