@react-router/dev 7.4.1-pre.0 → 7.5.0-pre.0

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,6 +1,19 @@
1
1
  # `@react-router/dev`
2
2
 
3
- ## 7.4.1-pre.0
3
+ ## 7.5.0-pre.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Introduce `unstable_subResourceIntegrity` future flag that enables generation of an importmap with integrity for the scripts that will be loaded by the browser. ([#13163](https://github.com/remix-run/react-router/pull/13163))
8
+ - Update optional Wrangler peer dependency range to support Wrangler v4 ([#13258](https://github.com/remix-run/react-router/pull/13258))
9
+ - When `future.unstable_viteEnvironmentApi` is enabled, ensure critical CSS in development works when using a custom Vite `base` has been configured ([#13305](https://github.com/remix-run/react-router/pull/13305))
10
+ - Reinstate dependency optimization in the child compiler to fix `depsOptimizer is required in dev mode` errors when using `vite-plugin-cloudflare` and importing Node.js builtins ([#13317](https://github.com/remix-run/react-router/pull/13317))
11
+ - Updated dependencies:
12
+ - `react-router@7.5.0-pre.0`
13
+ - `@react-router/node@7.5.0-pre.0`
14
+ - `@react-router/serve@7.5.0-pre.0`
15
+
16
+ ## 7.4.1
4
17
 
5
18
  ### Patch Changes
6
19
 
@@ -9,9 +22,9 @@
9
22
  - When both `future.unstable_middleware` and `future.unstable_splitRouteModules` are enabled, split `unstable_clientMiddleware` route exports into separate chunks when possible ([#13210](https://github.com/remix-run/react-router/pull/13210))
10
23
  - Improve performance of `future.unstable_middleware` by ensuring that route modules are only blocking during the middleware phase when the `unstable_clientMiddleware` has been defined ([#13210](https://github.com/remix-run/react-router/pull/13210))
11
24
  - Updated dependencies:
12
- - `react-router@7.4.1-pre.0`
13
- - `@react-router/node@7.4.1-pre.0`
14
- - `@react-router/serve@7.4.1-pre.0`
25
+ - `react-router@7.4.1`
26
+ - `@react-router/node@7.4.1`
27
+ - `@react-router/serve@7.4.1`
15
28
 
16
29
  ## 7.4.0
17
30
 
package/dist/cli/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * @react-router/dev v7.4.1-pre.0
3
+ * @react-router/dev v7.5.0-pre.0
4
4
  *
5
5
  * Copyright (c) Remix Software Inc.
6
6
  *
@@ -419,6 +419,7 @@ async function resolveConfig({
419
419
  unstable_middleware: reactRouterUserConfig.future?.unstable_middleware ?? false,
420
420
  unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false,
421
421
  unstable_splitRouteModules: reactRouterUserConfig.future?.unstable_splitRouteModules ?? false,
422
+ unstable_subResourceIntegrity: reactRouterUserConfig.future?.unstable_subResourceIntegrity ?? false,
422
423
  unstable_viteEnvironmentApi: reactRouterUserConfig.future?.unstable_viteEnvironmentApi ?? false
423
424
  };
424
425
  let reactRouterConfig = deepFreeze({
@@ -1308,11 +1309,12 @@ function resolveEnvironmentsOptions(environmentResolvers, resolverOptions) {
1308
1309
  function isNonNullable(x) {
1309
1310
  return x != null;
1310
1311
  }
1311
- var import_node_crypto, path7, url, fse, babel2, import_react_router2, import_es_module_lexer, import_pick3, import_jsesc, import_picocolors4, import_kebabCase, CLIENT_NON_COMPONENT_EXPORTS, CLIENT_ROUTE_EXPORTS, BUILD_CLIENT_ROUTE_QUERY_STRING, SSR_BUNDLE_PREFIX, CSS_DEV_HELPER_ENVIRONMENT_NAME, virtualHmrRuntime, virtualInjectHmrRuntime, virtual2, getServerBuildDirectory, getClientBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER;
1312
+ var import_node_crypto, fs4, path7, url, fse, babel2, import_react_router2, import_es_module_lexer, import_pick3, import_jsesc, import_picocolors4, import_kebabCase, CLIENT_NON_COMPONENT_EXPORTS, CLIENT_ROUTE_EXPORTS, BUILD_CLIENT_ROUTE_QUERY_STRING, SSR_BUNDLE_PREFIX, CSS_DEV_HELPER_ENVIRONMENT_NAME, virtualHmrRuntime, virtualInjectHmrRuntime, virtual2, getServerBuildDirectory, getClientBuildDirectory, defaultEntriesDir, defaultEntries, REACT_REFRESH_HEADER;
1312
1313
  var init_plugin = __esm({
1313
1314
  "vite/plugin.ts"() {
1314
1315
  "use strict";
1315
1316
  import_node_crypto = require("crypto");
1317
+ fs4 = __toESM(require("fs"));
1316
1318
  path7 = __toESM(require("path"));
1317
1319
  url = __toESM(require("url"));
1318
1320
  fse = __toESM(require("fs-extra"));
package/dist/config.d.ts CHANGED
@@ -46,6 +46,7 @@ interface FutureConfig {
46
46
  * Automatically split route modules into multiple chunks when possible.
47
47
  */
48
48
  unstable_splitRouteModules: boolean | "enforce";
49
+ unstable_subResourceIntegrity: boolean;
49
50
  /**
50
51
  * Use Vite Environment API (experimental)
51
52
  */
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v7.4.1-pre.0
2
+ * @react-router/dev v7.5.0-pre.0
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 v7.4.1-pre.0
2
+ * @react-router/dev v7.5.0-pre.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v7.4.1-pre.0
2
+ * @react-router/dev v7.5.0-pre.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -512,6 +512,7 @@ async function resolveConfig({
512
512
  unstable_middleware: reactRouterUserConfig.future?.unstable_middleware ?? false,
513
513
  unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false,
514
514
  unstable_splitRouteModules: reactRouterUserConfig.future?.unstable_splitRouteModules ?? false,
515
+ unstable_subResourceIntegrity: reactRouterUserConfig.future?.unstable_subResourceIntegrity ?? false,
515
516
  unstable_viteEnvironmentApi: reactRouterUserConfig.future?.unstable_viteEnvironmentApi ?? false
516
517
  };
517
518
  let reactRouterConfig = deepFreeze({
package/dist/vite.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v7.4.1-pre.0
2
+ * @react-router/dev v7.5.0-pre.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -46,6 +46,7 @@ module.exports = __toCommonJS(vite_exports);
46
46
 
47
47
  // vite/plugin.ts
48
48
  var import_node_crypto = require("crypto");
49
+ var fs3 = __toESM(require("fs"));
49
50
  var path6 = __toESM(require("path"));
50
51
  var url = __toESM(require("url"));
51
52
  var fse = __toESM(require("fs-extra"));
@@ -475,6 +476,7 @@ async function resolveConfig({
475
476
  unstable_middleware: reactRouterUserConfig.future?.unstable_middleware ?? false,
476
477
  unstable_optimizeDeps: reactRouterUserConfig.future?.unstable_optimizeDeps ?? false,
477
478
  unstable_splitRouteModules: reactRouterUserConfig.future?.unstable_splitRouteModules ?? false,
479
+ unstable_subResourceIntegrity: reactRouterUserConfig.future?.unstable_subResourceIntegrity ?? false,
478
480
  unstable_viteEnvironmentApi: reactRouterUserConfig.future?.unstable_viteEnvironmentApi ?? false
479
481
  };
480
482
  let reactRouterConfig = deepFreeze({
@@ -2371,7 +2373,7 @@ var reactRouterVitePlugin = () => {
2371
2373
  export const unstable_getCriticalCss = ({ pathname }) => {
2372
2374
  return {
2373
2375
  rel: "stylesheet",
2374
- href: "${viteUserConfig.base ?? "/"}@react-router/critical.css?pathname=" + pathname,
2376
+ href: "${ctx.publicPath}@react-router/critical.css?pathname=" + pathname,
2375
2377
  };
2376
2378
  }
2377
2379
  ` : ""}`;
@@ -2397,6 +2399,34 @@ var reactRouterVitePlugin = () => {
2397
2399
  );
2398
2400
  return /* @__PURE__ */ new Set([...cssUrlPaths, ...chunkAssetPaths]);
2399
2401
  };
2402
+ let generateSriManifest = async (ctx2) => {
2403
+ let clientBuildDirectory = getClientBuildDirectory(ctx2.reactRouterConfig);
2404
+ let entries = fs3.readdirSync(clientBuildDirectory, {
2405
+ withFileTypes: true,
2406
+ recursive: true
2407
+ });
2408
+ let sriManifest = {};
2409
+ for (const entry of entries) {
2410
+ if (entry.isFile() && entry.name.endsWith(".js")) {
2411
+ let contents;
2412
+ try {
2413
+ contents = await fse.readFile(
2414
+ path6.join(entry.path, entry.name),
2415
+ "utf-8"
2416
+ );
2417
+ } catch (e) {
2418
+ logger.error(`Failed to read file for SRI generation: ${entry.name}`);
2419
+ throw e;
2420
+ }
2421
+ let hash = (0, import_node_crypto.createHash)("sha384").update(contents).digest().toString("base64");
2422
+ let filepath = getVite().normalizePath(
2423
+ path6.relative(clientBuildDirectory, path6.join(entry.path, entry.name))
2424
+ );
2425
+ sriManifest[`${ctx2.publicPath}${filepath}`] = `sha384-${hash}`;
2426
+ }
2427
+ }
2428
+ return sriManifest;
2429
+ };
2400
2430
  let generateReactRouterManifestsForBuild = async ({
2401
2431
  routeIds
2402
2432
  }) => {
@@ -2501,7 +2531,8 @@ var reactRouterVitePlugin = () => {
2501
2531
  let nonFingerprintedValues = { url: url2, version };
2502
2532
  let reactRouterBrowserManifest = {
2503
2533
  ...fingerprintedValues,
2504
- ...nonFingerprintedValues
2534
+ ...nonFingerprintedValues,
2535
+ sri: void 0
2505
2536
  };
2506
2537
  await writeFileSafe(
2507
2538
  path6.join(getClientBuildDirectory(ctx.reactRouterConfig), manifestPath),
@@ -2509,9 +2540,14 @@ var reactRouterVitePlugin = () => {
2509
2540
  reactRouterBrowserManifest
2510
2541
  )};`
2511
2542
  );
2543
+ let sri = void 0;
2544
+ if (ctx.reactRouterConfig.future.unstable_subResourceIntegrity) {
2545
+ sri = await generateSriManifest(ctx);
2546
+ }
2512
2547
  let reactRouterServerManifest = {
2513
2548
  ...reactRouterBrowserManifest,
2514
- routes: serverRoutes
2549
+ routes: serverRoutes,
2550
+ sri
2515
2551
  };
2516
2552
  return {
2517
2553
  reactRouterBrowserManifest,
@@ -2581,6 +2617,7 @@ var reactRouterVitePlugin = () => {
2581
2617
  imports: []
2582
2618
  };
2583
2619
  }
2620
+ let sri = void 0;
2584
2621
  let reactRouterManifestForDev = {
2585
2622
  version: String(Math.random()),
2586
2623
  url: combineURLs(ctx.publicPath, virtual2.browserManifest.url),
@@ -2594,6 +2631,7 @@ var reactRouterVitePlugin = () => {
2594
2631
  ),
2595
2632
  imports: []
2596
2633
  },
2634
+ sri,
2597
2635
  routes
2598
2636
  };
2599
2637
  currentReactRouterManifestForDev = reactRouterManifestForDev;
@@ -2862,23 +2900,7 @@ var reactRouterVitePlugin = () => {
2862
2900
  ...plugin2,
2863
2901
  configureServer: void 0,
2864
2902
  configurePreviewServer: void 0
2865
- })),
2866
- {
2867
- name: "react-router:override-optimize-deps",
2868
- config(userConfig) {
2869
- if (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi && userConfig.environments) {
2870
- for (const environmentName of Object.keys(
2871
- userConfig.environments
2872
- )) {
2873
- userConfig.environments[environmentName].optimizeDeps = {
2874
- noDiscovery: true
2875
- };
2876
- }
2877
- } else {
2878
- userConfig.optimizeDeps = { noDiscovery: true };
2879
- }
2880
- }
2881
- }
2903
+ }))
2882
2904
  ]
2883
2905
  });
2884
2906
  await viteChildCompiler.pluginContainer.buildStart({});
@@ -2962,7 +2984,7 @@ var reactRouterVitePlugin = () => {
2962
2984
  if (ctx.reactRouterConfig.future.unstable_viteEnvironmentApi) {
2963
2985
  viteDevServer.middlewares.use(async (req, res, next) => {
2964
2986
  let [reqPathname, reqSearch] = (req.url ?? "").split("?");
2965
- if (reqPathname === "/@react-router/critical.css") {
2987
+ if (reqPathname === `${ctx.publicPath}@react-router/critical.css`) {
2966
2988
  let pathname = new URLSearchParams(reqSearch).get("pathname");
2967
2989
  if (!pathname) {
2968
2990
  return next("No pathname provided");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-router/dev",
3
- "version": "7.4.1-pre.0",
3
+ "version": "7.5.0-pre.0",
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": "7.4.1-pre.0"
89
+ "@react-router/node": "7.5.0-pre.0"
90
90
  },
91
91
  "devDependencies": {
92
92
  "@types/babel__core": "^7.20.5",
@@ -109,16 +109,16 @@
109
109
  "typescript": "^5.1.6",
110
110
  "vite": "^6.1.0",
111
111
  "wireit": "0.14.9",
112
- "wrangler": "^3.109.2",
113
- "@react-router/serve": "7.4.1-pre.0",
114
- "react-router": "^7.4.1-pre.0"
112
+ "wrangler": "^4.2.0",
113
+ "@react-router/serve": "7.5.0-pre.0",
114
+ "react-router": "^7.5.0-pre.0"
115
115
  },
116
116
  "peerDependencies": {
117
117
  "typescript": "^5.1.0",
118
118
  "vite": "^5.1.0 || ^6.0.0",
119
- "wrangler": "^3.28.2",
120
- "@react-router/serve": "^7.4.1-pre.0",
121
- "react-router": "^7.4.1-pre.0"
119
+ "wrangler": "^3.28.2 || ^4.0.0",
120
+ "@react-router/serve": "^7.5.0-pre.0",
121
+ "react-router": "^7.5.0-pre.0"
122
122
  },
123
123
  "peerDependenciesMeta": {
124
124
  "@react-router/serve": {