? [
optionalDeps([/^@opentelemetry\//], {
forceEmpty: otelForceEmpty,
}),
]
: []),
manifestRegistry(),
resolveWorkspace(),
...(options.edge ? [preloadManifestVirtual(options)] : []),
...(options.edge ? [serverReferenceMapVirtual(options)] : []),
...(options.edge ? [clientReferenceMapVirtual(options)] : []),
replace({
preventAssignment: true,
"process.env.NODE_ENV": JSON.stringify(
options.dev ? "development" : "production"
),
...(options.edge
? {
"import.meta.__react_server_cwd__": JSON.stringify(cwd),
"import.meta.url": JSON.stringify(
pathToFileURL(join(cwd, "worker.mjs")).href
),
}
: {}),
}),
rolldownUseDirectiveInline([
useServerInlineConfig,
useClientInlineConfig,
]),
rolldownUseClient("rsc", clientManifest, "pre", clientManifestBus),
rolldownUseClient("rsc", clientManifest, undefined),
rolldownUseServer("rsc", serverManifest),
rolldownUseCacheInline(
config.cache?.profiles,
config.cache?.providers,
"server"
),
rolldownUseDynamic(),
rolldownUseWorker("rsc", { edge: options.edge }),
rootModule(root),
configPrebuilt(),
{
name: "suppress-empty-chunks",
generateBundle(_, bundle) {
Object.keys(bundle).forEach((fileName) => {
const chunk = bundle[fileName];
if (chunk.code && !chunk.code.trim()) {
delete bundle[fileName];
}
});
},
},
...(config.build?.rollupOptions?.plugins ?? []),
...(config.build?.rolldownOptions?.plugins ?? []),
],
},
},
plugins: [
fileListingReporterPlugin("RSC"),
manifestRegistry(),
manifestGenerator(clientManifest, serverManifest),
inlineCjsJson(),
jsonNamedExports(),
resourcesPlugin(),
!root || root === "@lazarv/react-server/file-router"
? fileRouter(options)
: [],
importRemotePlugin(),
reactServerEval(options),
...buildPlugins,
fixEsbuildOptionsPlugin(),
reactServerLive(),
reactServerRuntime({ base: config.base }),
],
css: {
...config.css,
postcss: cwd,
modules: {
generateScopedName: "_[local]_[hash:base64:5]",
...config.css?.modules,
},
},
ssr: {
...config.ssr,
// In edge mode, don't externalize react packages - they need to be bundled
external: options.edge
? []
: [
"react",
"react-dom",
"@lazarv/rsc",
"react-is",
...(config.ssr?.external ?? []),
...(config.external ?? []),
],
// In edge mode, force bundling of react packages
noExternal: options.edge ? true : config.ssr?.noExternal,
resolve: {
...config.ssr?.resolve,
conditions: [
"react-server",
...(options.edge ? ["workerd", "edge"] : []),
],
externalConditions: [
"react-server",
...(options.edge ? ["workerd", "edge"] : []),
],
},
},
publicDir: join(cwd, publicDir),
};
let viteConfig = buildConfig;
if (typeof config.build?.server?.config === "function")
viteConfig = config.build?.server?.config(buildConfig);
if (typeof config.build?.server?.config === "object")
viteConfig = merge(buildConfig, config.build?.server?.config);
if (typeof config.vite === "function") viteConfig = config.vite(viteConfig);
if (typeof config.vite === "object")
viteConfig = merge(viteConfig, config.vite);
const viteConfigClientComponents = {
...viteConfig,
customLogger: customLogger(options.silent),
resolve: {
...viteConfig.resolve,
alias: [
...(options.edge === false || config.ssr?.worker === false
? clientAlias()
: []),
{
find: /^@lazarv\/react-server\/http-context$/,
replacement: join(sys.rootDir, "server/http-context.mjs"),
},
{
find: /^@lazarv\/react-server\/router$/,
replacement: join(sys.rootDir, "client/route.mjs"),
},
{
find: /^@lazarv\/react-server\/resources$/,
replacement: join(sys.rootDir, "client/resource.mjs"),
},
{
find: /^@lazarv\/react-server\/__create_resource__$/,
replacement: join(sys.rootDir, "client/create-resource.mjs"),
},
{
find: /^@lazarv\/react-server\/navigation$/,
replacement: join(sys.rootDir, "client/navigation.jsx"),
},
{
find: /^@lazarv\/react-server\/memory-cache\/client$/,
replacement: join(sys.rootDir, "cache/ssr.mjs"),
},
// Only use client cache for non-edge builds (edge bundles server code that needs full cache API)
...(!options.edge
? [
{
find: /^@lazarv\/react-server\/memory-cache$/,
replacement: join(sys.rootDir, "cache/client.mjs"),
},
]
: []),
// In edge mode, alias React packages to standard versions (for SSR build)
...(options.edge
? [
{ find: /^react$/, replacement: react },
{ find: /^react\/jsx-runtime$/, replacement: reactJsxRuntime },
{
find: /^react\/jsx-dev-runtime$/,
replacement: reactJsxDevRuntime,
},
{
find: /^react\/compiler-runtime$/,
replacement: reactCompilerRuntime,
},
{ find: /^react-dom$/, replacement: reactDom },
{ find: /^react-dom\/client$/, replacement: reactDomClient },
{
find: /^react-dom\/server\.edge$/,
replacement: reactDomServerEdge,
},
...(rscClient
? [{ find: /^@lazarv\/rsc\/client$/, replacement: rscClient }]
: []),
{ find: /^react-is$/, replacement: reactIs },
]
: []),
...viteConfig.resolve.alias.filter(
(alias) =>
!alias.replacement.endsWith(
"react-server/client/http-context.jsx"
) &&
!alias.replacement.endsWith("react-server/cache/index.mjs") &&
!alias.replacement.endsWith("react-server/server/router.jsx") &&
!alias.replacement.endsWith("react-server/server/resources.jsx") &&