@react-router/dev 0.0.0-experimental-653010f49 → 0.0.0-experimental-3fe27584d

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,23 @@
1
1
  # `@react-router/dev`
2
2
 
3
+ ## 7.11.0
4
+
5
+ ### Minor Changes
6
+
7
+ - feat: add `vite preview` support ([#14507](https://github.com/remix-run/react-router/pull/14507))
8
+
9
+ ### Patch Changes
10
+
11
+ - rsc framework mode manual chunking for react and react-router deps ([#14655](https://github.com/remix-run/react-router/pull/14655))
12
+ - add support for throwing redirect Response's at RSC render time ([#14596](https://github.com/remix-run/react-router/pull/14596))
13
+ - support custom entrypoints for RSC framework mode ([#14643](https://github.com/remix-run/react-router/pull/14643))
14
+ - `routeRSCServerRequest` replace `fetchServer` with `serverResponse` ([#14597](https://github.com/remix-run/react-router/pull/14597))
15
+ - rsc framewlrk mode - optimize react-server-dom-webpack if in project package.json ([#14656](https://github.com/remix-run/react-router/pull/14656))
16
+ - Updated dependencies:
17
+ - `react-router@7.11.0`
18
+ - `@react-router/serve@7.11.0`
19
+ - `@react-router/node@7.11.0`
20
+
3
21
  ## 7.10.1
4
22
 
5
23
  ### Patch 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-653010f49
3
+ * @react-router/dev v0.0.0-experimental-3fe27584d
4
4
  *
5
5
  * Copyright (c) Remix Software Inc.
6
6
  *
@@ -506,6 +506,7 @@ async function resolveConfig({
506
506
  let future = {
507
507
  unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
508
508
  unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
509
+ unstable_trailingSlashAwareDataRequests: userAndPresetConfigs.future?.unstable_trailingSlashAwareDataRequests ?? false,
509
510
  v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
510
511
  v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
511
512
  v8_viteEnvironmentApi: userAndPresetConfigs.future?.v8_viteEnvironmentApi ?? false
package/dist/config.d.ts CHANGED
@@ -39,6 +39,7 @@ type ServerModuleFormat = "esm" | "cjs";
39
39
  interface FutureConfig {
40
40
  unstable_optimizeDeps: boolean;
41
41
  unstable_subResourceIntegrity: boolean;
42
+ unstable_trailingSlashAwareDataRequests: boolean;
42
43
  /**
43
44
  * Enable route middleware
44
45
  */
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-653010f49
2
+ * @react-router/dev v0.0.0-experimental-3fe27584d
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-653010f49
2
+ * @react-router/dev v0.0.0-experimental-3fe27584d
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-653010f49
2
+ * @react-router/dev v0.0.0-experimental-3fe27584d
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -535,6 +535,7 @@ async function resolveConfig({
535
535
  let future = {
536
536
  unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
537
537
  unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
538
+ unstable_trailingSlashAwareDataRequests: userAndPresetConfigs.future?.unstable_trailingSlashAwareDataRequests ?? false,
538
539
  v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
539
540
  v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
540
541
  v8_viteEnvironmentApi: userAndPresetConfigs.future?.v8_viteEnvironmentApi ?? false
package/dist/vite.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-653010f49
2
+ * @react-router/dev v0.0.0-experimental-3fe27584d
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -562,6 +562,7 @@ async function resolveConfig({
562
562
  let future = {
563
563
  unstable_optimizeDeps: userAndPresetConfigs.future?.unstable_optimizeDeps ?? false,
564
564
  unstable_subResourceIntegrity: userAndPresetConfigs.future?.unstable_subResourceIntegrity ?? false,
565
+ unstable_trailingSlashAwareDataRequests: userAndPresetConfigs.future?.unstable_trailingSlashAwareDataRequests ?? false,
565
566
  v8_middleware: userAndPresetConfigs.future?.v8_middleware ?? false,
566
567
  v8_splitRouteModules: userAndPresetConfigs.future?.v8_splitRouteModules ?? false,
567
568
  v8_viteEnvironmentApi: userAndPresetConfigs.future?.v8_viteEnvironmentApi ?? false
@@ -3536,6 +3537,9 @@ var reactRouterVitePlugin = () => {
3536
3537
  },
3537
3538
  configurePreviewServer(previewServer) {
3538
3539
  return () => {
3540
+ if (!ctx.reactRouterConfig.ssr) {
3541
+ return;
3542
+ }
3539
3543
  previewServer.middlewares.use(async (req, res, next) => {
3540
3544
  try {
3541
3545
  let serverBuildDirectory = getServerBuildDirectory(
@@ -4099,10 +4103,8 @@ var reactRouterVitePlugin = () => {
4099
4103
  if (this.environment.name !== "ssr" && modules.length <= 0) {
4100
4104
  return;
4101
4105
  }
4102
- let clientModules = uniqueNodes(
4103
- modules.flatMap(
4104
- (mod) => getParentClientNodes(server.environments.client.moduleGraph, mod)
4105
- )
4106
+ let clientModules = modules.flatMap(
4107
+ (mod) => getParentClientNodes(server.environments.client.moduleGraph, mod)
4106
4108
  );
4107
4109
  for (let clientModule of clientModules) {
4108
4110
  server.environments.client.reloadModule(clientModule);
@@ -4113,30 +4115,22 @@ var reactRouterVitePlugin = () => {
4113
4115
  warnOnClientSourceMaps()
4114
4116
  ];
4115
4117
  };
4116
- function getParentClientNodes(clientModuleGraph, module2) {
4118
+ function getParentClientNodes(clientModuleGraph, module2, seenNodes = /* @__PURE__ */ new Set()) {
4117
4119
  if (!module2.id) {
4118
4120
  return [];
4119
4121
  }
4122
+ if (seenNodes.has(module2.url)) {
4123
+ return [];
4124
+ }
4125
+ seenNodes.add(module2.url);
4120
4126
  let clientModule = clientModuleGraph.getModuleById(module2.id);
4121
4127
  if (clientModule) {
4122
4128
  return [clientModule];
4123
4129
  }
4124
4130
  return [...module2.importers].flatMap(
4125
- (importer) => getParentClientNodes(clientModuleGraph, importer)
4131
+ (importer) => getParentClientNodes(clientModuleGraph, importer, seenNodes)
4126
4132
  );
4127
4133
  }
4128
- function uniqueNodes(nodes) {
4129
- let nodeUrls = /* @__PURE__ */ new Set();
4130
- let unique = [];
4131
- for (let node of nodes) {
4132
- if (nodeUrls.has(node.url)) {
4133
- continue;
4134
- }
4135
- nodeUrls.add(node.url);
4136
- unique.push(node);
4137
- }
4138
- return unique;
4139
- }
4140
4134
  function addRefreshWrapper(reactRouterConfig, code, id) {
4141
4135
  let route = getRoute(reactRouterConfig, id);
4142
4136
  let acceptExports = route ? CLIENT_NON_COMPONENT_EXPORTS : [];
@@ -4411,7 +4405,21 @@ function getStaticPrerenderPaths(routes) {
4411
4405
  };
4412
4406
  }
4413
4407
  async function prerenderData(handler, prerenderPath, onlyRoutes, clientBuildDirectory, reactRouterConfig, viteConfig, requestInit) {
4414
- let normalizedPath = `${reactRouterConfig.basename}${prerenderPath === "/" ? "/_root.data" : `${prerenderPath.replace(/\/$/, "")}.data`}`.replace(/\/\/+/g, "/");
4408
+ let dataRequestPath;
4409
+ if (reactRouterConfig.future.unstable_trailingSlashAwareDataRequests) {
4410
+ if (prerenderPath.endsWith("/")) {
4411
+ dataRequestPath = `${prerenderPath}_.data`;
4412
+ } else {
4413
+ dataRequestPath = `${prerenderPath}.data`;
4414
+ }
4415
+ } else {
4416
+ if (prerenderPath === "/") {
4417
+ dataRequestPath = "/_root.data";
4418
+ } else {
4419
+ dataRequestPath = `${prerenderPath.replace(/\/$/, "")}.data`;
4420
+ }
4421
+ }
4422
+ let normalizedPath = `${reactRouterConfig.basename}${dataRequestPath}`.replace(/\/\/+/g, "/");
4415
4423
  let url2 = new URL(`http://localhost${normalizedPath}`);
4416
4424
  if (onlyRoutes?.length) {
4417
4425
  url2.searchParams.set("_routes", onlyRoutes.join(","));
@@ -4789,13 +4797,13 @@ async function getBuildManifest({
4789
4797
  if (!serverBundles) {
4790
4798
  return { routes };
4791
4799
  }
4792
- let { normalizePath: normalizePath2 } = await import("vite");
4800
+ let { normalizePath } = await import("vite");
4793
4801
  let serverBuildDirectory = getServerBuildDirectory(reactRouterConfig);
4794
4802
  let resolvedAppDirectory = path6.resolve(rootDirectory, appDirectory);
4795
4803
  let rootRelativeRoutes = Object.fromEntries(
4796
4804
  Object.entries(routes).map(([id, route]) => {
4797
4805
  let filePath = path6.join(resolvedAppDirectory, route.file);
4798
- let rootRelativeFilePath = normalizePath2(
4806
+ let rootRelativeFilePath = normalizePath(
4799
4807
  path6.relative(rootDirectory, filePath)
4800
4808
  );
4801
4809
  return [id, { ...route, file: rootRelativeFilePath }];
@@ -4837,7 +4845,7 @@ async function getBuildManifest({
4837
4845
  buildManifest.routeIdToServerBundleId[route.id] = serverBundleId;
4838
4846
  buildManifest.serverBundles[serverBundleId] ??= {
4839
4847
  id: serverBundleId,
4840
- file: normalizePath2(
4848
+ file: normalizePath(
4841
4849
  path6.join(
4842
4850
  path6.relative(
4843
4851
  rootDirectory,
@@ -5034,7 +5042,6 @@ async function asyncFlatten(arr) {
5034
5042
  }
5035
5043
 
5036
5044
  // vite/rsc/plugin.ts
5037
- var Vite = __toESM(require("vite"));
5038
5045
  var import_es_module_lexer3 = require("es-module-lexer");
5039
5046
  var Path5 = __toESM(require("pathe"));
5040
5047
  var babel2 = __toESM(require("@babel/core"));
@@ -5373,6 +5380,9 @@ function isRootRouteFile({
5373
5380
 
5374
5381
  // vite/rsc/plugin.ts
5375
5382
  function reactRouterRSCVitePlugin() {
5383
+ let runningWithinTheReactRouterMonoRepo = Boolean(
5384
+ arguments && arguments.length === 1 && typeof arguments[0] === "object" && arguments[0] && "__runningWithinTheReactRouterMonoRepo" in arguments[0] && arguments[0].__runningWithinTheReactRouterMonoRepo === true
5385
+ );
5376
5386
  let configLoader;
5377
5387
  let typegenWatcherPromise;
5378
5388
  let viteCommand;
@@ -5445,6 +5455,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5445
5455
  entries = await resolveRSCEntryFiles({
5446
5456
  reactRouterConfig: config
5447
5457
  });
5458
+ let viteNormalizePath = (await import("vite")).normalizePath;
5448
5459
  return {
5449
5460
  resolve: {
5450
5461
  dedupe: [
@@ -5486,11 +5497,13 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5486
5497
  name: "react-server-dom-webpack",
5487
5498
  rootDirectory
5488
5499
  }) ? ["react-server-dom-webpack"] : [],
5489
- "react-router",
5500
+ ...runningWithinTheReactRouterMonoRepo ? [] : [
5501
+ "react-router",
5502
+ "react-router/dom",
5503
+ "react-router/internal/react-server-client"
5504
+ ],
5490
5505
  "react-router > cookie",
5491
- "react-router > set-cookie-parser",
5492
- "react-router/dom",
5493
- "react-router/internal/react-server-client"
5506
+ "react-router > set-cookie-parser"
5494
5507
  ]
5495
5508
  },
5496
5509
  esbuild: {
@@ -5506,7 +5519,7 @@ ${errors.map((x) => ` - ${x}`).join("\n")}
5506
5519
  },
5507
5520
  output: {
5508
5521
  manualChunks(id) {
5509
- const normalized = Vite.normalizePath(id);
5522
+ const normalized = viteNormalizePath(id);
5510
5523
  if (normalized.includes("node_modules/react/") || normalized.includes("node_modules/react-dom/") || normalized.includes(
5511
5524
  "node_modules/react-server-dom-webpack/"
5512
5525
  ) || normalized.includes("node_modules/@vitejs/plugin-rsc/")) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-router/dev",
3
- "version": "0.0.0-experimental-653010f49",
3
+ "version": "0.0.0-experimental-3fe27584d",
4
4
  "description": "Dev tools and CLI for React Router",
5
5
  "homepage": "https://reactrouter.com",
6
6
  "bugs": {
@@ -48,6 +48,7 @@
48
48
  "build": {
49
49
  "command": "tsup",
50
50
  "files": [
51
+ "../../pnpm-workspace.yaml",
51
52
  "cli/**",
52
53
  "config/**",
53
54
  "module-sync-enabled/**",
@@ -91,7 +92,7 @@
91
92
  "tinyglobby": "^0.2.14",
92
93
  "valibot": "^1.2.0",
93
94
  "vite-node": "^3.2.2",
94
- "@react-router/node": "0.0.0-experimental-653010f49"
95
+ "@react-router/node": "0.0.0-experimental-3fe27584d"
95
96
  },
96
97
  "devDependencies": {
97
98
  "@types/babel__core": "^7.20.5",
@@ -105,7 +106,7 @@
105
106
  "@types/node": "^20.0.0",
106
107
  "@types/npmcli__package-json": "^4.0.0",
107
108
  "@types/semver": "^7.7.0",
108
- "@vitejs/plugin-rsc": "~0.5.6",
109
+ "@vitejs/plugin-rsc": "~0.5.7",
109
110
  "esbuild-register": "^3.6.0",
110
111
  "execa": "5.1.1",
111
112
  "express": "^4.19.2",
@@ -115,17 +116,17 @@
115
116
  "vite": "^6.3.0",
116
117
  "wireit": "0.14.9",
117
118
  "wrangler": "^4.23.0",
118
- "react-router": "^0.0.0-experimental-653010f49",
119
- "@react-router/serve": "0.0.0-experimental-653010f49"
119
+ "react-router": "^0.0.0-experimental-3fe27584d",
120
+ "@react-router/serve": "0.0.0-experimental-3fe27584d"
120
121
  },
121
122
  "peerDependencies": {
122
- "@vitejs/plugin-rsc": "~0.5.6",
123
- "react-server-dom-webpack": "*",
123
+ "@vitejs/plugin-rsc": "~0.5.7",
124
+ "react-server-dom-webpack": "^19.2.3",
124
125
  "typescript": "^5.1.0",
125
126
  "vite": "^5.1.0 || ^6.0.0 || ^7.0.0",
126
127
  "wrangler": "^3.28.2 || ^4.0.0",
127
- "@react-router/serve": "^0.0.0-experimental-653010f49",
128
- "react-router": "^0.0.0-experimental-653010f49"
128
+ "@react-router/serve": "^0.0.0-experimental-3fe27584d",
129
+ "react-router": "^0.0.0-experimental-3fe27584d"
129
130
  },
130
131
  "peerDependenciesMeta": {
131
132
  "@vitejs/plugin-rsc": {