@react-router/dev 7.9.1 → 7.9.2-pre.1
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 +20 -8
- package/dist/cli/index.js +5 -8
- package/dist/config/default-rsc-entries/entry.rsc.tsx +3 -0
- package/dist/config/default-rsc-entries/entry.ssr.tsx +2 -4
- package/dist/config.js +1 -1
- package/dist/routes.js +1 -1
- package/dist/vite/cloudflare.js +6 -72
- package/dist/vite.d.ts +3 -1
- package/dist/vite.js +1021 -175
- package/package.json +9 -14
- package/dist/internal.d.ts +0 -9
- package/dist/internal.js +0 -2307
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# `@react-router/dev`
|
|
2
2
|
|
|
3
|
+
## 7.9.2-pre.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies:
|
|
8
|
+
- `react-router@7.9.2-pre.1`
|
|
9
|
+
- `@react-router/node@7.9.2-pre.1`
|
|
10
|
+
- `@react-router/serve@7.9.2-pre.1`
|
|
11
|
+
|
|
12
|
+
## 7.9.2-pre.0
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- Add unstable support for RSC Framework Mode ([#14336](https://github.com/remix-run/react-router/pull/14336))
|
|
17
|
+
- Switch internal vite plugin Response logic to use `@remix-run/node-fetch-server` ([#13927](https://github.com/remix-run/react-router/pull/13927))
|
|
18
|
+
- Updated dependencies:
|
|
19
|
+
- `react-router@7.9.2-pre.0`
|
|
20
|
+
- `@react-router/node@7.9.2-pre.0`
|
|
21
|
+
- `@react-router/serve@7.9.2-pre.0`
|
|
22
|
+
|
|
3
23
|
## 7.9.1
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
|
@@ -17,7 +37,6 @@
|
|
|
17
37
|
- Stabilize middleware and context APIs. ([#14215](https://github.com/remix-run/react-router/pull/14215))
|
|
18
38
|
|
|
19
39
|
We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use:
|
|
20
|
-
|
|
21
40
|
- [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider)
|
|
22
41
|
- [`createContext`](https://reactrouter.com/api/utils/createContext)
|
|
23
42
|
- `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option
|
|
@@ -760,7 +779,6 @@
|
|
|
760
779
|
```
|
|
761
780
|
|
|
762
781
|
This initial implementation targets type inference for:
|
|
763
|
-
|
|
764
782
|
- `Params` : Path parameters from your routing config in `routes.ts` including file-based routing
|
|
765
783
|
- `LoaderData` : Loader data from `loader` and/or `clientLoader` within your route module
|
|
766
784
|
- `ActionData` : Action data from `action` and/or `clientAction` within your route module
|
|
@@ -775,7 +793,6 @@
|
|
|
775
793
|
```
|
|
776
794
|
|
|
777
795
|
Check out our docs for more:
|
|
778
|
-
|
|
779
796
|
- [_Explanations > Type Safety_](https://reactrouter.com/dev/guides/explanation/type-safety)
|
|
780
797
|
- [_How-To > Setting up type safety_](https://reactrouter.com/dev/guides/how-to/setting-up-type-safety)
|
|
781
798
|
|
|
@@ -975,7 +992,6 @@
|
|
|
975
992
|
- Vite: Provide `Unstable_ServerBundlesFunction` and `Unstable_VitePluginConfig` types ([#8654](https://github.com/remix-run/remix/pull/8654))
|
|
976
993
|
|
|
977
994
|
- Vite: add `--sourcemapClient` and `--sourcemapServer` flags to `remix vite:build` ([#8613](https://github.com/remix-run/remix/pull/8613))
|
|
978
|
-
|
|
979
995
|
- `--sourcemapClient`
|
|
980
996
|
|
|
981
997
|
- `--sourcemapClient=inline`
|
|
@@ -1312,7 +1328,6 @@
|
|
|
1312
1328
|
- Add support for `clientLoader`/`clientAction`/`HydrateFallback` route exports ([RFC](https://github.com/remix-run/remix/discussions/7634)) ([#8173](https://github.com/remix-run/remix/pull/8173))
|
|
1313
1329
|
|
|
1314
1330
|
Remix now supports loaders/actions that run on the client (in addition to, or instead of the loader/action that runs on the server). While we still recommend server loaders/actions for the majority of your data needs in a Remix app - these provide some levers you can pull for more advanced use-cases such as:
|
|
1315
|
-
|
|
1316
1331
|
- Leveraging a data source local to the browser (i.e., `localStorage`)
|
|
1317
1332
|
- Managing a client-side cache of server data (like `IndexedDB`)
|
|
1318
1333
|
- Bypassing the Remix server in a BFF setup and hitting your API directly from the browser
|
|
@@ -1716,7 +1731,6 @@
|
|
|
1716
1731
|
- Output esbuild metafiles for bundle analysis ([#6772](https://github.com/remix-run/remix/pull/6772))
|
|
1717
1732
|
|
|
1718
1733
|
Written to server build directory (`build/` by default):
|
|
1719
|
-
|
|
1720
1734
|
- `metafile.css.json`
|
|
1721
1735
|
- `metafile.js.json` (browser JS)
|
|
1722
1736
|
- `metafile.server.json` (server JS)
|
|
@@ -1814,7 +1828,6 @@
|
|
|
1814
1828
|
- built-in tls support ([#6483](https://github.com/remix-run/remix/pull/6483))
|
|
1815
1829
|
|
|
1816
1830
|
New options:
|
|
1817
|
-
|
|
1818
1831
|
- `--tls-key` / `tlsKey`: TLS key
|
|
1819
1832
|
- `--tls-cert` / `tlsCert`: TLS Certificate
|
|
1820
1833
|
|
|
@@ -2085,7 +2098,6 @@
|
|
|
2085
2098
|
```
|
|
2086
2099
|
|
|
2087
2100
|
The dev server will:
|
|
2088
|
-
|
|
2089
2101
|
- force `NODE_ENV=development` and warn you if it was previously set to something else
|
|
2090
2102
|
- rebuild your app whenever your Remix app code changes
|
|
2091
2103
|
- restart your app server whenever rebuilds succeed
|
package/dist/cli/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* @react-router/dev v7.9.1
|
|
3
|
+
* @react-router/dev v7.9.2-pre.1
|
|
4
4
|
*
|
|
5
5
|
* Copyright (c) Remix Software Inc.
|
|
6
6
|
*
|
|
@@ -1331,15 +1331,11 @@ var init_has_rsc_plugin = __esm({
|
|
|
1331
1331
|
});
|
|
1332
1332
|
|
|
1333
1333
|
// vite/node-adapter.ts
|
|
1334
|
-
var
|
|
1334
|
+
var import_node_fetch_server;
|
|
1335
1335
|
var init_node_adapter = __esm({
|
|
1336
1336
|
"vite/node-adapter.ts"() {
|
|
1337
1337
|
"use strict";
|
|
1338
|
-
|
|
1339
|
-
import_node_tls = require("tls");
|
|
1340
|
-
import_node_stream = require("stream");
|
|
1341
|
-
import_set_cookie_parser = require("set-cookie-parser");
|
|
1342
|
-
import_node = require("@react-router/node");
|
|
1338
|
+
import_node_fetch_server = require("@remix-run/node-fetch-server");
|
|
1343
1339
|
init_invariant();
|
|
1344
1340
|
}
|
|
1345
1341
|
});
|
|
@@ -1752,7 +1748,7 @@ function resolveEnvironmentsOptions(environmentResolvers, resolverOptions) {
|
|
|
1752
1748
|
function isNonNullable(x) {
|
|
1753
1749
|
return x != null;
|
|
1754
1750
|
}
|
|
1755
|
-
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;
|
|
1751
|
+
var import_node_crypto, import_node_fs3, import_promises2, path7, url, babel2, import_node_fetch_server2, 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;
|
|
1756
1752
|
var init_plugin = __esm({
|
|
1757
1753
|
"vite/plugin.ts"() {
|
|
1758
1754
|
"use strict";
|
|
@@ -1762,6 +1758,7 @@ var init_plugin = __esm({
|
|
|
1762
1758
|
path7 = __toESM(require("path"));
|
|
1763
1759
|
url = __toESM(require("url"));
|
|
1764
1760
|
babel2 = __toESM(require("@babel/core"));
|
|
1761
|
+
import_node_fetch_server2 = require("@remix-run/node-fetch-server");
|
|
1765
1762
|
import_react_router2 = require("react-router");
|
|
1766
1763
|
import_es_module_lexer = require("es-module-lexer");
|
|
1767
1764
|
import_pick3 = __toESM(require("lodash/pick"));
|
|
@@ -10,6 +10,7 @@ import { unstable_matchRSCServerRequest as matchRSCServerRequest } from "react-r
|
|
|
10
10
|
|
|
11
11
|
import routes from "virtual:react-router/unstable_rsc/routes";
|
|
12
12
|
import basename from "virtual:react-router/unstable_rsc/basename";
|
|
13
|
+
import unstable_reactRouterServeConfig from "virtual:react-router/unstable_rsc/react-router-serve-config";
|
|
13
14
|
|
|
14
15
|
export async function fetchServer(request: Request) {
|
|
15
16
|
return await matchRSCServerRequest({
|
|
@@ -30,6 +31,8 @@ export async function fetchServer(request: Request) {
|
|
|
30
31
|
});
|
|
31
32
|
}
|
|
32
33
|
|
|
34
|
+
export { unstable_reactRouterServeConfig };
|
|
35
|
+
|
|
33
36
|
export default async function handler(request: Request) {
|
|
34
37
|
const ssr = await import.meta.viteRsc.loadModule<
|
|
35
38
|
typeof import("./entry.ssr")
|
|
@@ -18,16 +18,14 @@ export default async function handler(
|
|
|
18
18
|
fetchServer,
|
|
19
19
|
createFromReadableStream,
|
|
20
20
|
async renderHTML(getPayload) {
|
|
21
|
-
const payload =
|
|
22
|
-
const formState =
|
|
23
|
-
payload.type === "render" ? await payload.formState : undefined;
|
|
21
|
+
const payload = getPayload();
|
|
24
22
|
|
|
25
23
|
return ReactDomServer.renderToReadableStream(
|
|
26
24
|
<RSCStaticRouter getPayload={getPayload} />,
|
|
27
25
|
{
|
|
28
26
|
bootstrapScriptContent,
|
|
29
27
|
signal: request.signal,
|
|
30
|
-
formState,
|
|
28
|
+
formState: await payload.formState,
|
|
31
29
|
},
|
|
32
30
|
);
|
|
33
31
|
},
|
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.9.1
|
|
2
|
+
* @react-router/dev v7.9.2-pre.1
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -45,14 +45,11 @@ __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");
|
|
48
49
|
var import_react_router = require("react-router");
|
|
49
50
|
|
|
50
51
|
// vite/node-adapter.ts
|
|
51
|
-
var
|
|
52
|
-
var import_node_tls = require("tls");
|
|
53
|
-
var import_node_stream = require("stream");
|
|
54
|
-
var import_set_cookie_parser = require("set-cookie-parser");
|
|
55
|
-
var import_node = require("@react-router/node");
|
|
52
|
+
var import_node_fetch_server = require("@remix-run/node-fetch-server");
|
|
56
53
|
|
|
57
54
|
// invariant.ts
|
|
58
55
|
function invariant(value, message) {
|
|
@@ -65,76 +62,13 @@ function invariant(value, message) {
|
|
|
65
62
|
}
|
|
66
63
|
|
|
67
64
|
// vite/node-adapter.ts
|
|
68
|
-
function fromNodeHeaders(nodeReq) {
|
|
69
|
-
let nodeHeaders = nodeReq.headers;
|
|
70
|
-
if (nodeReq.httpVersionMajor >= 2) {
|
|
71
|
-
nodeHeaders = { ...nodeHeaders };
|
|
72
|
-
if (nodeHeaders[":authority"]) {
|
|
73
|
-
nodeHeaders.host = nodeHeaders[":authority"];
|
|
74
|
-
}
|
|
75
|
-
delete nodeHeaders[":authority"];
|
|
76
|
-
delete nodeHeaders[":method"];
|
|
77
|
-
delete nodeHeaders[":path"];
|
|
78
|
-
delete nodeHeaders[":scheme"];
|
|
79
|
-
}
|
|
80
|
-
let headers = new Headers();
|
|
81
|
-
for (let [key, values] of Object.entries(nodeHeaders)) {
|
|
82
|
-
if (values) {
|
|
83
|
-
if (Array.isArray(values)) {
|
|
84
|
-
for (let value of values) {
|
|
85
|
-
headers.append(key, value);
|
|
86
|
-
}
|
|
87
|
-
} else {
|
|
88
|
-
headers.set(key, values);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return headers;
|
|
93
|
-
}
|
|
94
65
|
function fromNodeRequest(nodeReq, nodeRes) {
|
|
95
|
-
let protocol = nodeReq.socket instanceof import_node_tls.TLSSocket && nodeReq.socket.encrypted ? "https" : "http";
|
|
96
|
-
let origin = nodeReq.headers.origin && "null" !== nodeReq.headers.origin ? nodeReq.headers.origin : `${protocol}://${nodeReq.headers.host}`;
|
|
97
66
|
invariant(
|
|
98
67
|
nodeReq.originalUrl,
|
|
99
68
|
"Expected `nodeReq.originalUrl` to be defined"
|
|
100
69
|
);
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
let init = {
|
|
104
|
-
method: nodeReq.method,
|
|
105
|
-
headers: fromNodeHeaders(nodeReq),
|
|
106
|
-
signal: controller.signal
|
|
107
|
-
};
|
|
108
|
-
nodeRes.on("finish", () => controller = null);
|
|
109
|
-
nodeRes.on("close", () => controller?.abort());
|
|
110
|
-
if (nodeReq.method !== "GET" && nodeReq.method !== "HEAD") {
|
|
111
|
-
init.body = (0, import_node.createReadableStreamFromReadable)(nodeReq);
|
|
112
|
-
init.duplex = "half";
|
|
113
|
-
}
|
|
114
|
-
return new Request(url.href, init);
|
|
115
|
-
}
|
|
116
|
-
async function toNodeRequest(res, nodeRes) {
|
|
117
|
-
nodeRes.statusCode = res.status;
|
|
118
|
-
if (!nodeRes.req || nodeRes.req.httpVersionMajor < 2) {
|
|
119
|
-
nodeRes.statusMessage = res.statusText;
|
|
120
|
-
}
|
|
121
|
-
let cookiesStrings = [];
|
|
122
|
-
for (let [name, value] of res.headers) {
|
|
123
|
-
if (name === "set-cookie") {
|
|
124
|
-
cookiesStrings.push(...(0, import_set_cookie_parser.splitCookiesString)(value));
|
|
125
|
-
} else nodeRes.setHeader(name, value);
|
|
126
|
-
}
|
|
127
|
-
if (cookiesStrings.length) {
|
|
128
|
-
nodeRes.setHeader("set-cookie", cookiesStrings);
|
|
129
|
-
}
|
|
130
|
-
if (res.body) {
|
|
131
|
-
let responseBody = res.body;
|
|
132
|
-
let readable = import_node_stream.Readable.from(responseBody);
|
|
133
|
-
readable.pipe(nodeRes);
|
|
134
|
-
await (0, import_node_events.once)(readable, "end");
|
|
135
|
-
} else {
|
|
136
|
-
nodeRes.end();
|
|
137
|
-
}
|
|
70
|
+
nodeReq.url = nodeReq.originalUrl;
|
|
71
|
+
return (0, import_node_fetch_server.createRequest)(nodeReq, nodeRes);
|
|
138
72
|
}
|
|
139
73
|
|
|
140
74
|
// vite/vite.ts
|
|
@@ -884,7 +818,7 @@ var cloudflareDevProxyVitePlugin = (options = {}) => {
|
|
|
884
818
|
context ??= await getContext();
|
|
885
819
|
let loadContext = getLoadContext ? await getLoadContext({ request: req, context }) : context;
|
|
886
820
|
let res = await handler(req, loadContext);
|
|
887
|
-
await
|
|
821
|
+
await (0, import_node_fetch_server2.sendResponse)(nodeRes, res);
|
|
888
822
|
} catch (error) {
|
|
889
823
|
next(error);
|
|
890
824
|
}
|
package/dist/vite.d.ts
CHANGED
|
@@ -8,4 +8,6 @@ type ReactRouterVitePlugin = () => Vite.Plugin[];
|
|
|
8
8
|
*/
|
|
9
9
|
declare const reactRouterVitePlugin: ReactRouterVitePlugin;
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
declare function reactRouterRSCVitePlugin(): Vite.PluginOption[];
|
|
12
|
+
|
|
13
|
+
export { reactRouterVitePlugin as reactRouter, reactRouterRSCVitePlugin as unstable_reactRouterRSC };
|