@react-router/dev 0.0.0-experimental-e145538f2 → 0.0.0-experimental-10a6fd0e1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands.js +1 -1
- package/dist/cli/detectPackageManager.js +1 -1
- package/dist/cli/index.js +1 -1
- package/dist/cli/run.js +1 -1
- package/dist/cli/useJavascript.js +1 -1
- package/dist/cli.js +1 -1
- package/dist/colors.js +1 -1
- package/dist/config/findConfig.js +1 -1
- package/dist/config/flatRoutes.js +1 -1
- package/dist/config/format.js +1 -1
- package/dist/config/routes.js +1 -1
- package/dist/config.d.ts +0 -2
- package/dist/config.js +5 -22
- package/dist/index.js +1 -1
- package/dist/invariant.js +1 -1
- package/dist/vite/babel.js +1 -1
- package/dist/vite/build.js +2 -15
- package/dist/vite/cloudflare-proxy-plugin.js +1 -1
- package/dist/vite/dev.js +1 -1
- package/dist/vite/import-vite-esm-sync.js +1 -1
- package/dist/vite/index.js +1 -1
- package/dist/vite/node-adapter.js +1 -1
- package/dist/vite/plugin.d.ts +0 -9
- package/dist/vite/plugin.js +8 -219
- package/dist/vite/profiler.js +1 -1
- package/dist/vite/remove-exports.d.ts +1 -3
- package/dist/vite/remove-exports.js +2 -18
- package/dist/vite/resolve-file-url.js +1 -1
- package/dist/vite/styles.js +1 -1
- package/dist/vite/vmod.js +1 -1
- package/package.json +7 -13
- package/dist/config/defaults/entry.client.rsc.tsx +0 -119
- package/dist/config/defaults/entry.react-server.node.tsx +0 -19
- package/dist/config/defaults/entry.react-server.web.tsx +0 -13
- package/dist/config/defaults/entry.server.node.rsc.tsx +0 -180
- package/dist/runtime.client.d.ts +0 -1
- package/dist/runtime.client.js +0 -19
package/dist/cli/commands.js
CHANGED
package/dist/cli/index.js
CHANGED
package/dist/cli/run.js
CHANGED
package/dist/cli.js
CHANGED
package/dist/colors.js
CHANGED
package/dist/config/format.js
CHANGED
package/dist/config/routes.js
CHANGED
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-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-10a6fd0e1
|
|
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
|
|
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 =
|
|
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.js
CHANGED
package/dist/invariant.js
CHANGED
package/dist/vite/babel.js
CHANGED
package/dist/vite/build.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-10a6fd0e1
|
|
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
|
-
//
|
|
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
package/dist/vite/index.js
CHANGED
package/dist/vite/plugin.d.ts
CHANGED
|
@@ -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 {};
|
package/dist/vite/plugin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-10a6fd0e1
|
|
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
|
|
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
|
-
|
|
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}`)
|
|
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
|
-
} :
|
|
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
|
|
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
|
-
|
|
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;
|
package/dist/vite/profiler.js
CHANGED
|
@@ -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-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-10a6fd0e1
|
|
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;
|
package/dist/vite/styles.js
CHANGED
package/dist/vite/vmod.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-router/dev",
|
|
3
|
-
"version": "0.0.0-experimental-
|
|
3
|
+
"version": "0.0.0-experimental-10a6fd0e1",
|
|
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
|
-
"
|
|
46
|
-
"react-router": "0.0.0-experimental-
|
|
47
|
-
"
|
|
48
|
-
"@react-router/node": "0.0.0-experimental-e145538f2"
|
|
45
|
+
"@react-router/node": "0.0.0-experimental-10a6fd0e1",
|
|
46
|
+
"@react-router/server-runtime": "0.0.0-experimental-10a6fd0e1",
|
|
47
|
+
"react-router": "0.0.0-experimental-10a6fd0e1"
|
|
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-
|
|
72
|
+
"@react-router/serve": "0.0.0-experimental-10a6fd0e1"
|
|
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-
|
|
82
|
-
"@react-router/serve": "^0.0.0-experimental-
|
|
78
|
+
"react-router": "^0.0.0-experimental-10a6fd0e1",
|
|
79
|
+
"@react-router/serve": "^0.0.0-experimental-10a6fd0e1"
|
|
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,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
|
-
}
|
package/dist/runtime.client.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function createServerReference(_: unknown, mod: string, name: string): void;
|
package/dist/runtime.client.js
DELETED
|
@@ -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;
|