@react-router/dev 0.0.0-experimental-54021f573 → 0.0.0-experimental-1d760f6a6

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,15 @@
1
1
  # `@react-router/dev`
2
2
 
3
+ ## 7.5.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Adjust approach for Prerendering/SPA Mode via headers ([#13453](https://github.com/remix-run/react-router/pull/13453))
8
+ - Updated dependencies:
9
+ - `react-router@7.5.2`
10
+ - `@react-router/node@7.5.2`
11
+ - `@react-router/serve@7.5.2`
12
+
3
13
  ## 7.5.1
4
14
 
5
15
  ### 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-54021f573
3
+ * @react-router/dev v0.0.0-experimental-1d760f6a6
4
4
  *
5
5
  * Copyright (c) Remix Software Inc.
6
6
  *
@@ -533,13 +533,24 @@ async function loadConfig({ rootDirectory }) {
533
533
  return config;
534
534
  }
535
535
  function findEntry(dir, basename2, options) {
536
- for (let ext of entryExts) {
537
- let file = import_pathe3.default.resolve(dir, basename2 + ext);
538
- if (import_node_fs.default.existsSync(file)) {
539
- return options?.absolute ?? false ? file : import_pathe3.default.relative(dir, file);
536
+ let currentDir = import_pathe3.default.resolve(dir);
537
+ let { root } = import_pathe3.default.parse(currentDir);
538
+ while (true) {
539
+ for (let ext of options?.extensions ?? entryExts) {
540
+ let file = import_pathe3.default.resolve(currentDir, basename2 + ext);
541
+ if (import_node_fs.default.existsSync(file)) {
542
+ return options?.absolute ?? false ? file : import_pathe3.default.relative(dir, file);
543
+ }
544
+ }
545
+ if (!options?.walkParents) {
546
+ return void 0;
547
+ }
548
+ let parentDir = import_pathe3.default.dirname(currentDir);
549
+ if (currentDir === root || parentDir === currentDir) {
550
+ return void 0;
540
551
  }
552
+ currentDir = parentDir;
541
553
  }
542
- return void 0;
543
554
  }
544
555
  var import_node_fs, import_node_child_process, import_package_json, import_pathe3, import_chokidar, import_picocolors, import_pick2, import_omit, import_cloneDeep, import_isEqual, excludedConfigPresetKeys, mergeReactRouterConfig, deepFreeze, entryExts;
545
556
  var init_config = __esm({
@@ -1738,8 +1749,8 @@ function transpile(tsx, options = {}) {
1738
1749
  init_profiler();
1739
1750
  init_typegen();
1740
1751
  init_vite();
1741
- async function routes(reactRouterRoot, flags = {}) {
1742
- let rootDirectory = reactRouterRoot ?? process.cwd();
1752
+ async function routes(rootDirectory, flags = {}) {
1753
+ rootDirectory = resolveRootDirectory(rootDirectory, flags);
1743
1754
  let configResult = await loadConfig({ rootDirectory });
1744
1755
  if (!configResult.ok) {
1745
1756
  console.error(import_picocolors7.default.red(configResult.error));
@@ -1749,9 +1760,7 @@ async function routes(reactRouterRoot, flags = {}) {
1749
1760
  console.log(formatRoutes(configResult.value.routes, format));
1750
1761
  }
1751
1762
  async function build2(root, options = {}) {
1752
- if (!root) {
1753
- root = process.env.REACT_ROUTER_ROOT || process.cwd();
1754
- }
1763
+ root = resolveRootDirectory(root, options);
1755
1764
  let { build: build3 } = await Promise.resolve().then(() => (init_build(), build_exports));
1756
1765
  if (options.profile) {
1757
1766
  await start();
@@ -1768,6 +1777,7 @@ async function dev2(root, options = {}) {
1768
1777
  await start();
1769
1778
  }
1770
1779
  (0, import_exit_hook.default)(() => stop(console.info));
1780
+ root = resolveRootDirectory(root, options);
1771
1781
  await dev3(root, options);
1772
1782
  await new Promise(() => {
1773
1783
  });
@@ -1779,13 +1789,13 @@ var conjunctionListFormat = new Intl.ListFormat("en", {
1779
1789
  style: "long",
1780
1790
  type: "conjunction"
1781
1791
  });
1782
- async function generateEntry(entry, reactRouterRoot, flags = {}) {
1792
+ async function generateEntry(entry, rootDirectory, flags = {}) {
1783
1793
  if (!entry) {
1784
- await generateEntry("entry.client", reactRouterRoot, flags);
1785
- await generateEntry("entry.server", reactRouterRoot, flags);
1794
+ await generateEntry("entry.client", rootDirectory, flags);
1795
+ await generateEntry("entry.server", rootDirectory, flags);
1786
1796
  return;
1787
1797
  }
1788
- let rootDirectory = reactRouterRoot ?? process.cwd();
1798
+ rootDirectory = resolveRootDirectory(rootDirectory, flags);
1789
1799
  let configResult = await loadConfig({ rootDirectory });
1790
1800
  if (!configResult.ok) {
1791
1801
  console.error(import_picocolors7.default.red(configResult.error));
@@ -1841,6 +1851,12 @@ async function generateEntry(entry, reactRouterRoot, flags = {}) {
1841
1851
  )
1842
1852
  );
1843
1853
  }
1854
+ function resolveRootDirectory(root, flags) {
1855
+ if (root) {
1856
+ return path8.resolve(root);
1857
+ }
1858
+ return process.env.REACT_ROUTER_ROOT || (flags?.config ? path8.dirname(path8.resolve(flags.config)) : process.cwd());
1859
+ }
1844
1860
  async function checkForEntry(rootDirectory, appDirectory, entries2) {
1845
1861
  for (let entry of entries2) {
1846
1862
  let entryPath = path8.resolve(appDirectory, entry);
@@ -1863,7 +1879,7 @@ async function createClientEntry(rootDirectory, appDirectory, inputFile) {
1863
1879
  return contents;
1864
1880
  }
1865
1881
  async function typegen(root, flags) {
1866
- root ??= process.cwd();
1882
+ root = resolveRootDirectory(root, flags);
1867
1883
  if (flags.watch) {
1868
1884
  await preloadVite();
1869
1885
  const vite2 = getVite();
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-54021f573
2
+ * @react-router/dev v0.0.0-experimental-1d760f6a6
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-54021f573
2
+ * @react-router/dev v0.0.0-experimental-1d760f6a6
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-54021f573
2
+ * @react-router/dev v0.0.0-experimental-1d760f6a6
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -627,13 +627,24 @@ async function loadConfig({ rootDirectory }) {
627
627
  }
628
628
  var entryExts = [".js", ".jsx", ".ts", ".tsx"];
629
629
  function findEntry(dir, basename, options) {
630
- for (let ext of entryExts) {
631
- let file = import_pathe3.default.resolve(dir, basename + ext);
632
- if (import_node_fs.default.existsSync(file)) {
633
- return options?.absolute ?? false ? file : import_pathe3.default.relative(dir, file);
630
+ let currentDir = import_pathe3.default.resolve(dir);
631
+ let { root } = import_pathe3.default.parse(currentDir);
632
+ while (true) {
633
+ for (let ext of options?.extensions ?? entryExts) {
634
+ let file = import_pathe3.default.resolve(currentDir, basename + ext);
635
+ if (import_node_fs.default.existsSync(file)) {
636
+ return options?.absolute ?? false ? file : import_pathe3.default.relative(dir, file);
637
+ }
638
+ }
639
+ if (!options?.walkParents) {
640
+ return void 0;
641
+ }
642
+ let parentDir = import_pathe3.default.dirname(currentDir);
643
+ if (currentDir === root || parentDir === currentDir) {
644
+ return void 0;
634
645
  }
646
+ currentDir = parentDir;
635
647
  }
636
- return void 0;
637
648
  }
638
649
 
639
650
  // vite/cloudflare-dev-proxy.ts
package/dist/vite.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-54021f573
2
+ * @react-router/dev v0.0.0-experimental-1d760f6a6
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -595,7 +595,18 @@ async function resolveEntryFiles({
595
595
  let userEntryServerFile = findEntry(appDirectory, "entry.server");
596
596
  let entryServerFile;
597
597
  let entryClientFile = userEntryClientFile || "entry.client.tsx";
598
- let pkgJson = await import_package_json.default.load(rootDirectory);
598
+ let packageJsonPath = findEntry(rootDirectory, "package", {
599
+ extensions: [".json"],
600
+ absolute: true,
601
+ walkParents: true
602
+ });
603
+ if (!packageJsonPath) {
604
+ throw new Error(
605
+ `Could not find package.json in ${rootDirectory} or any of its parent directories`
606
+ );
607
+ }
608
+ let packageJsonDirectory = import_pathe3.default.dirname(packageJsonPath);
609
+ let pkgJson = await import_package_json.default.load(packageJsonDirectory);
599
610
  let deps = pkgJson.content.dependencies ?? {};
600
611
  if (userEntryServerFile) {
601
612
  entryServerFile = userEntryServerFile;
@@ -618,7 +629,7 @@ async function resolveEntryFiles({
618
629
  await pkgJson.save();
619
630
  let packageManager = detectPackageManager() ?? "npm";
620
631
  (0, import_node_child_process.execSync)(`${packageManager} install`, {
621
- cwd: rootDirectory,
632
+ cwd: packageJsonDirectory,
622
633
  stdio: "inherit"
623
634
  });
624
635
  }
@@ -630,13 +641,24 @@ async function resolveEntryFiles({
630
641
  }
631
642
  var entryExts = [".js", ".jsx", ".ts", ".tsx"];
632
643
  function findEntry(dir, basename2, options) {
633
- for (let ext of entryExts) {
634
- let file = import_pathe3.default.resolve(dir, basename2 + ext);
635
- if (import_node_fs.default.existsSync(file)) {
636
- return options?.absolute ?? false ? file : import_pathe3.default.relative(dir, file);
644
+ let currentDir = import_pathe3.default.resolve(dir);
645
+ let { root } = import_pathe3.default.parse(currentDir);
646
+ while (true) {
647
+ for (let ext of options?.extensions ?? entryExts) {
648
+ let file = import_pathe3.default.resolve(currentDir, basename2 + ext);
649
+ if (import_node_fs.default.existsSync(file)) {
650
+ return options?.absolute ?? false ? file : import_pathe3.default.relative(dir, file);
651
+ }
652
+ }
653
+ if (!options?.walkParents) {
654
+ return void 0;
637
655
  }
656
+ let parentDir = import_pathe3.default.dirname(currentDir);
657
+ if (currentDir === root || parentDir === currentDir) {
658
+ return void 0;
659
+ }
660
+ currentDir = parentDir;
638
661
  }
639
- return void 0;
640
662
  }
641
663
 
642
664
  // vite/babel.ts
@@ -3087,6 +3109,7 @@ var reactRouterVitePlugin = () => {
3087
3109
  ].join("\n")
3088
3110
  );
3089
3111
  }
3112
+ process.env.IS_RR_BUILD_REQUEST = "yes";
3090
3113
  if (isPrerenderingEnabled(ctx.reactRouterConfig)) {
3091
3114
  await handlePrerender(
3092
3115
  viteConfig,
@@ -3749,11 +3772,6 @@ async function handlePrerender(viteConfig, reactRouterConfig, serverBuildDirecto
3749
3772
  }
3750
3773
  }
3751
3774
  let buildRoutes = createPrerenderRoutes(build.routes);
3752
- let headers = {
3753
- // Header that can be used in the loader to know if you're running at
3754
- // build time or runtime
3755
- "X-React-Router-Prerender": "yes"
3756
- };
3757
3775
  for (let path7 of build.prerender) {
3758
3776
  let matches = (0, import_react_router2.matchRoutes)(buildRoutes, `/${path7}/`.replace(/^\/\/+/, "/"));
3759
3777
  if (!matches) {
@@ -3772,16 +3790,14 @@ async function handlePrerender(viteConfig, reactRouterConfig, serverBuildDirecto
3772
3790
  [leafRoute.id],
3773
3791
  clientBuildDirectory,
3774
3792
  reactRouterConfig,
3775
- viteConfig,
3776
- { headers }
3793
+ viteConfig
3777
3794
  );
3778
3795
  await prerenderResourceRoute(
3779
3796
  handler,
3780
3797
  path7,
3781
3798
  clientBuildDirectory,
3782
3799
  reactRouterConfig,
3783
- viteConfig,
3784
- { headers }
3800
+ viteConfig
3785
3801
  );
3786
3802
  } else {
3787
3803
  viteConfig.logger.warn(
@@ -3800,8 +3816,7 @@ async function handlePrerender(viteConfig, reactRouterConfig, serverBuildDirecto
3800
3816
  null,
3801
3817
  clientBuildDirectory,
3802
3818
  reactRouterConfig,
3803
- viteConfig,
3804
- { headers }
3819
+ viteConfig
3805
3820
  );
3806
3821
  }
3807
3822
  await prerenderRoute(
@@ -3812,10 +3827,9 @@ async function handlePrerender(viteConfig, reactRouterConfig, serverBuildDirecto
3812
3827
  viteConfig,
3813
3828
  data ? {
3814
3829
  headers: {
3815
- ...headers,
3816
3830
  "X-React-Router-Prerender-Data": encodeURI(data)
3817
3831
  }
3818
- } : { headers }
3832
+ } : void 0
3819
3833
  );
3820
3834
  }
3821
3835
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-router/dev",
3
- "version": "0.0.0-experimental-54021f573",
3
+ "version": "0.0.0-experimental-1d760f6a6",
4
4
  "description": "Dev tools and CLI for React Router",
5
5
  "homepage": "https://reactrouter.com",
6
6
  "bugs": {
@@ -86,7 +86,7 @@
86
86
  "set-cookie-parser": "^2.6.0",
87
87
  "valibot": "^0.41.0",
88
88
  "vite-node": "3.0.0-beta.2",
89
- "@react-router/node": "0.0.0-experimental-54021f573"
89
+ "@react-router/node": "0.0.0-experimental-1d760f6a6"
90
90
  },
91
91
  "devDependencies": {
92
92
  "@types/babel__core": "^7.20.5",
@@ -110,15 +110,15 @@
110
110
  "vite": "^6.1.0",
111
111
  "wireit": "0.14.9",
112
112
  "wrangler": "^4.2.0",
113
- "@react-router/serve": "0.0.0-experimental-54021f573",
114
- "react-router": "^0.0.0-experimental-54021f573"
113
+ "@react-router/serve": "0.0.0-experimental-1d760f6a6",
114
+ "react-router": "^0.0.0-experimental-1d760f6a6"
115
115
  },
116
116
  "peerDependencies": {
117
117
  "typescript": "^5.1.0",
118
118
  "vite": "^5.1.0 || ^6.0.0",
119
119
  "wrangler": "^3.28.2 || ^4.0.0",
120
- "@react-router/serve": "^0.0.0-experimental-54021f573",
121
- "react-router": "^0.0.0-experimental-54021f573"
120
+ "@react-router/serve": "^0.0.0-experimental-1d760f6a6",
121
+ "react-router": "^0.0.0-experimental-1d760f6a6"
122
122
  },
123
123
  "peerDependenciesMeta": {
124
124
  "@react-router/serve": {