@react-router/dev 0.0.0-experimental-df0f1dfda → 0.0.0-experimental-a383e1e6e

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.1.4
4
+
5
+ ### Patch Changes
6
+
7
+ - Properly resolve Windows file paths to scan for Vite's dependency optimization when using the `unstable_optimizeDeps` future flag. ([#12637](https://github.com/remix-run/react-router/pull/12637))
8
+ - Fix prerendering when using a custom server - previously we ended up trying to import the users custom server when we actually want to import the virtual server build module ([#12759](https://github.com/remix-run/react-router/pull/12759))
9
+ - Updated dependencies:
10
+ - `react-router@7.1.4`
11
+ - `@react-router/node@7.1.4`
12
+ - `@react-router/serve@7.1.4`
13
+
3
14
  ## 7.1.3
4
15
 
5
16
  ### 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-df0f1dfda
3
+ * @react-router/dev v0.0.0-experimental-a383e1e6e
4
4
  *
5
5
  * Copyright (c) Remix Software Inc.
6
6
  *
@@ -706,6 +706,8 @@ function generate(ctx, route) {
706
706
  export type HeadersArgs = T.HeadersArgs
707
707
  export type HeadersFunction = (args: HeadersArgs) => Headers | HeadersInit
708
708
 
709
+ export type unstable_MiddlewareArgs = T.CreateServerMiddlewareArgs<Info>
710
+ export type unstable_ClientMiddlewareArgs = T.CreateClientMiddlewareArgs<Info>
709
711
  export type LoaderArgs = T.CreateServerLoaderArgs<Info>
710
712
  export type ClientLoaderArgs = T.CreateClientLoaderArgs<Info>
711
713
  export type ActionArgs = T.CreateServerActionArgs<Info>
@@ -983,7 +985,7 @@ async function resolveViteConfig({
983
985
  async function extractPluginContext(viteConfig) {
984
986
  return viteConfig["__reactRouterPluginContext"];
985
987
  }
986
- var import_node_crypto, path7, url, fse, babel2, import_react_router2, import_es_module_lexer, import_jsesc, import_picocolors4, virtualHmrRuntime, virtualInjectHmrRuntime, virtual, getServerBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER;
988
+ var import_node_crypto, path7, url, fse, babel2, import_react_router2, import_es_module_lexer, import_jsesc, import_picocolors4, import_kebabCase, CLIENT_ONLY_NON_COMPONENT_EXPORTS, CLIENT_ROUTE_EXPORTS, virtualHmrRuntime, virtualInjectHmrRuntime, virtual, getServerBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER;
987
989
  var init_plugin = __esm({
988
990
  "vite/plugin.ts"() {
989
991
  "use strict";
@@ -996,6 +998,7 @@ var init_plugin = __esm({
996
998
  import_es_module_lexer = require("es-module-lexer");
997
999
  import_jsesc = __toESM(require("jsesc"));
998
1000
  import_picocolors4 = __toESM(require("picocolors"));
1001
+ import_kebabCase = __toESM(require("lodash/kebabCase"));
999
1002
  init_typegen();
1000
1003
  init_invariant();
1001
1004
  init_babel();
@@ -1009,6 +1012,22 @@ var init_plugin = __esm({
1009
1012
  init_vite();
1010
1013
  init_config();
1011
1014
  init_with_props();
1015
+ CLIENT_ONLY_NON_COMPONENT_EXPORTS = [
1016
+ "clientAction",
1017
+ "clientLoader",
1018
+ "unstable_clientMiddleware",
1019
+ "handle",
1020
+ "meta",
1021
+ "links",
1022
+ "shouldRevalidate"
1023
+ ];
1024
+ CLIENT_ROUTE_EXPORTS = [
1025
+ ...CLIENT_ONLY_NON_COMPONENT_EXPORTS,
1026
+ "default",
1027
+ "ErrorBoundary",
1028
+ "HydrateFallback",
1029
+ "Layout"
1030
+ ];
1012
1031
  virtualHmrRuntime = create("hmr-runtime");
1013
1032
  virtualInjectHmrRuntime = create("inject-hmr-runtime");
1014
1033
  virtual = {
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-df0f1dfda
2
+ * @react-router/dev v0.0.0-experimental-a383e1e6e
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-df0f1dfda
2
+ * @react-router/dev v0.0.0-experimental-a383e1e6e
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-df0f1dfda
2
+ * @react-router/dev v0.0.0-experimental-a383e1e6e
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-df0f1dfda
2
+ * @react-router/dev v0.0.0-experimental-a383e1e6e
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -54,6 +54,7 @@ var import_react_router2 = require("react-router");
54
54
  var import_es_module_lexer = require("es-module-lexer");
55
55
  var import_jsesc = __toESM(require("jsesc"));
56
56
  var import_picocolors3 = __toESM(require("picocolors"));
57
+ var import_kebabCase = __toESM(require("lodash/kebabCase"));
57
58
 
58
59
  // typegen/index.ts
59
60
  var import_node_fs2 = __toESM(require("fs"));
@@ -693,6 +694,8 @@ function generate(ctx, route) {
693
694
  export type HeadersArgs = T.HeadersArgs
694
695
  export type HeadersFunction = (args: HeadersArgs) => Headers | HeadersInit
695
696
 
697
+ export type unstable_MiddlewareArgs = T.CreateServerMiddlewareArgs<Info>
698
+ export type unstable_ClientMiddlewareArgs = T.CreateClientMiddlewareArgs<Info>
696
699
  export type LoaderArgs = T.CreateServerLoaderArgs<Info>
697
700
  export type ClientLoaderArgs = T.CreateClientLoaderArgs<Info>
698
701
  export type ActionArgs = T.CreateServerActionArgs<Info>
@@ -1890,19 +1893,28 @@ function toFunctionExpression(decl) {
1890
1893
  }
1891
1894
 
1892
1895
  // vite/plugin.ts
1893
- var SERVER_ONLY_ROUTE_EXPORTS = ["loader", "action", "headers"];
1894
- var CLIENT_ROUTE_EXPORTS = [
1896
+ var SERVER_ONLY_ROUTE_EXPORTS = [
1897
+ "loader",
1898
+ "action",
1899
+ "unstable_middleware",
1900
+ "headers"
1901
+ ];
1902
+ var CLIENT_ONLY_NON_COMPONENT_EXPORTS = [
1895
1903
  "clientAction",
1896
1904
  "clientLoader",
1897
- "default",
1898
- "ErrorBoundary",
1905
+ "unstable_clientMiddleware",
1899
1906
  "handle",
1900
- "HydrateFallback",
1901
- "Layout",
1902
- "links",
1903
1907
  "meta",
1908
+ "links",
1904
1909
  "shouldRevalidate"
1905
1910
  ];
1911
+ var CLIENT_ROUTE_EXPORTS = [
1912
+ ...CLIENT_ONLY_NON_COMPONENT_EXPORTS,
1913
+ "default",
1914
+ "ErrorBoundary",
1915
+ "HydrateFallback",
1916
+ "Layout"
1917
+ ];
1906
1918
  var BUILD_CLIENT_ROUTE_QUERY_STRING = "?__react-router-build-client-route";
1907
1919
  var isRouteEntryModuleId = (id) => {
1908
1920
  return id.endsWith(BUILD_CLIENT_ROUTE_QUERY_STRING);
@@ -2177,7 +2189,8 @@ var reactRouterVitePlugin = () => {
2177
2189
  )};
2178
2190
  export const basename = ${JSON.stringify(ctx.reactRouterConfig.basename)};
2179
2191
  export const future = ${JSON.stringify(ctx.reactRouterConfig.future)};
2180
- export const isSpaMode = ${!ctx.reactRouterConfig.ssr && ctx.reactRouterConfig.prerender == null};
2192
+ export const ssr = ${ctx.reactRouterConfig.ssr};
2193
+ export const isSpaMode = ${isSpaModeEnabled(ctx.reactRouterConfig)};
2181
2194
  export const publicPath = ${JSON.stringify(ctx.publicPath)};
2182
2195
  export const entry = { module: entryServer };
2183
2196
  export const routes = {
@@ -2527,6 +2540,16 @@ var reactRouterVitePlugin = () => {
2527
2540
  rollupOptions: {
2528
2541
  ...baseRollupOptions,
2529
2542
  preserveEntrySignatures: "exports-only",
2543
+ output: {
2544
+ entryFileNames({ moduleIds }) {
2545
+ let routeChunkModuleId = moduleIds.find(isRouteChunkModuleId);
2546
+ let routeChunkName = routeChunkModuleId ? getRouteChunkNameFromModuleId(
2547
+ routeChunkModuleId
2548
+ ) : null;
2549
+ let routeChunkSuffix = routeChunkName ? `-${(0, import_kebabCase.default)(routeChunkName)}` : "";
2550
+ return `assets/[name]${routeChunkSuffix}-[hash].js`;
2551
+ }
2552
+ },
2530
2553
  input: [
2531
2554
  ctx.entryClientFilePath,
2532
2555
  ...Object.values(
@@ -3046,7 +3069,7 @@ var reactRouterVitePlugin = () => {
3046
3069
  }
3047
3070
  let route = getRoute(ctx.reactRouterConfig, id);
3048
3071
  if (!route) return;
3049
- if (!options?.ssr && !ctx.reactRouterConfig.ssr) {
3072
+ if (!options?.ssr && isSpaModeEnabled(ctx.reactRouterConfig)) {
3050
3073
  let exportNames = getExportNames(code);
3051
3074
  let serverOnlyExports = exportNames.filter(
3052
3075
  (exp) => SERVER_ONLY_ROUTE_EXPORTS.includes(exp)
@@ -3248,14 +3271,7 @@ function uniqueNodes(nodes) {
3248
3271
  }
3249
3272
  function addRefreshWrapper(reactRouterConfig, code, id) {
3250
3273
  let route = getRoute(reactRouterConfig, id);
3251
- let acceptExports = route ? [
3252
- "clientAction",
3253
- "clientLoader",
3254
- "handle",
3255
- "meta",
3256
- "links",
3257
- "shouldRevalidate"
3258
- ] : [];
3274
+ let acceptExports = route ? CLIENT_ONLY_NON_COMPONENT_EXPORTS : [];
3259
3275
  return REACT_REFRESH_HEADER.replaceAll("__SOURCE__", JSON.stringify(id)) + code + REACT_REFRESH_FOOTER.replaceAll("__SOURCE__", JSON.stringify(id)).replaceAll("__ACCEPT_EXPORTS__", JSON.stringify(acceptExports)).replaceAll("__ROUTE_ID__", JSON.stringify(route?.id));
3260
3276
  }
3261
3277
  var REACT_REFRESH_HEADER = `
@@ -3354,6 +3370,9 @@ async function getRouteMetadata(cache, ctx, viteChildCompiler, route, readRouteF
3354
3370
  };
3355
3371
  return info;
3356
3372
  }
3373
+ function isSpaModeEnabled(reactRouterConfig) {
3374
+ return reactRouterConfig.ssr === false && (reactRouterConfig.prerender == null || reactRouterConfig.prerender === false || Array.isArray(reactRouterConfig.prerender) && reactRouterConfig.prerender.length === 1 && reactRouterConfig.prerender[0] === "/");
3375
+ }
3357
3376
  async function getPrerenderBuildAndHandler(viteConfig, serverBuildDirectory, serverBuildFile) {
3358
3377
  let serverBuildPath = path6.join(serverBuildDirectory, serverBuildFile);
3359
3378
  let build = await import(url.pathToFileURL(serverBuildPath).toString());
@@ -3448,12 +3467,6 @@ async function handlePrerender(viteConfig, reactRouterConfig, serverBuildDirecto
3448
3467
  );
3449
3468
  }
3450
3469
  }
3451
- await prerenderManifest(
3452
- build,
3453
- clientBuildDirectory,
3454
- reactRouterConfig,
3455
- viteConfig
3456
- );
3457
3470
  }
3458
3471
  function determineStaticPrerenderRoutes(routes, viteConfig, isBooleanUsage = false) {
3459
3472
  let paths = ["/"];
@@ -3529,18 +3542,6 @@ async function prerenderResourceRoute(handler, prerenderPath, clientBuildDirecto
3529
3542
  await fse.outputFile(outfile, text);
3530
3543
  viteConfig.logger.info(`Prerender: Generated ${import_picocolors3.default.bold(outfile)}`);
3531
3544
  }
3532
- async function prerenderManifest(build, clientBuildDirectory, reactRouterConfig, viteConfig) {
3533
- let normalizedPath = `${reactRouterConfig.basename}/__manifest`.replace(
3534
- /\/\/+/g,
3535
- "/"
3536
- );
3537
- let outdir = path6.relative(process.cwd(), clientBuildDirectory);
3538
- let outfile = path6.join(outdir, ...normalizedPath.split("/"));
3539
- await fse.ensureDir(path6.dirname(outfile));
3540
- let manifestData = JSON.stringify(build.assets.routes);
3541
- await fse.outputFile(outfile, manifestData);
3542
- viteConfig.logger.info(`Prerender: Generated ${import_picocolors3.default.bold(outfile)}`);
3543
- }
3544
3545
  function validatePrerenderedResponse(response, html, prefix, path7) {
3545
3546
  if (response.status !== 200) {
3546
3547
  throw new Error(
@@ -3579,6 +3580,8 @@ function createPrerenderRoutes(manifest, parentId = "", routesByParentId = group
3579
3580
  loader: route.module.loader ? () => null : void 0,
3580
3581
  action: void 0,
3581
3582
  handle: route.module.handle
3583
+ // middleware is not necessary here since we just need to know which
3584
+ // routes have loaders so we know what paths to prerender
3582
3585
  };
3583
3586
  return route.index ? {
3584
3587
  index: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-router/dev",
3
- "version": "0.0.0-experimental-df0f1dfda",
3
+ "version": "0.0.0-experimental-a383e1e6e",
4
4
  "description": "Dev tools and CLI for React Router",
5
5
  "homepage": "https://reactrouter.com",
6
6
  "bugs": {
@@ -88,7 +88,7 @@
88
88
  "set-cookie-parser": "^2.6.0",
89
89
  "valibot": "^0.41.0",
90
90
  "vite-node": "3.0.0-beta.2",
91
- "@react-router/node": "0.0.0-experimental-df0f1dfda"
91
+ "@react-router/node": "0.0.0-experimental-a383e1e6e"
92
92
  },
93
93
  "devDependencies": {
94
94
  "@types/babel__core": "^7.20.5",
@@ -117,15 +117,15 @@
117
117
  "vite": "^6.0.0",
118
118
  "wireit": "0.14.9",
119
119
  "wrangler": "^3.28.2",
120
- "@react-router/serve": "0.0.0-experimental-df0f1dfda",
121
- "react-router": "^0.0.0-experimental-df0f1dfda"
120
+ "@react-router/serve": "0.0.0-experimental-a383e1e6e",
121
+ "react-router": "^0.0.0-experimental-a383e1e6e"
122
122
  },
123
123
  "peerDependencies": {
124
124
  "typescript": "^5.1.0",
125
125
  "vite": "^5.1.0 || ^6.0.0",
126
126
  "wrangler": "^3.28.2",
127
- "@react-router/serve": "^0.0.0-experimental-df0f1dfda",
128
- "react-router": "^0.0.0-experimental-df0f1dfda"
127
+ "@react-router/serve": "^0.0.0-experimental-a383e1e6e",
128
+ "react-router": "^0.0.0-experimental-a383e1e6e"
129
129
  },
130
130
  "peerDependenciesMeta": {
131
131
  "@react-router/serve": {