@c0va23/react-router-dev 7.10.1 → 7.13.0
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 +75 -0
- package/dist/cli/index.js +6 -5
- package/dist/config/default-rsc-entries/entry.rsc.tsx +33 -11
- package/dist/config/default-rsc-entries/entry.ssr.tsx +22 -15
- package/dist/config.d.ts +47 -0
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/vite/cloudflare.js +10 -9
- package/dist/vite.js +152 -84
- package/package.json +21 -10
- package/rsc-types.d.ts +21 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,80 @@
|
|
|
1
1
|
# `@react-router/dev`
|
|
2
2
|
|
|
3
|
+
## 7.13.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Bump @remix-run/node-fetch-server dep ([#14704](https://github.com/remix-run/react-router/pull/14704))
|
|
8
|
+
- Updated dependencies:
|
|
9
|
+
- `react-router@7.13.0`
|
|
10
|
+
- `@react-router/node@7.13.0`
|
|
11
|
+
- `@react-router/serve@7.13.0`
|
|
12
|
+
|
|
13
|
+
## 7.12.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- Add additional layer of CSRF protection by rejecting submissions to UI routes from external origins. If you need to permit access to specific external origins, you can specify them in the `react-router.config.ts` config `allowedActionOrigins` field. ([#14708](https://github.com/remix-run/react-router/pull/14708))
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Fix `Maximum call stack size exceeded` errors when HMR is triggered against code with cyclic imports ([#14522](https://github.com/remix-run/react-router/pull/14522))
|
|
22
|
+
|
|
23
|
+
- fix(vite): Skip SSR middleware in preview server for SPA mode ([#14673](https://github.com/remix-run/react-router/pull/14673))
|
|
24
|
+
|
|
25
|
+
- \[UNSTABLE] Add a new `future.unstable_trailingSlashAwareDataRequests` flag to provide consistent behavior of `request.pathname` inside `middleware`, `loader`, and `action` functions on document and data requests when a trailing slash is present in the browser URL. ([#14644](https://github.com/remix-run/react-router/pull/14644))
|
|
26
|
+
|
|
27
|
+
Currently, your HTTP and `request` pathnames would be as follows for `/a/b/c` and `/a/b/c/`
|
|
28
|
+
|
|
29
|
+
| URL `/a/b/c` | **HTTP pathname** | **`request` pathname\`** |
|
|
30
|
+
| ------------ | ----------------- | ------------------------ |
|
|
31
|
+
| **Document** | `/a/b/c` | `/a/b/c` ✅ |
|
|
32
|
+
| **Data** | `/a/b/c.data` | `/a/b/c` ✅ |
|
|
33
|
+
|
|
34
|
+
| URL `/a/b/c/` | **HTTP pathname** | **`request` pathname\`** |
|
|
35
|
+
| ------------- | ----------------- | ------------------------ |
|
|
36
|
+
| **Document** | `/a/b/c/` | `/a/b/c/` ✅ |
|
|
37
|
+
| **Data** | `/a/b/c.data` | `/a/b/c` ⚠️ |
|
|
38
|
+
|
|
39
|
+
With this flag enabled, these pathnames will be made consistent though a new `_.data` format for client-side `.data` requests:
|
|
40
|
+
|
|
41
|
+
| URL `/a/b/c` | **HTTP pathname** | **`request` pathname\`** |
|
|
42
|
+
| ------------ | ----------------- | ------------------------ |
|
|
43
|
+
| **Document** | `/a/b/c` | `/a/b/c` ✅ |
|
|
44
|
+
| **Data** | `/a/b/c.data` | `/a/b/c` ✅ |
|
|
45
|
+
|
|
46
|
+
| URL `/a/b/c/` | **HTTP pathname** | **`request` pathname\`** |
|
|
47
|
+
| ------------- | ------------------ | ------------------------ |
|
|
48
|
+
| **Document** | `/a/b/c/` | `/a/b/c/` ✅ |
|
|
49
|
+
| **Data** | `/a/b/c/_.data` ⬅️ | `/a/b/c/` ✅ |
|
|
50
|
+
|
|
51
|
+
This a bug fix but we are putting it behind an opt-in flag because it has the potential to be a "breaking bug fix" if you are relying on the URL format for any other application or caching logic.
|
|
52
|
+
|
|
53
|
+
Enabling this flag also changes the format of client side `.data` requests from `/_root.data` to `/_.data` when navigating to `/` to align with the new format. This does not impact the `request` pathname which is still `/` in all cases.
|
|
54
|
+
|
|
55
|
+
- Updated dependencies:
|
|
56
|
+
- `react-router@7.12.0`
|
|
57
|
+
- `@react-router/node@7.12.0`
|
|
58
|
+
- `@react-router/serve@7.12.0`
|
|
59
|
+
|
|
60
|
+
## 7.11.0
|
|
61
|
+
|
|
62
|
+
### Minor Changes
|
|
63
|
+
|
|
64
|
+
- feat: add `vite preview` support ([#14507](https://github.com/remix-run/react-router/pull/14507))
|
|
65
|
+
|
|
66
|
+
### Patch Changes
|
|
67
|
+
|
|
68
|
+
- rsc framework mode manual chunking for react and react-router deps ([#14655](https://github.com/remix-run/react-router/pull/14655))
|
|
69
|
+
- add support for throwing redirect Response's at RSC render time ([#14596](https://github.com/remix-run/react-router/pull/14596))
|
|
70
|
+
- support custom entrypoints for RSC framework mode ([#14643](https://github.com/remix-run/react-router/pull/14643))
|
|
71
|
+
- `routeRSCServerRequest` replace `fetchServer` with `serverResponse` ([#14597](https://github.com/remix-run/react-router/pull/14597))
|
|
72
|
+
- rsc framewlrk mode - optimize react-server-dom-webpack if in project package.json ([#14656](https://github.com/remix-run/react-router/pull/14656))
|
|
73
|
+
- Updated dependencies:
|
|
74
|
+
- `react-router@7.11.0`
|
|
75
|
+
- `@react-router/serve@7.11.0`
|
|
76
|
+
- `@react-router/node@7.11.0`
|
|
77
|
+
|
|
3
78
|
## 7.10.1
|
|
4
79
|
|
|
5
80
|
### Patch Changes
|
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* @react-router/dev v7.
|
|
3
|
+
* @react-router/dev v7.13.0
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) Remix Software Inc.
|
|
6
6
|
*
|
|
@@ -506,10 +506,12 @@ async function resolveConfig({
|
|
|
506
506
|
let future = {
|
|
507
507
|
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
508
508
|
unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
|
|
509
|
+
unstable_trailingSlashAwareDataRequests: userAndPresetConfigs.future?.unstable_trailingSlashAwareDataRequests ?? false,
|
|
509
510
|
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
510
511
|
v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
|
|
511
512
|
v8_viteEnvironmentApi: userAndPresetConfigs.future?.v8_viteEnvironmentApi ?? false
|
|
512
513
|
};
|
|
514
|
+
let allowedActionOrigins = userAndPresetConfigs.allowedActionOrigins ?? false;
|
|
513
515
|
let reactRouterConfig = deepFreeze({
|
|
514
516
|
appDirectory,
|
|
515
517
|
basename: basename3,
|
|
@@ -523,6 +525,7 @@ async function resolveConfig({
|
|
|
523
525
|
serverBundles,
|
|
524
526
|
serverModuleFormat,
|
|
525
527
|
ssr,
|
|
528
|
+
allowedActionOrigins,
|
|
526
529
|
unstable_routeConfig: routeConfig
|
|
527
530
|
});
|
|
528
531
|
for (let preset of reactRouterUserConfig.presets ?? []) {
|
|
@@ -956,6 +959,7 @@ function generateServerBuild(ctx) {
|
|
|
956
959
|
export const routeDiscovery: ServerBuild["routeDiscovery"];
|
|
957
960
|
export const routes: ServerBuild["routes"];
|
|
958
961
|
export const ssr: ServerBuild["ssr"];
|
|
962
|
+
export const allowedActionOrigins: ServerBuild["allowedActionOrigins"];
|
|
959
963
|
export const unstable_getCriticalCss: ServerBuild["unstable_getCriticalCss"];
|
|
960
964
|
}
|
|
961
965
|
`;
|
|
@@ -1373,11 +1377,9 @@ var init_has_rsc_plugin = __esm({
|
|
|
1373
1377
|
});
|
|
1374
1378
|
|
|
1375
1379
|
// vite/node-adapter.ts
|
|
1376
|
-
var import_node_fetch_server;
|
|
1377
1380
|
var init_node_adapter = __esm({
|
|
1378
1381
|
"vite/node-adapter.ts"() {
|
|
1379
1382
|
"use strict";
|
|
1380
|
-
import_node_fetch_server = require("@remix-run/node-fetch-server");
|
|
1381
1383
|
init_invariant();
|
|
1382
1384
|
}
|
|
1383
1385
|
});
|
|
@@ -1790,7 +1792,7 @@ function resolveEnvironmentsOptions(environmentResolvers, resolverOptions) {
|
|
|
1790
1792
|
function isNonNullable(x) {
|
|
1791
1793
|
return x != null;
|
|
1792
1794
|
}
|
|
1793
|
-
var import_node_crypto, import_node_fs3, import_promises2, path7, url, babel2,
|
|
1795
|
+
var import_node_crypto, import_node_fs3, import_promises2, path7, url, babel2, import_react_router2, import_es_module_lexer, import_pick3, import_jsesc, import_picocolors5, import_kebabCase, CLIENT_NON_COMPONENT_EXPORTS, CLIENT_ROUTE_EXPORTS, BUILD_CLIENT_ROUTE_QUERY_STRING, SSR_BUNDLE_PREFIX, virtualHmrRuntime, virtualInjectHmrRuntime, virtual, getServerBuildDirectory, getClientBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER;
|
|
1794
1796
|
var init_plugin = __esm({
|
|
1795
1797
|
"vite/plugin.ts"() {
|
|
1796
1798
|
"use strict";
|
|
@@ -1800,7 +1802,6 @@ var init_plugin = __esm({
|
|
|
1800
1802
|
path7 = __toESM(require("path"));
|
|
1801
1803
|
url = __toESM(require("url"));
|
|
1802
1804
|
babel2 = __toESM(require("@babel/core"));
|
|
1803
|
-
import_node_fetch_server2 = require("@remix-run/node-fetch-server");
|
|
1804
1805
|
import_react_router2 = require("react-router");
|
|
1805
1806
|
import_es_module_lexer = require("es-module-lexer");
|
|
1806
1807
|
import_pick3 = __toESM(require("lodash/pick"));
|
|
@@ -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
|
-
|
|
12
|
-
) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
return routeRSCServerRequest({
|
|
11
|
+
serverResponse: Response,
|
|
12
|
+
): Promise<Response> {
|
|
13
|
+
return await routeRSCServerRequest({
|
|
14
|
+
// The incoming request.
|
|
17
15
|
request,
|
|
18
|
-
|
|
16
|
+
// The response from the RSC server.
|
|
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.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ type ServerModuleFormat = "esm" | "cjs";
|
|
|
39
39
|
interface FutureConfig {
|
|
40
40
|
unstable_optimizeDeps: boolean;
|
|
41
41
|
unstable_subResourceIntegrity: boolean;
|
|
42
|
+
unstable_trailingSlashAwareDataRequests: boolean;
|
|
42
43
|
/**
|
|
43
44
|
* Enable route middleware
|
|
44
45
|
*/
|
|
@@ -147,6 +148,47 @@ type ReactRouterConfig = {
|
|
|
147
148
|
* SPA without server-rendering. Default's to `true`.
|
|
148
149
|
*/
|
|
149
150
|
ssr?: boolean;
|
|
151
|
+
/**
|
|
152
|
+
* An array of allowed origin hosts for action submissions to UI routes (does not apply
|
|
153
|
+
* to resource routes). Supports micromatch glob patterns (`*` to match one segment,
|
|
154
|
+
* `**` to match multiple).
|
|
155
|
+
*
|
|
156
|
+
* ```tsx
|
|
157
|
+
* export default {
|
|
158
|
+
* allowedActionOrigins: [
|
|
159
|
+
* "example.com",
|
|
160
|
+
* "*.example.com", // sub.example.com
|
|
161
|
+
* "**.example.com", // sub.domain.example.com
|
|
162
|
+
* ],
|
|
163
|
+
* } satisfies Config;
|
|
164
|
+
* ```
|
|
165
|
+
*
|
|
166
|
+
* If you need to set this value at runtime, you can do in by setting the value
|
|
167
|
+
* on the server build in your custom server. For example, when using `express`:
|
|
168
|
+
*
|
|
169
|
+
* ```ts
|
|
170
|
+
* import express from "express";
|
|
171
|
+
* import { createRequestHandler } from "@react-router/express";
|
|
172
|
+
* import type { ServerBuild } from "react-router";
|
|
173
|
+
*
|
|
174
|
+
* export const app = express();
|
|
175
|
+
*
|
|
176
|
+
* async function getBuild() {
|
|
177
|
+
* let build: ServerBuild = await import(
|
|
178
|
+
* "virtual:react-router/server-build"
|
|
179
|
+
* );
|
|
180
|
+
* return {
|
|
181
|
+
* ...build,
|
|
182
|
+
* allowedActionOrigins:
|
|
183
|
+
* process.env.NODE_ENV === "development"
|
|
184
|
+
* ? undefined
|
|
185
|
+
* : ["staging.example.com", "www.example.com"],
|
|
186
|
+
* };
|
|
187
|
+
* }
|
|
188
|
+
*
|
|
189
|
+
* app.use(createRequestHandler({ build: getBuild }));
|
|
190
|
+
*/
|
|
191
|
+
allowedActionOrigins?: string[];
|
|
150
192
|
};
|
|
151
193
|
type ResolvedReactRouterConfig = Readonly<{
|
|
152
194
|
/**
|
|
@@ -212,6 +254,11 @@ type ResolvedReactRouterConfig = Readonly<{
|
|
|
212
254
|
* SPA without server-rendering. Default's to `true`.
|
|
213
255
|
*/
|
|
214
256
|
ssr: boolean;
|
|
257
|
+
/**
|
|
258
|
+
* The allowed origins for actions / mutations. Does not apply to routes
|
|
259
|
+
* without a component. micromatch glob patterns are supported.
|
|
260
|
+
*/
|
|
261
|
+
allowedActionOrigins: string[] | false;
|
|
215
262
|
/**
|
|
216
263
|
* The resolved array of route config entries exported from `routes.ts`
|
|
217
264
|
*/
|
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 v7.
|
|
2
|
+
* @react-router/dev v7.13.0
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -45,12 +45,8 @@ __export(cloudflare_exports, {
|
|
|
45
45
|
module.exports = __toCommonJS(cloudflare_exports);
|
|
46
46
|
|
|
47
47
|
// vite/cloudflare-dev-proxy.ts
|
|
48
|
-
var import_node_fetch_server2 = require("@remix-run/node-fetch-server");
|
|
49
48
|
var import_react_router = require("react-router");
|
|
50
49
|
|
|
51
|
-
// vite/node-adapter.ts
|
|
52
|
-
var import_node_fetch_server = require("@remix-run/node-fetch-server");
|
|
53
|
-
|
|
54
50
|
// invariant.ts
|
|
55
51
|
function invariant(value, message) {
|
|
56
52
|
if (value === false || value === null || typeof value === "undefined") {
|
|
@@ -62,13 +58,14 @@ function invariant(value, message) {
|
|
|
62
58
|
}
|
|
63
59
|
|
|
64
60
|
// vite/node-adapter.ts
|
|
65
|
-
function fromNodeRequest(nodeReq, nodeRes) {
|
|
61
|
+
async function fromNodeRequest(nodeReq, nodeRes) {
|
|
66
62
|
invariant(
|
|
67
63
|
nodeReq.originalUrl,
|
|
68
64
|
"Expected `nodeReq.originalUrl` to be defined"
|
|
69
65
|
);
|
|
70
66
|
nodeReq.url = nodeReq.originalUrl;
|
|
71
|
-
|
|
67
|
+
const { createRequest } = await import("@remix-run/node-fetch-server");
|
|
68
|
+
return createRequest(nodeReq, nodeRes);
|
|
72
69
|
}
|
|
73
70
|
|
|
74
71
|
// vite/vite.ts
|
|
@@ -535,10 +532,12 @@ async function resolveConfig({
|
|
|
535
532
|
let future = {
|
|
536
533
|
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
537
534
|
unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
|
|
535
|
+
unstable_trailingSlashAwareDataRequests: userAndPresetConfigs.future?.unstable_trailingSlashAwareDataRequests ?? false,
|
|
538
536
|
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
539
537
|
v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
|
|
540
538
|
v8_viteEnvironmentApi: userAndPresetConfigs.future?.v8_viteEnvironmentApi ?? false
|
|
541
539
|
};
|
|
540
|
+
let allowedActionOrigins = userAndPresetConfigs.allowedActionOrigins ?? false;
|
|
542
541
|
let reactRouterConfig = deepFreeze({
|
|
543
542
|
appDirectory,
|
|
544
543
|
basename,
|
|
@@ -552,6 +551,7 @@ async function resolveConfig({
|
|
|
552
551
|
serverBundles,
|
|
553
552
|
serverModuleFormat,
|
|
554
553
|
ssr,
|
|
554
|
+
allowedActionOrigins,
|
|
555
555
|
unstable_routeConfig: routeConfig
|
|
556
556
|
});
|
|
557
557
|
for (let preset of reactRouterUserConfig.presets ?? []) {
|
|
@@ -817,6 +817,7 @@ var cloudflareDevProxyVitePlugin = (options = {}) => {
|
|
|
817
817
|
}
|
|
818
818
|
},
|
|
819
819
|
configureServer: async (viteDevServer) => {
|
|
820
|
+
const { sendResponse } = await import("@remix-run/node-fetch-server");
|
|
820
821
|
let context;
|
|
821
822
|
let getContext = async () => {
|
|
822
823
|
let { getPlatformProxy } = await importWrangler();
|
|
@@ -833,11 +834,11 @@ var cloudflareDevProxyVitePlugin = (options = {}) => {
|
|
|
833
834
|
serverBuildId
|
|
834
835
|
);
|
|
835
836
|
let handler = (0, import_react_router.createRequestHandler)(build, "development");
|
|
836
|
-
let req = fromNodeRequest(nodeReq, nodeRes);
|
|
837
|
+
let req = await fromNodeRequest(nodeReq, nodeRes);
|
|
837
838
|
context ??= await getContext();
|
|
838
839
|
let loadContext = getLoadContext ? await getLoadContext({ request: req, context }) : context;
|
|
839
840
|
let res = await handler(req, loadContext);
|
|
840
|
-
await
|
|
841
|
+
await sendResponse(nodeRes, res);
|
|
841
842
|
} catch (error) {
|
|
842
843
|
next(error);
|
|
843
844
|
}
|
package/dist/vite.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v7.
|
|
2
|
+
* @react-router/dev v7.13.0
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -52,7 +52,6 @@ var import_promises2 = require("fs/promises");
|
|
|
52
52
|
var path6 = __toESM(require("path"));
|
|
53
53
|
var url = __toESM(require("url"));
|
|
54
54
|
var babel = __toESM(require("@babel/core"));
|
|
55
|
-
var import_node_fetch_server2 = require("@remix-run/node-fetch-server");
|
|
56
55
|
var import_react_router2 = require("react-router");
|
|
57
56
|
var import_es_module_lexer = require("es-module-lexer");
|
|
58
57
|
var import_pick3 = __toESM(require("lodash/pick"));
|
|
@@ -562,10 +561,12 @@ async function resolveConfig({
|
|
|
562
561
|
let future = {
|
|
563
562
|
unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
|
|
564
563
|
unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
|
|
564
|
+
unstable_trailingSlashAwareDataRequests: userAndPresetConfigs.future?.unstable_trailingSlashAwareDataRequests ?? false,
|
|
565
565
|
v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
|
|
566
566
|
v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
|
|
567
567
|
v8_viteEnvironmentApi: userAndPresetConfigs.future?.v8_viteEnvironmentApi ?? false
|
|
568
568
|
};
|
|
569
|
+
let allowedActionOrigins = userAndPresetConfigs.allowedActionOrigins ?? false;
|
|
569
570
|
let reactRouterConfig = deepFreeze({
|
|
570
571
|
appDirectory,
|
|
571
572
|
basename: basename3,
|
|
@@ -579,6 +580,7 @@ async function resolveConfig({
|
|
|
579
580
|
serverBundles,
|
|
580
581
|
serverModuleFormat,
|
|
581
582
|
ssr,
|
|
583
|
+
allowedActionOrigins,
|
|
582
584
|
unstable_routeConfig: routeConfig
|
|
583
585
|
});
|
|
584
586
|
for (let preset of reactRouterUserConfig.presets ?? []) {
|
|
@@ -639,11 +641,11 @@ async function createConfigLoader({
|
|
|
639
641
|
fsWatcher = import_chokidar.default.watch([root, appDirectory], {
|
|
640
642
|
ignoreInitial: true,
|
|
641
643
|
ignored: (path9) => {
|
|
642
|
-
let
|
|
643
|
-
return !
|
|
644
|
+
let dirname4 = import_pathe3.default.dirname(path9);
|
|
645
|
+
return !dirname4.startsWith(appDirectory) && // Ensure we're only watching files outside of the app directory
|
|
644
646
|
// that are at the root level, not nested in subdirectories
|
|
645
647
|
path9 !== root && // Watch the root directory itself
|
|
646
|
-
|
|
648
|
+
dirname4 !== root;
|
|
647
649
|
}
|
|
648
650
|
});
|
|
649
651
|
fsWatcher.on("all", async (...args) => {
|
|
@@ -775,6 +777,30 @@ async function resolveEntryFiles({
|
|
|
775
777
|
let entryServerFilePath = userEntryServerFile ? import_pathe3.default.resolve(reactRouterConfig.appDirectory, userEntryServerFile) : import_pathe3.default.resolve(defaultsDirectory, entryServerFile);
|
|
776
778
|
return { entryClientFilePath, entryServerFilePath };
|
|
777
779
|
}
|
|
780
|
+
async function resolveRSCEntryFiles({
|
|
781
|
+
reactRouterConfig
|
|
782
|
+
}) {
|
|
783
|
+
let { appDirectory } = reactRouterConfig;
|
|
784
|
+
let defaultsDirectory = import_pathe3.default.resolve(
|
|
785
|
+
import_pathe3.default.dirname(require.resolve("@react-router/dev/package.json")),
|
|
786
|
+
"dist",
|
|
787
|
+
"config",
|
|
788
|
+
"default-rsc-entries"
|
|
789
|
+
);
|
|
790
|
+
let userEntryClientFile = findEntry(appDirectory, "entry.client", {
|
|
791
|
+
absolute: true
|
|
792
|
+
});
|
|
793
|
+
let userEntryRSCFile = findEntry(appDirectory, "entry.rsc", {
|
|
794
|
+
absolute: true
|
|
795
|
+
});
|
|
796
|
+
let userEntrySSRFile = findEntry(appDirectory, "entry.ssr", {
|
|
797
|
+
absolute: true
|
|
798
|
+
});
|
|
799
|
+
let client = userEntryClientFile ?? import_pathe3.default.join(defaultsDirectory, "entry.client.tsx");
|
|
800
|
+
let rsc = userEntryRSCFile ?? import_pathe3.default.join(defaultsDirectory, "entry.rsc.tsx");
|
|
801
|
+
let ssr = userEntrySSRFile ?? import_pathe3.default.join(defaultsDirectory, "entry.ssr.tsx");
|
|
802
|
+
return { client, rsc, ssr };
|
|
803
|
+
}
|
|
778
804
|
function omitRoutes(config) {
|
|
779
805
|
return {
|
|
780
806
|
...config,
|
|
@@ -942,6 +968,7 @@ function generateServerBuild(ctx) {
|
|
|
942
968
|
export const routeDiscovery: ServerBuild["routeDiscovery"];
|
|
943
969
|
export const routes: ServerBuild["routes"];
|
|
944
970
|
export const ssr: ServerBuild["ssr"];
|
|
971
|
+
export const allowedActionOrigins: ServerBuild["allowedActionOrigins"];
|
|
945
972
|
export const unstable_getCriticalCss: ServerBuild["unstable_getCriticalCss"];
|
|
946
973
|
}
|
|
947
974
|
`;
|
|
@@ -1297,14 +1324,14 @@ async function watch(rootDirectory, { mode, logger, rsc }) {
|
|
|
1297
1324
|
}
|
|
1298
1325
|
|
|
1299
1326
|
// vite/node-adapter.ts
|
|
1300
|
-
|
|
1301
|
-
function fromNodeRequest(nodeReq, nodeRes) {
|
|
1327
|
+
async function fromNodeRequest(nodeReq, nodeRes) {
|
|
1302
1328
|
invariant(
|
|
1303
1329
|
nodeReq.originalUrl,
|
|
1304
1330
|
"Expected `nodeReq.originalUrl` to be defined"
|
|
1305
1331
|
);
|
|
1306
1332
|
nodeReq.url = nodeReq.originalUrl;
|
|
1307
|
-
|
|
1333
|
+
const { createRequest } = await import("@remix-run/node-fetch-server");
|
|
1334
|
+
return createRequest(nodeReq, nodeRes);
|
|
1308
1335
|
}
|
|
1309
1336
|
|
|
1310
1337
|
// vite/styles.ts
|
|
@@ -2897,7 +2924,9 @@ var reactRouterVitePlugin = () => {
|
|
|
2897
2924
|
href: "${ctx.publicPath}@react-router/critical.css?pathname=" + pathname,
|
|
2898
2925
|
};
|
|
2899
2926
|
}
|
|
2900
|
-
` : ""}
|
|
2927
|
+
` : ""}
|
|
2928
|
+
export const allowedActionOrigins = ${JSON.stringify(ctx.reactRouterConfig.allowedActionOrigins)};
|
|
2929
|
+
`;
|
|
2901
2930
|
};
|
|
2902
2931
|
let loadViteManifest = async (directory) => {
|
|
2903
2932
|
let manifestContents = await (0, import_promises2.readFile)(
|
|
@@ -3495,12 +3524,13 @@ var reactRouterVitePlugin = () => {
|
|
|
3495
3524
|
}
|
|
3496
3525
|
let handler = (0, import_react_router2.createRequestHandler)(build, "development");
|
|
3497
3526
|
let nodeHandler = async (nodeReq, nodeRes) => {
|
|
3498
|
-
let req2 = fromNodeRequest(nodeReq, nodeRes);
|
|
3527
|
+
let req2 = await fromNodeRequest(nodeReq, nodeRes);
|
|
3499
3528
|
let res2 = await handler(
|
|
3500
3529
|
req2,
|
|
3501
3530
|
await reactRouterDevLoadContext(req2)
|
|
3502
3531
|
);
|
|
3503
|
-
|
|
3532
|
+
const { sendResponse } = await import("@remix-run/node-fetch-server");
|
|
3533
|
+
await sendResponse(nodeRes, res2);
|
|
3504
3534
|
};
|
|
3505
3535
|
await nodeHandler(req, res);
|
|
3506
3536
|
} catch (error) {
|
|
@@ -3510,6 +3540,38 @@ var reactRouterVitePlugin = () => {
|
|
|
3510
3540
|
}
|
|
3511
3541
|
};
|
|
3512
3542
|
},
|
|
3543
|
+
configurePreviewServer(previewServer) {
|
|
3544
|
+
return () => {
|
|
3545
|
+
if (!ctx.reactRouterConfig.ssr) {
|
|
3546
|
+
return;
|
|
3547
|
+
}
|
|
3548
|
+
previewServer.middlewares.use(async (req, res, next) => {
|
|
3549
|
+
try {
|
|
3550
|
+
let serverBuildDirectory = getServerBuildDirectory(
|
|
3551
|
+
ctx.reactRouterConfig
|
|
3552
|
+
);
|
|
3553
|
+
let serverBuildFile = path6.resolve(
|
|
3554
|
+
serverBuildDirectory,
|
|
3555
|
+
"index.js"
|
|
3556
|
+
);
|
|
3557
|
+
let build = await import(url.pathToFileURL(serverBuildFile).href);
|
|
3558
|
+
let handler = (0, import_react_router2.createRequestHandler)(build, "production");
|
|
3559
|
+
let nodeHandler = async (nodeReq, nodeRes) => {
|
|
3560
|
+
let req2 = await fromNodeRequest(nodeReq, nodeRes);
|
|
3561
|
+
let res2 = await handler(
|
|
3562
|
+
req2,
|
|
3563
|
+
await reactRouterDevLoadContext(req2)
|
|
3564
|
+
);
|
|
3565
|
+
const { sendResponse } = await import("@remix-run/node-fetch-server");
|
|
3566
|
+
await sendResponse(nodeRes, res2);
|
|
3567
|
+
};
|
|
3568
|
+
await nodeHandler(req, res);
|
|
3569
|
+
} catch (error) {
|
|
3570
|
+
next(error);
|
|
3571
|
+
}
|
|
3572
|
+
});
|
|
3573
|
+
};
|
|
3574
|
+
},
|
|
3513
3575
|
writeBundle: {
|
|
3514
3576
|
// After the SSR build is finished, we inspect the Vite manifest for
|
|
3515
3577
|
// the SSR build and move server-only assets to client assets directory
|
|
@@ -4047,10 +4109,8 @@ var reactRouterVitePlugin = () => {
|
|
|
4047
4109
|
if (this.environment.name !== "ssr" && modules.length <= 0) {
|
|
4048
4110
|
return;
|
|
4049
4111
|
}
|
|
4050
|
-
let clientModules =
|
|
4051
|
-
|
|
4052
|
-
(mod) => getParentClientNodes(server.environments.client.moduleGraph, mod)
|
|
4053
|
-
)
|
|
4112
|
+
let clientModules = modules.flatMap(
|
|
4113
|
+
(mod) => getParentClientNodes(server.environments.client.moduleGraph, mod)
|
|
4054
4114
|
);
|
|
4055
4115
|
for (let clientModule of clientModules) {
|
|
4056
4116
|
server.environments.client.reloadModule(clientModule);
|
|
@@ -4061,30 +4121,22 @@ var reactRouterVitePlugin = () => {
|
|
|
4061
4121
|
warnOnClientSourceMaps()
|
|
4062
4122
|
];
|
|
4063
4123
|
};
|
|
4064
|
-
function getParentClientNodes(clientModuleGraph, module2) {
|
|
4124
|
+
function getParentClientNodes(clientModuleGraph, module2, seenNodes = /* @__PURE__ */ new Set()) {
|
|
4065
4125
|
if (!module2.id) {
|
|
4066
4126
|
return [];
|
|
4067
4127
|
}
|
|
4128
|
+
if (seenNodes.has(module2.url)) {
|
|
4129
|
+
return [];
|
|
4130
|
+
}
|
|
4131
|
+
seenNodes.add(module2.url);
|
|
4068
4132
|
let clientModule = clientModuleGraph.getModuleById(module2.id);
|
|
4069
4133
|
if (clientModule) {
|
|
4070
4134
|
return [clientModule];
|
|
4071
4135
|
}
|
|
4072
4136
|
return [...module2.importers].flatMap(
|
|
4073
|
-
(importer) => getParentClientNodes(clientModuleGraph, importer)
|
|
4137
|
+
(importer) => getParentClientNodes(clientModuleGraph, importer, seenNodes)
|
|
4074
4138
|
);
|
|
4075
4139
|
}
|
|
4076
|
-
function uniqueNodes(nodes) {
|
|
4077
|
-
let nodeUrls = /* @__PURE__ */ new Set();
|
|
4078
|
-
let unique = [];
|
|
4079
|
-
for (let node of nodes) {
|
|
4080
|
-
if (nodeUrls.has(node.url)) {
|
|
4081
|
-
continue;
|
|
4082
|
-
}
|
|
4083
|
-
nodeUrls.add(node.url);
|
|
4084
|
-
unique.push(node);
|
|
4085
|
-
}
|
|
4086
|
-
return unique;
|
|
4087
|
-
}
|
|
4088
4140
|
function addRefreshWrapper(reactRouterConfig, code, id) {
|
|
4089
4141
|
let route = getRoute(reactRouterConfig, id);
|
|
4090
4142
|
let acceptExports = route ? CLIENT_NON_COMPONENT_EXPORTS : [];
|
|
@@ -4359,7 +4411,21 @@ function getStaticPrerenderPaths(routes) {
|
|
|
4359
4411
|
};
|
|
4360
4412
|
}
|
|
4361
4413
|
async function prerenderData(handler, prerenderPath, onlyRoutes, clientBuildDirectory, reactRouterConfig, viteConfig, requestInit) {
|
|
4362
|
-
let
|
|
4414
|
+
let dataRequestPath;
|
|
4415
|
+
if (reactRouterConfig.future.unstable_trailingSlashAwareDataRequests) {
|
|
4416
|
+
if (prerenderPath.endsWith("/")) {
|
|
4417
|
+
dataRequestPath = `${prerenderPath}_.data`;
|
|
4418
|
+
} else {
|
|
4419
|
+
dataRequestPath = `${prerenderPath}.data`;
|
|
4420
|
+
}
|
|
4421
|
+
} else {
|
|
4422
|
+
if (prerenderPath === "/") {
|
|
4423
|
+
dataRequestPath = "/_root.data";
|
|
4424
|
+
} else {
|
|
4425
|
+
dataRequestPath = `${prerenderPath.replace(/\/$/, "")}.data`;
|
|
4426
|
+
}
|
|
4427
|
+
}
|
|
4428
|
+
let normalizedPath = `${reactRouterConfig.basename}${dataRequestPath}`.replace(/\/\/+/g, "/");
|
|
4363
4429
|
let url2 = new URL(`http://localhost${normalizedPath}`);
|
|
4364
4430
|
if (onlyRoutes?.length) {
|
|
4365
4431
|
url2.searchParams.set("_routes", onlyRoutes.join(","));
|
|
@@ -4986,7 +5052,6 @@ var import_es_module_lexer3 = require("es-module-lexer");
|
|
|
4986
5052
|
var Path5 = __toESM(require("pathe"));
|
|
4987
5053
|
var babel2 = __toESM(require("@babel/core"));
|
|
4988
5054
|
var import_picocolors5 = __toESM(require("picocolors"));
|
|
4989
|
-
var import_fs = require("fs");
|
|
4990
5055
|
var import_promises3 = require("fs/promises");
|
|
4991
5056
|
var import_pathe6 = __toESM(require("pathe"));
|
|
4992
5057
|
|
|
@@ -5321,13 +5386,16 @@ function isRootRouteFile({
|
|
|
5321
5386
|
|
|
5322
5387
|
// vite/rsc/plugin.ts
|
|
5323
5388
|
function reactRouterRSCVitePlugin() {
|
|
5389
|
+
let runningWithinTheReactRouterMonoRepo = Boolean(
|
|
5390
|
+
arguments && arguments.length === 1 && typeof arguments[0] === "object" && arguments[0] && "__runningWithinTheReactRouterMonoRepo" in arguments[0] && arguments[0].__runningWithinTheReactRouterMonoRepo === true
|
|
5391
|
+
);
|
|
5324
5392
|
let configLoader;
|
|
5325
5393
|
let typegenWatcherPromise;
|
|
5326
5394
|
let viteCommand;
|
|
5327
5395
|
let resolvedViteConfig;
|
|
5328
5396
|
let routeIdByFile;
|
|
5329
5397
|
let logger;
|
|
5330
|
-
|
|
5398
|
+
let entries;
|
|
5331
5399
|
let config;
|
|
5332
5400
|
let rootRouteFile;
|
|
5333
5401
|
function updateConfig(newConfig) {
|
|
@@ -5390,22 +5458,34 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5390
5458
|
logger = vite2.createLogger(viteUserConfig.logLevel, {
|
|
5391
5459
|
prefix: "[react-router]"
|
|
5392
5460
|
});
|
|
5461
|
+
entries = await resolveRSCEntryFiles({
|
|
5462
|
+
reactRouterConfig: config
|
|
5463
|
+
});
|
|
5464
|
+
let viteNormalizePath = (await import("vite")).normalizePath;
|
|
5393
5465
|
return {
|
|
5394
5466
|
resolve: {
|
|
5395
5467
|
dedupe: [
|
|
5396
5468
|
// https://react.dev/warnings/invalid-hook-call-warning#duplicate-react
|
|
5397
5469
|
"react",
|
|
5470
|
+
"react/jsx-runtime",
|
|
5471
|
+
"react/jsx-dev-runtime",
|
|
5398
5472
|
"react-dom",
|
|
5473
|
+
"react-dom/client",
|
|
5399
5474
|
// Avoid router duplicates since mismatching routers cause `Error:
|
|
5400
5475
|
// You must render this element inside a <Remix> element`.
|
|
5401
5476
|
"react-router",
|
|
5402
5477
|
"react-router/dom",
|
|
5403
|
-
|
|
5478
|
+
"react-router/internal/react-server-client",
|
|
5479
|
+
...hasDependency({ name: "react-router-dom", rootDirectory }) ? ["react-router-dom"] : [],
|
|
5480
|
+
...hasDependency({
|
|
5481
|
+
name: "react-server-dom-webpack",
|
|
5482
|
+
rootDirectory
|
|
5483
|
+
}) ? ["react-server-dom-webpack"] : []
|
|
5404
5484
|
]
|
|
5405
5485
|
},
|
|
5406
5486
|
optimizeDeps: {
|
|
5407
5487
|
entries: getOptimizeDepsEntries({
|
|
5408
|
-
entryClientFilePath:
|
|
5488
|
+
entryClientFilePath: entries.client,
|
|
5409
5489
|
reactRouterConfig: config
|
|
5410
5490
|
}),
|
|
5411
5491
|
esbuildOptions: {
|
|
@@ -5419,8 +5499,17 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5419
5499
|
"react/jsx-runtime",
|
|
5420
5500
|
"react/jsx-dev-runtime",
|
|
5421
5501
|
"react-dom",
|
|
5422
|
-
|
|
5423
|
-
|
|
5502
|
+
...hasDependency({
|
|
5503
|
+
name: "react-server-dom-webpack",
|
|
5504
|
+
rootDirectory
|
|
5505
|
+
}) ? ["react-server-dom-webpack"] : [],
|
|
5506
|
+
...runningWithinTheReactRouterMonoRepo ? [] : [
|
|
5507
|
+
"react-router",
|
|
5508
|
+
"react-router/dom",
|
|
5509
|
+
"react-router/internal/react-server-client"
|
|
5510
|
+
],
|
|
5511
|
+
"react-router > cookie",
|
|
5512
|
+
"react-router > set-cookie-parser"
|
|
5424
5513
|
]
|
|
5425
5514
|
},
|
|
5426
5515
|
esbuild: {
|
|
@@ -5432,27 +5521,30 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5432
5521
|
build: {
|
|
5433
5522
|
rollupOptions: {
|
|
5434
5523
|
input: {
|
|
5435
|
-
index:
|
|
5524
|
+
index: entries.client
|
|
5525
|
+
},
|
|
5526
|
+
output: {
|
|
5527
|
+
manualChunks(id) {
|
|
5528
|
+
const normalized = viteNormalizePath(id);
|
|
5529
|
+
if (normalized.includes("node_modules/react/") || normalized.includes("node_modules/react-dom/") || normalized.includes(
|
|
5530
|
+
"node_modules/react-server-dom-webpack/"
|
|
5531
|
+
) || normalized.includes("node_modules/@vitejs/plugin-rsc/")) {
|
|
5532
|
+
return "react";
|
|
5533
|
+
}
|
|
5534
|
+
if (normalized.includes("node_modules/react-router/")) {
|
|
5535
|
+
return "router";
|
|
5536
|
+
}
|
|
5537
|
+
}
|
|
5436
5538
|
}
|
|
5437
5539
|
},
|
|
5438
5540
|
outDir: (0, import_pathe6.join)(config.buildDirectory, "client")
|
|
5439
|
-
},
|
|
5440
|
-
optimizeDeps: {
|
|
5441
|
-
include: [
|
|
5442
|
-
"react-router > cookie",
|
|
5443
|
-
"react-router > set-cookie-parser"
|
|
5444
|
-
]
|
|
5445
5541
|
}
|
|
5446
5542
|
},
|
|
5447
5543
|
rsc: {
|
|
5448
5544
|
build: {
|
|
5449
5545
|
rollupOptions: {
|
|
5450
5546
|
input: {
|
|
5451
|
-
|
|
5452
|
-
// it as `virtual:react-router/unstable_rsc/rsc-entry`
|
|
5453
|
-
// without needing to know the actual file path, which is
|
|
5454
|
-
// important when using the default entries.
|
|
5455
|
-
index: defaultEntries2.rsc
|
|
5547
|
+
index: entries.rsc
|
|
5456
5548
|
},
|
|
5457
5549
|
output: {
|
|
5458
5550
|
entryFileNames: config.serverBuildFile,
|
|
@@ -5460,13 +5552,18 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5460
5552
|
}
|
|
5461
5553
|
},
|
|
5462
5554
|
outDir: (0, import_pathe6.join)(config.buildDirectory, "server")
|
|
5555
|
+
},
|
|
5556
|
+
resolve: {
|
|
5557
|
+
noExternal: [
|
|
5558
|
+
"@react-router/dev/config/default-rsc-entries/entry.ssr"
|
|
5559
|
+
]
|
|
5463
5560
|
}
|
|
5464
5561
|
},
|
|
5465
5562
|
ssr: {
|
|
5466
5563
|
build: {
|
|
5467
5564
|
rollupOptions: {
|
|
5468
5565
|
input: {
|
|
5469
|
-
index:
|
|
5566
|
+
index: entries.ssr
|
|
5470
5567
|
},
|
|
5471
5568
|
output: {
|
|
5472
5569
|
// Note: We don't set `entryFileNames` here because it's
|
|
@@ -5477,6 +5574,11 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5477
5574
|
}
|
|
5478
5575
|
},
|
|
5479
5576
|
outDir: (0, import_pathe6.join)(config.buildDirectory, "server/__ssr_build")
|
|
5577
|
+
},
|
|
5578
|
+
resolve: {
|
|
5579
|
+
noExternal: [
|
|
5580
|
+
"@react-router/dev/config/default-rsc-entries/entry.rsc"
|
|
5581
|
+
]
|
|
5480
5582
|
}
|
|
5481
5583
|
}
|
|
5482
5584
|
},
|
|
@@ -5580,12 +5682,6 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5580
5682
|
(await typegenWatcherPromise)?.close();
|
|
5581
5683
|
}
|
|
5582
5684
|
},
|
|
5583
|
-
{
|
|
5584
|
-
name: "react-router/rsc/virtual-rsc-entry",
|
|
5585
|
-
resolveId(id) {
|
|
5586
|
-
if (id === virtual2.rscEntry.id) return defaultEntries2.rsc;
|
|
5587
|
-
}
|
|
5588
|
-
},
|
|
5589
5685
|
{
|
|
5590
5686
|
name: "react-router/rsc/virtual-route-config",
|
|
5591
5687
|
resolveId(id) {
|
|
@@ -5661,7 +5757,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
|
|
|
5661
5757
|
const reactRefreshDir = import_pathe6.default.dirname(
|
|
5662
5758
|
require.resolve("react-refresh/package.json")
|
|
5663
5759
|
);
|
|
5664
|
-
const reactRefreshRuntimePath = import_pathe6.
|
|
5760
|
+
const reactRefreshRuntimePath = (0, import_pathe6.join)(
|
|
5665
5761
|
reactRefreshDir,
|
|
5666
5762
|
"cjs/react-refresh-runtime.development.js"
|
|
5667
5763
|
);
|
|
@@ -5788,7 +5884,6 @@ var virtual2 = {
|
|
|
5788
5884
|
injectHmrRuntime: create("unstable_rsc/inject-hmr-runtime"),
|
|
5789
5885
|
hmrRuntime: create("unstable_rsc/runtime"),
|
|
5790
5886
|
basename: create("unstable_rsc/basename"),
|
|
5791
|
-
rscEntry: create("unstable_rsc/rsc-entry"),
|
|
5792
5887
|
reactRouterServeConfig: create("unstable_rsc/react-router-serve-config")
|
|
5793
5888
|
};
|
|
5794
5889
|
function invalidateVirtualModules2(viteDevServer) {
|
|
@@ -5804,33 +5899,6 @@ function invalidateVirtualModules2(viteDevServer) {
|
|
|
5804
5899
|
function getRootDirectory(viteUserConfig) {
|
|
5805
5900
|
return viteUserConfig.root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd();
|
|
5806
5901
|
}
|
|
5807
|
-
function getDevPackageRoot() {
|
|
5808
|
-
const currentDir = (0, import_pathe6.dirname)(__dirname);
|
|
5809
|
-
let dir = currentDir;
|
|
5810
|
-
while (dir !== (0, import_pathe6.dirname)(dir)) {
|
|
5811
|
-
try {
|
|
5812
|
-
const packageJsonPath = (0, import_pathe6.join)(dir, "package.json");
|
|
5813
|
-
(0, import_fs.readFileSync)(packageJsonPath, "utf-8");
|
|
5814
|
-
return dir;
|
|
5815
|
-
} catch {
|
|
5816
|
-
dir = (0, import_pathe6.dirname)(dir);
|
|
5817
|
-
}
|
|
5818
|
-
}
|
|
5819
|
-
throw new Error("Could not find package.json");
|
|
5820
|
-
}
|
|
5821
|
-
function getDefaultEntries() {
|
|
5822
|
-
const defaultEntriesDir2 = (0, import_pathe6.join)(
|
|
5823
|
-
getDevPackageRoot(),
|
|
5824
|
-
"dist",
|
|
5825
|
-
"config",
|
|
5826
|
-
"default-rsc-entries"
|
|
5827
|
-
);
|
|
5828
|
-
return {
|
|
5829
|
-
rsc: (0, import_pathe6.join)(defaultEntriesDir2, "entry.rsc.tsx"),
|
|
5830
|
-
ssr: (0, import_pathe6.join)(defaultEntriesDir2, "entry.ssr.tsx"),
|
|
5831
|
-
client: (0, import_pathe6.join)(defaultEntriesDir2, "entry.client.tsx")
|
|
5832
|
-
};
|
|
5833
|
-
}
|
|
5834
5902
|
function getModulesWithImporters(modules) {
|
|
5835
5903
|
const visited = /* @__PURE__ */ new Set();
|
|
5836
5904
|
const result = /* @__PURE__ */ new Set();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@c0va23/react-router-dev",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.13.0",
|
|
4
4
|
"description": "Dev tools and CLI for React Router",
|
|
5
5
|
"homepage": "https://reactrouter.com",
|
|
6
6
|
"bugs": {
|
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
},
|
|
14
14
|
"license": "MIT",
|
|
15
15
|
"exports": {
|
|
16
|
+
"./config/default-rsc-entries/entry.client": "./dist/config/default-rsc-entries/entry.client.tsx",
|
|
17
|
+
"./config/default-rsc-entries/entry.rsc": "./dist/config/default-rsc-entries/entry.rsc.tsx",
|
|
18
|
+
"./config/default-rsc-entries/entry.ssr": "./dist/config/default-rsc-entries/entry.ssr.tsx",
|
|
16
19
|
"./config": {
|
|
17
20
|
"types": "./dist/config.d.ts",
|
|
18
21
|
"default": "./dist/config.js"
|
|
@@ -21,6 +24,7 @@
|
|
|
21
24
|
"types": "./dist/routes.d.ts",
|
|
22
25
|
"default": "./dist/routes.js"
|
|
23
26
|
},
|
|
27
|
+
"./rsc-types": "./rsc-types.d.ts",
|
|
24
28
|
"./vite": {
|
|
25
29
|
"types": "./dist/vite.d.ts",
|
|
26
30
|
"default": "./dist/vite.js"
|
|
@@ -44,6 +48,7 @@
|
|
|
44
48
|
"build": {
|
|
45
49
|
"command": "tsup",
|
|
46
50
|
"files": [
|
|
51
|
+
"../../pnpm-workspace.yaml",
|
|
47
52
|
"cli/**",
|
|
48
53
|
"config/**",
|
|
49
54
|
"module-sync-enabled/**",
|
|
@@ -67,7 +72,7 @@
|
|
|
67
72
|
"@babel/preset-typescript": "^7.27.1",
|
|
68
73
|
"@babel/traverse": "^7.27.7",
|
|
69
74
|
"@babel/types": "^7.27.7",
|
|
70
|
-
"@remix-run/node-fetch-server": "^0.
|
|
75
|
+
"@remix-run/node-fetch-server": "^0.13.0",
|
|
71
76
|
"arg": "^5.0.1",
|
|
72
77
|
"babel-dead-code-elimination": "^1.0.6",
|
|
73
78
|
"chokidar": "^4.0.0",
|
|
@@ -87,7 +92,7 @@
|
|
|
87
92
|
"tinyglobby": "^0.2.14",
|
|
88
93
|
"valibot": "^1.2.0",
|
|
89
94
|
"vite-node": "^3.2.2",
|
|
90
|
-
"@react-router/node": "7.
|
|
95
|
+
"@react-router/node": "7.13.0"
|
|
91
96
|
},
|
|
92
97
|
"devDependencies": {
|
|
93
98
|
"@types/babel__core": "^7.20.5",
|
|
@@ -95,31 +100,33 @@
|
|
|
95
100
|
"@types/babel__traverse": "^7.20.7",
|
|
96
101
|
"@types/dedent": "^0.7.0",
|
|
97
102
|
"@types/express": "^4.17.9",
|
|
103
|
+
"@types/jest": "^29.5.4",
|
|
98
104
|
"@types/jsesc": "^3.0.1",
|
|
99
105
|
"@types/lodash": "^4.14.182",
|
|
100
106
|
"@types/node": "^20.0.0",
|
|
101
107
|
"@types/npmcli__package-json": "^4.0.0",
|
|
102
108
|
"@types/semver": "^7.7.0",
|
|
103
|
-
"@vitejs/plugin-rsc": "0.
|
|
109
|
+
"@vitejs/plugin-rsc": "~0.5.7",
|
|
104
110
|
"esbuild-register": "^3.6.0",
|
|
105
111
|
"execa": "5.1.1",
|
|
106
112
|
"express": "^4.19.2",
|
|
107
113
|
"fast-glob": "3.2.11",
|
|
108
114
|
"tsup": "^8.3.0",
|
|
109
|
-
"typescript": "^5.
|
|
115
|
+
"typescript": "^5.4.5",
|
|
110
116
|
"vite": "^6.3.0",
|
|
111
117
|
"wireit": "0.14.9",
|
|
112
118
|
"wrangler": "^4.23.0",
|
|
113
|
-
"
|
|
114
|
-
"react-router": "
|
|
119
|
+
"react-router": "^7.13.0",
|
|
120
|
+
"@react-router/serve": "7.13.0"
|
|
115
121
|
},
|
|
116
122
|
"peerDependencies": {
|
|
117
|
-
"@vitejs/plugin-rsc": "
|
|
123
|
+
"@vitejs/plugin-rsc": "~0.5.7",
|
|
124
|
+
"react-server-dom-webpack": "^19.2.3",
|
|
118
125
|
"typescript": "^5.1.0",
|
|
119
126
|
"vite": "^5.1.0 || ^6.0.0 || ^7.0.0",
|
|
120
127
|
"wrangler": "^3.28.2 || ^4.0.0",
|
|
121
|
-
"@react-router/serve": "^7.
|
|
122
|
-
"react-router": "^7.
|
|
128
|
+
"@react-router/serve": "^7.13.0",
|
|
129
|
+
"react-router": "^7.13.0"
|
|
123
130
|
},
|
|
124
131
|
"peerDependenciesMeta": {
|
|
125
132
|
"@vitejs/plugin-rsc": {
|
|
@@ -131,6 +138,9 @@
|
|
|
131
138
|
"typescript": {
|
|
132
139
|
"optional": true
|
|
133
140
|
},
|
|
141
|
+
"react-server-dom-webpack": {
|
|
142
|
+
"optional": true
|
|
143
|
+
},
|
|
134
144
|
"wrangler": {
|
|
135
145
|
"optional": true
|
|
136
146
|
}
|
|
@@ -142,6 +152,7 @@
|
|
|
142
152
|
"dist/",
|
|
143
153
|
"module-sync-enabled/",
|
|
144
154
|
"bin.js",
|
|
155
|
+
"rsc-types.d.ts",
|
|
145
156
|
"CHANGELOG.md",
|
|
146
157
|
"LICENSE.md",
|
|
147
158
|
"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" {}
|