@react-router/dev 0.0.0-experimental-13d6d438f → 0.0.0-experimental-9aebdc522
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/defaults/entry.client.rsc.tsx +119 -0
- package/dist/config/defaults/entry.react-server.node.tsx +19 -0
- package/dist/config/defaults/entry.react-server.web.tsx +13 -0
- package/dist/config/defaults/entry.server.node.rsc.tsx +164 -0
- 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 +3 -23
- package/dist/config.js +27 -10
- package/dist/index.js +1 -1
- package/dist/invariant.js +1 -1
- package/dist/runtime.client.d.ts +1 -0
- package/dist/runtime.client.js +19 -0
- package/dist/vite/babel.js +1 -1
- package/dist/vite/build.js +24 -34
- 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 +10 -0
- package/dist/vite/plugin.js +232 -19
- package/dist/vite/profiler.js +1 -1
- package/dist/vite/remove-exports.d.ts +3 -1
- package/dist/vite/remove-exports.js +18 -2
- 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 +13 -7
- package/dist/config/defaults/entry.dev.d.ts +0 -2
- package/dist/config/defaults/entry.dev.ts +0 -13
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-9aebdc522
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -149,26 +149,13 @@ async function cleanBuildDirectory(viteConfig, ctx) {
|
|
|
149
149
|
}
|
|
150
150
|
function getViteManifestPaths(ctx, serverBuilds) {
|
|
151
151
|
let buildRelative = pathname => path__default["default"].resolve(ctx.reactRouterConfig.buildDirectory, pathname);
|
|
152
|
-
let viteManifestPaths = [{
|
|
153
|
-
srcPath: "client/.vite/manifest.json",
|
|
154
|
-
destPath: ".vite/client-manifest.json"
|
|
155
|
-
}, ...serverBuilds.map(({
|
|
152
|
+
let viteManifestPaths = ["client/.vite/manifest.json", ...serverBuilds.map(({
|
|
156
153
|
serverBundleBuildConfig
|
|
157
154
|
}) => {
|
|
158
155
|
let serverBundleId = serverBundleBuildConfig === null || serverBundleBuildConfig === void 0 ? void 0 : serverBundleBuildConfig.serverBundleId;
|
|
159
156
|
let serverBundlePath = serverBundleId ? serverBundleId + "/" : "";
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
srcPath: `server/${serverBundlePath}.vite/manifest.json`,
|
|
163
|
-
destPath: `.vite/server-${serverBundleSuffix}manifest.json`
|
|
164
|
-
};
|
|
165
|
-
})].map(({
|
|
166
|
-
srcPath,
|
|
167
|
-
destPath
|
|
168
|
-
}) => ({
|
|
169
|
-
srcPath: buildRelative(srcPath),
|
|
170
|
-
destPath: buildRelative(destPath)
|
|
171
|
-
}));
|
|
157
|
+
return `server/${serverBundlePath}.vite/manifest.json`;
|
|
158
|
+
})].map(srcPath => buildRelative(srcPath));
|
|
172
159
|
return viteManifestPaths;
|
|
173
160
|
}
|
|
174
161
|
async function build(root, {
|
|
@@ -227,7 +214,16 @@ async function build(root, {
|
|
|
227
214
|
});
|
|
228
215
|
}
|
|
229
216
|
await cleanBuildDirectory(viteConfig, ctx);
|
|
230
|
-
//
|
|
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
|
|
231
227
|
await viteBuild({
|
|
232
228
|
ssr: false
|
|
233
229
|
});
|
|
@@ -238,35 +234,29 @@ async function build(root, {
|
|
|
238
234
|
} = await getServerBuilds(ctx);
|
|
239
235
|
await Promise.all(serverBuilds.map(viteBuild));
|
|
240
236
|
let viteManifestPaths = getViteManifestPaths(ctx, serverBuilds);
|
|
241
|
-
await Promise.all(viteManifestPaths.map(async
|
|
242
|
-
|
|
243
|
-
destPath
|
|
244
|
-
}) => {
|
|
245
|
-
let manifestExists = await fse__default["default"].pathExists(srcPath);
|
|
237
|
+
await Promise.all(viteManifestPaths.map(async viteManifestPath => {
|
|
238
|
+
let manifestExists = await fse__default["default"].pathExists(viteManifestPath);
|
|
246
239
|
if (!manifestExists) return;
|
|
247
|
-
//
|
|
248
|
-
if (ctx.viteManifestEnabled) {
|
|
249
|
-
await fse__default["default"].
|
|
250
|
-
await fse__default["default"].move(srcPath, destPath);
|
|
251
|
-
} else {
|
|
252
|
-
await fse__default["default"].remove(srcPath);
|
|
240
|
+
// Delete original Vite manifest file if consumer doesn't want it
|
|
241
|
+
if (!ctx.viteManifestEnabled) {
|
|
242
|
+
await fse__default["default"].remove(viteManifestPath);
|
|
253
243
|
}
|
|
254
244
|
// Remove .vite dir if it's now empty
|
|
255
|
-
let viteDir = path__default["default"].dirname(
|
|
245
|
+
let viteDir = path__default["default"].dirname(viteManifestPath);
|
|
256
246
|
let viteDirFiles = await fse__default["default"].readdir(viteDir);
|
|
257
247
|
if (viteDirFiles.length === 0) {
|
|
258
248
|
await fse__default["default"].remove(viteDir);
|
|
259
249
|
}
|
|
260
250
|
}));
|
|
261
|
-
if (ctx.reactRouterConfig.manifest) {
|
|
262
|
-
await fse__default["default"].ensureDir(path__default["default"].join(ctx.reactRouterConfig.buildDirectory, ".react-router"));
|
|
263
|
-
await fse__default["default"].writeFile(path__default["default"].join(ctx.reactRouterConfig.buildDirectory, ".react-router", "manifest.json"), JSON.stringify(buildManifest, null, 2), "utf-8");
|
|
264
|
-
}
|
|
265
251
|
await ((_reactRouterConfig$bu = reactRouterConfig.buildEnd) === null || _reactRouterConfig$bu === void 0 ? void 0 : _reactRouterConfig$bu.call(reactRouterConfig, {
|
|
266
252
|
buildManifest,
|
|
267
253
|
reactRouterConfig,
|
|
268
254
|
viteConfig
|
|
269
255
|
}));
|
|
256
|
+
const {
|
|
257
|
+
serverModules
|
|
258
|
+
} = plugin.getReactServerOptions();
|
|
259
|
+
invariant["default"](!serverModules.size, "`use server` is not yet supported.");
|
|
270
260
|
}
|
|
271
261
|
|
|
272
262
|
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,9 @@ type ReactRouterPluginSsrBuildContext = {
|
|
|
59
59
|
export type ReactRouterPluginContext = ReactRouterPluginSsrBuildContext & {
|
|
60
60
|
rootDirectory: string;
|
|
61
61
|
entryClientFilePath: string;
|
|
62
|
+
entryReactServerFilePath?: string;
|
|
62
63
|
entryServerFilePath: string;
|
|
64
|
+
publicPath: string;
|
|
63
65
|
reactRouterConfig: ResolvedVitePluginConfig;
|
|
64
66
|
viteManifestEnabled: boolean;
|
|
65
67
|
};
|
|
@@ -68,4 +70,12 @@ type MaybePromise<T> = T | Promise<T>;
|
|
|
68
70
|
export declare let setReactRouterDevLoadContext: (loadContext: (request: Request) => MaybePromise<Record<string, unknown>>) => void;
|
|
69
71
|
export type ReactRouterVitePlugin = (config?: VitePluginConfig) => Vite.Plugin[];
|
|
70
72
|
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
|
+
};
|
|
71
81
|
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-9aebdc522
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -22,6 +22,7 @@ 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');
|
|
25
26
|
var findConfig = require('../config/findConfig.js');
|
|
26
27
|
var invariant = require('../invariant.js');
|
|
27
28
|
var nodeAdapter = require('./node-adapter.js');
|
|
@@ -118,13 +119,16 @@ let serverManifestId = vmod.id("server-manifest");
|
|
|
118
119
|
let browserManifestId = vmod.id("browser-manifest");
|
|
119
120
|
let hmrRuntimeId = vmod.id("hmr-runtime");
|
|
120
121
|
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");
|
|
121
125
|
const resolveRelativeRouteFilePath = (route, reactRouterConfig) => {
|
|
122
126
|
let vite = importViteEsmSync.importViteEsmSync();
|
|
123
127
|
let file = route.file;
|
|
124
128
|
let fullPath = path__namespace.resolve(reactRouterConfig.appDirectory, file);
|
|
125
129
|
return vite.normalizePath(fullPath);
|
|
126
130
|
};
|
|
127
|
-
let vmods = [serverBuildId, serverManifestId, browserManifestId];
|
|
131
|
+
let vmods = [serverBuildId, serverManifestId, browserManifestId, reactServerBuildId, clientReferencesId, serverReferencesId];
|
|
128
132
|
const invalidateVirtualModules = viteDevServer => {
|
|
129
133
|
vmods.forEach(vmod$1 => {
|
|
130
134
|
let mod = viteDevServer.moduleGraph.getModuleById(vmod.resolve(vmod$1));
|
|
@@ -153,12 +157,12 @@ const getReactRouterManifestBuildAssets = (ctx, viteManifest, entryFilePath, pre
|
|
|
153
157
|
let prependedAssetChunks = prependedAssetFilePaths.map(filePath => resolveChunk(ctx, viteManifest, filePath));
|
|
154
158
|
let chunks = resolveDependantChunks(viteManifest, [...prependedAssetChunks, entryChunk]);
|
|
155
159
|
return {
|
|
156
|
-
module: `${ctx.
|
|
160
|
+
module: `${ctx.publicPath}${entryChunk.file}`,
|
|
157
161
|
imports: dedupe(chunks.flatMap(e => e.imports ?? [])).map(imported => {
|
|
158
|
-
return `${ctx.
|
|
162
|
+
return `${ctx.publicPath}${viteManifest[imported].file}`;
|
|
159
163
|
}) ?? [],
|
|
160
164
|
css: dedupe(chunks.flatMap(e => e.css ?? [])).map(href => {
|
|
161
|
-
return `${ctx.
|
|
165
|
+
return `${ctx.publicPath}${href}`;
|
|
162
166
|
}) ?? []
|
|
163
167
|
};
|
|
164
168
|
};
|
|
@@ -233,6 +237,7 @@ const getServerBundleBuildConfig = viteUserConfig => {
|
|
|
233
237
|
return viteUserConfig.__reactRouterServerBundleBuildConfig;
|
|
234
238
|
};
|
|
235
239
|
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");
|
|
236
241
|
let getClientBuildDirectory = reactRouterConfig => path__namespace.join(reactRouterConfig.buildDirectory, "client");
|
|
237
242
|
let defaultEntriesDir = path__namespace.resolve(__dirname, "..", "config", "defaults");
|
|
238
243
|
let defaultEntries = fse__namespace.readdirSync(defaultEntriesDir).map(filename => path__namespace.join(defaultEntriesDir, filename));
|
|
@@ -280,11 +285,13 @@ const reactRouterVitePlugin = _config => {
|
|
|
280
285
|
});
|
|
281
286
|
let {
|
|
282
287
|
entryClientFilePath,
|
|
288
|
+
entryReactServerFilePath,
|
|
283
289
|
entryServerFilePath
|
|
284
290
|
} = await config.resolveEntryFiles({
|
|
285
291
|
rootDirectory,
|
|
286
292
|
reactRouterConfig
|
|
287
293
|
});
|
|
294
|
+
let publicPath = config.resolvePublicPath(viteUserConfig);
|
|
288
295
|
let viteManifestEnabled = ((_viteUserConfig$build = viteUserConfig.build) === null || _viteUserConfig$build === void 0 ? void 0 : _viteUserConfig$build.manifest) === true;
|
|
289
296
|
let ssrBuildCtx = viteConfigEnv.isSsrBuild && viteCommand === "build" ? {
|
|
290
297
|
isSsrBuild: true,
|
|
@@ -297,7 +304,9 @@ const reactRouterVitePlugin = _config => {
|
|
|
297
304
|
reactRouterConfig,
|
|
298
305
|
rootDirectory,
|
|
299
306
|
entryClientFilePath,
|
|
307
|
+
entryReactServerFilePath,
|
|
300
308
|
entryServerFilePath,
|
|
309
|
+
publicPath,
|
|
301
310
|
viteManifestEnabled,
|
|
302
311
|
...ssrBuildCtx
|
|
303
312
|
};
|
|
@@ -314,7 +323,7 @@ const reactRouterVitePlugin = _config => {
|
|
|
314
323
|
ctx.serverBundleBuildConfig.routes :
|
|
315
324
|
// Otherwise, all routes are imported as usual
|
|
316
325
|
ctx.reactRouterConfig.routes;
|
|
317
|
-
|
|
326
|
+
let code = `
|
|
318
327
|
import * as entryServer from ${JSON.stringify(resolveFileUrl.resolveFileUrl(ctx, ctx.entryServerFilePath))};
|
|
319
328
|
${Object.keys(routes).map((key, index) => {
|
|
320
329
|
let route = routes[key];
|
|
@@ -325,7 +334,7 @@ const reactRouterVitePlugin = _config => {
|
|
|
325
334
|
export const basename = ${JSON.stringify(ctx.reactRouterConfig.basename)};
|
|
326
335
|
export const future = ${JSON.stringify(ctx.reactRouterConfig.future)};
|
|
327
336
|
export const isSpaMode = ${!ctx.reactRouterConfig.ssr && ctx.reactRouterConfig.prerender == null};
|
|
328
|
-
export const publicPath = ${JSON.stringify(ctx.
|
|
337
|
+
export const publicPath = ${JSON.stringify(ctx.publicPath)};
|
|
329
338
|
export const entry = { module: entryServer };
|
|
330
339
|
export const routes = {
|
|
331
340
|
${Object.keys(routes).map((key, index) => {
|
|
@@ -340,6 +349,61 @@ const reactRouterVitePlugin = _config => {
|
|
|
340
349
|
}`;
|
|
341
350
|
}).join(",\n ")}
|
|
342
351
|
};`;
|
|
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}\};`;
|
|
343
407
|
};
|
|
344
408
|
let loadViteManifest = async directory => {
|
|
345
409
|
let manifestContents = await fse__namespace.readFile(path__namespace.resolve(directory, ".vite", "manifest.json"), "utf-8");
|
|
@@ -397,7 +461,7 @@ const reactRouterVitePlugin = _config => {
|
|
|
397
461
|
};
|
|
398
462
|
let version = getHash(JSON.stringify(fingerprintedValues), 8);
|
|
399
463
|
let manifestPath = path__namespace.posix.join(viteConfig.build.assetsDir, `manifest-${version}.js`);
|
|
400
|
-
let url = `${ctx.
|
|
464
|
+
let url = `${ctx.publicPath}${manifestPath}`;
|
|
401
465
|
let nonFingerprintedValues = {
|
|
402
466
|
url,
|
|
403
467
|
version
|
|
@@ -432,7 +496,7 @@ const reactRouterVitePlugin = _config => {
|
|
|
432
496
|
path: route.path,
|
|
433
497
|
index: route.index,
|
|
434
498
|
caseSensitive: route.caseSensitive,
|
|
435
|
-
module: path__namespace.posix.join(ctx.
|
|
499
|
+
module: path__namespace.posix.join(ctx.publicPath, `${resolveFileUrl.resolveFileUrl(ctx, resolveRelativeRouteFilePath(route, ctx.reactRouterConfig))}`),
|
|
436
500
|
hasAction: sourceExports.includes("action"),
|
|
437
501
|
hasLoader: sourceExports.includes("loader"),
|
|
438
502
|
hasClientAction: sourceExports.includes("clientAction"),
|
|
@@ -443,12 +507,12 @@ const reactRouterVitePlugin = _config => {
|
|
|
443
507
|
}
|
|
444
508
|
return {
|
|
445
509
|
version: String(Math.random()),
|
|
446
|
-
url: path__namespace.posix.join(ctx.
|
|
510
|
+
url: path__namespace.posix.join(ctx.publicPath, vmod.url(browserManifestId)),
|
|
447
511
|
hmr: {
|
|
448
|
-
runtime: path__namespace.posix.join(ctx.
|
|
512
|
+
runtime: path__namespace.posix.join(ctx.publicPath, vmod.url(injectHmrRuntimeId))
|
|
449
513
|
},
|
|
450
514
|
entry: {
|
|
451
|
-
module: path__namespace.posix.join(ctx.
|
|
515
|
+
module: path__namespace.posix.join(ctx.publicPath, resolveFileUrl.resolveFileUrl(ctx, ctx.entryClientFilePath)),
|
|
452
516
|
imports: []
|
|
453
517
|
},
|
|
454
518
|
routes
|
|
@@ -538,9 +602,9 @@ const reactRouterVitePlugin = _config => {
|
|
|
538
602
|
rollupOptions: {
|
|
539
603
|
...baseRollupOptions,
|
|
540
604
|
preserveEntrySignatures: "exports-only",
|
|
541
|
-
input: [ctx.entryClientFilePath, ...Object.values(ctx.reactRouterConfig.routes).map(route => `${path__namespace.resolve(ctx.reactRouterConfig.appDirectory, route.file)}${BUILD_CLIENT_ROUTE_QUERY_STRING}`)]
|
|
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 : [])]
|
|
542
606
|
}
|
|
543
|
-
} : {
|
|
607
|
+
} : !ctx.reactRouterConfig.future.unstable_serverComponents || !process.env.REACT_SERVER_BUILD ? {
|
|
544
608
|
// We move SSR-only assets to client assets. Note that the
|
|
545
609
|
// SSR build can also emit code-split JS files (e.g. by
|
|
546
610
|
// dynamic import) under the same assets directory
|
|
@@ -561,6 +625,28 @@ const reactRouterVitePlugin = _config => {
|
|
|
561
625
|
format: ctx.reactRouterConfig.serverModuleFormat
|
|
562
626
|
}
|
|
563
627
|
}
|
|
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
|
+
}
|
|
564
650
|
})
|
|
565
651
|
}
|
|
566
652
|
} : undefined),
|
|
@@ -714,7 +800,7 @@ const reactRouterVitePlugin = _config => {
|
|
|
714
800
|
// After the SSR build is finished, we inspect the Vite manifest for
|
|
715
801
|
// the SSR build and move server-only assets to client assets directory
|
|
716
802
|
async handler() {
|
|
717
|
-
if (!ctx.isSsrBuild) {
|
|
803
|
+
if (!ctx.isSsrBuild || process.env.REACT_SERVER_BUILD) {
|
|
718
804
|
return;
|
|
719
805
|
}
|
|
720
806
|
invariant["default"](viteConfig);
|
|
@@ -798,6 +884,18 @@ const reactRouterVitePlugin = _config => {
|
|
|
798
884
|
});
|
|
799
885
|
return `window.__remixManifest=${reactRouterManifestString};`;
|
|
800
886
|
}
|
|
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
|
+
}
|
|
801
899
|
}
|
|
802
900
|
}
|
|
803
901
|
}, {
|
|
@@ -853,9 +951,20 @@ const reactRouterVitePlugin = _config => {
|
|
|
853
951
|
}, {
|
|
854
952
|
name: "react-router-route-exports",
|
|
855
953
|
async transform(code, id, options) {
|
|
856
|
-
|
|
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
|
+
}
|
|
857
958
|
let route = getRoute(ctx.reactRouterConfig, id);
|
|
858
959
|
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
|
+
}
|
|
859
968
|
if (!ctx.reactRouterConfig.ssr) {
|
|
860
969
|
let serverOnlyExports = esModuleLexer.parse(code)[1].map(exp => exp.n).filter(exp => SERVER_ONLY_ROUTE_EXPORTS.includes(exp));
|
|
861
970
|
if (serverOnlyExports.length > 0) {
|
|
@@ -871,7 +980,6 @@ const reactRouterVitePlugin = _config => {
|
|
|
871
980
|
}
|
|
872
981
|
}
|
|
873
982
|
}
|
|
874
|
-
let [filepath] = id.split("?");
|
|
875
983
|
return removeExports.removeExports(code, SERVER_ONLY_ROUTE_EXPORTS, {
|
|
876
984
|
sourceMaps: true,
|
|
877
985
|
filename: id,
|
|
@@ -967,6 +1075,88 @@ const reactRouterVitePlugin = _config => {
|
|
|
967
1075
|
});
|
|
968
1076
|
return modules;
|
|
969
1077
|
}
|
|
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
|
+
}
|
|
970
1160
|
}];
|
|
971
1161
|
};
|
|
972
1162
|
function isInReactRouterMonorepo() {
|
|
@@ -1033,8 +1223,8 @@ async function getRouteMetadata(ctx, viteChildCompiler, route, readRouteFile) {
|
|
|
1033
1223
|
path: route.path,
|
|
1034
1224
|
index: route.index,
|
|
1035
1225
|
caseSensitive: route.caseSensitive,
|
|
1036
|
-
url: path__namespace.posix.join(ctx.
|
|
1037
|
-
module: path__namespace.posix.join(ctx.
|
|
1226
|
+
url: path__namespace.posix.join(ctx.publicPath, "/" + path__namespace.relative(ctx.rootDirectory, resolveRelativeRouteFilePath(route, ctx.reactRouterConfig))),
|
|
1227
|
+
module: path__namespace.posix.join(ctx.publicPath, `${resolveFileUrl.resolveFileUrl(ctx, resolveRelativeRouteFilePath(route, ctx.reactRouterConfig))}?import`),
|
|
1038
1228
|
// Ensure the Vite dev server responds with a JS module
|
|
1039
1229
|
hasAction: sourceExports.includes("action"),
|
|
1040
1230
|
hasClientAction: sourceExports.includes("clientAction"),
|
|
@@ -1165,8 +1355,31 @@ function createPrerenderRoutes(manifest, parentId = "", routesByParentId = group
|
|
|
1165
1355
|
};
|
|
1166
1356
|
});
|
|
1167
1357
|
}
|
|
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
|
+
}
|
|
1168
1380
|
|
|
1169
1381
|
exports.extractPluginContext = extractPluginContext;
|
|
1382
|
+
exports.getReactServerOptions = getReactServerOptions;
|
|
1170
1383
|
exports.getServerBuildDirectory = getServerBuildDirectory;
|
|
1171
1384
|
exports.loadPluginContext = loadPluginContext;
|
|
1172
1385
|
exports.reactRouterVitePlugin = reactRouterVitePlugin;
|
package/dist/vite/profiler.js
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import type { GeneratorOptions } from "@babel/generator";
|
|
2
|
-
export declare const removeExports: (source: string, exportsToRemove: string[], generateOptions?: GeneratorOptions) => import("@babel/generator").GeneratorResult
|
|
2
|
+
export declare const removeExports: (source: string, exportsToRemove: string[], generateOptions?: GeneratorOptions) => import("@babel/generator").GeneratorResult | {
|
|
3
|
+
code: string;
|
|
4
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @react-router/dev v0.0.0-experimental-
|
|
2
|
+
* @react-router/dev v0.0.0-experimental-9aebdc522
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) Remix Software Inc.
|
|
5
5
|
*
|
|
@@ -179,6 +179,20 @@ 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
|
+
}
|
|
182
196
|
}
|
|
183
197
|
});
|
|
184
198
|
if (removedExports.size === 0) {
|
|
@@ -272,7 +286,9 @@ const removeExports = (source, exportsToRemove, generateOptions = {}) => {
|
|
|
272
286
|
ImportNamespaceSpecifier: sweepImport
|
|
273
287
|
});
|
|
274
288
|
} while (referencesRemovedInThisPass);
|
|
275
|
-
return
|
|
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
|
+
};
|
|
276
292
|
};
|
|
277
293
|
|
|
278
294
|
exports.removeExports = removeExports;
|
package/dist/vite/styles.js
CHANGED
package/dist/vite/vmod.js
CHANGED