@react-router/dev 0.0.0-experimental-c0856287f → 0.0.0-experimental-79e23be50

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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-c0856287f
2
+ * @react-router/dev v0.0.0-experimental-79e23be50
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -20,10 +20,8 @@ var babel = require('@babel/core');
20
20
  var serverRuntime = require('@react-router/server-runtime');
21
21
  var esModuleLexer = require('es-module-lexer');
22
22
  var jsesc = require('jsesc');
23
- var pick = require('lodash/pick');
24
- var omit = require('lodash/omit');
25
23
  var colors = require('picocolors');
26
- var config = require('../config.js');
24
+ var findConfig = require('../config/findConfig.js');
27
25
  var invariant = require('../invariant.js');
28
26
  var nodeAdapter = require('./node-adapter.js');
29
27
  var styles = require('./styles.js');
@@ -31,6 +29,7 @@ var vmod = require('./vmod.js');
31
29
  var resolveFileUrl = require('./resolve-file-url.js');
32
30
  var removeExports = require('./remove-exports.js');
33
31
  var importViteEsmSync = require('./import-vite-esm-sync.js');
32
+ var config = require('../config.js');
34
33
 
35
34
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
36
35
 
@@ -57,8 +56,6 @@ var url__namespace = /*#__PURE__*/_interopNamespace(url);
57
56
  var fse__namespace = /*#__PURE__*/_interopNamespace(fse);
58
57
  var babel__default = /*#__PURE__*/_interopDefaultLegacy(babel);
59
58
  var jsesc__default = /*#__PURE__*/_interopDefaultLegacy(jsesc);
60
- var pick__default = /*#__PURE__*/_interopDefaultLegacy(pick);
61
- var omit__default = /*#__PURE__*/_interopDefaultLegacy(omit);
62
59
  var colors__default = /*#__PURE__*/_interopDefaultLegacy(colors);
63
60
 
64
61
  async function resolveViteConfig({
@@ -92,7 +89,7 @@ async function loadPluginContext({
92
89
  if (!root) {
93
90
  root = process.env.REACT_ROUTER_ROOT || process.cwd();
94
91
  }
95
- configFile = configFile ?? config.findConfig(root, "vite.config", [".ts", ".cts", ".mts", ".js", ".cjs", ".mjs"]);
92
+ configFile = configFile ?? findConfig.findConfig(root, "vite.config", [".ts", ".cts", ".mts", ".js", ".cjs", ".mjs"]);
96
93
  if (!configFile) {
97
94
  console.error(colors__default["default"].red("Vite config file not found"));
98
95
  process.exit(1);
@@ -113,10 +110,6 @@ const CLIENT_ROUTE_EXPORTS = ["clientAction", "clientLoader", "default", "ErrorB
113
110
  // The "=1" suffix ensures client route requests can be processed before hitting
114
111
  // the Vite plugin since "?client-route" can be serialized as "?client-route="
115
112
  const CLIENT_ROUTE_QUERY_STRING = "?client-route=1";
116
- // Only expose a subset of route properties to the "serverBundles" function
117
- const branchRouteProperties = ["id", "path", "file", "index"];
118
- const configRouteToBranchRoute = configRoute => pick__default["default"](configRoute, branchRouteProperties);
119
- const excludedConfigPresetKeys = ["presets"];
120
113
  let serverBuildId = vmod.id("server-build");
121
114
  let serverManifestId = vmod.id("server-manifest");
122
115
  let browserManifestId = vmod.id("browser-manifest");
@@ -244,44 +237,6 @@ let getClientBuildDirectory = reactRouterConfig => path__namespace.join(reactRou
244
237
  let defaultEntriesDir = path__namespace.resolve(__dirname, "..", "config", "defaults");
245
238
  let defaultEntries = fse__namespace.readdirSync(defaultEntriesDir).map(filename => path__namespace.join(defaultEntriesDir, filename));
246
239
  invariant["default"](defaultEntries.length > 0, "No default entries found");
247
- let mergeReactRouterConfig = (...configs) => {
248
- let reducer = (configA, configB) => {
249
- let mergeRequired = key => configA[key] !== undefined && configB[key] !== undefined;
250
- return {
251
- ...configA,
252
- ...configB,
253
- ...(mergeRequired("buildEnd") ? {
254
- buildEnd: async (...args) => {
255
- var _configA$buildEnd, _configB$buildEnd;
256
- await Promise.all([(_configA$buildEnd = configA.buildEnd) === null || _configA$buildEnd === void 0 ? void 0 : _configA$buildEnd.call(configA, ...args), (_configB$buildEnd = configB.buildEnd) === null || _configB$buildEnd === void 0 ? void 0 : _configB$buildEnd.call(configB, ...args)]);
257
- }
258
- } : {}),
259
- ...(mergeRequired("future") ? {
260
- future: {
261
- ...configA.future,
262
- ...configB.future
263
- }
264
- } : {}),
265
- ...(mergeRequired("ignoredRouteFiles") ? {
266
- ignoredRouteFiles: Array.from(new Set([...(configA.ignoredRouteFiles ?? []), ...(configB.ignoredRouteFiles ?? [])]))
267
- } : {}),
268
- ...(mergeRequired("presets") ? {
269
- presets: [...(configA.presets ?? []), ...(configB.presets ?? [])]
270
- } : {}),
271
- ...(mergeRequired("routes") ? {
272
- routes: async (...args) => {
273
- var _configA$routes, _configB$routes;
274
- let [routesA, routesB] = await Promise.all([(_configA$routes = configA.routes) === null || _configA$routes === void 0 ? void 0 : _configA$routes.call(configA, ...args), (_configB$routes = configB.routes) === null || _configB$routes === void 0 ? void 0 : _configB$routes.call(configB, ...args)]);
275
- return {
276
- ...routesA,
277
- ...routesB
278
- };
279
- }
280
- } : {})
281
- };
282
- };
283
- return configs.reduce(reducer, {});
284
- };
285
240
  let reactRouterDevLoadContext = () => ({});
286
241
  let setReactRouterDevLoadContext = loadContext => {
287
242
  reactRouterDevLoadContext = loadContext;
@@ -315,86 +270,21 @@ const reactRouterVitePlugin = _config => {
315
270
  let ctx;
316
271
  /** Mutates `ctx` as a side-effect */
317
272
  let updatePluginContext = async () => {
318
- var _viteUserConfig$serve, _viteUserConfig$build;
319
- let presets = (await Promise.all((reactRouterUserConfig.presets ?? []).map(async preset => {
320
- if (!preset.name) {
321
- throw new Error("React Router presets must have a `name` property defined.");
322
- }
323
- if (!preset.reactRouterConfig) {
324
- return null;
325
- }
326
- let configPreset = omit__default["default"](await preset.reactRouterConfig({
327
- reactRouterUserConfig
328
- }), excludedConfigPresetKeys);
329
- return configPreset;
330
- }))).filter(function isNotNull(value) {
331
- return value !== null;
332
- });
333
- let defaults = {
334
- basename: "/",
335
- buildDirectory: "build",
336
- manifest: false,
337
- serverBuildFile: "index.js",
338
- ssr: true
339
- };
340
- let resolvedReactRouterUserConfig = {
341
- ...defaults,
342
- // Default values should be completely overridden by user/preset config, not merged
343
- ...mergeReactRouterConfig(...presets, reactRouterUserConfig)
344
- };
273
+ var _viteUserConfig$build;
345
274
  let rootDirectory = viteUserConfig.root ?? process.env.REACT_ROUTER_ROOT ?? process.cwd();
346
- let {
347
- basename,
348
- buildEnd,
349
- manifest,
350
- ssr
351
- } = resolvedReactRouterUserConfig;
352
- let isSpaMode = !ssr;
353
- let {
354
- appDirectory,
355
- entryClientFilePath,
356
- entryServerFilePath,
357
- future,
358
- routes,
359
- serverModuleFormat
360
- } = await config.resolveConfig(resolvedReactRouterUserConfig, {
275
+ let reactRouterConfig = await config.resolveReactRouterConfig({
361
276
  rootDirectory,
362
- isSpaMode
277
+ reactRouterUserConfig,
278
+ viteUserConfig,
279
+ viteCommand
363
280
  });
364
- let buildDirectory = path__namespace.resolve(rootDirectory, resolvedReactRouterUserConfig.buildDirectory);
365
281
  let {
366
- serverBuildFile,
367
- serverBundles
368
- } = resolvedReactRouterUserConfig;
369
- let publicPath = viteUserConfig.base ?? "/";
370
- if (basename !== "/" && viteCommand === "serve" && !((_viteUserConfig$serve = viteUserConfig.server) !== null && _viteUserConfig$serve !== void 0 && _viteUserConfig$serve.middlewareMode) && !basename.startsWith(publicPath)) {
371
- throw new Error("When using the React Router `basename` and the Vite `base` config, " + "the `basename` config must begin with `base` for the default " + "Vite dev server.");
372
- }
373
- // Log warning for incompatible vite config flags
374
- if (isSpaMode && serverBundles) {
375
- console.warn(colors__default["default"].yellow(colors__default["default"].bold("⚠️ SPA Mode: ") + "the `serverBundles` config is invalid with " + "`ssr:false` and will be ignored`"));
376
- serverBundles = undefined;
377
- }
378
- let reactRouterConfig = deepFreeze({
379
- appDirectory,
380
- basename,
381
- buildDirectory,
382
- buildEnd,
383
- future,
384
- manifest,
385
- publicPath,
386
- routes,
387
- serverBuildFile,
388
- serverBundles,
389
- serverModuleFormat,
390
- ssr
282
+ entryClientFilePath,
283
+ entryServerFilePath
284
+ } = await config.resolveEntryFiles({
285
+ rootDirectory,
286
+ reactRouterConfig
391
287
  });
392
- for (let preset of reactRouterUserConfig.presets ?? []) {
393
- var _preset$reactRouterCo;
394
- await ((_preset$reactRouterCo = preset.reactRouterConfigResolved) === null || _preset$reactRouterCo === void 0 ? void 0 : _preset$reactRouterCo.call(preset, {
395
- reactRouterConfig
396
- }));
397
- }
398
288
  let viteManifestEnabled = ((_viteUserConfig$build = viteUserConfig.build) === null || _viteUserConfig$build === void 0 ? void 0 : _viteUserConfig$build.manifest) === true;
399
289
  let ssrBuildCtx = viteConfigEnv.isSsrBuild && viteCommand === "build" ? {
400
290
  isSsrBuild: true,
@@ -455,6 +345,10 @@ const reactRouterVitePlugin = _config => {
455
345
  let manifestContents = await fse__namespace.readFile(path__namespace.resolve(directory, ".vite", "manifest.json"), "utf-8");
456
346
  return JSON.parse(manifestContents);
457
347
  };
348
+ let getViteManifestFilePaths = viteManifest => {
349
+ let filePaths = Object.values(viteManifest).map(chunk => chunk.file);
350
+ return new Set(filePaths);
351
+ };
458
352
  let getViteManifestAssetPaths = viteManifest => {
459
353
  // Get .css?url imports and CSS entry points
460
354
  let cssUrlPaths = Object.values(viteManifest).filter(chunk => chunk.file.endsWith(".css")).map(chunk => chunk.file);
@@ -563,7 +457,7 @@ const reactRouterVitePlugin = _config => {
563
457
  return [{
564
458
  name: "react-router",
565
459
  config: async (_viteUserConfig, _viteConfigEnv) => {
566
- var _viteUserConfig$serve2, _viteUserConfig$serve3, _viteUserConfig$build4;
460
+ var _viteUserConfig$serve, _viteUserConfig$serve2, _viteUserConfig$build4;
567
461
  // Preload Vite's ESM build up-front as soon as we're in an async context
568
462
  await importViteEsmSync.preloadViteEsm();
569
463
  // Ensure sync import of Vite works after async preload
@@ -596,11 +490,11 @@ const reactRouterVitePlugin = _config => {
596
490
  __reactRouterPluginContext: ctx,
597
491
  appType: viteCommand === "serve" && viteConfigEnv.mode === "production" && ctx.reactRouterConfig.ssr === false ? "spa" : "custom",
598
492
  ssr: {
599
- external: [
600
- // This is only necessary for development within this repo
601
- // because these packages are symlinked and Vite treats them as
602
- // internal source code. For consumers this is a no-op.
603
- "react-router", "react-router-dom", "@react-router/architect", "@react-router/cloudflare-pages", "@react-router/cloudflare-workers", "@react-router/cloudflare", "@react-router/deno", "@react-router/dev", "@react-router/express", "@react-router/netlify", "@react-router/node", "@react-router/serve", "@react-router/server-runtime"]
493
+ external: isInReactRouterMonorepo() ? [
494
+ // This is only needed within this repo because these packages
495
+ // are linked to a directory outside of node_modules so Vite
496
+ // treats them as internal code by default.
497
+ "react-router", "react-router-dom", "@react-router/architect", "@react-router/cloudflare-pages", "@react-router/cloudflare-workers", "@react-router/cloudflare", "@react-router/deno", "@react-router/dev", "@react-router/express", "@react-router/netlify", "@react-router/node", "@react-router/serve", "@react-router/server-runtime"] : undefined
604
498
  },
605
499
  optimizeDeps: {
606
500
  include: [
@@ -610,13 +504,7 @@ const reactRouterVitePlugin = _config => {
610
504
  "react", "react/jsx-runtime", "react/jsx-dev-runtime", "react-dom/client",
611
505
  // Pre-bundle router dependencies to avoid router duplicates.
612
506
  // Mismatching routers cause `Error: You must render this element inside a <Remix> element`.
613
- "react-router", "react-router-dom",
614
- // For some reason, the `vite-dotenv` integration test consistently fails on webkit
615
- // with `504 (Outdated Optimize Dep)` from Vite unless `@react-router/node` is included
616
- // in `optimizeDeps.include`. 🤷
617
- // This could be caused by how we copy `node_modules/` into integration test fixtures,
618
- // so maybe this will be unnecessary once we switch to pnpm
619
- "@react-router/node"]
507
+ "react-router", "react-router-dom"]
620
508
  },
621
509
  esbuild: {
622
510
  jsx: "automatic",
@@ -635,7 +523,7 @@ const reactRouterVitePlugin = _config => {
635
523
  // If we don't do this and a default entry file is used, the server
636
524
  // will throw an error that the file is not allowed to be read.
637
525
  // https://vitejs.dev/config/server-options#server-fs-allow
638
- server: (_viteUserConfig$serve2 = viteUserConfig.server) !== null && _viteUserConfig$serve2 !== void 0 && (_viteUserConfig$serve3 = _viteUserConfig$serve2.fs) !== null && _viteUserConfig$serve3 !== void 0 && _viteUserConfig$serve3.allow ? {
526
+ server: (_viteUserConfig$serve = viteUserConfig.server) !== null && _viteUserConfig$serve !== void 0 && (_viteUserConfig$serve2 = _viteUserConfig$serve.fs) !== null && _viteUserConfig$serve2 !== void 0 && _viteUserConfig$serve2.allow ? {
639
527
  fs: {
640
528
  allow: defaultEntries
641
529
  }
@@ -834,7 +722,7 @@ const reactRouterVitePlugin = _config => {
834
722
  let serverBuildDirectory = getServerBuildDirectory(ctx);
835
723
  let ssrViteManifest = await loadViteManifest(serverBuildDirectory);
836
724
  let clientViteManifest = await loadViteManifest(clientBuildDirectory);
837
- let clientAssetPaths = getViteManifestAssetPaths(clientViteManifest);
725
+ let clientFilePaths = getViteManifestFilePaths(clientViteManifest);
838
726
  let ssrAssetPaths = getViteManifestAssetPaths(ssrViteManifest);
839
727
  // We only move assets that aren't in the client build, otherwise we
840
728
  // remove them. These assets only exist because we explicitly set
@@ -845,7 +733,7 @@ const reactRouterVitePlugin = _config => {
845
733
  let movedAssetPaths = [];
846
734
  for (let ssrAssetPath of ssrAssetPaths) {
847
735
  let src = path__namespace.join(serverBuildDirectory, ssrAssetPath);
848
- if (!clientAssetPaths.has(ssrAssetPath)) {
736
+ if (!clientFilePaths.has(ssrAssetPath)) {
849
737
  let dest = path__namespace.join(clientBuildDirectory, ssrAssetPath);
850
738
  await fse__namespace.move(src, dest);
851
739
  movedAssetPaths.push(dest);
@@ -1075,6 +963,13 @@ const reactRouterVitePlugin = _config => {
1075
963
  }
1076
964
  }];
1077
965
  };
966
+ function isInReactRouterMonorepo() {
967
+ // We use '@react-router/server-runtime' for this check since it's a
968
+ // dependency of this package and guaranteed to be in node_modules
969
+ let serverRuntimePath = path__namespace.dirname(require.resolve("@react-router/server-runtime/package.json"));
970
+ let serverRuntimeParentDir = path__namespace.basename(path__namespace.resolve(serverRuntimePath, ".."));
971
+ return serverRuntimeParentDir === "packages";
972
+ }
1078
973
  function isEqualJson(v1, v2) {
1079
974
  return JSON.stringify(v1) === JSON.stringify(v2);
1080
975
  }
@@ -1169,7 +1064,6 @@ async function handleSpaMode(serverBuildDirectoryPath, serverBuildFile, clientBu
1169
1064
  fse__namespace.removeSync(serverBuildDirectoryPath);
1170
1065
  }
1171
1066
 
1172
- exports.configRouteToBranchRoute = configRouteToBranchRoute;
1173
1067
  exports.extractPluginContext = extractPluginContext;
1174
1068
  exports.getServerBuildDirectory = getServerBuildDirectory;
1175
1069
  exports.loadPluginContext = loadPluginContext;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-c0856287f
2
+ * @react-router/dev v0.0.0-experimental-79e23be50
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-c0856287f
2
+ * @react-router/dev v0.0.0-experimental-79e23be50
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-c0856287f
2
+ * @react-router/dev v0.0.0-experimental-79e23be50
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,11 +1,11 @@
1
1
  import type { ServerBuild } from "@react-router/server-runtime";
2
2
  import type { ViteDevServer } from "vite";
3
- import type { RemixConfig as ResolvedRemixConfig } from "../config";
3
+ import type { ResolvedVitePluginConfig } from "../config";
4
4
  export declare const isCssModulesFile: (file: string) => boolean;
5
5
  export declare const getStylesForUrl: ({ viteDevServer, rootDirectory, reactRouterConfig, entryClientFilePath, cssModulesManifest, build, url, }: {
6
6
  viteDevServer: ViteDevServer;
7
7
  rootDirectory: string;
8
- reactRouterConfig: Pick<ResolvedRemixConfig, "appDirectory" | "routes">;
8
+ reactRouterConfig: Pick<ResolvedVitePluginConfig, "appDirectory" | "routes">;
9
9
  entryClientFilePath: string;
10
10
  cssModulesManifest: Record<string, string>;
11
11
  build: ServerBuild;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-c0856287f
2
+ * @react-router/dev v0.0.0-experimental-79e23be50
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/vite/vmod.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-c0856287f
2
+ * @react-router/dev v0.0.0-experimental-79e23be50
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-router/dev",
3
- "version": "0.0.0-experimental-c0856287f",
3
+ "version": "0.0.0-experimental-79e23be50",
4
4
  "description": "Dev tools and CLI for React Router",
5
5
  "homepage": "https://reactrouter.com",
6
6
  "bugs": {
@@ -42,9 +42,9 @@
42
42
  "react-refresh": "^0.14.0",
43
43
  "semver": "^7.3.7",
44
44
  "set-cookie-parser": "^2.6.0",
45
- "@react-router/server-runtime": "0.0.0-experimental-c0856287f",
46
- "@react-router/node": "0.0.0-experimental-c0856287f",
47
- "react-router": "0.0.0-experimental-c0856287f"
45
+ "@react-router/node": "0.0.0-experimental-79e23be50",
46
+ "react-router": "0.0.0-experimental-79e23be50",
47
+ "@react-router/server-runtime": "0.0.0-experimental-79e23be50"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@types/babel__core": "^7.20.5",
@@ -69,14 +69,14 @@
69
69
  "tiny-invariant": "^1.2.0",
70
70
  "vite": "^5.1.0",
71
71
  "wrangler": "^3.28.2",
72
- "@react-router/serve": "0.0.0-experimental-c0856287f"
72
+ "@react-router/serve": "0.0.0-experimental-79e23be50"
73
73
  },
74
74
  "peerDependencies": {
75
75
  "typescript": "^5.1.0",
76
76
  "vite": "^5.1.0",
77
77
  "wrangler": "^3.28.2",
78
- "react-router": "^0.0.0-experimental-c0856287f",
79
- "@react-router/serve": "^0.0.0-experimental-c0856287f"
78
+ "react-router": "^0.0.0-experimental-79e23be50",
79
+ "@react-router/serve": "^0.0.0-experimental-79e23be50"
80
80
  },
81
81
  "peerDependenciesMeta": {
82
82
  "@react-router/serve": {
@@ -1,28 +0,0 @@
1
- /**
2
- * @react-router/dev v0.0.0-experimental-c0856287f
3
- *
4
- * Copyright (c) Remix Software Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE.md file in the root directory of this source tree.
8
- *
9
- * @license MIT
10
- */
11
- 'use strict';
12
-
13
- Object.defineProperty(exports, '__esModule', { value: true });
14
-
15
- /**
16
- * The mode to use when running the server.
17
- */
18
- exports.ServerMode = void 0;
19
- (function (ServerMode) {
20
- ServerMode["Development"] = "development";
21
- ServerMode["Production"] = "production";
22
- ServerMode["Test"] = "test";
23
- })(exports.ServerMode || (exports.ServerMode = {}));
24
- function isValidServerMode(mode) {
25
- return mode === exports.ServerMode.Development || mode === exports.ServerMode.Production || mode === exports.ServerMode.Test;
26
- }
27
-
28
- exports.isValidServerMode = isValidServerMode;