@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 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 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.1
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.1
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.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 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 };