@react-router/dev 0.0.0-experimental-bfc808d6c → 0.0.0-experimental-3cde40396

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.10.1
4
+
5
+ ### Patch Changes
6
+
7
+ - Import ESM package `pkg-types` with a dynamic `import()` to fix issues on Node 20.18 ([#14624](https://github.com/remix-run/react-router/pull/14624))
8
+ - Update `valibot` dependency to `^1.2.0` to address [GHSA-vqpr-j7v3-hqw9](https://github.com/advisories/GHSA-vqpr-j7v3-hqw9) ([#14608](https://github.com/remix-run/react-router/pull/14608))
9
+ - Updated dependencies:
10
+ - `react-router@7.10.1`
11
+ - `@react-router/node@7.10.1`
12
+ - `@react-router/serve@7.10.1`
13
+
3
14
  ## 7.10.0
4
15
 
5
16
  ### Minor Changes
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-bfc808d6c
3
+ * @react-router/dev v0.0.0-experimental-3cde40396
4
4
  *
5
5
  * Copyright (c) Remix Software Inc.
6
6
  *
@@ -6,22 +6,36 @@ import {
6
6
  loadServerAction,
7
7
  renderToReadableStream,
8
8
  } from "@vitejs/plugin-rsc/rsc";
9
- import { unstable_matchRSCServerRequest as matchRSCServerRequest } from "react-router";
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 async function fetchServer(request: Request) {
16
- return await matchRSCServerRequest({
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
- basename,
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 { unstable_reactRouterServeConfig };
48
+ export default {
49
+ async fetch(request: Request, requestContext?: RouterContextProvider) {
50
+ if (requestContext && !(requestContext instanceof RouterContextProvider)) {
51
+ requestContext = undefined;
52
+ }
35
53
 
36
- export default async function handler(request: Request) {
37
- const ssr = await import.meta.viteRsc.loadModule<
38
- typeof import("./entry.ssr")
39
- >("ssr", "index");
40
- return ssr.default(request, await fetchServer(request));
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 * as ReactDomServer from "react-dom/server.edge";
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 default async function handler(
9
+ export async function generateHTML(
10
10
  request: Request,
11
11
  serverResponse: Response,
12
- ) {
13
- const bootstrapScriptContent =
14
- await import.meta.viteRsc.loadBootstrapScriptContent("index");
15
-
16
- return routeRSCServerRequest({
12
+ ): Promise<Response> {
13
+ return await routeRSCServerRequest({
14
+ // The incoming request.
17
15
  request,
16
+ // The response from the RSC server.
18
17
  serverResponse,
18
+ // Provide the React Server touchpoints.
19
19
  createFromReadableStream,
20
- async renderHTML(getPayload) {
21
- const payload = getPayload();
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 ReactDomServer.renderToReadableStream(
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.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-bfc808d6c
2
+ * @react-router/dev v0.0.0-experimental-3cde40396
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-bfc808d6c
2
+ * @react-router/dev v0.0.0-experimental-3cde40396
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-bfc808d6c
2
+ * @react-router/dev v0.0.0-experimental-3cde40396
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/vite.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-bfc808d6c
2
+ * @react-router/dev v0.0.0-experimental-3cde40396
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -639,11 +639,11 @@ async function createConfigLoader({
639
639
  fsWatcher = import_chokidar.default.watch([root, appDirectory], {
640
640
  ignoreInitial: true,
641
641
  ignored: (path9) => {
642
- let dirname5 = import_pathe3.default.dirname(path9);
643
- return !dirname5.startsWith(appDirectory) && // Ensure we're only watching files outside of the app directory
642
+ let dirname4 = import_pathe3.default.dirname(path9);
643
+ return !dirname4.startsWith(appDirectory) && // Ensure we're only watching files outside of the app directory
644
644
  // that are at the root level, not nested in subdirectories
645
645
  path9 !== root && // Watch the root directory itself
646
- dirname5 !== root;
646
+ dirname4 !== root;
647
647
  }
648
648
  });
649
649
  fsWatcher.on("all", async (...args) => {
@@ -775,6 +775,30 @@ async function resolveEntryFiles({
775
775
  let entryServerFilePath = userEntryServerFile ? import_pathe3.default.resolve(reactRouterConfig.appDirectory, userEntryServerFile) : import_pathe3.default.resolve(defaultsDirectory, entryServerFile);
776
776
  return { entryClientFilePath, entryServerFilePath };
777
777
  }
778
+ async function resolveRSCEntryFiles({
779
+ reactRouterConfig
780
+ }) {
781
+ let { appDirectory } = reactRouterConfig;
782
+ let defaultsDirectory = import_pathe3.default.resolve(
783
+ import_pathe3.default.dirname(require.resolve("@react-router/dev/package.json")),
784
+ "dist",
785
+ "config",
786
+ "default-rsc-entries"
787
+ );
788
+ let userEntryClientFile = findEntry(appDirectory, "entry.client", {
789
+ absolute: true
790
+ });
791
+ let userEntryRSCFile = findEntry(appDirectory, "entry.rsc", {
792
+ absolute: true
793
+ });
794
+ let userEntrySSRFile = findEntry(appDirectory, "entry.ssr", {
795
+ absolute: true
796
+ });
797
+ let client = userEntryClientFile ?? import_pathe3.default.join(defaultsDirectory, "entry.client.tsx");
798
+ let rsc = userEntryRSCFile ?? import_pathe3.default.join(defaultsDirectory, "entry.rsc.tsx");
799
+ let ssr = userEntrySSRFile ?? import_pathe3.default.join(defaultsDirectory, "entry.ssr.tsx");
800
+ return { client, rsc, ssr };
801
+ }
778
802
  function omitRoutes(config) {
779
803
  return {
780
804
  ...config,
@@ -5014,7 +5038,6 @@ var import_es_module_lexer3 = require("es-module-lexer");
5014
5038
  var Path5 = __toESM(require("pathe"));
5015
5039
  var babel2 = __toESM(require("@babel/core"));
5016
5040
  var import_picocolors5 = __toESM(require("picocolors"));
5017
- var import_fs = require("fs");
5018
5041
  var import_promises3 = require("fs/promises");
5019
5042
  var import_pathe6 = __toESM(require("pathe"));
5020
5043
 
@@ -5355,7 +5378,7 @@ function reactRouterRSCVitePlugin() {
5355
5378
  let resolvedViteConfig;
5356
5379
  let routeIdByFile;
5357
5380
  let logger;
5358
- const defaultEntries2 = getDefaultEntries();
5381
+ let entries;
5359
5382
  let config;
5360
5383
  let rootRouteFile;
5361
5384
  function updateConfig(newConfig) {
@@ -5418,6 +5441,9 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5418
5441
  logger = vite2.createLogger(viteUserConfig.logLevel, {
5419
5442
  prefix: "[react-router]"
5420
5443
  });
5444
+ entries = await resolveRSCEntryFiles({
5445
+ reactRouterConfig: config
5446
+ });
5421
5447
  return {
5422
5448
  resolve: {
5423
5449
  dedupe: [
@@ -5433,7 +5459,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5433
5459
  },
5434
5460
  optimizeDeps: {
5435
5461
  entries: getOptimizeDepsEntries({
5436
- entryClientFilePath: defaultEntries2.client,
5462
+ entryClientFilePath: entries.client,
5437
5463
  reactRouterConfig: config
5438
5464
  }),
5439
5465
  esbuildOptions: {
@@ -5460,7 +5486,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5460
5486
  build: {
5461
5487
  rollupOptions: {
5462
5488
  input: {
5463
- index: defaultEntries2.client
5489
+ index: entries.client
5464
5490
  }
5465
5491
  },
5466
5492
  outDir: (0, import_pathe6.join)(config.buildDirectory, "client")
@@ -5480,7 +5506,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5480
5506
  // it as `virtual:react-router/unstable_rsc/rsc-entry`
5481
5507
  // without needing to know the actual file path, which is
5482
5508
  // important when using the default entries.
5483
- index: defaultEntries2.rsc
5509
+ index: entries.rsc
5484
5510
  },
5485
5511
  output: {
5486
5512
  entryFileNames: config.serverBuildFile,
@@ -5488,13 +5514,18 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5488
5514
  }
5489
5515
  },
5490
5516
  outDir: (0, import_pathe6.join)(config.buildDirectory, "server")
5517
+ },
5518
+ resolve: {
5519
+ noExternal: [
5520
+ "@react-router/dev/config/default-rsc-entries/entry.ssr"
5521
+ ]
5491
5522
  }
5492
5523
  },
5493
5524
  ssr: {
5494
5525
  build: {
5495
5526
  rollupOptions: {
5496
5527
  input: {
5497
- index: defaultEntries2.ssr
5528
+ index: entries.ssr
5498
5529
  },
5499
5530
  output: {
5500
5531
  // Note: We don't set `entryFileNames` here because it's
@@ -5505,6 +5536,11 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5505
5536
  }
5506
5537
  },
5507
5538
  outDir: (0, import_pathe6.join)(config.buildDirectory, "server/__ssr_build")
5539
+ },
5540
+ resolve: {
5541
+ noExternal: [
5542
+ "@react-router/dev/config/default-rsc-entries/entry.rsc"
5543
+ ]
5508
5544
  }
5509
5545
  }
5510
5546
  },
@@ -5611,7 +5647,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5611
5647
  {
5612
5648
  name: "react-router/rsc/virtual-rsc-entry",
5613
5649
  resolveId(id) {
5614
- if (id === virtual2.rscEntry.id) return defaultEntries2.rsc;
5650
+ if (id === virtual2.rscEntry.id) return entries.rsc;
5615
5651
  }
5616
5652
  },
5617
5653
  {
@@ -5689,7 +5725,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5689
5725
  const reactRefreshDir = import_pathe6.default.dirname(
5690
5726
  require.resolve("react-refresh/package.json")
5691
5727
  );
5692
- const reactRefreshRuntimePath = import_pathe6.default.join(
5728
+ const reactRefreshRuntimePath = (0, import_pathe6.join)(
5693
5729
  reactRefreshDir,
5694
5730
  "cjs/react-refresh-runtime.development.js"
5695
5731
  );
@@ -5832,33 +5868,6 @@ function invalidateVirtualModules2(viteDevServer) {
5832
5868
  function getRootDirectory(viteUserConfig) {
5833
5869
  return viteUserConfig.root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd();
5834
5870
  }
5835
- function getDevPackageRoot() {
5836
- const currentDir = (0, import_pathe6.dirname)(__dirname);
5837
- let dir = currentDir;
5838
- while (dir !== (0, import_pathe6.dirname)(dir)) {
5839
- try {
5840
- const packageJsonPath = (0, import_pathe6.join)(dir, "package.json");
5841
- (0, import_fs.readFileSync)(packageJsonPath, "utf-8");
5842
- return dir;
5843
- } catch {
5844
- dir = (0, import_pathe6.dirname)(dir);
5845
- }
5846
- }
5847
- throw new Error("Could not find package.json");
5848
- }
5849
- function getDefaultEntries() {
5850
- const defaultEntriesDir2 = (0, import_pathe6.join)(
5851
- getDevPackageRoot(),
5852
- "dist",
5853
- "config",
5854
- "default-rsc-entries"
5855
- );
5856
- return {
5857
- rsc: (0, import_pathe6.join)(defaultEntriesDir2, "entry.rsc.tsx"),
5858
- ssr: (0, import_pathe6.join)(defaultEntriesDir2, "entry.ssr.tsx"),
5859
- client: (0, import_pathe6.join)(defaultEntriesDir2, "entry.client.tsx")
5860
- };
5861
- }
5862
5871
  function getModulesWithImporters(modules) {
5863
5872
  const visited = /* @__PURE__ */ new Set();
5864
5873
  const result = /* @__PURE__ */ new Set();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-router/dev",
3
- "version": "0.0.0-experimental-bfc808d6c",
3
+ "version": "0.0.0-experimental-3cde40396",
4
4
  "description": "Dev tools and CLI for React Router",
5
5
  "homepage": "https://reactrouter.com",
6
6
  "bugs": {
@@ -21,6 +21,8 @@
21
21
  "types": "./dist/routes.d.ts",
22
22
  "default": "./dist/routes.js"
23
23
  },
24
+ "./rsc-types": "./rsc-types.d.ts",
25
+ "./config/default-rsc-entries/*": "./config/default-rsc-entries/*.tsx",
24
26
  "./vite": {
25
27
  "types": "./dist/vite.d.ts",
26
28
  "default": "./dist/vite.js"
@@ -87,7 +89,7 @@
87
89
  "tinyglobby": "^0.2.14",
88
90
  "valibot": "^1.2.0",
89
91
  "vite-node": "^3.2.2",
90
- "@react-router/node": "0.0.0-experimental-bfc808d6c"
92
+ "@react-router/node": "0.0.0-experimental-3cde40396"
91
93
  },
92
94
  "devDependencies": {
93
95
  "@types/babel__core": "^7.20.5",
@@ -95,6 +97,7 @@
95
97
  "@types/babel__traverse": "^7.20.7",
96
98
  "@types/dedent": "^0.7.0",
97
99
  "@types/express": "^4.17.9",
100
+ "@types/jest": "^29.5.4",
98
101
  "@types/jsesc": "^3.0.1",
99
102
  "@types/lodash": "^4.14.182",
100
103
  "@types/node": "^20.0.0",
@@ -110,16 +113,16 @@
110
113
  "vite": "^6.3.0",
111
114
  "wireit": "0.14.9",
112
115
  "wrangler": "^4.23.0",
113
- "@react-router/serve": "0.0.0-experimental-bfc808d6c",
114
- "react-router": "^0.0.0-experimental-bfc808d6c"
116
+ "@react-router/serve": "0.0.0-experimental-3cde40396",
117
+ "react-router": "^0.0.0-experimental-3cde40396"
115
118
  },
116
119
  "peerDependencies": {
117
120
  "@vitejs/plugin-rsc": "*",
118
121
  "typescript": "^5.1.0",
119
122
  "vite": "^5.1.0 || ^6.0.0 || ^7.0.0",
120
123
  "wrangler": "^3.28.2 || ^4.0.0",
121
- "@react-router/serve": "^0.0.0-experimental-bfc808d6c",
122
- "react-router": "^0.0.0-experimental-bfc808d6c"
124
+ "@react-router/serve": "^0.0.0-experimental-3cde40396",
125
+ "react-router": "^0.0.0-experimental-3cde40396"
123
126
  },
124
127
  "peerDependenciesMeta": {
125
128
  "@vitejs/plugin-rsc": {
@@ -142,6 +145,7 @@
142
145
  "dist/",
143
146
  "module-sync-enabled/",
144
147
  "bin.js",
148
+ "rsc-types.d.ts",
145
149
  "CHANGELOG.md",
146
150
  "LICENSE.md",
147
151
  "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" {}