@react-router/dev 0.0.0-experimental-e145538f2 → 0.0.0-experimental-3a25d7f8a

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.
Files changed (40) hide show
  1. package/dist/cli/commands.js +1 -1
  2. package/dist/cli/detectPackageManager.js +1 -1
  3. package/dist/cli/index.js +1 -1
  4. package/dist/cli/run.js +1 -1
  5. package/dist/cli/useJavascript.js +1 -1
  6. package/dist/cli.js +1 -1
  7. package/dist/colors.js +1 -1
  8. package/dist/config/findConfig.js +1 -1
  9. package/dist/config/flatRoutes.js +1 -1
  10. package/dist/config/format.js +1 -1
  11. package/dist/config/routes.js +1 -1
  12. package/dist/config.d.ts +0 -2
  13. package/dist/config.js +5 -22
  14. package/dist/index.d.ts +1 -1
  15. package/dist/index.js +1 -3
  16. package/dist/invariant.js +1 -1
  17. package/dist/vite/babel.js +1 -1
  18. package/dist/vite/build.js +2 -15
  19. package/dist/vite/dev.js +1 -1
  20. package/dist/vite/import-vite-esm-sync.js +1 -1
  21. package/dist/vite/index.d.ts +0 -1
  22. package/dist/vite/index.js +1 -7
  23. package/dist/vite/node-adapter.js +1 -1
  24. package/dist/vite/plugin.d.ts +0 -9
  25. package/dist/vite/plugin.js +8 -219
  26. package/dist/vite/profiler.js +1 -1
  27. package/dist/vite/remove-exports.d.ts +1 -3
  28. package/dist/vite/remove-exports.js +2 -18
  29. package/dist/vite/resolve-file-url.js +1 -1
  30. package/dist/vite/styles.js +1 -1
  31. package/dist/vite/vmod.js +1 -1
  32. package/package.json +14 -21
  33. package/dist/config/defaults/entry.client.rsc.tsx +0 -119
  34. package/dist/config/defaults/entry.react-server.node.tsx +0 -19
  35. package/dist/config/defaults/entry.react-server.web.tsx +0 -13
  36. package/dist/config/defaults/entry.server.node.rsc.tsx +0 -180
  37. package/dist/runtime.client.d.ts +0 -1
  38. package/dist/runtime.client.js +0 -19
  39. package/dist/vite/cloudflare-proxy-plugin.d.ts +0 -15
  40. package/dist/vite/cloudflare-proxy-plugin.js +0 -82
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
3
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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: {
@@ -235,7 +234,6 @@ export declare function resolveEntryFiles({ rootDirectory, reactRouterConfig, }:
235
234
  reactRouterConfig: ResolvedVitePluginConfig;
236
235
  }): Promise<{
237
236
  entryClientFilePath: string;
238
- entryReactServerFilePath: string | undefined;
239
237
  entryServerFilePath: string;
240
238
  }>;
241
239
  export {};
package/dist/config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -188,8 +188,7 @@ async function resolveReactRouterConfig({
188
188
  let future = {
189
189
  v3_fetcherPersist: (userFuture === null || userFuture === void 0 ? void 0 : userFuture.v3_fetcherPersist) === true,
190
190
  v3_relativeSplatPath: (userFuture === null || userFuture === void 0 ? void 0 : userFuture.v3_relativeSplatPath) === true,
191
- v3_throwAbortReason: (userFuture === null || userFuture === void 0 ? void 0 : userFuture.v3_throwAbortReason) === true,
192
- unstable_serverComponents: (userFuture === null || userFuture === void 0 ? void 0 : userFuture.unstable_serverComponents) === true
191
+ v3_throwAbortReason: (userFuture === null || userFuture === void 0 ? void 0 : userFuture.v3_throwAbortReason) === true
193
192
  };
194
193
  let reactRouterConfig = deepFreeze({
195
194
  appDirectory,
@@ -223,13 +222,10 @@ async function resolveEntryFiles({
223
222
  let defaultsDirectory = path__default["default"].resolve(__dirname, "config", "defaults");
224
223
  let userEntryClientFile = findEntry(appDirectory, "entry.client");
225
224
  let userEntryServerFile = findEntry(appDirectory, "entry.server");
226
- let userEntryReactServerFile = findEntry(appDirectory, "entry.react-server");
227
225
  let entryServerFile;
228
- let entryReactServerFile;
229
- let entryClientFile = userEntryClientFile || future.unstable_serverComponents ? "entry.client.rsc.tsx" : "entry.client.tsx";
226
+ let entryClientFile = userEntryClientFile || "entry.client.tsx";
230
227
  let pkgJson = await PackageJson__default["default"].load(rootDirectory);
231
228
  let deps = pkgJson.content.dependencies ?? {};
232
- let serverRuntime = deps["@react-router/deno"] ? "deno" : deps["@react-router/cloudflare"] ? "cloudflare" : deps["@react-router/node"] ? "node" : undefined;
233
229
  if (!reactRouterConfig.ssr) {
234
230
  // This is a super-simple default since we don't need streaming in SPA Mode.
235
231
  // We can include this in a remix-spa template, but right now `npx remix reveal`
@@ -243,6 +239,7 @@ async function resolveEntryFiles({
243
239
  } else if (userEntryServerFile) {
244
240
  entryServerFile = userEntryServerFile;
245
241
  } else {
242
+ let serverRuntime = deps["@react-router/deno"] ? "deno" : deps["@react-router/cloudflare"] ? "cloudflare" : deps["@react-router/node"] ? "node" : undefined;
246
243
  if (!serverRuntime) {
247
244
  let serverRuntimes = ["@react-router/deno", "@react-router/cloudflare", "@react-router/node"];
248
245
  let formattedList = disjunctionListFormat.format(serverRuntimes);
@@ -263,26 +260,12 @@ async function resolveEntryFiles({
263
260
  stdio: "inherit"
264
261
  });
265
262
  }
266
- entryServerFile = reactRouterConfig.future.unstable_serverComponents ? `entry.server.${serverRuntime}.rsc.tsx` : `entry.server.${serverRuntime}.tsx`;
267
- }
268
- if (future.unstable_serverComponents) {
269
- if (userEntryReactServerFile) {
270
- entryReactServerFile = userEntryReactServerFile;
271
- } else {
272
- if (!serverRuntime) {
273
- let serverRuntimes = ["@react-router/deno", "@react-router/cloudflare", "@react-router/node"];
274
- let formattedList = disjunctionListFormat.format(serverRuntimes);
275
- throw new Error(`Could not determine server runtime. Please install one of the following: ${formattedList}`);
276
- }
277
- entryReactServerFile = `entry.react-server.${serverRuntime === "node" ? serverRuntime : "web"}.tsx`;
278
- }
263
+ entryServerFile = `entry.server.${serverRuntime}.tsx`;
279
264
  }
280
265
  let entryClientFilePath = userEntryClientFile ? path__default["default"].resolve(reactRouterConfig.appDirectory, userEntryClientFile) : path__default["default"].resolve(defaultsDirectory, entryClientFile);
281
266
  let entryServerFilePath = userEntryServerFile ? path__default["default"].resolve(reactRouterConfig.appDirectory, userEntryServerFile) : path__default["default"].resolve(defaultsDirectory, entryServerFile);
282
- let entryReactServerFilePath = userEntryReactServerFile ? path__default["default"].resolve(reactRouterConfig.appDirectory, userEntryReactServerFile) : entryReactServerFile ? path__default["default"].resolve(defaultsDirectory, entryReactServerFile) : undefined;
283
267
  return {
284
268
  entryClientFilePath,
285
- entryReactServerFilePath,
286
269
  entryServerFilePath
287
270
  };
288
271
  }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  export * as cli from "./cli/index";
2
2
  export type { Manifest as AssetsManifest } from "./manifest";
3
3
  export type { BuildManifest, Preset, ServerBundlesFunction, VitePluginConfig, } from "./config";
4
- export { vitePlugin, cloudflareDevProxyVitePlugin } from "./vite";
4
+ export { vitePlugin } from "./vite";
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -14,10 +14,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
14
14
 
15
15
  var index = require('./cli/index.js');
16
16
  var index$1 = require('./vite/index.js');
17
- var cloudflareProxyPlugin = require('./vite/cloudflare-proxy-plugin.js');
18
17
 
19
18
 
20
19
 
21
20
  exports.cli = index;
22
21
  exports.vitePlugin = index$1.vitePlugin;
23
- exports.cloudflareDevProxyVitePlugin = cloudflareProxyPlugin.cloudflareDevProxyVitePlugin;
package/dist/invariant.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -214,16 +214,7 @@ async function build(root, {
214
214
  });
215
215
  }
216
216
  await cleanBuildDirectory(viteConfig, ctx);
217
- // Then run React server build first
218
- if (reactRouterConfig.future.unstable_serverComponents) {
219
- // TODO: This will be handled by the vite env API in the future
220
- process.env.REACT_SERVER_BUILD = "1";
221
- await viteBuild({
222
- ssr: true
223
- });
224
- }
225
- process.env.REACT_SERVER_BUILD = "";
226
- // Run the Vite client build second
217
+ // Run the Vite client build first
227
218
  await viteBuild({
228
219
  ssr: false
229
220
  });
@@ -253,10 +244,6 @@ async function build(root, {
253
244
  reactRouterConfig,
254
245
  viteConfig
255
246
  }));
256
- const {
257
- serverModules
258
- } = plugin.getReactServerOptions();
259
- invariant["default"](!serverModules.size, "`use server` is not yet supported.");
260
247
  }
261
248
 
262
249
  exports.build = build;
package/dist/vite/dev.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -1,3 +1,2 @@
1
1
  import type { ReactRouterVitePlugin } from "./plugin";
2
2
  export declare const vitePlugin: ReactRouterVitePlugin;
3
- export { cloudflareDevProxyVitePlugin } from "./cloudflare-proxy-plugin";
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
3
3
  *
4
4
  * Copyright (c) Remix Software Inc.
5
5
  *
@@ -12,12 +12,6 @@
12
12
 
13
13
  Object.defineProperty(exports, '__esModule', { value: true });
14
14
 
15
- require('@react-router/server-runtime');
16
- require('node:events');
17
- require('node:stream');
18
- require('set-cookie-parser');
19
- require('@react-router/node');
20
-
21
15
  const vitePlugin = (...args) => {
22
16
  let {
23
17
  reactRouterVitePlugin
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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
  publicPath: string;
65
64
  reactRouterConfig: ResolvedVitePluginConfig;
@@ -70,12 +69,4 @@ type MaybePromise<T> = T | Promise<T>;
70
69
  export declare let setReactRouterDevLoadContext: (loadContext: (request: Request) => MaybePromise<Record<string, unknown>>) => void;
71
70
  export type ReactRouterVitePlugin = (config?: VitePluginConfig) => Vite.Plugin[];
72
71
  export declare const reactRouterVitePlugin: ReactRouterVitePlugin;
73
- declare global {
74
- var __clientModules: Set<string>;
75
- var __serverModules: Set<string>;
76
- }
77
- export declare function getReactServerOptions(): {
78
- clientModules: Set<string>;
79
- serverModules: Set<string>;
80
- };
81
72
  export {};
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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,
@@ -304,7 +298,6 @@ const reactRouterVitePlugin = _config => {
304
298
  reactRouterConfig,
305
299
  rootDirectory,
306
300
  entryClientFilePath,
307
- entryReactServerFilePath,
308
301
  entryServerFilePath,
309
302
  publicPath,
310
303
  viteManifestEnabled,
@@ -323,7 +316,7 @@ const reactRouterVitePlugin = _config => {
323
316
  ctx.serverBundleBuildConfig.routes :
324
317
  // Otherwise, all routes are imported as usual
325
318
  ctx.reactRouterConfig.routes;
326
- let code = `
319
+ return `
327
320
  import * as entryServer from ${JSON.stringify(resolveFileUrl.resolveFileUrl(ctx, ctx.entryServerFilePath))};
328
321
  ${Object.keys(routes).map((key, index) => {
329
322
  let route = routes[key];
@@ -349,61 +342,6 @@ const reactRouterVitePlugin = _config => {
349
342
  }`;
350
343
  }).join(",\n ")}
351
344
  };`;
352
- if (ctx.reactRouterConfig.future.unstable_serverComponents) {
353
- code += `
354
- export { default as clientReferences } from ${JSON.stringify(clientReferencesId)};`;
355
- }
356
- return code;
357
- };
358
- let {
359
- clientModules,
360
- serverModules
361
- } = getReactServerOptions();
362
- let getReactServerEntry = () => {
363
- invariant["default"](viteConfig, "viteconfig required to generate the react-server entry");
364
- invariant["default"](ctx.entryReactServerFilePath, "entryReactServerFilePath required to generate the react-server entry");
365
- let routes = ctx.serverBundleBuildConfig ?
366
- // For server bundle builds, the server build should only import the
367
- // routes for this bundle rather than importing all routes
368
- ctx.serverBundleBuildConfig.routes :
369
- // Otherwise, all routes are imported as usual
370
- ctx.reactRouterConfig.routes;
371
- return `
372
- import * as entryServer from ${JSON.stringify(resolveFileUrl.resolveFileUrl(ctx, ctx.entryReactServerFilePath))};
373
- ${Object.keys(routes).map((key, index) => {
374
- let route = routes[key];
375
- return `import * as route${index} from ${JSON.stringify(resolveFileUrl.resolveFileUrl(ctx, resolveRelativeRouteFilePath(route, ctx.reactRouterConfig)))};`;
376
- }).join("\n")}
377
- export const future = ${JSON.stringify(ctx.reactRouterConfig.future)};
378
- export const basename = ${JSON.stringify(ctx.reactRouterConfig.basename)};
379
- export const entry = { module: entryServer };
380
- export const routes = {
381
- ${Object.keys(routes).map((key, index) => {
382
- let route = routes[key];
383
- return `${JSON.stringify(key)}: {
384
- id: ${JSON.stringify(route.id)},
385
- parentId: ${JSON.stringify(route.parentId)},
386
- path: ${JSON.stringify(route.path)},
387
- index: ${JSON.stringify(route.index)},
388
- caseSensitive: ${JSON.stringify(route.caseSensitive)},
389
- module: route${index}
390
- }`;
391
- }).join(",\n ")}
392
- };`;
393
- };
394
- let getClientReferencesEntry = () => {
395
- let result = "export default {";
396
- for (let clientModule of clientModules) {
397
- result += `${JSON.stringify(prodHash(clientModule))}: () => import(${JSON.stringify(clientModule)}),`;
398
- }
399
- return `${result}};`;
400
- };
401
- let getServerReferencesEntry = () => {
402
- let result = "export default {";
403
- for (let serverModule of serverModules) {
404
- result += `${JSON.stringify(prodHash(serverModule))}: () => import(${JSON.stringify(serverModule)}),`;
405
- }
406
- return `${result}\};`;
407
345
  };
408
346
  let loadViteManifest = async directory => {
409
347
  let manifestContents = await fse__namespace.readFile(path__namespace.resolve(directory, ".vite", "manifest.json"), "utf-8");
@@ -602,9 +540,9 @@ const reactRouterVitePlugin = _config => {
602
540
  rollupOptions: {
603
541
  ...baseRollupOptions,
604
542
  preserveEntrySignatures: "exports-only",
605
- 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 : [])]
543
+ input: [ctx.entryClientFilePath, ...Object.values(ctx.reactRouterConfig.routes).map(route => `${path__namespace.resolve(ctx.reactRouterConfig.appDirectory, route.file)}${BUILD_CLIENT_ROUTE_QUERY_STRING}`)]
606
544
  }
607
- } : !ctx.reactRouterConfig.future.unstable_serverComponents || !process.env.REACT_SERVER_BUILD ? {
545
+ } : {
608
546
  // We move SSR-only assets to client assets. Note that the
609
547
  // SSR build can also emit code-split JS files (e.g. by
610
548
  // dynamic import) under the same assets directory
@@ -625,28 +563,6 @@ const reactRouterVitePlugin = _config => {
625
563
  format: ctx.reactRouterConfig.serverModuleFormat
626
564
  }
627
565
  }
628
- } : {
629
- // We move SSR-only assets to client assets. Note that the
630
- // SSR build can also emit code-split JS files (e.g. by
631
- // dynamic import) under the same assets directory
632
- // regardless of "ssrEmitAssets" option, so we also need to
633
- // keep these JS files have to be kept as-is.
634
- ssrEmitAssets: true,
635
- copyPublicDir: false,
636
- // Assets in the public directory are only used by the client
637
- manifest: true,
638
- // We need the manifest to detect SSR-only assets
639
- outDir: getReactServerBuildDirectory(ctx.reactRouterConfig),
640
- rollupOptions: {
641
- ...baseRollupOptions,
642
- preserveEntrySignatures: "exports-only",
643
- // TODO: Add server references (serverModules) to input
644
- input: reactServerBuildId,
645
- output: {
646
- entryFileNames: ctx.reactRouterConfig.serverBuildFile,
647
- format: ctx.reactRouterConfig.serverModuleFormat
648
- }
649
- }
650
566
  })
651
567
  }
652
568
  } : undefined),
@@ -800,7 +716,7 @@ const reactRouterVitePlugin = _config => {
800
716
  // After the SSR build is finished, we inspect the Vite manifest for
801
717
  // the SSR build and move server-only assets to client assets directory
802
718
  async handler() {
803
- if (!ctx.isSsrBuild || process.env.REACT_SERVER_BUILD) {
719
+ if (!ctx.isSsrBuild) {
804
720
  return;
805
721
  }
806
722
  invariant["default"](viteConfig);
@@ -884,18 +800,6 @@ const reactRouterVitePlugin = _config => {
884
800
  });
885
801
  return `window.__remixManifest=${reactRouterManifestString};`;
886
802
  }
887
- case vmod.resolve(reactServerBuildId):
888
- {
889
- return getReactServerEntry();
890
- }
891
- case vmod.resolve(clientReferencesId):
892
- {
893
- return getClientReferencesEntry();
894
- }
895
- case vmod.resolve(serverReferencesId):
896
- {
897
- return getServerReferencesEntry();
898
- }
899
803
  }
900
804
  }
901
805
  }, {
@@ -951,20 +855,9 @@ const reactRouterVitePlugin = _config => {
951
855
  }, {
952
856
  name: "react-router-route-exports",
953
857
  async transform(code, id, options) {
954
- var _ctx;
955
- if (options !== null && options !== void 0 && options.ssr && !((_ctx = ctx) !== null && _ctx !== void 0 && _ctx.reactRouterConfig.future.unstable_serverComponents)) {
956
- return;
957
- }
858
+ if (options !== null && options !== void 0 && options.ssr) return;
958
859
  let route = getRoute(ctx.reactRouterConfig, id);
959
860
  if (!route) return;
960
- let [filepath] = id.split("?");
961
- if (ctx.reactRouterConfig.future.unstable_serverComponents && process.env.REACT_SERVER_BUILD) {
962
- return removeExports.removeExports(code, CLIENT_ROUTE_EXPORTS, {
963
- sourceMaps: true,
964
- filename: id,
965
- sourceFileName: filepath
966
- });
967
- }
968
861
  if (!ctx.reactRouterConfig.ssr) {
969
862
  let serverOnlyExports = esModuleLexer.parse(code)[1].map(exp => exp.n).filter(exp => SERVER_ONLY_ROUTE_EXPORTS.includes(exp));
970
863
  if (serverOnlyExports.length > 0) {
@@ -980,6 +873,7 @@ const reactRouterVitePlugin = _config => {
980
873
  }
981
874
  }
982
875
  }
876
+ let [filepath] = id.split("?");
983
877
  return removeExports.removeExports(code, SERVER_ONLY_ROUTE_EXPORTS, {
984
878
  sourceMaps: true,
985
879
  filename: id,
@@ -1075,88 +969,6 @@ const reactRouterVitePlugin = _config => {
1075
969
  });
1076
970
  return modules;
1077
971
  }
1078
- }, {
1079
- name: "remix:react-server",
1080
- config() {
1081
- const env = process.env.REACT_SERVER_BUILD ? "server" : "client";
1082
- switch (env) {
1083
- case "client":
1084
- return {
1085
- optimizeDeps: {
1086
- include: ["react", "react/jsx-runtime", "react/jsx-dev-runtime", "react-server-dom-diy/client"]
1087
- }
1088
- };
1089
- case "server":
1090
- return {
1091
- optimizeDeps: {
1092
- include: ["react", "react/jsx-runtime", "react/jsx-dev-runtime", "react-server-dom-diy/server"]
1093
- },
1094
- resolve: {
1095
- conditions: ["react-server"]
1096
- },
1097
- ssr: {
1098
- noExternal: ["react", "react/jsx-runtime", "react/jsx-dev-runtime", "react-server-dom-diy/server"],
1099
- optimizeDeps: {
1100
- include: ["react", "react/jsx-runtime", "react/jsx-dev-runtime", "react-server-dom-diy/server"]
1101
- },
1102
- resolve: {
1103
- conditions: ["react-server"],
1104
- externalConditions: ["react-server"]
1105
- }
1106
- }
1107
- };
1108
- }
1109
- },
1110
- configResolved(resolvedViteConfig) {
1111
- viteConfig = resolvedViteConfig;
1112
- invariant["default"](viteConfig);
1113
- },
1114
- transform(...args) {
1115
- invariant["default"](viteConfig);
1116
- const env = process.env.REACT_SERVER_BUILD ? "server" : "client";
1117
- let hash = viteConfig.mode !== "production" ? devHash : prodHash;
1118
- switch (env) {
1119
- case "client":
1120
- return unpluginRsc.rscClientPlugin.vite({
1121
- include: ["**/*"],
1122
- transformModuleId: hash,
1123
- useServerRuntime: {
1124
- function: "createServerReference",
1125
- module: "@react-router/dev/dist/runtime.client.js"
1126
- },
1127
- onModuleFound(id, type) {
1128
- switch (type) {
1129
- case "use server":
1130
- serverModules.add(id);
1131
- break;
1132
- }
1133
- }
1134
- }).transform.call(this, ...args);
1135
- case "server":
1136
- return unpluginRsc.rscServerPlugin.vite({
1137
- include: ["**/*"],
1138
- transformModuleId: hash,
1139
- useClientRuntime: {
1140
- function: "registerClientReference",
1141
- module: "react-server-dom-diy/server"
1142
- },
1143
- useServerRuntime: {
1144
- function: "registerServerReference",
1145
- module: "react-server-dom-diy/server"
1146
- },
1147
- onModuleFound(id, type) {
1148
- switch (type) {
1149
- case "use client":
1150
- clientModules.add(id);
1151
- break;
1152
- case "use server":
1153
- serverModules.add(id);
1154
- break;
1155
- }
1156
- }
1157
- }).transform.call(this, ...args);
1158
- }
1159
- }
1160
972
  }];
1161
973
  };
1162
974
  function isInReactRouterMonorepo() {
@@ -1355,31 +1167,8 @@ function createPrerenderRoutes(manifest, parentId = "", routesByParentId = group
1355
1167
  };
1356
1168
  });
1357
1169
  }
1358
- function prodHash(str, _) {
1359
- return `/${path__namespace.relative(process.cwd(), str)}`;
1360
- }
1361
- function devHash(str, _) {
1362
- const resolved = path__namespace.resolve(str);
1363
- let unixPath = resolved.replace(/\\/g, "/");
1364
- if (!unixPath.startsWith("/")) {
1365
- unixPath = `/${unixPath}`;
1366
- }
1367
- if (resolved.startsWith(process.cwd())) {
1368
- return `/${path__namespace.relative(process.cwd(), unixPath)}`;
1369
- }
1370
- return `/@fs${unixPath}`;
1371
- }
1372
- global.__clientModules = global.__clientModules || new Set();
1373
- global.__serverModules = global.__serverModules || new Set();
1374
- function getReactServerOptions() {
1375
- return {
1376
- clientModules: global.__clientModules,
1377
- serverModules: global.__serverModules
1378
- };
1379
- }
1380
1170
 
1381
1171
  exports.extractPluginContext = extractPluginContext;
1382
- exports.getReactServerOptions = getReactServerOptions;
1383
1172
  exports.getServerBuildDirectory = getServerBuildDirectory;
1384
1173
  exports.loadPluginContext = loadPluginContext;
1385
1174
  exports.reactRouterVitePlugin = reactRouterVitePlugin;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @react-router/dev v0.0.0-experimental-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2
2
+ * @react-router/dev v0.0.0-experimental-3a25d7f8a
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-e145538f2",
3
+ "version": "0.0.0-experimental-3a25d7f8a",
4
4
  "description": "Dev tools and CLI for React Router",
5
5
  "homepage": "https://reactrouter.com",
6
6
  "bugs": {
@@ -14,6 +14,13 @@
14
14
  "license": "MIT",
15
15
  "main": "dist/index.js",
16
16
  "typings": "dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "./package.json": "./package.json"
23
+ },
17
24
  "bin": {
18
25
  "react-router": "dist/cli.js"
19
26
  },
@@ -42,10 +49,9 @@
42
49
  "react-refresh": "^0.14.0",
43
50
  "semver": "^7.3.7",
44
51
  "set-cookie-parser": "^2.6.0",
45
- "unplugin-rsc": "0.0.9",
46
- "react-router": "0.0.0-experimental-e145538f2",
47
- "@react-router/server-runtime": "0.0.0-experimental-e145538f2",
48
- "@react-router/node": "0.0.0-experimental-e145538f2"
52
+ "@react-router/node": "0.0.0-experimental-3a25d7f8a",
53
+ "@react-router/server-runtime": "0.0.0-experimental-3a25d7f8a",
54
+ "react-router": "0.0.0-experimental-3a25d7f8a"
49
55
  },
50
56
  "devDependencies": {
51
57
  "@types/babel__core": "^7.20.5",
@@ -66,36 +72,23 @@
66
72
  "express": "^4.17.1",
67
73
  "esbuild-register": "^3.3.2",
68
74
  "fast-glob": "3.2.11",
69
- "react-server-dom-diy": "0.0.0-experimental-15a3a5622-202404158",
70
75
  "strip-ansi": "^6.0.1",
71
76
  "tiny-invariant": "^1.2.0",
72
77
  "vite": "^5.1.0",
73
- "wrangler": "^3.28.2",
74
- "@react-router/serve": "0.0.0-experimental-e145538f2"
78
+ "@react-router/serve": "0.0.0-experimental-3a25d7f8a"
75
79
  },
76
80
  "peerDependencies": {
77
- "react-server-dom-diy": "*",
78
81
  "typescript": "^5.1.0",
79
82
  "vite": "^5.1.0",
80
- "wrangler": "^3.28.2",
81
- "react-router": "^0.0.0-experimental-e145538f2",
82
- "@react-router/serve": "^0.0.0-experimental-e145538f2"
83
+ "react-router": "^0.0.0-experimental-3a25d7f8a",
84
+ "@react-router/serve": "^0.0.0-experimental-3a25d7f8a"
83
85
  },
84
86
  "peerDependenciesMeta": {
85
87
  "@react-router/serve": {
86
88
  "optional": true
87
89
  },
88
- "react-server-dom-diy": {
89
- "optional": true
90
- },
91
90
  "typescript": {
92
91
  "optional": true
93
- },
94
- "vite": {
95
- "optional": true
96
- },
97
- "wrangler": {
98
- "optional": true
99
92
  }
100
93
  },
101
94
  "engines": {
@@ -1,119 +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.__diy_client_manifest__.callServer = async (id, args) => {
75
- const href = window.location.href;
76
- const headers = new Headers({
77
- Accept: "text/x-component",
78
- "rsc-action": id,
79
- });
80
- const responsePromise = fetch(href, {
81
- method: "POST",
82
- headers,
83
- body: await ReactServerDOM.encodeReply(args),
84
- });
85
-
86
- const result = await ReactServerDOM.createFromFetch(
87
- responsePromise,
88
- window.__diy_client_manifest__
89
- );
90
-
91
- window.__remixRouter.revalidate();
92
-
93
- return result;
94
- };
95
-
96
- window.createFromReadableStream = function createFromReadableStream(
97
- body: ReadableStream<Uint8Array>
98
- ) {
99
- return ReactServerDOM.createFromReadableStream(
100
- body,
101
- window.__diy_client_manifest__
102
- );
103
- };
104
-
105
- startTransition(() => {
106
- hydrateRoot(
107
- document,
108
- <StrictMode>
109
- <HydratedRouter />
110
- </StrictMode>
111
- );
112
- });
113
-
114
- if (import.meta.hot) {
115
- console.log("ACCEPTING HMR");
116
- import.meta.hot.on("react-router:hmr", () => {
117
- window.__remixRouter.revalidate();
118
- });
119
- }
@@ -1,19 +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
- }
16
-
17
- export const decodeAction = ReactServerDOM.decodeAction;
18
- export const decodeFormState = ReactServerDOM.decodeFormState;
19
- export const decodeReply = ReactServerDOM.decodeReply;
@@ -1,13 +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
- }
10
-
11
- export const decodeAction = ReactServerDOM.decodeAction;
12
- export const decodeFormState = ReactServerDOM.decodeFormState;
13
- export const decodeReply = ReactServerDOM.decodeReply;
@@ -1,180 +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 async function decodeAction(formData: FormData) {
21
- return ReactServerDOM.decodeAction(formData, global.__diy_server_manifest__);
22
- }
23
-
24
- export function decodeFormState(returnValue: unknown, formData: FormData) {
25
- return ReactServerDOM.decodeFormState(
26
- returnValue,
27
- formData,
28
- __diy_server_manifest__
29
- );
30
- }
31
-
32
- export async function decodeReply(formData: FormData) {
33
- return ReactServerDOM.decodeReply(formData, global.__diy_server_manifest__);
34
- }
35
-
36
- export default function handleRequest(
37
- request: Request,
38
- responseStatusCode: number,
39
- responseHeaders: Headers,
40
- remixContext: EntryContext,
41
- loadContext: AppLoadContext
42
- ) {
43
- let prohibitOutOfOrderStreaming =
44
- isBotRequest(request.headers.get("user-agent")) || remixContext.isSpaMode;
45
-
46
- return prohibitOutOfOrderStreaming
47
- ? handleBotRequest(
48
- request,
49
- responseStatusCode,
50
- responseHeaders,
51
- remixContext
52
- )
53
- : handleBrowserRequest(
54
- request,
55
- responseStatusCode,
56
- responseHeaders,
57
- remixContext
58
- );
59
- }
60
-
61
- // We have some Remix apps in the wild already running with isbot@3 so we need
62
- // to maintain backwards compatibility even though we want new apps to use
63
- // isbot@4. That way, we can ship this as a minor Semver update to @react-router/dev.
64
- function isBotRequest(userAgent: string | null) {
65
- if (!userAgent) {
66
- return false;
67
- }
68
-
69
- // isbot >= 3.8.0, >4
70
- if ("isbot" in isbotModule && typeof isbotModule.isbot === "function") {
71
- return isbotModule.isbot(userAgent);
72
- }
73
-
74
- // isbot < 3.8.0
75
- if ("default" in isbotModule && typeof isbotModule.default === "function") {
76
- return isbotModule.default(userAgent);
77
- }
78
-
79
- return false;
80
- }
81
-
82
- function handleBotRequest(
83
- request: Request,
84
- responseStatusCode: number,
85
- responseHeaders: Headers,
86
- remixContext: EntryContext
87
- ) {
88
- return new Promise((resolve, reject) => {
89
- let shellRendered = false;
90
- const { pipe, abort } = renderToPipeableStream(
91
- <RemixServer
92
- context={remixContext}
93
- url={request.url}
94
- abortDelay={ABORT_DELAY}
95
- />,
96
- {
97
- onAllReady() {
98
- shellRendered = true;
99
- const body = new PassThrough();
100
- const stream = createReadableStreamFromReadable(body);
101
-
102
- responseHeaders.set("Content-Type", "text/html");
103
-
104
- resolve(
105
- new Response(stream, {
106
- headers: responseHeaders,
107
- status: responseStatusCode,
108
- })
109
- );
110
-
111
- pipe(body);
112
- },
113
- onShellError(error: unknown) {
114
- reject(error);
115
- },
116
- onError(error: unknown) {
117
- responseStatusCode = 500;
118
- // Log streaming rendering errors from inside the shell. Don't log
119
- // errors encountered during initial shell rendering since they'll
120
- // reject and get logged in handleDocumentRequest.
121
- if (shellRendered) {
122
- console.error(error);
123
- }
124
- },
125
- }
126
- );
127
-
128
- setTimeout(abort, ABORT_DELAY);
129
- });
130
- }
131
-
132
- function handleBrowserRequest(
133
- request: Request,
134
- responseStatusCode: number,
135
- responseHeaders: Headers,
136
- remixContext: EntryContext
137
- ) {
138
- return new Promise((resolve, reject) => {
139
- let shellRendered = false;
140
- const { pipe, abort } = renderToPipeableStream(
141
- <RemixServer
142
- context={remixContext}
143
- url={request.url}
144
- abortDelay={ABORT_DELAY}
145
- />,
146
- {
147
- onShellReady() {
148
- shellRendered = true;
149
- const body = new PassThrough();
150
- const stream = createReadableStreamFromReadable(body);
151
-
152
- responseHeaders.set("Content-Type", "text/html");
153
-
154
- resolve(
155
- new Response(stream, {
156
- headers: responseHeaders,
157
- status: responseStatusCode,
158
- })
159
- );
160
-
161
- pipe(body);
162
- },
163
- onShellError(error: unknown) {
164
- reject(error);
165
- },
166
- onError(error: unknown) {
167
- responseStatusCode = 500;
168
- // Log streaming rendering errors from inside the shell. Don't log
169
- // errors encountered during initial shell rendering since they'll
170
- // reject and get logged in handleDocumentRequest.
171
- if (shellRendered) {
172
- console.error(error);
173
- }
174
- },
175
- }
176
- );
177
-
178
- setTimeout(abort, ABORT_DELAY);
179
- });
180
- }
@@ -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-e145538f2
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;
@@ -1,15 +0,0 @@
1
- import type { AppLoadContext } from "@react-router/server-runtime";
2
- import type { Plugin } from "vite";
3
- import type { GetPlatformProxyOptions, PlatformProxy } from "wrangler";
4
- type CfProperties = Record<string, unknown>;
5
- type LoadContext<Env, Cf extends CfProperties> = {
6
- cloudflare: Omit<PlatformProxy<Env, Cf>, "dispose">;
7
- };
8
- type GetLoadContext<Env, Cf extends CfProperties> = (args: {
9
- request: Request;
10
- context: LoadContext<Env, Cf>;
11
- }) => AppLoadContext | Promise<AppLoadContext>;
12
- export declare const cloudflareDevProxyVitePlugin: <Env, Cf extends CfProperties>({ getLoadContext, ...options }?: {
13
- getLoadContext?: GetLoadContext<Env, Cf>;
14
- } & GetPlatformProxyOptions) => Plugin;
15
- export {};
@@ -1,82 +0,0 @@
1
- /**
2
- * @react-router/dev v0.0.0-experimental-e145538f2
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
- var serverRuntime = require('@react-router/server-runtime');
16
- var nodeAdapter = require('./node-adapter.js');
17
-
18
- let serverBuildId = "virtual:react-router/server-build";
19
- function importWrangler() {
20
- try {
21
- return import('wrangler');
22
- } catch (_) {
23
- throw Error("Could not import `wrangler`. Do you have it installed?");
24
- }
25
- }
26
- const NAME = "vite-plugin-react-router-cloudflare-proxy";
27
- const cloudflareDevProxyVitePlugin = ({
28
- getLoadContext,
29
- ...options
30
- } = {}) => {
31
- return {
32
- name: NAME,
33
- config: () => ({
34
- ssr: {
35
- resolve: {
36
- externalConditions: ["workerd", "worker"]
37
- }
38
- }
39
- }),
40
- configResolved: viteConfig => {
41
- let pluginIndex = name => viteConfig.plugins.findIndex(plugin => plugin.name === name);
42
- let reactRouterPluginIndex = pluginIndex("react-router");
43
- if (reactRouterPluginIndex >= 0 && reactRouterPluginIndex < pluginIndex(NAME)) {
44
- throw new Error(`The "${NAME}" plugin should be placed before the React Router plugin in your Vite config file`);
45
- }
46
- },
47
- configureServer: async viteDevServer => {
48
- let {
49
- getPlatformProxy
50
- } = await importWrangler();
51
- // Do not include `dispose` in Cloudflare context
52
- let {
53
- dispose,
54
- ...cloudflare
55
- } = await getPlatformProxy(options);
56
- let context = {
57
- cloudflare
58
- };
59
- return () => {
60
- if (!viteDevServer.config.server.middlewareMode) {
61
- viteDevServer.middlewares.use(async (nodeReq, nodeRes, next) => {
62
- try {
63
- let build = await viteDevServer.ssrLoadModule(serverBuildId);
64
- let handler = serverRuntime.createRequestHandler(build, "development");
65
- let req = nodeAdapter.fromNodeRequest(nodeReq);
66
- let loadContext = getLoadContext ? await getLoadContext({
67
- request: req,
68
- context
69
- }) : context;
70
- let res = await handler(req, loadContext);
71
- await nodeAdapter.toNodeRequest(res, nodeRes);
72
- } catch (error) {
73
- next(error);
74
- }
75
- });
76
- }
77
- };
78
- }
79
- };
80
- };
81
-
82
- exports.cloudflareDevProxyVitePlugin = cloudflareDevProxyVitePlugin;