@react-router/dev 0.0.0-experimental-4cf5bd08c → 0.0.0-experimental-fbc98d36c

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/dist/cli/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * @react-router/dev v0.0.0-experimental-4cf5bd08c
3
+ * @react-router/dev v0.0.0-experimental-fbc98d36c
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 v0.0.0-experimental-4cf5bd08c
2
+ * @react-router/dev v0.0.0-experimental-fbc98d36c
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 v0.0.0-experimental-4cf5bd08c
2
+ * @react-router/dev v0.0.0-experimental-fbc98d36c
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-4cf5bd08c
2
+ * @react-router/dev v0.0.0-experimental-fbc98d36c
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.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-4cf5bd08c
2
+ * @react-router/dev v0.0.0-experimental-fbc98d36c
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -52,6 +52,7 @@ 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");
55
56
  var import_react_router2 = require("react-router");
56
57
  var import_es_module_lexer = require("es-module-lexer");
57
58
  var import_pick3 = __toESM(require("lodash/pick"));
@@ -1255,81 +1256,14 @@ async function watch(rootDirectory, { mode, logger, rsc }) {
1255
1256
  }
1256
1257
 
1257
1258
  // vite/node-adapter.ts
1258
- var import_node_events = require("events");
1259
- var import_node_tls = require("tls");
1260
- var import_node_stream = require("stream");
1261
- var import_set_cookie_parser = require("set-cookie-parser");
1262
- var import_node = require("@react-router/node");
1263
- function fromNodeHeaders(nodeReq) {
1264
- let nodeHeaders = nodeReq.headers;
1265
- if (nodeReq.httpVersionMajor >= 2) {
1266
- nodeHeaders = { ...nodeHeaders };
1267
- if (nodeHeaders[":authority"]) {
1268
- nodeHeaders.host = nodeHeaders[":authority"];
1269
- }
1270
- delete nodeHeaders[":authority"];
1271
- delete nodeHeaders[":method"];
1272
- delete nodeHeaders[":path"];
1273
- delete nodeHeaders[":scheme"];
1274
- }
1275
- let headers = new Headers();
1276
- for (let [key, values] of Object.entries(nodeHeaders)) {
1277
- if (values) {
1278
- if (Array.isArray(values)) {
1279
- for (let value of values) {
1280
- headers.append(key, value);
1281
- }
1282
- } else {
1283
- headers.set(key, values);
1284
- }
1285
- }
1286
- }
1287
- return headers;
1288
- }
1259
+ var import_node_fetch_server = require("@remix-run/node-fetch-server");
1289
1260
  function fromNodeRequest(nodeReq, nodeRes) {
1290
- let protocol = nodeReq.socket instanceof import_node_tls.TLSSocket && nodeReq.socket.encrypted ? "https" : "http";
1291
- let origin = nodeReq.headers.origin && "null" !== nodeReq.headers.origin ? nodeReq.headers.origin : `${protocol}://${nodeReq.headers.host}`;
1292
1261
  invariant(
1293
1262
  nodeReq.originalUrl,
1294
1263
  "Expected `nodeReq.originalUrl` to be defined"
1295
1264
  );
1296
- let url2 = new URL(nodeReq.originalUrl, origin);
1297
- let controller = new AbortController();
1298
- let init = {
1299
- method: nodeReq.method,
1300
- headers: fromNodeHeaders(nodeReq),
1301
- signal: controller.signal
1302
- };
1303
- nodeRes.on("finish", () => controller = null);
1304
- nodeRes.on("close", () => controller?.abort());
1305
- if (nodeReq.method !== "GET" && nodeReq.method !== "HEAD") {
1306
- init.body = (0, import_node.createReadableStreamFromReadable)(nodeReq);
1307
- init.duplex = "half";
1308
- }
1309
- return new Request(url2.href, init);
1310
- }
1311
- async function toNodeRequest(res, nodeRes) {
1312
- nodeRes.statusCode = res.status;
1313
- if (!nodeRes.req || nodeRes.req.httpVersionMajor < 2) {
1314
- nodeRes.statusMessage = res.statusText;
1315
- }
1316
- let cookiesStrings = [];
1317
- for (let [name, value] of res.headers) {
1318
- if (name === "set-cookie") {
1319
- cookiesStrings.push(...(0, import_set_cookie_parser.splitCookiesString)(value));
1320
- } else nodeRes.setHeader(name, value);
1321
- }
1322
- if (cookiesStrings.length) {
1323
- nodeRes.setHeader("set-cookie", cookiesStrings);
1324
- }
1325
- if (res.body) {
1326
- let responseBody = res.body;
1327
- let readable = import_node_stream.Readable.from(responseBody);
1328
- readable.pipe(nodeRes);
1329
- await (0, import_node_events.once)(readable, "end");
1330
- } else {
1331
- nodeRes.end();
1332
- }
1265
+ nodeReq.url = nodeReq.originalUrl;
1266
+ return (0, import_node_fetch_server.createRequest)(nodeReq, nodeRes);
1333
1267
  }
1334
1268
 
1335
1269
  // vite/styles.ts
@@ -3481,7 +3415,7 @@ var reactRouterVitePlugin = () => {
3481
3415
  req2,
3482
3416
  await reactRouterDevLoadContext(req2)
3483
3417
  );
3484
- await toNodeRequest(res2, nodeRes);
3418
+ await (0, import_node_fetch_server2.sendResponse)(nodeRes, res2);
3485
3419
  };
3486
3420
  await nodeHandler(req, res);
3487
3421
  } catch (error) {
@@ -5289,6 +5223,7 @@ function reactRouterRSCVitePlugin() {
5289
5223
  let configLoader;
5290
5224
  let typegenWatcherPromise;
5291
5225
  let viteCommand;
5226
+ let resolvedViteConfig;
5292
5227
  let routeIdByFile;
5293
5228
  let logger;
5294
5229
  const defaultEntries2 = getDefaultEntries();
@@ -5461,6 +5396,9 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5461
5396
  }
5462
5397
  };
5463
5398
  },
5399
+ configResolved(viteConfig) {
5400
+ resolvedViteConfig = viteConfig;
5401
+ },
5464
5402
  async configureServer(viteDevServer) {
5465
5403
  configLoader.onChange(
5466
5404
  async ({
@@ -5494,6 +5432,24 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5494
5432
  await configLoader.close();
5495
5433
  }
5496
5434
  },
5435
+ /* @__PURE__ */ (() => {
5436
+ let logged = false;
5437
+ function logExperimentalNotice() {
5438
+ if (logged) return;
5439
+ logged = true;
5440
+ logger.info(
5441
+ import_picocolors5.default.yellow(
5442
+ `${viteCommand === "serve" ? " " : ""}\u{1F9EA} Using React Router's RSC Framework Mode (experimental)`
5443
+ )
5444
+ );
5445
+ }
5446
+ return {
5447
+ name: "react-router/rsc/log-experimental-notice",
5448
+ sharedDuringBuild: true,
5449
+ buildStart: logExperimentalNotice,
5450
+ configureServer: logExperimentalNotice
5451
+ };
5452
+ })(),
5497
5453
  {
5498
5454
  name: "react-router/rsc/typegen",
5499
5455
  async config(viteUserConfig, { command, mode }) {
@@ -5694,6 +5650,28 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5694
5650
  return modules;
5695
5651
  }
5696
5652
  },
5653
+ {
5654
+ name: "react-router/rsc/virtual-react-router-serve-config",
5655
+ resolveId(id) {
5656
+ if (id === virtual2.reactRouterServeConfig.id) {
5657
+ return virtual2.reactRouterServeConfig.resolvedId;
5658
+ }
5659
+ },
5660
+ load(id) {
5661
+ if (id === virtual2.reactRouterServeConfig.resolvedId) {
5662
+ const rscOutDir = resolvedViteConfig.environments.rsc?.build?.outDir;
5663
+ invariant(rscOutDir, "RSC build directory config not found");
5664
+ const clientOutDir = resolvedViteConfig.environments.client?.build?.outDir;
5665
+ invariant(clientOutDir, "Client build directory config not found");
5666
+ const assetsBuildDirectory = Path5.relative(rscOutDir, clientOutDir);
5667
+ const publicPath = resolvedViteConfig.base;
5668
+ return `export default ${JSON.stringify({
5669
+ assetsBuildDirectory,
5670
+ publicPath
5671
+ })};`;
5672
+ }
5673
+ }
5674
+ },
5697
5675
  validatePluginOrder(),
5698
5676
  warnOnClientSourceMaps()
5699
5677
  ];
@@ -5703,7 +5681,8 @@ var virtual2 = {
5703
5681
  injectHmrRuntime: create("unstable_rsc/inject-hmr-runtime"),
5704
5682
  hmrRuntime: create("unstable_rsc/runtime"),
5705
5683
  basename: create("unstable_rsc/basename"),
5706
- rscEntry: create("unstable_rsc/rsc-entry")
5684
+ rscEntry: create("unstable_rsc/rsc-entry"),
5685
+ reactRouterServeConfig: create("unstable_rsc/react-router-serve-config")
5707
5686
  };
5708
5687
  function invalidateVirtualModules2(viteDevServer) {
5709
5688
  for (const vmod of Object.values(virtual2)) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-router/dev",
3
- "version": "0.0.0-experimental-4cf5bd08c",
3
+ "version": "0.0.0-experimental-fbc98d36c",
4
4
  "description": "Dev tools and CLI for React Router",
5
5
  "homepage": "https://reactrouter.com",
6
6
  "bugs": {
@@ -60,7 +60,6 @@
60
60
  }
61
61
  },
62
62
  "dependencies": {
63
- "isbot": "^5.1.11",
64
63
  "@babel/core": "^7.27.7",
65
64
  "@babel/generator": "^7.27.5",
66
65
  "@babel/parser": "^7.27.7",
@@ -69,12 +68,14 @@
69
68
  "@babel/traverse": "^7.27.7",
70
69
  "@babel/types": "^7.27.7",
71
70
  "@npmcli/package-json": "^4.0.1",
71
+ "@remix-run/node-fetch-server": "^0.9.0",
72
72
  "arg": "^5.0.1",
73
73
  "babel-dead-code-elimination": "^1.0.6",
74
74
  "chokidar": "^4.0.0",
75
75
  "dedent": "^1.5.3",
76
76
  "es-module-lexer": "^1.3.1",
77
77
  "exit-hook": "2.2.1",
78
+ "isbot": "^5.1.11",
78
79
  "jsesc": "3.0.2",
79
80
  "lodash": "^4.17.21",
80
81
  "pathe": "^1.1.2",
@@ -82,11 +83,10 @@
82
83
  "prettier": "^3.6.2",
83
84
  "react-refresh": "^0.14.0",
84
85
  "semver": "^7.3.7",
85
- "set-cookie-parser": "^2.6.0",
86
86
  "tinyglobby": "^0.2.14",
87
87
  "valibot": "^0.41.0",
88
88
  "vite-node": "^3.2.2",
89
- "@react-router/node": "0.0.0-experimental-4cf5bd08c"
89
+ "@react-router/node": "0.0.0-experimental-fbc98d36c"
90
90
  },
91
91
  "devDependencies": {
92
92
  "@types/babel__core": "^7.20.5",
@@ -98,9 +98,8 @@
98
98
  "@types/lodash": "^4.14.182",
99
99
  "@types/node": "^20.0.0",
100
100
  "@types/npmcli__package-json": "^4.0.0",
101
- "@types/set-cookie-parser": "^2.4.1",
102
101
  "@types/semver": "^7.7.0",
103
- "@vitejs/plugin-rsc": "0.4.26",
102
+ "@vitejs/plugin-rsc": "0.4.30",
104
103
  "esbuild-register": "^3.6.0",
105
104
  "execa": "5.1.1",
106
105
  "express": "^4.19.2",
@@ -110,16 +109,16 @@
110
109
  "vite": "^6.1.0",
111
110
  "wireit": "0.14.9",
112
111
  "wrangler": "^4.23.0",
113
- "react-router": "^0.0.0-experimental-4cf5bd08c",
114
- "@react-router/serve": "0.0.0-experimental-4cf5bd08c"
112
+ "@react-router/serve": "0.0.0-experimental-fbc98d36c",
113
+ "react-router": "^0.0.0-experimental-fbc98d36c"
115
114
  },
116
115
  "peerDependencies": {
117
116
  "@vitejs/plugin-rsc": "*",
118
117
  "typescript": "^5.1.0",
119
118
  "vite": "^5.1.0 || ^6.0.0 || ^7.0.0",
120
119
  "wrangler": "^3.28.2 || ^4.0.0",
121
- "@react-router/serve": "^0.0.0-experimental-4cf5bd08c",
122
- "react-router": "^0.0.0-experimental-4cf5bd08c"
120
+ "@react-router/serve": "^0.0.0-experimental-fbc98d36c",
121
+ "react-router": "^0.0.0-experimental-fbc98d36c"
123
122
  },
124
123
  "peerDependenciesMeta": {
125
124
  "@vitejs/plugin-rsc": {