@react-router/dev 0.0.0-experimental-e16afd9b7 → 0.0.0-experimental-13d6d438f

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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/cli/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/cli/run.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * @react-router/dev v0.0.0-experimental-e16afd9b7
3
+ * @react-router/dev v0.0.0-experimental-13d6d438f
4
4
  *
5
5
  * Copyright (c) Remix Software Inc.
6
6
  *
package/dist/colors.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/config.d.ts CHANGED
@@ -39,7 +39,6 @@ interface FutureConfig {
39
39
  v3_fetcherPersist: boolean;
40
40
  v3_relativeSplatPath: boolean;
41
41
  v3_throwAbortReason: boolean;
42
- unstable_serverComponents: boolean;
43
42
  }
44
43
  export type BuildManifest = DefaultBuildManifest | ServerBundlesBuildManifest;
45
44
  type BuildEndHook = (args: {
@@ -257,7 +256,6 @@ export declare function resolveEntryFiles({ rootDirectory, reactRouterConfig, }:
257
256
  reactRouterConfig: ResolvedVitePluginConfig;
258
257
  }): Promise<{
259
258
  entryClientFilePath: string;
260
- entryReactServerFilePath: string | undefined;
261
259
  entryServerFilePath: string;
262
260
  }>;
263
261
  export {};
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -187,8 +187,7 @@ async function resolveReactRouterConfig({
187
187
  let future = {
188
188
  v3_fetcherPersist: (userFuture === null || userFuture === void 0 ? void 0 : userFuture.v3_fetcherPersist) === true,
189
189
  v3_relativeSplatPath: (userFuture === null || userFuture === void 0 ? void 0 : userFuture.v3_relativeSplatPath) === true,
190
- v3_throwAbortReason: (userFuture === null || userFuture === void 0 ? void 0 : userFuture.v3_throwAbortReason) === true,
191
- unstable_serverComponents: (userFuture === null || userFuture === void 0 ? void 0 : userFuture.unstable_serverComponents) === true
190
+ v3_throwAbortReason: (userFuture === null || userFuture === void 0 ? void 0 : userFuture.v3_throwAbortReason) === true
192
191
  };
193
192
  let reactRouterConfig = deepFreeze({
194
193
  appDirectory,
@@ -224,13 +223,10 @@ async function resolveEntryFiles({
224
223
  let defaultsDirectory = path__default["default"].resolve(__dirname, "config", "defaults");
225
224
  let userEntryClientFile = findEntry(appDirectory, "entry.client");
226
225
  let userEntryServerFile = findEntry(appDirectory, "entry.server");
227
- let userEntryReactServerFile = findEntry(appDirectory, "entry.react-server");
228
226
  let entryServerFile;
229
- let entryReactServerFile;
230
- let entryClientFile = userEntryClientFile || future.unstable_serverComponents ? "entry.client.rsc.tsx" : "entry.client.tsx";
227
+ let entryClientFile = userEntryClientFile || "entry.client.tsx";
231
228
  let pkgJson = await PackageJson__default["default"].load(rootDirectory);
232
229
  let deps = pkgJson.content.dependencies ?? {};
233
- let serverRuntime = deps["@react-router/deno"] ? "deno" : deps["@react-router/cloudflare"] ? "cloudflare" : deps["@react-router/node"] ? "node" : undefined;
234
230
  if (!reactRouterConfig.ssr) {
235
231
  // This is a super-simple default since we don't need streaming in SPA Mode.
236
232
  // We can include this in a remix-spa template, but right now `npx remix reveal`
@@ -244,6 +240,7 @@ async function resolveEntryFiles({
244
240
  } else if (userEntryServerFile) {
245
241
  entryServerFile = userEntryServerFile;
246
242
  } else {
243
+ let serverRuntime = deps["@react-router/deno"] ? "deno" : deps["@react-router/cloudflare"] ? "cloudflare" : deps["@react-router/node"] ? "node" : undefined;
247
244
  if (!serverRuntime) {
248
245
  let serverRuntimes = ["@react-router/deno", "@react-router/cloudflare", "@react-router/node"];
249
246
  let formattedList = disjunctionListFormat.format(serverRuntimes);
@@ -264,26 +261,12 @@ async function resolveEntryFiles({
264
261
  stdio: "inherit"
265
262
  });
266
263
  }
267
- entryServerFile = reactRouterConfig.future.unstable_serverComponents ? `entry.server.${serverRuntime}.rsc.tsx` : `entry.server.${serverRuntime}.tsx`;
268
- }
269
- if (future.unstable_serverComponents) {
270
- if (userEntryReactServerFile) {
271
- entryReactServerFile = userEntryReactServerFile;
272
- } else {
273
- if (!serverRuntime) {
274
- let serverRuntimes = ["@react-router/deno", "@react-router/cloudflare", "@react-router/node"];
275
- let formattedList = disjunctionListFormat.format(serverRuntimes);
276
- throw new Error(`Could not determine server runtime. Please install one of the following: ${formattedList}`);
277
- }
278
- entryReactServerFile = `entry.react-server.${serverRuntime === "node" ? serverRuntime : "web"}.tsx`;
279
- }
264
+ entryServerFile = `entry.server.${serverRuntime}.tsx`;
280
265
  }
281
266
  let entryClientFilePath = userEntryClientFile ? path__default["default"].resolve(reactRouterConfig.appDirectory, userEntryClientFile) : path__default["default"].resolve(defaultsDirectory, entryClientFile);
282
267
  let entryServerFilePath = userEntryServerFile ? path__default["default"].resolve(reactRouterConfig.appDirectory, userEntryServerFile) : path__default["default"].resolve(defaultsDirectory, entryServerFile);
283
- let entryReactServerFilePath = userEntryReactServerFile ? path__default["default"].resolve(reactRouterConfig.appDirectory, userEntryReactServerFile) : entryReactServerFile ? path__default["default"].resolve(defaultsDirectory, entryReactServerFile) : undefined;
284
268
  return {
285
269
  entryClientFilePath,
286
- entryReactServerFilePath,
287
270
  entryServerFilePath
288
271
  };
289
272
  }
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/invariant.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -227,16 +227,7 @@ async function build(root, {
227
227
  });
228
228
  }
229
229
  await cleanBuildDirectory(viteConfig, ctx);
230
- // Then run React server build first
231
- if (reactRouterConfig.future.unstable_serverComponents) {
232
- // TODO: This will be handled by the vite env API in the future
233
- process.env.REACT_SERVER_BUILD = "1";
234
- await viteBuild({
235
- ssr: true
236
- });
237
- }
238
- process.env.REACT_SERVER_BUILD = "";
239
- // Run the Vite client build second
230
+ // Run the Vite client build first
240
231
  await viteBuild({
241
232
  ssr: false
242
233
  });
@@ -276,10 +267,6 @@ async function build(root, {
276
267
  reactRouterConfig,
277
268
  viteConfig
278
269
  }));
279
- const {
280
- serverModules
281
- } = plugin.getReactServerOptions();
282
- invariant["default"](!serverModules.size, "`use server` is not yet supported.");
283
270
  }
284
271
 
285
272
  exports.build = build;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
package/dist/vite/dev.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -59,7 +59,6 @@ type ReactRouterPluginSsrBuildContext = {
59
59
  export type ReactRouterPluginContext = ReactRouterPluginSsrBuildContext & {
60
60
  rootDirectory: string;
61
61
  entryClientFilePath: string;
62
- entryReactServerFilePath?: string;
63
62
  entryServerFilePath: string;
64
63
  reactRouterConfig: ResolvedVitePluginConfig;
65
64
  viteManifestEnabled: boolean;
@@ -69,12 +68,4 @@ type MaybePromise<T> = T | Promise<T>;
69
68
  export declare let setReactRouterDevLoadContext: (loadContext: (request: Request) => MaybePromise<Record<string, unknown>>) => void;
70
69
  export type ReactRouterVitePlugin = (config?: VitePluginConfig) => Vite.Plugin[];
71
70
  export declare const reactRouterVitePlugin: ReactRouterVitePlugin;
72
- declare global {
73
- var __clientModules: Set<string>;
74
- var __serverModules: Set<string>;
75
- }
76
- export declare function getReactServerOptions(): {
77
- clientModules: Set<string>;
78
- serverModules: Set<string>;
79
- };
80
71
  export {};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -22,7 +22,6 @@ var reactRouter = require('react-router');
22
22
  var esModuleLexer = require('es-module-lexer');
23
23
  var jsesc = require('jsesc');
24
24
  var colors = require('picocolors');
25
- var unpluginRsc = require('unplugin-rsc');
26
25
  var findConfig = require('../config/findConfig.js');
27
26
  var invariant = require('../invariant.js');
28
27
  var nodeAdapter = require('./node-adapter.js');
@@ -119,16 +118,13 @@ let serverManifestId = vmod.id("server-manifest");
119
118
  let browserManifestId = vmod.id("browser-manifest");
120
119
  let hmrRuntimeId = vmod.id("hmr-runtime");
121
120
  let injectHmrRuntimeId = vmod.id("inject-hmr-runtime");
122
- let reactServerBuildId = vmod.id("react-server-build");
123
- let clientReferencesId = vmod.id("client-references");
124
- let serverReferencesId = vmod.id("server-references");
125
121
  const resolveRelativeRouteFilePath = (route, reactRouterConfig) => {
126
122
  let vite = importViteEsmSync.importViteEsmSync();
127
123
  let file = route.file;
128
124
  let fullPath = path__namespace.resolve(reactRouterConfig.appDirectory, file);
129
125
  return vite.normalizePath(fullPath);
130
126
  };
131
- let vmods = [serverBuildId, serverManifestId, browserManifestId, reactServerBuildId, clientReferencesId, serverReferencesId];
127
+ let vmods = [serverBuildId, serverManifestId, browserManifestId];
132
128
  const invalidateVirtualModules = viteDevServer => {
133
129
  vmods.forEach(vmod$1 => {
134
130
  let mod = viteDevServer.moduleGraph.getModuleById(vmod.resolve(vmod$1));
@@ -237,7 +233,6 @@ const getServerBundleBuildConfig = viteUserConfig => {
237
233
  return viteUserConfig.__reactRouterServerBundleBuildConfig;
238
234
  };
239
235
  let getServerBuildDirectory = ctx => path__namespace.join(ctx.reactRouterConfig.buildDirectory, "server", ...(ctx.serverBundleBuildConfig ? [ctx.serverBundleBuildConfig.serverBundleId] : []));
240
- let getReactServerBuildDirectory = reactRouterConfig => path__namespace.join(reactRouterConfig.buildDirectory, "react-server");
241
236
  let getClientBuildDirectory = reactRouterConfig => path__namespace.join(reactRouterConfig.buildDirectory, "client");
242
237
  let defaultEntriesDir = path__namespace.resolve(__dirname, "..", "config", "defaults");
243
238
  let defaultEntries = fse__namespace.readdirSync(defaultEntriesDir).map(filename => path__namespace.join(defaultEntriesDir, filename));
@@ -285,7 +280,6 @@ const reactRouterVitePlugin = _config => {
285
280
  });
286
281
  let {
287
282
  entryClientFilePath,
288
- entryReactServerFilePath,
289
283
  entryServerFilePath
290
284
  } = await config.resolveEntryFiles({
291
285
  rootDirectory,
@@ -303,7 +297,6 @@ const reactRouterVitePlugin = _config => {
303
297
  reactRouterConfig,
304
298
  rootDirectory,
305
299
  entryClientFilePath,
306
- entryReactServerFilePath,
307
300
  entryServerFilePath,
308
301
  viteManifestEnabled,
309
302
  ...ssrBuildCtx
@@ -321,7 +314,7 @@ const reactRouterVitePlugin = _config => {
321
314
  ctx.serverBundleBuildConfig.routes :
322
315
  // Otherwise, all routes are imported as usual
323
316
  ctx.reactRouterConfig.routes;
324
- let code = `
317
+ return `
325
318
  import * as entryServer from ${JSON.stringify(resolveFileUrl.resolveFileUrl(ctx, ctx.entryServerFilePath))};
326
319
  ${Object.keys(routes).map((key, index) => {
327
320
  let route = routes[key];
@@ -347,61 +340,6 @@ const reactRouterVitePlugin = _config => {
347
340
  }`;
348
341
  }).join(",\n ")}
349
342
  };`;
350
- if (ctx.reactRouterConfig.future.unstable_serverComponents) {
351
- code += `
352
- export { default as clientReferences } from ${JSON.stringify(clientReferencesId)};`;
353
- }
354
- return code;
355
- };
356
- let {
357
- clientModules,
358
- serverModules
359
- } = getReactServerOptions();
360
- let getReactServerEntry = () => {
361
- invariant["default"](viteConfig, "viteconfig required to generate the react-server entry");
362
- invariant["default"](ctx.entryReactServerFilePath, "entryReactServerFilePath required to generate the react-server entry");
363
- let routes = ctx.serverBundleBuildConfig ?
364
- // For server bundle builds, the server build should only import the
365
- // routes for this bundle rather than importing all routes
366
- ctx.serverBundleBuildConfig.routes :
367
- // Otherwise, all routes are imported as usual
368
- ctx.reactRouterConfig.routes;
369
- return `
370
- import * as entryServer from ${JSON.stringify(resolveFileUrl.resolveFileUrl(ctx, ctx.entryReactServerFilePath))};
371
- ${Object.keys(routes).map((key, index) => {
372
- let route = routes[key];
373
- return `import * as route${index} from ${JSON.stringify(resolveFileUrl.resolveFileUrl(ctx, resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)))};`;
374
- }).join("\n")}
375
- export const future = ${JSON.stringify(ctx.reactRouterConfig.future)};
376
- export const basename = ${JSON.stringify(ctx.reactRouterConfig.basename)};
377
- export const entry = { module: entryServer };
378
- export const routes = {
379
- ${Object.keys(routes).map((key, index) => {
380
- let route = routes[key];
381
- return `${JSON.stringify(key)}: {
382
- id: ${JSON.stringify(route.id)},
383
- parentId: ${JSON.stringify(route.parentId)},
384
- path: ${JSON.stringify(route.path)},
385
- index: ${JSON.stringify(route.index)},
386
- caseSensitive: ${JSON.stringify(route.caseSensitive)},
387
- module: route${index}
388
- }`;
389
- }).join(",\n ")}
390
- };`;
391
- };
392
- let getClientReferencesEntry = () => {
393
- let result = "export default {";
394
- for (let clientModule of clientModules) {
395
- result += `${JSON.stringify(prodHash(clientModule))}: () => import(${JSON.stringify(clientModule)}),`;
396
- }
397
- return `${result}};`;
398
- };
399
- let getServerReferencesEntry = () => {
400
- let result = "export default {";
401
- for (let serverModule of serverModules) {
402
- result += `${JSON.stringify(prodHash(serverModule))}: () => import(${JSON.stringify(serverModule)}),`;
403
- }
404
- return `${result}\};`;
405
343
  };
406
344
  let loadViteManifest = async directory => {
407
345
  let manifestContents = await fse__namespace.readFile(path__namespace.resolve(directory, ".vite", "manifest.json"), "utf-8");
@@ -600,9 +538,9 @@ const reactRouterVitePlugin = _config => {
600
538
  rollupOptions: {
601
539
  ...baseRollupOptions,
602
540
  preserveEntrySignatures: "exports-only",
603
- input: [ctx.entryClientFilePath, ...Object.values(ctx.reactRouterConfig.routes).map(route => `${path__namespace.resolve(ctx.reactRouterConfig.appDirectory, route.file)}${BUILD_CLIENT_ROUTE_QUERY_STRING}`), ...(ctx.reactRouterConfig.future.unstable_serverComponents ? clientModules : [])]
541
+ input: [ctx.entryClientFilePath, ...Object.values(ctx.reactRouterConfig.routes).map(route => `${path__namespace.resolve(ctx.reactRouterConfig.appDirectory, route.file)}${BUILD_CLIENT_ROUTE_QUERY_STRING}`)]
604
542
  }
605
- } : !ctx.reactRouterConfig.future.unstable_serverComponents || !process.env.REACT_SERVER_BUILD ? {
543
+ } : {
606
544
  // We move SSR-only assets to client assets. Note that the
607
545
  // SSR build can also emit code-split JS files (e.g. by
608
546
  // dynamic import) under the same assets directory
@@ -623,28 +561,6 @@ const reactRouterVitePlugin = _config => {
623
561
  format: ctx.reactRouterConfig.serverModuleFormat
624
562
  }
625
563
  }
626
- } : {
627
- // We move SSR-only assets to client assets. Note that the
628
- // SSR build can also emit code-split JS files (e.g. by
629
- // dynamic import) under the same assets directory
630
- // regardless of "ssrEmitAssets" option, so we also need to
631
- // keep these JS files have to be kept as-is.
632
- ssrEmitAssets: true,
633
- copyPublicDir: false,
634
- // Assets in the public directory are only used by the client
635
- manifest: true,
636
- // We need the manifest to detect SSR-only assets
637
- outDir: getReactServerBuildDirectory(ctx.reactRouterConfig),
638
- rollupOptions: {
639
- ...baseRollupOptions,
640
- preserveEntrySignatures: "exports-only",
641
- // TODO: Add server references (serverModules) to input
642
- input: reactServerBuildId,
643
- output: {
644
- entryFileNames: ctx.reactRouterConfig.serverBuildFile,
645
- format: ctx.reactRouterConfig.serverModuleFormat
646
- }
647
- }
648
564
  })
649
565
  }
650
566
  } : undefined),
@@ -798,7 +714,7 @@ const reactRouterVitePlugin = _config => {
798
714
  // After the SSR build is finished, we inspect the Vite manifest for
799
715
  // the SSR build and move server-only assets to client assets directory
800
716
  async handler() {
801
- if (!ctx.isSsrBuild || process.env.REACT_SERVER_BUILD) {
717
+ if (!ctx.isSsrBuild) {
802
718
  return;
803
719
  }
804
720
  invariant["default"](viteConfig);
@@ -882,18 +798,6 @@ const reactRouterVitePlugin = _config => {
882
798
  });
883
799
  return `window.__remixManifest=${reactRouterManifestString};`;
884
800
  }
885
- case vmod.resolve(reactServerBuildId):
886
- {
887
- return getReactServerEntry();
888
- }
889
- case vmod.resolve(clientReferencesId):
890
- {
891
- return getClientReferencesEntry();
892
- }
893
- case vmod.resolve(serverReferencesId):
894
- {
895
- return getServerReferencesEntry();
896
- }
897
801
  }
898
802
  }
899
803
  }, {
@@ -949,20 +853,9 @@ const reactRouterVitePlugin = _config => {
949
853
  }, {
950
854
  name: "react-router-route-exports",
951
855
  async transform(code, id, options) {
952
- var _ctx;
953
- if (options !== null && options !== void 0 && options.ssr && !((_ctx = ctx) !== null && _ctx !== void 0 && _ctx.reactRouterConfig.future.unstable_serverComponents)) {
954
- return;
955
- }
856
+ if (options !== null && options !== void 0 && options.ssr) return;
956
857
  let route = getRoute(ctx.reactRouterConfig, id);
957
858
  if (!route) return;
958
- let [filepath] = id.split("?");
959
- if (ctx.reactRouterConfig.future.unstable_serverComponents && process.env.REACT_SERVER_BUILD) {
960
- return removeExports.removeExports(code, CLIENT_ROUTE_EXPORTS, {
961
- sourceMaps: true,
962
- filename: id,
963
- sourceFileName: filepath
964
- });
965
- }
966
859
  if (!ctx.reactRouterConfig.ssr) {
967
860
  let serverOnlyExports = esModuleLexer.parse(code)[1].map(exp => exp.n).filter(exp => SERVER_ONLY_ROUTE_EXPORTS.includes(exp));
968
861
  if (serverOnlyExports.length > 0) {
@@ -978,6 +871,7 @@ const reactRouterVitePlugin = _config => {
978
871
  }
979
872
  }
980
873
  }
874
+ let [filepath] = id.split("?");
981
875
  return removeExports.removeExports(code, SERVER_ONLY_ROUTE_EXPORTS, {
982
876
  sourceMaps: true,
983
877
  filename: id,
@@ -1073,88 +967,6 @@ const reactRouterVitePlugin = _config => {
1073
967
  });
1074
968
  return modules;
1075
969
  }
1076
- }, {
1077
- name: "remix:react-server",
1078
- config() {
1079
- const env = process.env.REACT_SERVER_BUILD ? "server" : "client";
1080
- switch (env) {
1081
- case "client":
1082
- return {
1083
- optimizeDeps: {
1084
- include: ["react", "react/jsx-runtime", "react/jsx-dev-runtime", "react-server-dom-diy/client"]
1085
- }
1086
- };
1087
- case "server":
1088
- return {
1089
- optimizeDeps: {
1090
- include: ["react", "react/jsx-runtime", "react/jsx-dev-runtime", "react-server-dom-diy/server"]
1091
- },
1092
- resolve: {
1093
- conditions: ["react-server"]
1094
- },
1095
- ssr: {
1096
- noExternal: ["react", "react/jsx-runtime", "react/jsx-dev-runtime", "react-server-dom-diy/server"],
1097
- optimizeDeps: {
1098
- include: ["react", "react/jsx-runtime", "react/jsx-dev-runtime", "react-server-dom-diy/server"]
1099
- },
1100
- resolve: {
1101
- conditions: ["react-server"],
1102
- externalConditions: ["react-server"]
1103
- }
1104
- }
1105
- };
1106
- }
1107
- },
1108
- configResolved(resolvedViteConfig) {
1109
- viteConfig = resolvedViteConfig;
1110
- invariant["default"](viteConfig);
1111
- },
1112
- transform(...args) {
1113
- invariant["default"](viteConfig);
1114
- const env = process.env.REACT_SERVER_BUILD ? "server" : "client";
1115
- let hash = viteConfig.mode !== "production" ? devHash : prodHash;
1116
- switch (env) {
1117
- case "client":
1118
- return unpluginRsc.rscClientPlugin.vite({
1119
- include: ["**/*"],
1120
- transformModuleId: hash,
1121
- useServerRuntime: {
1122
- function: "createServerReference",
1123
- module: "@react-router/dev/dist/runtime.client.js"
1124
- },
1125
- onModuleFound(id, type) {
1126
- switch (type) {
1127
- case "use server":
1128
- serverModules.add(id);
1129
- break;
1130
- }
1131
- }
1132
- }).transform.call(this, ...args);
1133
- case "server":
1134
- return unpluginRsc.rscServerPlugin.vite({
1135
- include: ["**/*"],
1136
- transformModuleId: hash,
1137
- useClientRuntime: {
1138
- function: "registerClientReference",
1139
- module: "react-server-dom-diy/server"
1140
- },
1141
- useServerRuntime: {
1142
- function: "registerServerReference",
1143
- module: "react-server-dom-diy/server"
1144
- },
1145
- onModuleFound(id, type) {
1146
- switch (type) {
1147
- case "use client":
1148
- clientModules.add(id);
1149
- break;
1150
- case "use server":
1151
- serverModules.add(id);
1152
- break;
1153
- }
1154
- }
1155
- }).transform.call(this, ...args);
1156
- }
1157
- }
1158
970
  }];
1159
971
  };
1160
972
  function isInReactRouterMonorepo() {
@@ -1353,31 +1165,8 @@ function createPrerenderRoutes(manifest, parentId = "", routesByParentId = group
1353
1165
  };
1354
1166
  });
1355
1167
  }
1356
- function prodHash(str, _) {
1357
- return `/${path__namespace.relative(process.cwd(), str)}`;
1358
- }
1359
- function devHash(str, _) {
1360
- const resolved = path__namespace.resolve(str);
1361
- let unixPath = resolved.replace(/\\/g, "/");
1362
- if (!unixPath.startsWith("/")) {
1363
- unixPath = `/${unixPath}`;
1364
- }
1365
- if (resolved.startsWith(process.cwd())) {
1366
- return `/${path__namespace.relative(process.cwd(), unixPath)}`;
1367
- }
1368
- return `/@fs${unixPath}`;
1369
- }
1370
- global.__clientModules = global.__clientModules || new Set();
1371
- global.__serverModules = global.__serverModules || new Set();
1372
- function getReactServerOptions() {
1373
- return {
1374
- clientModules: global.__clientModules,
1375
- serverModules: global.__serverModules
1376
- };
1377
- }
1378
1168
 
1379
1169
  exports.extractPluginContext = extractPluginContext;
1380
- exports.getReactServerOptions = getReactServerOptions;
1381
1170
  exports.getServerBuildDirectory = getServerBuildDirectory;
1382
1171
  exports.loadPluginContext = loadPluginContext;
1383
1172
  exports.reactRouterVitePlugin = reactRouterVitePlugin;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,4 +1,2 @@
1
1
  import type { GeneratorOptions } from "@babel/generator";
2
- export declare const removeExports: (source: string, exportsToRemove: string[], generateOptions?: GeneratorOptions) => import("@babel/generator").GeneratorResult | {
3
- code: string;
4
- };
2
+ export declare const removeExports: (source: string, exportsToRemove: string[], generateOptions?: GeneratorOptions) => import("@babel/generator").GeneratorResult;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -179,20 +179,6 @@ const removeExports = (source, exportsToRemove, generateOptions = {}) => {
179
179
  if (shouldRemove) {
180
180
  path.remove();
181
181
  }
182
- },
183
- ExportDefaultDeclaration(path) {
184
- if (exportsToRemove.includes("default")) {
185
- removedExports.add("default");
186
- path.remove();
187
- return false;
188
- }
189
- },
190
- ExportDefaultSpecifier(path) {
191
- if (exportsToRemove.includes("default")) {
192
- removedExports.add("default");
193
- path.remove();
194
- return false;
195
- }
196
182
  }
197
183
  });
198
184
  if (removedExports.size === 0) {
@@ -286,9 +272,7 @@ const removeExports = (source, exportsToRemove, generateOptions = {}) => {
286
272
  ImportNamespaceSpecifier: sweepImport
287
273
  });
288
274
  } while (referencesRemovedInThisPass);
289
- return {
290
- code: babel.generate(document, generateOptions).code + `\n${[...removedExports].map(exp => exp === "default" ? "export default 1;" : `export const ${exp} = 1;`).join("\n")}`
291
- };
275
+ return babel.generate(document, generateOptions);
292
276
  };
293
277
 
294
278
  exports.removeExports = removeExports;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7
2
+ * @react-router/dev v0.0.0-experimental-13d6d438f
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-e16afd9b7",
3
+ "version": "0.0.0-experimental-13d6d438f",
4
4
  "description": "Dev tools and CLI for React Router",
5
5
  "homepage": "https://reactrouter.com",
6
6
  "bugs": {
@@ -42,10 +42,9 @@
42
42
  "react-refresh": "^0.14.0",
43
43
  "semver": "^7.3.7",
44
44
  "set-cookie-parser": "^2.6.0",
45
- "unplugin-rsc": "0.0.9",
46
- "@react-router/node": "0.0.0-experimental-e16afd9b7",
47
- "@react-router/server-runtime": "0.0.0-experimental-e16afd9b7",
48
- "react-router": "0.0.0-experimental-e16afd9b7"
45
+ "@react-router/node": "0.0.0-experimental-13d6d438f",
46
+ "react-router": "0.0.0-experimental-13d6d438f",
47
+ "@react-router/server-runtime": "0.0.0-experimental-13d6d438f"
49
48
  },
50
49
  "devDependencies": {
51
50
  "@types/babel__core": "^7.20.5",
@@ -66,28 +65,23 @@
66
65
  "express": "^4.17.1",
67
66
  "esbuild-register": "^3.3.2",
68
67
  "fast-glob": "3.2.11",
69
- "react-server-dom-diy": "0.0.0-experimental-15a3a5622-202404158",
70
68
  "strip-ansi": "^6.0.1",
71
69
  "tiny-invariant": "^1.2.0",
72
70
  "vite": "^5.1.0",
73
71
  "wrangler": "^3.28.2",
74
- "@react-router/serve": "0.0.0-experimental-e16afd9b7"
72
+ "@react-router/serve": "0.0.0-experimental-13d6d438f"
75
73
  },
76
74
  "peerDependencies": {
77
- "react-server-dom-diy": "*",
78
75
  "typescript": "^5.1.0",
79
76
  "vite": "^5.1.0",
80
77
  "wrangler": "^3.28.2",
81
- "react-router": "^0.0.0-experimental-e16afd9b7",
82
- "@react-router/serve": "^0.0.0-experimental-e16afd9b7"
78
+ "react-router": "^0.0.0-experimental-13d6d438f",
79
+ "@react-router/serve": "^0.0.0-experimental-13d6d438f"
83
80
  },
84
81
  "peerDependenciesMeta": {
85
82
  "@react-router/serve": {
86
83
  "optional": true
87
84
  },
88
- "react-server-dom-diy": {
89
- "optional": true
90
- },
91
85
  "typescript": {
92
86
  "optional": true
93
87
  },
@@ -1,90 +0,0 @@
1
- import { HydratedRouter } from "react-router";
2
- import { startTransition, StrictMode } from "react";
3
- import { hydrateRoot } from "react-dom/client";
4
- // @ts-expect-error - no types
5
- import ReactServerDOM from "react-server-dom-diy/client";
6
-
7
- if (import.meta.env.PROD) {
8
- window.__diy_client_manifest__ = {
9
- _cache: new Map(),
10
- resolveClientReference([id, exportName]) {
11
- return {
12
- preloadModule() {
13
- if (window.__diy_client_manifest__._cache.has(id)) {
14
- return window.__diy_client_manifest__._cache.get(id);
15
- }
16
- const promise = import("virtual:react-router/client-references")
17
- .then(({ default: mods }) => mods[id]())
18
- .then((mod) => {
19
- promise.status = "fulfilled";
20
- promise.value = mod;
21
- })
22
- .catch((res) => {
23
- promise.status = "rejected";
24
- promise.reason = res;
25
- throw res;
26
- });
27
- promise.status = "pending";
28
- window.__diy_client_manifest__._cache.set(id, promise);
29
- return promise;
30
- },
31
- requireModule() {
32
- const cached = window.__diy_client_manifest__._cache.get(id);
33
- if (!cached) throw new Error(`Module ${id} not found`);
34
- if (cached.reason) throw cached.reason;
35
- return cached.value[exportName];
36
- },
37
- };
38
- },
39
- };
40
- } else {
41
- window.__diy_client_manifest__ = {
42
- _cache: new Map(),
43
- resolveClientReference([id, exportName]) {
44
- return {
45
- preloadModule() {
46
- if (window.__diy_client_manifest__._cache.has(id)) {
47
- return window.__diy_client_manifest__._cache.get(id);
48
- }
49
- const promise = import(id)
50
- .then((mod) => {
51
- promise.status = "fulfilled";
52
- promise.value = mod;
53
- })
54
- .catch((res) => {
55
- promise.status = "rejected";
56
- promise.reason = res;
57
- throw res;
58
- });
59
- promise.status = "pending";
60
- window.__diy_client_manifest__._cache.set(id, promise);
61
- return promise;
62
- },
63
- requireModule() {
64
- const cached = window.__diy_client_manifest__._cache.get(id);
65
- if (!cached) throw new Error(`Module ${id} not found`);
66
- if (cached.reason) throw cached.reason;
67
- return cached.value[exportName];
68
- },
69
- };
70
- },
71
- };
72
- }
73
-
74
- window.createFromReadableStream = function createFromReadableStream(
75
- body: ReadableStream<Uint8Array>
76
- ) {
77
- return ReactServerDOM.createFromReadableStream(
78
- body,
79
- window.__diy_client_manifest__
80
- );
81
- };
82
-
83
- startTransition(() => {
84
- hydrateRoot(
85
- document,
86
- <StrictMode>
87
- <HydratedRouter />
88
- </StrictMode>
89
- );
90
- });
@@ -1,15 +0,0 @@
1
- import * as stream from "node:stream";
2
-
3
- import { createReadableStreamFromReadable } from "@react-router/node";
4
- // @ts-expect-error - no types
5
- import ReactServerDOM from "react-server-dom-diy/server";
6
-
7
- export function renderToReadableStream(data: unknown) {
8
- const passthrough = new stream.PassThrough();
9
- const { pipe } = ReactServerDOM.renderToPipeableStream(
10
- data,
11
- global.__diy_server_manifest__
12
- );
13
- pipe(passthrough);
14
- return createReadableStreamFromReadable(passthrough);
15
- }
@@ -1,9 +0,0 @@
1
- // @ts-expect-error - no types
2
- import ReactServerDOM from "react-server-dom-diy/server";
3
-
4
- export function renderToReadableStream(data: unknown) {
5
- return ReactServerDOM.renderToReadableStream(
6
- data,
7
- global.__diy_server_manifest__
8
- );
9
- }
@@ -1,164 +0,0 @@
1
- import { PassThrough, Readable } from "node:stream";
2
-
3
- import type { AppLoadContext, EntryContext } from "@react-router/node";
4
- import { createReadableStreamFromReadable } from "@react-router/node";
5
- import { RemixServer } from "react-router";
6
- import * as isbotModule from "isbot";
7
- import { renderToPipeableStream } from "react-dom/server";
8
- // @ts-expect-error - no types
9
- import ReactServerDOM from "react-server-dom-diy/client";
10
-
11
- const ABORT_DELAY = 5_000;
12
-
13
- export function createFromReadableStream(body: ReadableStream<Uint8Array>) {
14
- return ReactServerDOM.createFromNodeStream(
15
- Readable.fromWeb(body as any),
16
- global.__diy_client_manifest__
17
- );
18
- }
19
-
20
- export default function handleRequest(
21
- request: Request,
22
- responseStatusCode: number,
23
- responseHeaders: Headers,
24
- remixContext: EntryContext,
25
- loadContext: AppLoadContext
26
- ) {
27
- let prohibitOutOfOrderStreaming =
28
- isBotRequest(request.headers.get("user-agent")) || remixContext.isSpaMode;
29
-
30
- return prohibitOutOfOrderStreaming
31
- ? handleBotRequest(
32
- request,
33
- responseStatusCode,
34
- responseHeaders,
35
- remixContext
36
- )
37
- : handleBrowserRequest(
38
- request,
39
- responseStatusCode,
40
- responseHeaders,
41
- remixContext
42
- );
43
- }
44
-
45
- // We have some Remix apps in the wild already running with isbot@3 so we need
46
- // to maintain backwards compatibility even though we want new apps to use
47
- // isbot@4. That way, we can ship this as a minor Semver update to @react-router/dev.
48
- function isBotRequest(userAgent: string | null) {
49
- if (!userAgent) {
50
- return false;
51
- }
52
-
53
- // isbot >= 3.8.0, >4
54
- if ("isbot" in isbotModule && typeof isbotModule.isbot === "function") {
55
- return isbotModule.isbot(userAgent);
56
- }
57
-
58
- // isbot < 3.8.0
59
- if ("default" in isbotModule && typeof isbotModule.default === "function") {
60
- return isbotModule.default(userAgent);
61
- }
62
-
63
- return false;
64
- }
65
-
66
- function handleBotRequest(
67
- request: Request,
68
- responseStatusCode: number,
69
- responseHeaders: Headers,
70
- remixContext: EntryContext
71
- ) {
72
- return new Promise((resolve, reject) => {
73
- let shellRendered = false;
74
- const { pipe, abort } = renderToPipeableStream(
75
- <RemixServer
76
- context={remixContext}
77
- url={request.url}
78
- abortDelay={ABORT_DELAY}
79
- />,
80
- {
81
- onAllReady() {
82
- shellRendered = true;
83
- const body = new PassThrough();
84
- const stream = createReadableStreamFromReadable(body);
85
-
86
- responseHeaders.set("Content-Type", "text/html");
87
-
88
- resolve(
89
- new Response(stream, {
90
- headers: responseHeaders,
91
- status: responseStatusCode,
92
- })
93
- );
94
-
95
- pipe(body);
96
- },
97
- onShellError(error: unknown) {
98
- reject(error);
99
- },
100
- onError(error: unknown) {
101
- responseStatusCode = 500;
102
- // Log streaming rendering errors from inside the shell. Don't log
103
- // errors encountered during initial shell rendering since they'll
104
- // reject and get logged in handleDocumentRequest.
105
- if (shellRendered) {
106
- console.error(error);
107
- }
108
- },
109
- }
110
- );
111
-
112
- setTimeout(abort, ABORT_DELAY);
113
- });
114
- }
115
-
116
- function handleBrowserRequest(
117
- request: Request,
118
- responseStatusCode: number,
119
- responseHeaders: Headers,
120
- remixContext: EntryContext
121
- ) {
122
- return new Promise((resolve, reject) => {
123
- let shellRendered = false;
124
- const { pipe, abort } = renderToPipeableStream(
125
- <RemixServer
126
- context={remixContext}
127
- url={request.url}
128
- abortDelay={ABORT_DELAY}
129
- />,
130
- {
131
- onShellReady() {
132
- shellRendered = true;
133
- const body = new PassThrough();
134
- const stream = createReadableStreamFromReadable(body);
135
-
136
- responseHeaders.set("Content-Type", "text/html");
137
-
138
- resolve(
139
- new Response(stream, {
140
- headers: responseHeaders,
141
- status: responseStatusCode,
142
- })
143
- );
144
-
145
- pipe(body);
146
- },
147
- onShellError(error: unknown) {
148
- reject(error);
149
- },
150
- onError(error: unknown) {
151
- responseStatusCode = 500;
152
- // Log streaming rendering errors from inside the shell. Don't log
153
- // errors encountered during initial shell rendering since they'll
154
- // reject and get logged in handleDocumentRequest.
155
- if (shellRendered) {
156
- console.error(error);
157
- }
158
- },
159
- }
160
- );
161
-
162
- setTimeout(abort, ABORT_DELAY);
163
- });
164
- }
@@ -1 +0,0 @@
1
- export declare function createServerReference(_: unknown, mod: string, name: string): void;
@@ -1,19 +0,0 @@
1
- /**
2
- * @react-router/dev v0.0.0-experimental-e16afd9b7
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
- function createServerReference(_, mod, name) {
16
- throw new Error("Server references are not yet implemented.");
17
- }
18
-
19
- exports.createServerReference = createServerReference;