@react-router/dev 7.6.3 → 7.7.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,5 +1,21 @@
1
1
  # `@react-router/dev`
2
2
 
3
+ ## 7.7.0-pre.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Update `vite-node` to `^3.2.2` to support Vite 7 ([#13781](https://github.com/remix-run/react-router/pull/13781))
8
+ - Properly handle `https` protocol in dev mode ([#13746](https://github.com/remix-run/react-router/pull/13746))
9
+ - Fix missing styles when Vite's `build.cssCodeSplit` option is disabled ([#13943](https://github.com/remix-run/react-router/pull/13943))
10
+ - Allow `.mts` and `.mjs` extensions for route config file ([#13931](https://github.com/remix-run/react-router/pull/13931))
11
+ - Fix prerender file locations when `cwd` differs from project root ([#13824](https://github.com/remix-run/react-router/pull/13824))
12
+ - Improve chunk error logging when a chunk cannot be found during the build ([#13799](https://github.com/remix-run/react-router/pull/13799))
13
+ - Fix incorrectly configured `externalConditions` which had enabled `module` condition for externals and broke builds with certain packages, like Emotion. ([#13871](https://github.com/remix-run/react-router/pull/13871))
14
+ - Updated dependencies:
15
+ - `react-router@7.7.0-pre.0`
16
+ - `@react-router/node@7.7.0-pre.0`
17
+ - `@react-router/serve@7.7.0-pre.0`
18
+
3
19
  ## 7.6.3
4
20
 
5
21
  ### Patch Changes
package/dist/cli/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * @react-router/dev v7.6.3
3
+ * @react-router/dev v7.7.0-pre.0
4
4
  *
5
5
  * Copyright (c) Remix Software Inc.
6
6
  *
@@ -743,7 +743,7 @@ var init_config = __esm({
743
743
  });
744
744
  return o;
745
745
  };
746
- entryExts = [".js", ".jsx", ".ts", ".tsx"];
746
+ entryExts = [".js", ".jsx", ".ts", ".tsx", ".mjs", ".mts"];
747
747
  }
748
748
  });
749
749
 
@@ -1277,11 +1277,12 @@ var init_typegen = __esm({
1277
1277
  });
1278
1278
 
1279
1279
  // vite/node-adapter.ts
1280
- var import_node_events, import_node_stream, import_set_cookie_parser, import_node;
1280
+ var import_node_events, import_node_tls, import_node_stream, import_set_cookie_parser, import_node;
1281
1281
  var init_node_adapter = __esm({
1282
1282
  "vite/node-adapter.ts"() {
1283
1283
  "use strict";
1284
1284
  import_node_events = require("events");
1285
+ import_node_tls = require("tls");
1285
1286
  import_node_stream = require("stream");
1286
1287
  import_set_cookie_parser = require("set-cookie-parser");
1287
1288
  import_node = require("@react-router/node");
@@ -1494,10 +1495,6 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
1494
1495
  );
1495
1496
  let { moduleSyncEnabled } = await import(`file:///${path6.join(packageRoot, "module-sync-enabled/index.mjs")}`);
1496
1497
  let vite2 = getVite();
1497
- let viteServerConditions = [
1498
- ...vite2.defaultServerConditions ?? [],
1499
- ...moduleSyncEnabled ? ["module-sync"] : []
1500
- ];
1501
1498
  function getBaseOptions({
1502
1499
  viteUserConfig
1503
1500
  }) {
@@ -1529,15 +1526,24 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
1529
1526
  function getBaseServerOptions({
1530
1527
  viteUserConfig
1531
1528
  }) {
1532
- let conditions = viteCommand === "build" ? viteServerConditions : ["development", ...viteServerConditions];
1529
+ let maybeModuleSyncConditions = [
1530
+ ...moduleSyncEnabled ? ["module-sync"] : []
1531
+ ];
1532
+ let maybeDevelopmentConditions = viteCommand === "build" ? [] : ["development"];
1533
+ let maybeDefaultServerConditions = vite2.defaultServerConditions || [];
1534
+ let defaultExternalConditions = ["node"];
1535
+ let baseConditions = [
1536
+ ...maybeDevelopmentConditions,
1537
+ ...maybeModuleSyncConditions
1538
+ ];
1533
1539
  return mergeEnvironmentOptions(getBaseOptions({ viteUserConfig }), {
1534
1540
  resolve: {
1535
1541
  external: (
1536
1542
  // If `unstable_viteEnvironmentApi` is `true`, `resolve.external` is set in the `configEnvironment` hook
1537
1543
  ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? void 0 : ssrExternals
1538
1544
  ),
1539
- conditions,
1540
- externalConditions: conditions
1545
+ conditions: [...baseConditions, ...maybeDefaultServerConditions],
1546
+ externalConditions: [...baseConditions, ...defaultExternalConditions]
1541
1547
  },
1542
1548
  build: {
1543
1549
  // We move SSR-only assets to client assets. Note that the
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v7.6.3
2
+ * @react-router/dev v7.7.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.6.3
2
+ * @react-router/dev v7.7.0-pre.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -158,8 +158,6 @@ const routeUpdates = new Map();
158
158
  window.__reactRouterRouteModuleUpdates = new Map();
159
159
 
160
160
  import.meta.hot.on("react-router:hmr", async ({ route }) => {
161
- window.__reactRouterClearCriticalCss();
162
-
163
161
  if (route) {
164
162
  routeUpdates.set(route.id, route);
165
163
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v7.6.3
2
+ * @react-router/dev v7.7.0-pre.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -49,6 +49,7 @@ var import_react_router = require("react-router");
49
49
 
50
50
  // vite/node-adapter.ts
51
51
  var import_node_events = require("events");
52
+ var import_node_tls = require("tls");
52
53
  var import_node_stream = require("stream");
53
54
  var import_set_cookie_parser = require("set-cookie-parser");
54
55
  var import_node = require("@react-router/node");
@@ -91,7 +92,8 @@ function fromNodeHeaders(nodeReq) {
91
92
  return headers;
92
93
  }
93
94
  function fromNodeRequest(nodeReq, nodeRes) {
94
- let origin = nodeReq.headers.origin && "null" !== nodeReq.headers.origin ? nodeReq.headers.origin : `http://${nodeReq.headers.host}`;
95
+ let protocol = nodeReq.socket instanceof import_node_tls.TLSSocket && nodeReq.socket.encrypted ? "https" : "http";
96
+ let origin = nodeReq.headers.origin && "null" !== nodeReq.headers.origin ? nodeReq.headers.origin : `${protocol}://${nodeReq.headers.host}`;
95
97
  invariant(
96
98
  nodeReq.originalUrl,
97
99
  "Expected `nodeReq.originalUrl` to be defined"
@@ -734,7 +736,7 @@ function omitRoutes(config) {
734
736
  routes: {}
735
737
  };
736
738
  }
737
- var entryExts = [".js", ".jsx", ".ts", ".tsx"];
739
+ var entryExts = [".js", ".jsx", ".ts", ".tsx", ".mjs", ".mts"];
738
740
  function isEntryFile(entryBasename, filename) {
739
741
  return entryExts.some((ext) => filename === `${entryBasename}${ext}`);
740
742
  }
@@ -801,10 +803,7 @@ var cloudflareDevProxyVitePlugin = (options = {}) => {
801
803
  name: PLUGIN_NAME,
802
804
  config: async (config, configEnv) => {
803
805
  await preloadVite();
804
- const vite2 = getVite();
805
- const serverConditions = [
806
- ...vite2.defaultServerConditions ?? []
807
- ];
806
+ const externalConditions = ["node"];
808
807
  let configResult = await loadConfig({
809
808
  rootDirectory: config.root ?? process.cwd(),
810
809
  mode: configEnv.mode
@@ -816,7 +815,7 @@ var cloudflareDevProxyVitePlugin = (options = {}) => {
816
815
  return {
817
816
  ssr: {
818
817
  resolve: {
819
- externalConditions: [...workerdConditions, ...serverConditions]
818
+ externalConditions: [...workerdConditions, ...externalConditions]
820
819
  }
821
820
  }
822
821
  };
package/dist/vite.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v7.6.3
2
+ * @react-router/dev v7.7.0-pre.0
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -740,7 +740,7 @@ function omitRoutes(config) {
740
740
  routes: {}
741
741
  };
742
742
  }
743
- var entryExts = [".js", ".jsx", ".ts", ".tsx"];
743
+ var entryExts = [".js", ".jsx", ".ts", ".tsx", ".mjs", ".mts"];
744
744
  function isEntryFile(entryBasename, filename2) {
745
745
  return entryExts.some((ext) => filename2 === `${entryBasename}${ext}`);
746
746
  }
@@ -1232,6 +1232,7 @@ async function watch(rootDirectory, { mode, logger }) {
1232
1232
 
1233
1233
  // vite/node-adapter.ts
1234
1234
  var import_node_events = require("events");
1235
+ var import_node_tls = require("tls");
1235
1236
  var import_node_stream = require("stream");
1236
1237
  var import_set_cookie_parser = require("set-cookie-parser");
1237
1238
  var import_node = require("@react-router/node");
@@ -1262,7 +1263,8 @@ function fromNodeHeaders(nodeReq) {
1262
1263
  return headers;
1263
1264
  }
1264
1265
  function fromNodeRequest(nodeReq, nodeRes) {
1265
- let origin = nodeReq.headers.origin && "null" !== nodeReq.headers.origin ? nodeReq.headers.origin : `http://${nodeReq.headers.host}`;
1266
+ let protocol = nodeReq.socket instanceof import_node_tls.TLSSocket && nodeReq.socket.encrypted ? "https" : "http";
1267
+ let origin = nodeReq.headers.origin && "null" !== nodeReq.headers.origin ? nodeReq.headers.origin : `${protocol}://${nodeReq.headers.host}`;
1266
1268
  invariant(
1267
1269
  nodeReq.originalUrl,
1268
1270
  "Expected `nodeReq.originalUrl` to be defined"
@@ -2401,14 +2403,27 @@ var getPublicModulePathForEntry = (ctx, viteManifest, entryFilePath) => {
2401
2403
  let entryChunk = resolveChunk(ctx, viteManifest, entryFilePath);
2402
2404
  return entryChunk ? `${ctx.publicPath}${entryChunk.file}` : void 0;
2403
2405
  };
2404
- var getReactRouterManifestBuildAssets = (ctx, viteManifest, entryFilePath, prependedAssetFilePaths = []) => {
2406
+ var getCssCodeSplitDisabledFile = (ctx, viteConfig, viteManifest) => {
2407
+ if (viteConfig.build.cssCodeSplit) {
2408
+ return null;
2409
+ }
2410
+ let cssFile = viteManifest["style.css"]?.file;
2411
+ invariant(
2412
+ cssFile,
2413
+ "Expected `style.css` to be present in Vite manifest when `build.cssCodeSplit` is disabled"
2414
+ );
2415
+ return `${ctx.publicPath}${cssFile}`;
2416
+ };
2417
+ var getClientEntryChunk = (ctx, viteManifest) => {
2418
+ let filePath = ctx.entryClientFilePath;
2419
+ let chunk = resolveChunk(ctx, viteManifest, filePath);
2420
+ invariant(chunk, `Chunk not found: ${filePath}`);
2421
+ return chunk;
2422
+ };
2423
+ var getReactRouterManifestBuildAssets = (ctx, viteConfig, viteManifest, entryFilePath, route) => {
2405
2424
  let entryChunk = resolveChunk(ctx, viteManifest, entryFilePath);
2406
- invariant(entryChunk, "Chunk not found");
2407
- let prependedAssetChunks = prependedAssetFilePaths.map((filePath) => {
2408
- let chunk = resolveChunk(ctx, viteManifest, filePath);
2409
- invariant(chunk, "Chunk not found");
2410
- return chunk;
2411
- });
2425
+ invariant(entryChunk, `Chunk not found: ${entryFilePath}`);
2426
+ let isRootRoute = Boolean(route && route.parentId === void 0);
2412
2427
  let routeModuleChunks = routeChunkNames.map(
2413
2428
  (routeChunkName) => resolveChunk(
2414
2429
  ctx,
@@ -2416,19 +2431,31 @@ var getReactRouterManifestBuildAssets = (ctx, viteManifest, entryFilePath, prepe
2416
2431
  getRouteChunkModuleId(entryFilePath.split("?")[0], routeChunkName)
2417
2432
  )
2418
2433
  ).filter(isNonNullable);
2419
- let chunks = resolveDependantChunks(viteManifest, [
2420
- ...prependedAssetChunks,
2421
- entryChunk,
2422
- ...routeModuleChunks
2423
- ]);
2434
+ let chunks = resolveDependantChunks(
2435
+ viteManifest,
2436
+ [
2437
+ // If this is the root route, we also need to include assets from the
2438
+ // client entry file as this is a common way for consumers to import
2439
+ // global reset styles, etc.
2440
+ isRootRoute ? getClientEntryChunk(ctx, viteManifest) : null,
2441
+ entryChunk,
2442
+ routeModuleChunks
2443
+ ].flat(1).filter(isNonNullable)
2444
+ );
2424
2445
  return {
2425
2446
  module: `${ctx.publicPath}${entryChunk.file}`,
2426
2447
  imports: dedupe(chunks.flatMap((e) => e.imports ?? [])).map((imported) => {
2427
2448
  return `${ctx.publicPath}${viteManifest[imported].file}`;
2428
2449
  }) ?? [],
2429
- css: dedupe(chunks.flatMap((e) => e.css ?? [])).map((href) => {
2430
- return `${ctx.publicPath}${href}`;
2431
- }) ?? []
2450
+ css: dedupe(
2451
+ [
2452
+ // If CSS code splitting is disabled, Vite includes a singular 'style.css' asset
2453
+ // in the manifest that isn't tied to any route file. If we want to render these
2454
+ // styles correctly, we need to include them in the root route.
2455
+ isRootRoute ? getCssCodeSplitDisabledFile(ctx, viteConfig, viteManifest) : null,
2456
+ chunks.flatMap((e) => e.css ?? []).map((href) => `${ctx.publicPath}${href}`)
2457
+ ].flat(1).filter(isNonNullable)
2458
+ )
2432
2459
  };
2433
2460
  };
2434
2461
  function resolveDependantChunks(viteManifest, entryChunks) {
@@ -2742,16 +2769,19 @@ var reactRouterVitePlugin = () => {
2742
2769
  return sriManifest;
2743
2770
  };
2744
2771
  let generateReactRouterManifestsForBuild = async ({
2772
+ viteConfig: viteConfig2,
2745
2773
  routeIds
2746
2774
  }) => {
2747
- invariant(viteConfig);
2775
+ invariant(viteConfig2);
2748
2776
  let viteManifest = await loadViteManifest(
2749
2777
  getClientBuildDirectory(ctx.reactRouterConfig)
2750
2778
  );
2751
2779
  let entry = getReactRouterManifestBuildAssets(
2752
2780
  ctx,
2781
+ viteConfig2,
2753
2782
  viteManifest,
2754
- ctx.entryClientFilePath
2783
+ ctx.entryClientFilePath,
2784
+ null
2755
2785
  );
2756
2786
  let browserRoutes = {};
2757
2787
  let serverRoutes = {};
@@ -2763,7 +2793,6 @@ var reactRouterVitePlugin = () => {
2763
2793
  for (let route of Object.values(ctx.reactRouterConfig.routes)) {
2764
2794
  let routeFile = path5.join(ctx.reactRouterConfig.appDirectory, route.file);
2765
2795
  let sourceExports = routeManifestExports[route.id];
2766
- let isRootRoute = route.parentId === void 0;
2767
2796
  let hasClientAction = sourceExports.includes("clientAction");
2768
2797
  let hasClientLoader = sourceExports.includes("clientLoader");
2769
2798
  let hasClientMiddleware = sourceExports.includes(
@@ -2802,12 +2831,10 @@ var reactRouterVitePlugin = () => {
2802
2831
  hasErrorBoundary: sourceExports.includes("ErrorBoundary"),
2803
2832
  ...getReactRouterManifestBuildAssets(
2804
2833
  ctx,
2834
+ viteConfig2,
2805
2835
  viteManifest,
2806
2836
  `${routeFile}${BUILD_CLIENT_ROUTE_QUERY_STRING}`,
2807
- // If this is the root route, we also need to include assets from the
2808
- // client entry file as this is a common way for consumers to import
2809
- // global reset styles, etc.
2810
- isRootRoute ? [ctx.entryClientFilePath] : []
2837
+ route
2811
2838
  ),
2812
2839
  clientActionModule: hasRouteChunkByExportName.clientAction ? getPublicModulePathForEntry(
2813
2840
  ctx,
@@ -2838,7 +2865,7 @@ var reactRouterVitePlugin = () => {
2838
2865
  let fingerprintedValues = { entry, routes: browserRoutes };
2839
2866
  let version = getHash(JSON.stringify(fingerprintedValues), 8);
2840
2867
  let manifestPath = path5.posix.join(
2841
- viteConfig.build.assetsDir,
2868
+ viteConfig2.build.assetsDir,
2842
2869
  `manifest-${version}.js`
2843
2870
  );
2844
2871
  let url2 = `${ctx.publicPath}${manifestPath}`;
@@ -3608,7 +3635,9 @@ var reactRouterVitePlugin = () => {
3608
3635
  }
3609
3636
  case virtual.serverManifest.resolvedId: {
3610
3637
  let routeIds = getServerBundleRouteIds(this, ctx);
3638
+ invariant(viteConfig);
3611
3639
  let reactRouterManifest = viteCommand === "build" ? (await generateReactRouterManifestsForBuild({
3640
+ viteConfig,
3612
3641
  routeIds
3613
3642
  })).reactRouterServerManifest : await getReactRouterManifestForDev();
3614
3643
  if (!ctx.reactRouterConfig.ssr) {
@@ -4071,7 +4100,7 @@ async function handleSpaMode(viteConfig, reactRouterConfig, serverBuildDirectory
4071
4100
  );
4072
4101
  }
4073
4102
  await (0, import_promises2.writeFile)(path5.join(clientBuildDirectory, filename2), html);
4074
- let prettyDir = path5.relative(process.cwd(), clientBuildDirectory);
4103
+ let prettyDir = path5.relative(viteConfig.root, clientBuildDirectory);
4075
4104
  let prettyPath = path5.join(prettyDir, filename2);
4076
4105
  if (build.prerender.length > 0) {
4077
4106
  viteConfig.logger.info(
@@ -4199,12 +4228,13 @@ async function prerenderData(handler, prerenderPath, onlyRoutes, clientBuildDire
4199
4228
  ${normalizedPath}`
4200
4229
  );
4201
4230
  }
4202
- let outdir = path5.relative(process.cwd(), clientBuildDirectory);
4203
- let outfile = path5.join(outdir, ...normalizedPath.split("/"));
4231
+ let outfile = path5.join(clientBuildDirectory, ...normalizedPath.split("/"));
4204
4232
  await (0, import_promises2.mkdir)(path5.dirname(outfile), { recursive: true });
4205
4233
  await (0, import_promises2.writeFile)(outfile, data);
4206
4234
  viteConfig.logger.info(
4207
- `Prerender (data): ${prerenderPath} -> ${import_picocolors3.default.bold(outfile)}`
4235
+ `Prerender (data): ${prerenderPath} -> ${import_picocolors3.default.bold(
4236
+ path5.relative(viteConfig.root, outfile)
4237
+ )}`
4208
4238
  );
4209
4239
  return data;
4210
4240
  }
@@ -4238,12 +4268,17 @@ async function prerenderRoute(handler, prerenderPath, clientBuildDirectory, reac
4238
4268
  ${html}`
4239
4269
  );
4240
4270
  }
4241
- let outdir = path5.relative(process.cwd(), clientBuildDirectory);
4242
- let outfile = path5.join(outdir, ...normalizedPath.split("/"), "index.html");
4271
+ let outfile = path5.join(
4272
+ clientBuildDirectory,
4273
+ ...normalizedPath.split("/"),
4274
+ "index.html"
4275
+ );
4243
4276
  await (0, import_promises2.mkdir)(path5.dirname(outfile), { recursive: true });
4244
4277
  await (0, import_promises2.writeFile)(outfile, html);
4245
4278
  viteConfig.logger.info(
4246
- `Prerender (html): ${prerenderPath} -> ${import_picocolors3.default.bold(outfile)}`
4279
+ `Prerender (html): ${prerenderPath} -> ${import_picocolors3.default.bold(
4280
+ path5.relative(viteConfig.root, outfile)
4281
+ )}`
4247
4282
  );
4248
4283
  }
4249
4284
  async function prerenderResourceRoute(handler, prerenderPath, clientBuildDirectory, reactRouterConfig, viteConfig, requestInit) {
@@ -4257,12 +4292,13 @@ async function prerenderResourceRoute(handler, prerenderPath, clientBuildDirecto
4257
4292
  ${content.toString("utf8")}`
4258
4293
  );
4259
4294
  }
4260
- let outdir = path5.relative(process.cwd(), clientBuildDirectory);
4261
- let outfile = path5.join(outdir, ...normalizedPath.split("/"));
4295
+ let outfile = path5.join(clientBuildDirectory, ...normalizedPath.split("/"));
4262
4296
  await (0, import_promises2.mkdir)(path5.dirname(outfile), { recursive: true });
4263
4297
  await (0, import_promises2.writeFile)(outfile, content);
4264
4298
  viteConfig.logger.info(
4265
- `Prerender (resource): ${prerenderPath} -> ${import_picocolors3.default.bold(outfile)}`
4299
+ `Prerender (resource): ${prerenderPath} -> ${import_picocolors3.default.bold(
4300
+ path5.relative(viteConfig.root, outfile)
4301
+ )}`
4266
4302
  );
4267
4303
  }
4268
4304
  async function getPrerenderPaths(prerender, ssr, routes, logWarning = false) {
@@ -4623,10 +4659,6 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
4623
4659
  );
4624
4660
  let { moduleSyncEnabled } = await import(`file:///${path5.join(packageRoot, "module-sync-enabled/index.mjs")}`);
4625
4661
  let vite2 = getVite();
4626
- let viteServerConditions = [
4627
- ...vite2.defaultServerConditions ?? [],
4628
- ...moduleSyncEnabled ? ["module-sync"] : []
4629
- ];
4630
4662
  function getBaseOptions({
4631
4663
  viteUserConfig
4632
4664
  }) {
@@ -4658,15 +4690,24 @@ async function getEnvironmentOptionsResolvers(ctx, viteCommand) {
4658
4690
  function getBaseServerOptions({
4659
4691
  viteUserConfig
4660
4692
  }) {
4661
- let conditions = viteCommand === "build" ? viteServerConditions : ["development", ...viteServerConditions];
4693
+ let maybeModuleSyncConditions = [
4694
+ ...moduleSyncEnabled ? ["module-sync"] : []
4695
+ ];
4696
+ let maybeDevelopmentConditions = viteCommand === "build" ? [] : ["development"];
4697
+ let maybeDefaultServerConditions = vite2.defaultServerConditions || [];
4698
+ let defaultExternalConditions = ["node"];
4699
+ let baseConditions = [
4700
+ ...maybeDevelopmentConditions,
4701
+ ...maybeModuleSyncConditions
4702
+ ];
4662
4703
  return mergeEnvironmentOptions(getBaseOptions({ viteUserConfig }), {
4663
4704
  resolve: {
4664
4705
  external: (
4665
4706
  // If `unstable_viteEnvironmentApi` is `true`, `resolve.external` is set in the `configEnvironment` hook
4666
4707
  ctx.reactRouterConfig.future.unstable_viteEnvironmentApi ? void 0 : ssrExternals
4667
4708
  ),
4668
- conditions,
4669
- externalConditions: conditions
4709
+ conditions: [...baseConditions, ...maybeDefaultServerConditions],
4710
+ externalConditions: [...baseConditions, ...defaultExternalConditions]
4670
4711
  },
4671
4712
  build: {
4672
4713
  // We move SSR-only assets to client assets. Note that the
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-router/dev",
3
- "version": "7.6.3",
3
+ "version": "7.7.0-pre.0",
4
4
  "description": "Dev tools and CLI for React Router",
5
5
  "homepage": "https://reactrouter.com",
6
6
  "bugs": {
@@ -60,14 +60,14 @@
60
60
  }
61
61
  },
62
62
  "dependencies": {
63
- "@babel/core": "^7.21.8",
64
- "@babel/generator": "^7.21.5",
65
- "@babel/parser": "^7.21.8",
66
- "@babel/plugin-syntax-decorators": "^7.22.10",
67
- "@babel/plugin-syntax-jsx": "^7.21.4",
68
- "@babel/preset-typescript": "^7.21.5",
69
- "@babel/traverse": "^7.23.2",
70
- "@babel/types": "^7.22.5",
63
+ "isbot": "^5.1.11",
64
+ "@babel/core": "^7.27.7",
65
+ "@babel/generator": "^7.27.5",
66
+ "@babel/parser": "^7.27.7",
67
+ "@babel/plugin-syntax-jsx": "^7.27.1",
68
+ "@babel/preset-typescript": "^7.27.1",
69
+ "@babel/traverse": "^7.27.7",
70
+ "@babel/types": "^7.27.7",
71
71
  "@npmcli/package-json": "^4.0.1",
72
72
  "arg": "^5.0.1",
73
73
  "babel-dead-code-elimination": "^1.0.6",
@@ -85,13 +85,13 @@
85
85
  "set-cookie-parser": "^2.6.0",
86
86
  "tinyglobby": "^0.2.14",
87
87
  "valibot": "^0.41.0",
88
- "vite-node": "^3.1.4",
89
- "@react-router/node": "7.6.3"
88
+ "vite-node": "^3.2.2",
89
+ "@react-router/node": "7.7.0-pre.0"
90
90
  },
91
91
  "devDependencies": {
92
92
  "@types/babel__core": "^7.20.5",
93
- "@types/babel__generator": "^7.6.8",
94
- "@types/babel__traverse": "^7.20.5",
93
+ "@types/babel__generator": "^7.27.0",
94
+ "@types/babel__traverse": "^7.20.7",
95
95
  "@types/dedent": "^0.7.0",
96
96
  "@types/express": "^4.17.9",
97
97
  "@types/jsesc": "^3.0.1",
@@ -100,6 +100,7 @@
100
100
  "@types/npmcli__package-json": "^4.0.0",
101
101
  "@types/prettier": "^2.7.3",
102
102
  "@types/set-cookie-parser": "^2.4.1",
103
+ "@types/semver": "^7.7.0",
103
104
  "esbuild-register": "^3.6.0",
104
105
  "execa": "5.1.1",
105
106
  "express": "^4.19.2",
@@ -108,16 +109,16 @@
108
109
  "typescript": "^5.1.6",
109
110
  "vite": "^6.1.0",
110
111
  "wireit": "0.14.9",
111
- "wrangler": "^4.2.0",
112
- "@react-router/serve": "7.6.3",
113
- "react-router": "^7.6.3"
112
+ "wrangler": "^4.23.0",
113
+ "@react-router/serve": "7.7.0-pre.0",
114
+ "react-router": "^7.7.0-pre.0"
114
115
  },
115
116
  "peerDependencies": {
116
117
  "typescript": "^5.1.0",
117
118
  "vite": "^5.1.0 || ^6.0.0 || ^7.0.0",
118
119
  "wrangler": "^3.28.2 || ^4.0.0",
119
- "@react-router/serve": "^7.6.3",
120
- "react-router": "^7.6.3"
120
+ "@react-router/serve": "^7.7.0-pre.0",
121
+ "react-router": "^7.7.0-pre.0"
121
122
  },
122
123
  "peerDependenciesMeta": {
123
124
  "@react-router/serve": {