@react-router/dev 7.9.1 → 7.9.2-pre.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 CHANGED
@@ -1,5 +1,16 @@
1
1
  # `@react-router/dev`
2
2
 
3
+ ## 7.9.2-pre.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Add unstable support for RSC Framework Mode ([#14336](https://github.com/remix-run/react-router/pull/14336))
8
+ - Switch internal vite plugin Response logic to use `@remix-run/node-fetch-server` ([#13927](https://github.com/remix-run/react-router/pull/13927))
9
+ - Updated dependencies:
10
+ - `react-router@7.9.2-pre.0`
11
+ - `@react-router/node@7.9.2-pre.0`
12
+ - `@react-router/serve@7.9.2-pre.0`
13
+
3
14
  ## 7.9.1
4
15
 
5
16
  ### Patch Changes
@@ -17,7 +28,6 @@
17
28
  - Stabilize middleware and context APIs. ([#14215](https://github.com/remix-run/react-router/pull/14215))
18
29
 
19
30
  We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use:
20
-
21
31
  - [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider)
22
32
  - [`createContext`](https://reactrouter.com/api/utils/createContext)
23
33
  - `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option
@@ -760,7 +770,6 @@
760
770
  ```
761
771
 
762
772
  This initial implementation targets type inference for:
763
-
764
773
  - `Params` : Path parameters from your routing config in `routes.ts` including file-based routing
765
774
  - `LoaderData` : Loader data from `loader` and/or `clientLoader` within your route module
766
775
  - `ActionData` : Action data from `action` and/or `clientAction` within your route module
@@ -775,7 +784,6 @@
775
784
  ```
776
785
 
777
786
  Check out our docs for more:
778
-
779
787
  - [_Explanations > Type Safety_](https://reactrouter.com/dev/guides/explanation/type-safety)
780
788
  - [_How-To > Setting up type safety_](https://reactrouter.com/dev/guides/how-to/setting-up-type-safety)
781
789
 
@@ -975,7 +983,6 @@
975
983
  - Vite: Provide `Unstable_ServerBundlesFunction` and `Unstable_VitePluginConfig` types ([#8654](https://github.com/remix-run/remix/pull/8654))
976
984
 
977
985
  - Vite: add `--sourcemapClient` and `--sourcemapServer` flags to `remix vite:build` ([#8613](https://github.com/remix-run/remix/pull/8613))
978
-
979
986
  - `--sourcemapClient`
980
987
 
981
988
  - `--sourcemapClient=inline`
@@ -1312,7 +1319,6 @@
1312
1319
  - 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
1320
 
1314
1321
  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
1322
  - Leveraging a data source local to the browser (i.e., `localStorage`)
1317
1323
  - Managing a client-side cache of server data (like `IndexedDB`)
1318
1324
  - Bypassing the Remix server in a BFF setup and hitting your API directly from the browser
@@ -1716,7 +1722,6 @@
1716
1722
  - Output esbuild metafiles for bundle analysis ([#6772](https://github.com/remix-run/remix/pull/6772))
1717
1723
 
1718
1724
  Written to server build directory (`build/` by default):
1719
-
1720
1725
  - `metafile.css.json`
1721
1726
  - `metafile.js.json` (browser JS)
1722
1727
  - `metafile.server.json` (server JS)
@@ -1814,7 +1819,6 @@
1814
1819
  - built-in tls support ([#6483](https://github.com/remix-run/remix/pull/6483))
1815
1820
 
1816
1821
  New options:
1817
-
1818
1822
  - `--tls-key` / `tlsKey`: TLS key
1819
1823
  - `--tls-cert` / `tlsCert`: TLS Certificate
1820
1824
 
@@ -2085,7 +2089,6 @@
2085
2089
  ```
2086
2090
 
2087
2091
  The dev server will:
2088
-
2089
2092
  - force `NODE_ENV=development` and warn you if it was previously set to something else
2090
2093
  - rebuild your app whenever your Remix app code changes
2091
2094
  - 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.0
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 import_node_events, import_node_tls, import_node_stream, import_set_cookie_parser, import_node;
1334
+ var import_node_fetch_server;
1335
1335
  var init_node_adapter = __esm({
1336
1336
  "vite/node-adapter.ts"() {
1337
1337
  "use strict";
1338
- import_node_events = require("events");
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 = await getPayload();
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
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v7.9.1
2
+ * @react-router/dev v7.9.2-pre.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/routes.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v7.9.1
2
+ * @react-router/dev v7.9.2-pre.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v7.9.1
2
+ * @react-router/dev v7.9.2-pre.0
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 import_node_events = require("events");
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
- let url = new URL(nodeReq.originalUrl, origin);
102
- let controller = new AbortController();
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 toNodeRequest(res, nodeRes);
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
- export { reactRouterVitePlugin as reactRouter };
11
+ declare function reactRouterRSCVitePlugin(): Vite.PluginOption[];
12
+
13
+ export { reactRouterVitePlugin as reactRouter, reactRouterRSCVitePlugin as unstable_reactRouterRSC };