waku 0.21.13 → 0.21.14

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.
@@ -117,7 +117,10 @@ const analyzeEntries = async (rootDir, config)=>{
117
117
  isClient: true,
118
118
  serverFileSet
119
119
  }),
120
- rscManagedPlugin(config),
120
+ rscManagedPlugin({
121
+ ...config,
122
+ addMainToInput: true
123
+ }),
121
124
  ...deployPlugins(config)
122
125
  ],
123
126
  ssr: {
@@ -475,7 +478,7 @@ const emitStaticFiles = async (rootDir, config, distEntriesFile, distEntries, cs
475
478
  const dynamicHtmlPaths = Array.from(dynamicHtmlPathMap);
476
479
  const code = `
477
480
  export const dynamicHtmlPaths = ${JSON.stringify(dynamicHtmlPaths)};
478
- export const publicIndexHtml = ${JSON.stringify(publicIndexHtml)};
481
+ export const publicIndexHtml = ${JSON.stringify(defaultHtmlStr)};
479
482
  `;
480
483
  await appendFile(distEntriesFile, code);
481
484
  };
@@ -548,6 +551,7 @@ export async function build(options) {
548
551
  const cssAssets = clientBuildOutput.output.flatMap(({ type, fileName })=>type === 'asset' && fileName.endsWith('.css') ? [
549
552
  fileName
550
553
  ] : []);
554
+ platformObject.buildOptions.unstable_phase = 'emitStaticFiles';
551
555
  await emitStaticFiles(rootDir, config, distEntriesFile, distEntries, cssAssets);
552
556
  platformObject.buildOptions.unstable_phase = 'buildDeploy';
553
557
  await buildDeploy(rootDir, config);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/builder/build.ts"],"sourcesContent":["import { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\n\nimport { build as buildVite, resolveConfig as resolveViteConfig } from 'vite';\nimport viteReact from '@vitejs/plugin-react';\nimport type { LoggingFunction, RollupLog } from 'rollup';\nimport type { ReactNode } from 'react';\n\nimport type { Config } from '../../config.js';\nimport { setAllEnvInternal, unstable_getPlatformObject } from '../../server.js';\nimport type { EntriesPrd } from '../types.js';\nimport type { ResolvedConfig } from '../config.js';\nimport { resolveConfig } from '../config.js';\nimport { EXTENSIONS } from '../constants.js';\nimport type { PathSpec } from '../utils/path.js';\nimport {\n decodeFilePathFromAbsolute,\n extname,\n filePathToFileURL,\n fileURLToFilePath,\n joinPath,\n} from '../utils/path.js';\nimport { extendViteConfig } from '../utils/vite-config.js';\nimport {\n appendFile,\n createWriteStream,\n existsSync,\n mkdir,\n readdir,\n readFile,\n rename,\n unlink,\n writeFile,\n} from '../utils/node-fs.js';\nimport { encodeRscPath, generatePrefetchCode } from '../renderers/utils.js';\nimport { collectClientModules, renderRsc } from '../renderers/rsc.js';\nimport { renderHtml } from '../renderers/html.js';\nimport {\n SERVER_MODULE_MAP,\n CLIENT_MODULE_MAP,\n CLIENT_PREFIX,\n} from '../middleware/handler.js';\nimport { rscRsdwPlugin } from '../plugins/vite-plugin-rsc-rsdw.js';\nimport { rscIndexPlugin } from '../plugins/vite-plugin-rsc-index.js';\nimport { rscAnalyzePlugin } from '../plugins/vite-plugin-rsc-analyze.js';\nimport { nonjsResolvePlugin } from '../plugins/vite-plugin-nonjs-resolve.js';\nimport { rscTransformPlugin } from '../plugins/vite-plugin-rsc-transform.js';\nimport { rscEntriesPlugin } from '../plugins/vite-plugin-rsc-entries.js';\nimport { rscEnvPlugin } from '../plugins/vite-plugin-rsc-env.js';\nimport { rscPrivatePlugin } from '../plugins/vite-plugin-rsc-private.js';\nimport { rscManagedPlugin } from '../plugins/vite-plugin-rsc-managed.js';\nimport {\n DIST_ENTRIES_JS,\n DIST_PUBLIC,\n DIST_ASSETS,\n DIST_SSR,\n} from './constants.js';\nimport { deployVercelPlugin } from '../plugins/vite-plugin-deploy-vercel.js';\nimport { deployNetlifyPlugin } from '../plugins/vite-plugin-deploy-netlify.js';\nimport { deployCloudflarePlugin } from '../plugins/vite-plugin-deploy-cloudflare.js';\nimport { deployDenoPlugin } from '../plugins/vite-plugin-deploy-deno.js';\nimport { deployPartykitPlugin } from '../plugins/vite-plugin-deploy-partykit.js';\nimport { deployAwsLambdaPlugin } from '../plugins/vite-plugin-deploy-aws-lambda.js';\n\n// TODO this file and functions in it are too long. will fix.\n\n// Upstream issue: https://github.com/rollup/rollup/issues/4699\nconst onwarn = (warning: RollupLog, defaultHandler: LoggingFunction) => {\n if (\n warning.code === 'MODULE_LEVEL_DIRECTIVE' &&\n /\"use (client|server)\"/.test(warning.message)\n ) {\n return;\n } else if (\n warning.code === 'SOURCEMAP_ERROR' &&\n warning.loc?.column === 0 &&\n warning.loc?.line === 1\n ) {\n return;\n }\n defaultHandler(warning);\n};\n\nconst deployPlugins = (config: ResolvedConfig) => [\n deployVercelPlugin(config),\n deployNetlifyPlugin(config),\n deployCloudflarePlugin(config),\n deployDenoPlugin(config),\n deployPartykitPlugin(config),\n deployAwsLambdaPlugin(config),\n];\n\nconst analyzeEntries = async (rootDir: string, config: ResolvedConfig) => {\n const wakuClientDist = decodeFilePathFromAbsolute(\n joinPath(fileURLToFilePath(import.meta.url), '../../../client.js'),\n );\n const wakuMinimalClientDist = decodeFilePathFromAbsolute(\n joinPath(fileURLToFilePath(import.meta.url), '../../../minimal/client.js'),\n );\n const clientFileSet = new Set<string>([\n wakuClientDist,\n wakuMinimalClientDist,\n ]);\n const serverFileSet = new Set<string>();\n const fileHashMap = new Map<string, string>();\n const moduleFileMap = new Map<string, string>(); // module id -> full path\n const pagesDirPath = joinPath(rootDir, config.srcDir, config.pagesDir);\n if (existsSync(pagesDirPath)) {\n const files = await readdir(pagesDirPath, {\n encoding: 'utf8',\n recursive: true,\n });\n for (const file of files) {\n const ext = extname(file);\n if (EXTENSIONS.includes(ext)) {\n moduleFileMap.set(\n joinPath(config.pagesDir, file.slice(0, -ext.length)),\n joinPath(pagesDirPath, file),\n );\n }\n }\n }\n await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n plugins: [\n rscAnalyzePlugin({\n isClient: false,\n clientFileSet,\n serverFileSet,\n fileHashMap,\n }),\n rscManagedPlugin({ ...config, addEntriesToInput: true }),\n ...deployPlugins(config),\n ],\n ssr: {\n target: 'webworker',\n resolve: {\n conditions: ['react-server'],\n externalConditions: ['react-server'],\n },\n noExternal: /^(?!node:)/,\n },\n build: {\n write: false,\n ssr: true,\n target: 'node18',\n rollupOptions: {\n onwarn,\n input: Object.fromEntries(moduleFileMap),\n },\n },\n },\n config,\n 'build-analyze',\n ),\n );\n const clientEntryFiles = Object.fromEntries(\n Array.from(clientFileSet).map((fname, i) => [\n `${DIST_ASSETS}/rsc${i}-${fileHashMap.get(fname) || 'lib'}`, // FIXME 'lib' is a workaround to avoid `undefined`\n fname,\n ]),\n );\n await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n plugins: [\n rscAnalyzePlugin({ isClient: true, serverFileSet }),\n rscManagedPlugin(config),\n ...deployPlugins(config),\n ],\n ssr: {\n target: 'webworker',\n noExternal: /^(?!node:)/,\n },\n build: {\n write: false,\n ssr: true,\n target: 'node18',\n rollupOptions: {\n onwarn,\n input: clientEntryFiles,\n },\n },\n },\n config,\n 'build-analyze',\n ),\n );\n const serverEntryFiles = Object.fromEntries(\n Array.from(serverFileSet).map((fname, i) => [\n `${DIST_ASSETS}/rsf${i}`,\n fname,\n ]),\n );\n const serverModuleFiles = Object.fromEntries(moduleFileMap);\n return {\n clientEntryFiles,\n serverEntryFiles,\n serverModuleFiles,\n };\n};\n\n// For RSC\nconst buildServerBundle = async (\n rootDir: string,\n env: Record<string, string>,\n config: ResolvedConfig,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverModuleFiles: Record<string, string>,\n partial: boolean,\n) => {\n const serverBuildOutput = await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n plugins: [\n nonjsResolvePlugin(),\n rscTransformPlugin({\n isClient: false,\n isBuild: true,\n clientEntryFiles,\n serverEntryFiles,\n }),\n rscRsdwPlugin(),\n rscEnvPlugin({ isDev: false, env, config }),\n rscPrivatePlugin(config),\n rscManagedPlugin({\n ...config,\n addEntriesToInput: true,\n }),\n rscEntriesPlugin({\n srcDir: config.srcDir,\n ssrDir: DIST_SSR,\n moduleMap: {\n ...Object.fromEntries(\n Object.keys(SERVER_MODULE_MAP).map((key) => [\n key,\n `./${key}.js`,\n ]),\n ),\n ...Object.fromEntries(\n Object.keys(CLIENT_MODULE_MAP).map((key) => [\n `${CLIENT_PREFIX}${key}`,\n `./${DIST_SSR}/${key}.js`,\n ]),\n ),\n ...Object.fromEntries(\n Object.keys(clientEntryFiles || {}).map((key) => [\n `${DIST_SSR}/${key}.js`,\n `./${DIST_SSR}/${key}.js`,\n ]),\n ),\n ...Object.fromEntries(\n Object.keys(serverEntryFiles || {}).map((key) => [\n `${key}.js`,\n `./${key}.js`,\n ]),\n ),\n },\n }),\n ...deployPlugins(config),\n ],\n ssr: {\n resolve: {\n conditions: ['react-server'],\n externalConditions: ['react-server'],\n },\n noExternal: /^(?!node:)/,\n },\n esbuild: {\n jsx: 'automatic',\n },\n define: {\n 'process.env.NODE_ENV': JSON.stringify('production'),\n },\n publicDir: false,\n build: {\n emptyOutDir: !partial,\n ssr: true,\n ssrEmitAssets: true,\n target: 'node18',\n outDir: joinPath(rootDir, config.distDir),\n rollupOptions: {\n onwarn,\n input: {\n ...SERVER_MODULE_MAP,\n ...serverModuleFiles,\n ...clientEntryFiles,\n ...serverEntryFiles,\n },\n },\n },\n },\n config,\n 'build-server',\n ),\n );\n if (!('output' in serverBuildOutput)) {\n throw new Error('Unexpected vite server build output');\n }\n return serverBuildOutput;\n};\n\n// For SSR (render client components on server to generate HTML)\nconst buildSsrBundle = async (\n rootDir: string,\n env: Record<string, string>,\n config: ResolvedConfig,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverBuildOutput: Awaited<ReturnType<typeof buildServerBundle>>,\n partial: boolean,\n) => {\n const cssAssets = serverBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' && fileName.endsWith('.css') ? [fileName] : [],\n );\n await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n base: config.basePath,\n plugins: [\n rscRsdwPlugin(),\n rscIndexPlugin({ ...config, cssAssets }),\n rscEnvPlugin({ isDev: false, env, config }),\n rscPrivatePlugin(config),\n rscManagedPlugin({ ...config, addMainToInput: true }),\n rscTransformPlugin({\n isClient: true,\n isBuild: true,\n serverEntryFiles,\n }),\n ...deployPlugins(config),\n ],\n ssr: {\n noExternal: /^(?!node:)/,\n },\n esbuild: {\n jsx: 'automatic',\n },\n define: {\n 'process.env.NODE_ENV': JSON.stringify('production'),\n },\n publicDir: false,\n build: {\n emptyOutDir: !partial,\n ssr: true,\n target: 'node18',\n outDir: joinPath(rootDir, config.distDir, DIST_SSR),\n rollupOptions: {\n onwarn,\n input: {\n ...clientEntryFiles,\n ...CLIENT_MODULE_MAP,\n },\n output: {\n entryFileNames: (chunkInfo: { name: string }) => {\n if (\n CLIENT_MODULE_MAP[\n chunkInfo.name as keyof typeof CLIENT_MODULE_MAP\n ] ||\n clientEntryFiles[chunkInfo.name]\n ) {\n return '[name].js';\n }\n return DIST_ASSETS + '/[name]-[hash].js';\n },\n },\n },\n },\n },\n config,\n 'build-ssr',\n ),\n );\n};\n\n// For Browsers\nconst buildClientBundle = async (\n rootDir: string,\n env: Record<string, string>,\n config: ResolvedConfig,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverBuildOutput: Awaited<ReturnType<typeof buildServerBundle>>,\n partial: boolean,\n) => {\n const nonJsAssets = serverBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' && !fileName.endsWith('.js') ? [fileName] : [],\n );\n const cssAssets = nonJsAssets.filter((asset) => asset.endsWith('.css'));\n const clientBuildOutput = await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n base: config.basePath,\n plugins: [\n viteReact(),\n rscRsdwPlugin(),\n rscIndexPlugin({ ...config, cssAssets }),\n rscEnvPlugin({ isDev: false, env, config }),\n rscPrivatePlugin(config),\n rscManagedPlugin({ ...config, addMainToInput: true }),\n rscTransformPlugin({\n isClient: true,\n isBuild: true,\n serverEntryFiles,\n }),\n ...deployPlugins(config),\n ],\n build: {\n emptyOutDir: !partial,\n outDir: joinPath(rootDir, config.distDir, DIST_PUBLIC),\n rollupOptions: {\n onwarn,\n // rollup will ouput the style files related to clientEntryFiles, but since it does not find any link to them in the index.html file, it will not inject them. They are only mentioned by the standalone `clientEntryFiles`\n input: clientEntryFiles,\n preserveEntrySignatures: 'exports-only',\n output: {\n entryFileNames: (chunkInfo: { name: string }) => {\n if (clientEntryFiles[chunkInfo.name]) {\n return '[name].js';\n }\n return DIST_ASSETS + '/[name]-[hash].js';\n },\n },\n },\n },\n },\n config,\n 'build-client',\n ),\n );\n if (!('output' in clientBuildOutput)) {\n throw new Error('Unexpected vite client build output');\n }\n for (const nonJsAsset of nonJsAssets) {\n const from = joinPath(rootDir, config.distDir, nonJsAsset);\n const to = joinPath(rootDir, config.distDir, DIST_PUBLIC, nonJsAsset);\n await rename(from, to);\n }\n return clientBuildOutput;\n};\n\n// TODO: Add progress indication for static builds.\n\nconst createTaskRunner = (limit: number) => {\n let running = 0;\n const waiting: (() => void)[] = [];\n const errors: unknown[] = [];\n const scheduleTask = async (task: () => Promise<void>) => {\n if (running >= limit) {\n await new Promise<void>((resolve) => waiting.push(resolve));\n }\n running++;\n try {\n await task();\n } catch (err) {\n errors.push(err);\n } finally {\n running--;\n waiting.shift()?.();\n }\n };\n const runTask = (task: () => Promise<void>) => {\n scheduleTask(task).catch(() => {});\n };\n const waitForTasks = async () => {\n if (running > 0) {\n await new Promise<void>((resolve) => waiting.push(resolve));\n await waitForTasks();\n }\n if (errors.length > 0) {\n console.error('Errors occurred during running tasks:', errors);\n throw errors[0];\n }\n };\n return { runTask, waitForTasks };\n};\nconst WRITE_FILE_BATCH_SIZE = 2500;\nconst { runTask, waitForTasks } = createTaskRunner(WRITE_FILE_BATCH_SIZE);\n\nconst emitStaticFile = (\n rootDir: string,\n config: ResolvedConfig,\n pathname: string,\n body: Promise<ReadableStream> | string,\n) => {\n const destFile = joinPath(\n rootDir,\n config.distDir,\n DIST_PUBLIC,\n extname(pathname)\n ? pathname\n : pathname === '/404'\n ? '404.html' // HACK special treatment for 404, better way?\n : pathname + '/index.html',\n );\n // In partial mode, skip if the file already exists.\n if (existsSync(destFile)) {\n return;\n }\n runTask(async () => {\n await mkdir(joinPath(destFile, '..'), { recursive: true });\n if (typeof body === 'string') {\n await writeFile(destFile, body);\n } else {\n await pipeline(\n Readable.fromWeb((await body) as never),\n createWriteStream(destFile),\n );\n }\n });\n};\n\nconst emitStaticFiles = async (\n rootDir: string,\n config: ResolvedConfig,\n distEntriesFile: string,\n distEntries: EntriesPrd,\n cssAssets: string[],\n) => {\n const unstable_modules = {\n rsdwServer: await distEntries.loadModule('rsdw-server'),\n rdServer: await distEntries.loadModule(CLIENT_PREFIX + 'rd-server'),\n rsdwClient: await distEntries.loadModule(CLIENT_PREFIX + 'rsdw-client'),\n wakuMinimalClient: await distEntries.loadModule(\n CLIENT_PREFIX + 'waku-minimal-client',\n ),\n };\n const publicIndexHtmlFile = joinPath(\n rootDir,\n config.distDir,\n DIST_PUBLIC,\n 'index.html',\n );\n const publicIndexHtml = await readFile(publicIndexHtmlFile, {\n encoding: 'utf8',\n });\n const publicIndexHtmlHead = publicIndexHtml.replace(\n /.*?<head>(.*?)<\\/head>.*/s,\n '$1',\n );\n const cssStr = cssAssets\n .map((asset) => `<link rel=\"stylesheet\" href=\"${config.basePath}${asset}\">`)\n .join('\\n');\n const defaultHtmlStr = publicIndexHtml\n // HACK is this too naive to inject style code?\n .replace(/<\\/head>/, cssStr + '</head>');\n const defaultHtmlHead = publicIndexHtmlHead + cssStr;\n const baseRscPrefix = config.basePath + config.rscBase + '/';\n const utils = {\n renderRsc: (\n elements: Record<string, unknown>,\n options?: {\n moduleIdCallback?: (id: string) => void;\n },\n ) =>\n renderRsc(\n config,\n { unstable_modules },\n elements,\n options?.moduleIdCallback,\n ),\n renderHtml: async (\n elements: Record<string, ReactNode>,\n html: ReactNode,\n options: { rscPath: string; htmlHead?: string },\n ) => {\n const body = await renderHtml(\n config,\n { unstable_modules },\n defaultHtmlHead + (options.htmlHead || ''),\n elements,\n html,\n options.rscPath,\n );\n const headers = { 'content-type': 'text/html; charset=utf-8' };\n return { body, headers };\n },\n rscPath2pathname: (rscPath: string) =>\n joinPath(config.rscBase, encodeRscPath(rscPath)),\n unstable_generatePrefetchCode: (\n rscPaths: Iterable<string>,\n moduleIds: Iterable<string>,\n ) => generatePrefetchCode(baseRscPrefix, rscPaths, moduleIds),\n unstable_collectClientModules: (elements: Record<string, unknown>) =>\n collectClientModules(\n config,\n unstable_modules.rsdwServer as never,\n elements,\n ),\n };\n const dynamicHtmlPathMap = new Map<PathSpec, string>();\n const buildConfigs = distEntries.default.handleBuild(utils);\n if (buildConfigs) {\n await unlink(publicIndexHtmlFile);\n }\n for await (const buildConfig of buildConfigs || []) {\n switch (buildConfig.type) {\n case 'file':\n emitStaticFile(rootDir, config, buildConfig.pathname, buildConfig.body);\n break;\n case 'htmlHead':\n dynamicHtmlPathMap.set(\n buildConfig.pathSpec,\n defaultHtmlHead + (buildConfig.head || ''),\n );\n break;\n case 'defaultHtml':\n emitStaticFile(\n rootDir,\n config,\n buildConfig.pathname,\n // HACK is this too naive to inject script code?\n defaultHtmlStr.replace(\n /<\\/head>/,\n (buildConfig.head || '') + '</head>',\n ),\n );\n break;\n }\n }\n await waitForTasks();\n const dynamicHtmlPaths = Array.from(dynamicHtmlPathMap);\n const code = `\nexport const dynamicHtmlPaths = ${JSON.stringify(dynamicHtmlPaths)};\nexport const publicIndexHtml = ${JSON.stringify(publicIndexHtml)};\n`;\n await appendFile(distEntriesFile, code);\n};\n\n// For Deploy\n// FIXME Is this a good approach? I wonder if there's something missing.\nconst buildDeploy = async (rootDir: string, config: ResolvedConfig) => {\n const DUMMY = 'dummy-entry';\n await buildVite({\n plugins: [\n {\n // FIXME This is too hacky. There must be a better way.\n name: 'dummy-entry-plugin',\n resolveId(source) {\n if (source === DUMMY) {\n return source;\n }\n },\n load(id) {\n if (id === DUMMY) {\n return '';\n }\n },\n generateBundle(_options, bundle) {\n Object.entries(bundle).forEach(([key, value]) => {\n if (value.name === DUMMY) {\n delete bundle[key];\n }\n });\n },\n },\n ...deployPlugins(config),\n ],\n publicDir: false,\n build: {\n emptyOutDir: false,\n ssr: true,\n rollupOptions: {\n onwarn: (warning, warn) => {\n if (!warning.message.startsWith('Generated an empty chunk:')) {\n warn(warning);\n }\n },\n input: { [DUMMY]: DUMMY },\n },\n outDir: joinPath(rootDir, config.distDir),\n },\n });\n};\n\nexport async function build(options: {\n config: Config;\n env?: Record<string, string>;\n partial?: boolean;\n deploy?:\n | 'vercel-static'\n | 'vercel-serverless'\n | 'netlify-static'\n | 'netlify-functions'\n | 'cloudflare'\n | 'partykit'\n | 'deno'\n | 'aws-lambda'\n | undefined;\n}) {\n const env = options.env || {};\n const config = await resolveConfig(options.config);\n const rootDir = (\n await resolveViteConfig({}, 'build', 'production', 'production')\n ).root;\n const distEntriesFile = joinPath(rootDir, config.distDir, DIST_ENTRIES_JS);\n\n const platformObject = unstable_getPlatformObject();\n platformObject.buildOptions ||= {};\n platformObject.buildOptions.deploy = options.deploy;\n\n platformObject.buildOptions.unstable_phase = 'analyzeEntries';\n const { clientEntryFiles, serverEntryFiles, serverModuleFiles } =\n await analyzeEntries(rootDir, config);\n platformObject.buildOptions.unstable_phase = 'buildServerBundle';\n const serverBuildOutput = await buildServerBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverModuleFiles,\n !!options.partial,\n );\n platformObject.buildOptions.unstable_phase = 'buildSsrBundle';\n await buildSsrBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverBuildOutput,\n !!options.partial,\n );\n platformObject.buildOptions.unstable_phase = 'buildClientBundle';\n const clientBuildOutput = await buildClientBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverBuildOutput,\n !!options.partial,\n );\n delete platformObject.buildOptions.unstable_phase;\n\n const distEntries: EntriesPrd = await import(\n filePathToFileURL(distEntriesFile)\n );\n\n setAllEnvInternal(env);\n const cssAssets = clientBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' && fileName.endsWith('.css') ? [fileName] : [],\n );\n await emitStaticFiles(\n rootDir,\n config,\n distEntriesFile,\n distEntries,\n cssAssets,\n );\n\n platformObject.buildOptions.unstable_phase = 'buildDeploy';\n await buildDeploy(rootDir, config);\n delete platformObject.buildOptions.unstable_phase;\n\n if (existsSync(distEntriesFile)) {\n await appendFile(\n distEntriesFile,\n `export const buildData = ${JSON.stringify(platformObject.buildData)};`,\n );\n }\n}\n"],"names":["Readable","pipeline","build","buildVite","resolveConfig","resolveViteConfig","viteReact","setAllEnvInternal","unstable_getPlatformObject","EXTENSIONS","decodeFilePathFromAbsolute","extname","filePathToFileURL","fileURLToFilePath","joinPath","extendViteConfig","appendFile","createWriteStream","existsSync","mkdir","readdir","readFile","rename","unlink","writeFile","encodeRscPath","generatePrefetchCode","collectClientModules","renderRsc","renderHtml","SERVER_MODULE_MAP","CLIENT_MODULE_MAP","CLIENT_PREFIX","rscRsdwPlugin","rscIndexPlugin","rscAnalyzePlugin","nonjsResolvePlugin","rscTransformPlugin","rscEntriesPlugin","rscEnvPlugin","rscPrivatePlugin","rscManagedPlugin","DIST_ENTRIES_JS","DIST_PUBLIC","DIST_ASSETS","DIST_SSR","deployVercelPlugin","deployNetlifyPlugin","deployCloudflarePlugin","deployDenoPlugin","deployPartykitPlugin","deployAwsLambdaPlugin","onwarn","warning","defaultHandler","code","test","message","loc","column","line","deployPlugins","config","analyzeEntries","rootDir","wakuClientDist","url","wakuMinimalClientDist","clientFileSet","Set","serverFileSet","fileHashMap","Map","moduleFileMap","pagesDirPath","srcDir","pagesDir","files","encoding","recursive","file","ext","includes","set","slice","length","mode","plugins","isClient","addEntriesToInput","ssr","target","resolve","conditions","externalConditions","noExternal","write","rollupOptions","input","Object","fromEntries","clientEntryFiles","Array","from","map","fname","i","get","serverEntryFiles","serverModuleFiles","buildServerBundle","env","partial","serverBuildOutput","isBuild","isDev","ssrDir","moduleMap","keys","key","esbuild","jsx","define","JSON","stringify","publicDir","emptyOutDir","ssrEmitAssets","outDir","distDir","Error","buildSsrBundle","cssAssets","output","flatMap","type","fileName","endsWith","base","basePath","addMainToInput","entryFileNames","chunkInfo","name","buildClientBundle","nonJsAssets","filter","asset","clientBuildOutput","preserveEntrySignatures","nonJsAsset","to","createTaskRunner","limit","running","waiting","errors","scheduleTask","task","Promise","push","err","shift","runTask","catch","waitForTasks","console","error","WRITE_FILE_BATCH_SIZE","emitStaticFile","pathname","body","destFile","fromWeb","emitStaticFiles","distEntriesFile","distEntries","unstable_modules","rsdwServer","loadModule","rdServer","rsdwClient","wakuMinimalClient","publicIndexHtmlFile","publicIndexHtml","publicIndexHtmlHead","replace","cssStr","join","defaultHtmlStr","defaultHtmlHead","baseRscPrefix","rscBase","utils","elements","options","moduleIdCallback","html","htmlHead","rscPath","headers","rscPath2pathname","unstable_generatePrefetchCode","rscPaths","moduleIds","unstable_collectClientModules","dynamicHtmlPathMap","buildConfigs","default","handleBuild","buildConfig","pathSpec","head","dynamicHtmlPaths","buildDeploy","DUMMY","resolveId","source","load","id","generateBundle","_options","bundle","entries","forEach","value","warn","startsWith","root","platformObject","buildOptions","deploy","unstable_phase","buildData"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/lib/builder/build.ts"],"sourcesContent":["import { Readable } from 'node:stream';\nimport { pipeline } from 'node:stream/promises';\n\nimport { build as buildVite, resolveConfig as resolveViteConfig } from 'vite';\nimport viteReact from '@vitejs/plugin-react';\nimport type { LoggingFunction, RollupLog } from 'rollup';\nimport type { ReactNode } from 'react';\n\nimport type { Config } from '../../config.js';\nimport { setAllEnvInternal, unstable_getPlatformObject } from '../../server.js';\nimport type { EntriesPrd } from '../types.js';\nimport type { ResolvedConfig } from '../config.js';\nimport { resolveConfig } from '../config.js';\nimport { EXTENSIONS } from '../constants.js';\nimport type { PathSpec } from '../utils/path.js';\nimport {\n decodeFilePathFromAbsolute,\n extname,\n filePathToFileURL,\n fileURLToFilePath,\n joinPath,\n} from '../utils/path.js';\nimport { extendViteConfig } from '../utils/vite-config.js';\nimport {\n appendFile,\n createWriteStream,\n existsSync,\n mkdir,\n readdir,\n readFile,\n rename,\n unlink,\n writeFile,\n} from '../utils/node-fs.js';\nimport { encodeRscPath, generatePrefetchCode } from '../renderers/utils.js';\nimport { collectClientModules, renderRsc } from '../renderers/rsc.js';\nimport { renderHtml } from '../renderers/html.js';\nimport {\n SERVER_MODULE_MAP,\n CLIENT_MODULE_MAP,\n CLIENT_PREFIX,\n} from '../middleware/handler.js';\nimport { rscRsdwPlugin } from '../plugins/vite-plugin-rsc-rsdw.js';\nimport { rscIndexPlugin } from '../plugins/vite-plugin-rsc-index.js';\nimport { rscAnalyzePlugin } from '../plugins/vite-plugin-rsc-analyze.js';\nimport { nonjsResolvePlugin } from '../plugins/vite-plugin-nonjs-resolve.js';\nimport { rscTransformPlugin } from '../plugins/vite-plugin-rsc-transform.js';\nimport { rscEntriesPlugin } from '../plugins/vite-plugin-rsc-entries.js';\nimport { rscEnvPlugin } from '../plugins/vite-plugin-rsc-env.js';\nimport { rscPrivatePlugin } from '../plugins/vite-plugin-rsc-private.js';\nimport { rscManagedPlugin } from '../plugins/vite-plugin-rsc-managed.js';\nimport {\n DIST_ENTRIES_JS,\n DIST_PUBLIC,\n DIST_ASSETS,\n DIST_SSR,\n} from './constants.js';\nimport { deployVercelPlugin } from '../plugins/vite-plugin-deploy-vercel.js';\nimport { deployNetlifyPlugin } from '../plugins/vite-plugin-deploy-netlify.js';\nimport { deployCloudflarePlugin } from '../plugins/vite-plugin-deploy-cloudflare.js';\nimport { deployDenoPlugin } from '../plugins/vite-plugin-deploy-deno.js';\nimport { deployPartykitPlugin } from '../plugins/vite-plugin-deploy-partykit.js';\nimport { deployAwsLambdaPlugin } from '../plugins/vite-plugin-deploy-aws-lambda.js';\n\n// TODO this file and functions in it are too long. will fix.\n\n// Upstream issue: https://github.com/rollup/rollup/issues/4699\nconst onwarn = (warning: RollupLog, defaultHandler: LoggingFunction) => {\n if (\n warning.code === 'MODULE_LEVEL_DIRECTIVE' &&\n /\"use (client|server)\"/.test(warning.message)\n ) {\n return;\n } else if (\n warning.code === 'SOURCEMAP_ERROR' &&\n warning.loc?.column === 0 &&\n warning.loc?.line === 1\n ) {\n return;\n }\n defaultHandler(warning);\n};\n\nconst deployPlugins = (config: ResolvedConfig) => [\n deployVercelPlugin(config),\n deployNetlifyPlugin(config),\n deployCloudflarePlugin(config),\n deployDenoPlugin(config),\n deployPartykitPlugin(config),\n deployAwsLambdaPlugin(config),\n];\n\nconst analyzeEntries = async (rootDir: string, config: ResolvedConfig) => {\n const wakuClientDist = decodeFilePathFromAbsolute(\n joinPath(fileURLToFilePath(import.meta.url), '../../../client.js'),\n );\n const wakuMinimalClientDist = decodeFilePathFromAbsolute(\n joinPath(fileURLToFilePath(import.meta.url), '../../../minimal/client.js'),\n );\n const clientFileSet = new Set<string>([\n wakuClientDist,\n wakuMinimalClientDist,\n ]);\n const serverFileSet = new Set<string>();\n const fileHashMap = new Map<string, string>();\n const moduleFileMap = new Map<string, string>(); // module id -> full path\n const pagesDirPath = joinPath(rootDir, config.srcDir, config.pagesDir);\n if (existsSync(pagesDirPath)) {\n const files = await readdir(pagesDirPath, {\n encoding: 'utf8',\n recursive: true,\n });\n for (const file of files) {\n const ext = extname(file);\n if (EXTENSIONS.includes(ext)) {\n moduleFileMap.set(\n joinPath(config.pagesDir, file.slice(0, -ext.length)),\n joinPath(pagesDirPath, file),\n );\n }\n }\n }\n await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n plugins: [\n rscAnalyzePlugin({\n isClient: false,\n clientFileSet,\n serverFileSet,\n fileHashMap,\n }),\n rscManagedPlugin({ ...config, addEntriesToInput: true }),\n ...deployPlugins(config),\n ],\n ssr: {\n target: 'webworker',\n resolve: {\n conditions: ['react-server'],\n externalConditions: ['react-server'],\n },\n noExternal: /^(?!node:)/,\n },\n build: {\n write: false,\n ssr: true,\n target: 'node18',\n rollupOptions: {\n onwarn,\n input: Object.fromEntries(moduleFileMap),\n },\n },\n },\n config,\n 'build-analyze',\n ),\n );\n const clientEntryFiles = Object.fromEntries(\n Array.from(clientFileSet).map((fname, i) => [\n `${DIST_ASSETS}/rsc${i}-${fileHashMap.get(fname) || 'lib'}`, // FIXME 'lib' is a workaround to avoid `undefined`\n fname,\n ]),\n );\n await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n plugins: [\n rscAnalyzePlugin({ isClient: true, serverFileSet }),\n rscManagedPlugin({ ...config, addMainToInput: true }),\n ...deployPlugins(config),\n ],\n ssr: {\n target: 'webworker',\n noExternal: /^(?!node:)/,\n },\n build: {\n write: false,\n ssr: true,\n target: 'node18',\n rollupOptions: {\n onwarn,\n input: clientEntryFiles,\n },\n },\n },\n config,\n 'build-analyze',\n ),\n );\n const serverEntryFiles = Object.fromEntries(\n Array.from(serverFileSet).map((fname, i) => [\n `${DIST_ASSETS}/rsf${i}`,\n fname,\n ]),\n );\n const serverModuleFiles = Object.fromEntries(moduleFileMap);\n return {\n clientEntryFiles,\n serverEntryFiles,\n serverModuleFiles,\n };\n};\n\n// For RSC\nconst buildServerBundle = async (\n rootDir: string,\n env: Record<string, string>,\n config: ResolvedConfig,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverModuleFiles: Record<string, string>,\n partial: boolean,\n) => {\n const serverBuildOutput = await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n plugins: [\n nonjsResolvePlugin(),\n rscTransformPlugin({\n isClient: false,\n isBuild: true,\n clientEntryFiles,\n serverEntryFiles,\n }),\n rscRsdwPlugin(),\n rscEnvPlugin({ isDev: false, env, config }),\n rscPrivatePlugin(config),\n rscManagedPlugin({\n ...config,\n addEntriesToInput: true,\n }),\n rscEntriesPlugin({\n srcDir: config.srcDir,\n ssrDir: DIST_SSR,\n moduleMap: {\n ...Object.fromEntries(\n Object.keys(SERVER_MODULE_MAP).map((key) => [\n key,\n `./${key}.js`,\n ]),\n ),\n ...Object.fromEntries(\n Object.keys(CLIENT_MODULE_MAP).map((key) => [\n `${CLIENT_PREFIX}${key}`,\n `./${DIST_SSR}/${key}.js`,\n ]),\n ),\n ...Object.fromEntries(\n Object.keys(clientEntryFiles || {}).map((key) => [\n `${DIST_SSR}/${key}.js`,\n `./${DIST_SSR}/${key}.js`,\n ]),\n ),\n ...Object.fromEntries(\n Object.keys(serverEntryFiles || {}).map((key) => [\n `${key}.js`,\n `./${key}.js`,\n ]),\n ),\n },\n }),\n ...deployPlugins(config),\n ],\n ssr: {\n resolve: {\n conditions: ['react-server'],\n externalConditions: ['react-server'],\n },\n noExternal: /^(?!node:)/,\n },\n esbuild: {\n jsx: 'automatic',\n },\n define: {\n 'process.env.NODE_ENV': JSON.stringify('production'),\n },\n publicDir: false,\n build: {\n emptyOutDir: !partial,\n ssr: true,\n ssrEmitAssets: true,\n target: 'node18',\n outDir: joinPath(rootDir, config.distDir),\n rollupOptions: {\n onwarn,\n input: {\n ...SERVER_MODULE_MAP,\n ...serverModuleFiles,\n ...clientEntryFiles,\n ...serverEntryFiles,\n },\n },\n },\n },\n config,\n 'build-server',\n ),\n );\n if (!('output' in serverBuildOutput)) {\n throw new Error('Unexpected vite server build output');\n }\n return serverBuildOutput;\n};\n\n// For SSR (render client components on server to generate HTML)\nconst buildSsrBundle = async (\n rootDir: string,\n env: Record<string, string>,\n config: ResolvedConfig,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverBuildOutput: Awaited<ReturnType<typeof buildServerBundle>>,\n partial: boolean,\n) => {\n const cssAssets = serverBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' && fileName.endsWith('.css') ? [fileName] : [],\n );\n await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n base: config.basePath,\n plugins: [\n rscRsdwPlugin(),\n rscIndexPlugin({ ...config, cssAssets }),\n rscEnvPlugin({ isDev: false, env, config }),\n rscPrivatePlugin(config),\n rscManagedPlugin({ ...config, addMainToInput: true }),\n rscTransformPlugin({\n isClient: true,\n isBuild: true,\n serverEntryFiles,\n }),\n ...deployPlugins(config),\n ],\n ssr: {\n noExternal: /^(?!node:)/,\n },\n esbuild: {\n jsx: 'automatic',\n },\n define: {\n 'process.env.NODE_ENV': JSON.stringify('production'),\n },\n publicDir: false,\n build: {\n emptyOutDir: !partial,\n ssr: true,\n target: 'node18',\n outDir: joinPath(rootDir, config.distDir, DIST_SSR),\n rollupOptions: {\n onwarn,\n input: {\n ...clientEntryFiles,\n ...CLIENT_MODULE_MAP,\n },\n output: {\n entryFileNames: (chunkInfo: { name: string }) => {\n if (\n CLIENT_MODULE_MAP[\n chunkInfo.name as keyof typeof CLIENT_MODULE_MAP\n ] ||\n clientEntryFiles[chunkInfo.name]\n ) {\n return '[name].js';\n }\n return DIST_ASSETS + '/[name]-[hash].js';\n },\n },\n },\n },\n },\n config,\n 'build-ssr',\n ),\n );\n};\n\n// For Browsers\nconst buildClientBundle = async (\n rootDir: string,\n env: Record<string, string>,\n config: ResolvedConfig,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverBuildOutput: Awaited<ReturnType<typeof buildServerBundle>>,\n partial: boolean,\n) => {\n const nonJsAssets = serverBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' && !fileName.endsWith('.js') ? [fileName] : [],\n );\n const cssAssets = nonJsAssets.filter((asset) => asset.endsWith('.css'));\n const clientBuildOutput = await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n base: config.basePath,\n plugins: [\n viteReact(),\n rscRsdwPlugin(),\n rscIndexPlugin({ ...config, cssAssets }),\n rscEnvPlugin({ isDev: false, env, config }),\n rscPrivatePlugin(config),\n rscManagedPlugin({ ...config, addMainToInput: true }),\n rscTransformPlugin({\n isClient: true,\n isBuild: true,\n serverEntryFiles,\n }),\n ...deployPlugins(config),\n ],\n build: {\n emptyOutDir: !partial,\n outDir: joinPath(rootDir, config.distDir, DIST_PUBLIC),\n rollupOptions: {\n onwarn,\n // rollup will ouput the style files related to clientEntryFiles, but since it does not find any link to them in the index.html file, it will not inject them. They are only mentioned by the standalone `clientEntryFiles`\n input: clientEntryFiles,\n preserveEntrySignatures: 'exports-only',\n output: {\n entryFileNames: (chunkInfo: { name: string }) => {\n if (clientEntryFiles[chunkInfo.name]) {\n return '[name].js';\n }\n return DIST_ASSETS + '/[name]-[hash].js';\n },\n },\n },\n },\n },\n config,\n 'build-client',\n ),\n );\n if (!('output' in clientBuildOutput)) {\n throw new Error('Unexpected vite client build output');\n }\n for (const nonJsAsset of nonJsAssets) {\n const from = joinPath(rootDir, config.distDir, nonJsAsset);\n const to = joinPath(rootDir, config.distDir, DIST_PUBLIC, nonJsAsset);\n await rename(from, to);\n }\n return clientBuildOutput;\n};\n\n// TODO: Add progress indication for static builds.\n\nconst createTaskRunner = (limit: number) => {\n let running = 0;\n const waiting: (() => void)[] = [];\n const errors: unknown[] = [];\n const scheduleTask = async (task: () => Promise<void>) => {\n if (running >= limit) {\n await new Promise<void>((resolve) => waiting.push(resolve));\n }\n running++;\n try {\n await task();\n } catch (err) {\n errors.push(err);\n } finally {\n running--;\n waiting.shift()?.();\n }\n };\n const runTask = (task: () => Promise<void>) => {\n scheduleTask(task).catch(() => {});\n };\n const waitForTasks = async () => {\n if (running > 0) {\n await new Promise<void>((resolve) => waiting.push(resolve));\n await waitForTasks();\n }\n if (errors.length > 0) {\n console.error('Errors occurred during running tasks:', errors);\n throw errors[0];\n }\n };\n return { runTask, waitForTasks };\n};\nconst WRITE_FILE_BATCH_SIZE = 2500;\nconst { runTask, waitForTasks } = createTaskRunner(WRITE_FILE_BATCH_SIZE);\n\nconst emitStaticFile = (\n rootDir: string,\n config: ResolvedConfig,\n pathname: string,\n body: Promise<ReadableStream> | string,\n) => {\n const destFile = joinPath(\n rootDir,\n config.distDir,\n DIST_PUBLIC,\n extname(pathname)\n ? pathname\n : pathname === '/404'\n ? '404.html' // HACK special treatment for 404, better way?\n : pathname + '/index.html',\n );\n // In partial mode, skip if the file already exists.\n if (existsSync(destFile)) {\n return;\n }\n runTask(async () => {\n await mkdir(joinPath(destFile, '..'), { recursive: true });\n if (typeof body === 'string') {\n await writeFile(destFile, body);\n } else {\n await pipeline(\n Readable.fromWeb((await body) as never),\n createWriteStream(destFile),\n );\n }\n });\n};\n\nconst emitStaticFiles = async (\n rootDir: string,\n config: ResolvedConfig,\n distEntriesFile: string,\n distEntries: EntriesPrd,\n cssAssets: string[],\n) => {\n const unstable_modules = {\n rsdwServer: await distEntries.loadModule('rsdw-server'),\n rdServer: await distEntries.loadModule(CLIENT_PREFIX + 'rd-server'),\n rsdwClient: await distEntries.loadModule(CLIENT_PREFIX + 'rsdw-client'),\n wakuMinimalClient: await distEntries.loadModule(\n CLIENT_PREFIX + 'waku-minimal-client',\n ),\n };\n const publicIndexHtmlFile = joinPath(\n rootDir,\n config.distDir,\n DIST_PUBLIC,\n 'index.html',\n );\n const publicIndexHtml = await readFile(publicIndexHtmlFile, {\n encoding: 'utf8',\n });\n const publicIndexHtmlHead = publicIndexHtml.replace(\n /.*?<head>(.*?)<\\/head>.*/s,\n '$1',\n );\n const cssStr = cssAssets\n .map((asset) => `<link rel=\"stylesheet\" href=\"${config.basePath}${asset}\">`)\n .join('\\n');\n const defaultHtmlStr = publicIndexHtml\n // HACK is this too naive to inject style code?\n .replace(/<\\/head>/, cssStr + '</head>');\n const defaultHtmlHead = publicIndexHtmlHead + cssStr;\n const baseRscPrefix = config.basePath + config.rscBase + '/';\n const utils = {\n renderRsc: (\n elements: Record<string, unknown>,\n options?: {\n moduleIdCallback?: (id: string) => void;\n },\n ) =>\n renderRsc(\n config,\n { unstable_modules },\n elements,\n options?.moduleIdCallback,\n ),\n renderHtml: async (\n elements: Record<string, ReactNode>,\n html: ReactNode,\n options: { rscPath: string; htmlHead?: string },\n ) => {\n const body = await renderHtml(\n config,\n { unstable_modules },\n defaultHtmlHead + (options.htmlHead || ''),\n elements,\n html,\n options.rscPath,\n );\n const headers = { 'content-type': 'text/html; charset=utf-8' };\n return { body, headers };\n },\n rscPath2pathname: (rscPath: string) =>\n joinPath(config.rscBase, encodeRscPath(rscPath)),\n unstable_generatePrefetchCode: (\n rscPaths: Iterable<string>,\n moduleIds: Iterable<string>,\n ) => generatePrefetchCode(baseRscPrefix, rscPaths, moduleIds),\n unstable_collectClientModules: (elements: Record<string, unknown>) =>\n collectClientModules(\n config,\n unstable_modules.rsdwServer as never,\n elements,\n ),\n };\n const dynamicHtmlPathMap = new Map<PathSpec, string>();\n const buildConfigs = distEntries.default.handleBuild(utils);\n if (buildConfigs) {\n await unlink(publicIndexHtmlFile);\n }\n for await (const buildConfig of buildConfigs || []) {\n switch (buildConfig.type) {\n case 'file':\n emitStaticFile(rootDir, config, buildConfig.pathname, buildConfig.body);\n break;\n case 'htmlHead':\n dynamicHtmlPathMap.set(\n buildConfig.pathSpec,\n defaultHtmlHead + (buildConfig.head || ''),\n );\n break;\n case 'defaultHtml':\n emitStaticFile(\n rootDir,\n config,\n buildConfig.pathname,\n // HACK is this too naive to inject script code?\n defaultHtmlStr.replace(\n /<\\/head>/,\n (buildConfig.head || '') + '</head>',\n ),\n );\n break;\n }\n }\n await waitForTasks();\n const dynamicHtmlPaths = Array.from(dynamicHtmlPathMap);\n const code = `\nexport const dynamicHtmlPaths = ${JSON.stringify(dynamicHtmlPaths)};\nexport const publicIndexHtml = ${JSON.stringify(defaultHtmlStr)};\n`;\n await appendFile(distEntriesFile, code);\n};\n\n// For Deploy\n// FIXME Is this a good approach? I wonder if there's something missing.\nconst buildDeploy = async (rootDir: string, config: ResolvedConfig) => {\n const DUMMY = 'dummy-entry';\n await buildVite({\n plugins: [\n {\n // FIXME This is too hacky. There must be a better way.\n name: 'dummy-entry-plugin',\n resolveId(source) {\n if (source === DUMMY) {\n return source;\n }\n },\n load(id) {\n if (id === DUMMY) {\n return '';\n }\n },\n generateBundle(_options, bundle) {\n Object.entries(bundle).forEach(([key, value]) => {\n if (value.name === DUMMY) {\n delete bundle[key];\n }\n });\n },\n },\n ...deployPlugins(config),\n ],\n publicDir: false,\n build: {\n emptyOutDir: false,\n ssr: true,\n rollupOptions: {\n onwarn: (warning, warn) => {\n if (!warning.message.startsWith('Generated an empty chunk:')) {\n warn(warning);\n }\n },\n input: { [DUMMY]: DUMMY },\n },\n outDir: joinPath(rootDir, config.distDir),\n },\n });\n};\n\nexport async function build(options: {\n config: Config;\n env?: Record<string, string>;\n partial?: boolean;\n deploy?:\n | 'vercel-static'\n | 'vercel-serverless'\n | 'netlify-static'\n | 'netlify-functions'\n | 'cloudflare'\n | 'partykit'\n | 'deno'\n | 'aws-lambda'\n | undefined;\n}) {\n const env = options.env || {};\n const config = await resolveConfig(options.config);\n const rootDir = (\n await resolveViteConfig({}, 'build', 'production', 'production')\n ).root;\n const distEntriesFile = joinPath(rootDir, config.distDir, DIST_ENTRIES_JS);\n\n const platformObject = unstable_getPlatformObject();\n platformObject.buildOptions ||= {};\n platformObject.buildOptions.deploy = options.deploy;\n\n platformObject.buildOptions.unstable_phase = 'analyzeEntries';\n const { clientEntryFiles, serverEntryFiles, serverModuleFiles } =\n await analyzeEntries(rootDir, config);\n platformObject.buildOptions.unstable_phase = 'buildServerBundle';\n const serverBuildOutput = await buildServerBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverModuleFiles,\n !!options.partial,\n );\n platformObject.buildOptions.unstable_phase = 'buildSsrBundle';\n await buildSsrBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverBuildOutput,\n !!options.partial,\n );\n platformObject.buildOptions.unstable_phase = 'buildClientBundle';\n const clientBuildOutput = await buildClientBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverBuildOutput,\n !!options.partial,\n );\n delete platformObject.buildOptions.unstable_phase;\n\n const distEntries: EntriesPrd = await import(\n filePathToFileURL(distEntriesFile)\n );\n\n setAllEnvInternal(env);\n const cssAssets = clientBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' && fileName.endsWith('.css') ? [fileName] : [],\n );\n platformObject.buildOptions.unstable_phase = 'emitStaticFiles';\n await emitStaticFiles(\n rootDir,\n config,\n distEntriesFile,\n distEntries,\n cssAssets,\n );\n\n platformObject.buildOptions.unstable_phase = 'buildDeploy';\n await buildDeploy(rootDir, config);\n delete platformObject.buildOptions.unstable_phase;\n\n if (existsSync(distEntriesFile)) {\n await appendFile(\n distEntriesFile,\n `export const buildData = ${JSON.stringify(platformObject.buildData)};`,\n );\n }\n}\n"],"names":["Readable","pipeline","build","buildVite","resolveConfig","resolveViteConfig","viteReact","setAllEnvInternal","unstable_getPlatformObject","EXTENSIONS","decodeFilePathFromAbsolute","extname","filePathToFileURL","fileURLToFilePath","joinPath","extendViteConfig","appendFile","createWriteStream","existsSync","mkdir","readdir","readFile","rename","unlink","writeFile","encodeRscPath","generatePrefetchCode","collectClientModules","renderRsc","renderHtml","SERVER_MODULE_MAP","CLIENT_MODULE_MAP","CLIENT_PREFIX","rscRsdwPlugin","rscIndexPlugin","rscAnalyzePlugin","nonjsResolvePlugin","rscTransformPlugin","rscEntriesPlugin","rscEnvPlugin","rscPrivatePlugin","rscManagedPlugin","DIST_ENTRIES_JS","DIST_PUBLIC","DIST_ASSETS","DIST_SSR","deployVercelPlugin","deployNetlifyPlugin","deployCloudflarePlugin","deployDenoPlugin","deployPartykitPlugin","deployAwsLambdaPlugin","onwarn","warning","defaultHandler","code","test","message","loc","column","line","deployPlugins","config","analyzeEntries","rootDir","wakuClientDist","url","wakuMinimalClientDist","clientFileSet","Set","serverFileSet","fileHashMap","Map","moduleFileMap","pagesDirPath","srcDir","pagesDir","files","encoding","recursive","file","ext","includes","set","slice","length","mode","plugins","isClient","addEntriesToInput","ssr","target","resolve","conditions","externalConditions","noExternal","write","rollupOptions","input","Object","fromEntries","clientEntryFiles","Array","from","map","fname","i","get","addMainToInput","serverEntryFiles","serverModuleFiles","buildServerBundle","env","partial","serverBuildOutput","isBuild","isDev","ssrDir","moduleMap","keys","key","esbuild","jsx","define","JSON","stringify","publicDir","emptyOutDir","ssrEmitAssets","outDir","distDir","Error","buildSsrBundle","cssAssets","output","flatMap","type","fileName","endsWith","base","basePath","entryFileNames","chunkInfo","name","buildClientBundle","nonJsAssets","filter","asset","clientBuildOutput","preserveEntrySignatures","nonJsAsset","to","createTaskRunner","limit","running","waiting","errors","scheduleTask","task","Promise","push","err","shift","runTask","catch","waitForTasks","console","error","WRITE_FILE_BATCH_SIZE","emitStaticFile","pathname","body","destFile","fromWeb","emitStaticFiles","distEntriesFile","distEntries","unstable_modules","rsdwServer","loadModule","rdServer","rsdwClient","wakuMinimalClient","publicIndexHtmlFile","publicIndexHtml","publicIndexHtmlHead","replace","cssStr","join","defaultHtmlStr","defaultHtmlHead","baseRscPrefix","rscBase","utils","elements","options","moduleIdCallback","html","htmlHead","rscPath","headers","rscPath2pathname","unstable_generatePrefetchCode","rscPaths","moduleIds","unstable_collectClientModules","dynamicHtmlPathMap","buildConfigs","default","handleBuild","buildConfig","pathSpec","head","dynamicHtmlPaths","buildDeploy","DUMMY","resolveId","source","load","id","generateBundle","_options","bundle","entries","forEach","value","warn","startsWith","root","platformObject","buildOptions","deploy","unstable_phase","buildData"],"mappings":"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"}
@@ -124,7 +124,7 @@ const createMainViteServer = (env, configPromise)=>{
124
124
  ]
125
125
  }
126
126
  },
127
- appType: 'custom',
127
+ appType: 'mpa',
128
128
  server: {
129
129
  middlewareMode: true
130
130
  }
@@ -410,6 +410,8 @@ export const devServer = (options)=>{
410
410
  const body = await readablePromise;
411
411
  if (body) {
412
412
  ctx.res.body = body;
413
+ } else if (ctx.res.status === 404) {
414
+ delete ctx.res.status;
413
415
  }
414
416
  };
415
417
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/middleware/dev-server-impl.ts"],"sourcesContent":["import { Readable, Writable } from 'node:stream';\nimport { Server } from 'node:http';\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { createServer as createViteServer } from 'vite';\nimport viteReact from '@vitejs/plugin-react';\n\nimport type { EntriesDev } from '../types.js';\nimport { resolveConfig, extractPureConfig } from '../config.js';\nimport { SRC_MAIN, SRC_ENTRIES } from '../constants.js';\nimport {\n joinPath,\n fileURLToFilePath,\n filePathToFileURL,\n} from '../utils/path.js';\nimport { extendViteConfig } from '../utils/vite-config.js';\nimport { patchReactRefresh } from '../plugins/patch-react-refresh.js';\nimport { nonjsResolvePlugin } from '../plugins/vite-plugin-nonjs-resolve.js';\nimport { devCommonJsPlugin } from '../plugins/vite-plugin-dev-commonjs.js';\nimport { rscRsdwPlugin } from '../plugins/vite-plugin-rsc-rsdw.js';\nimport { rscTransformPlugin } from '../plugins/vite-plugin-rsc-transform.js';\nimport { rscIndexPlugin } from '../plugins/vite-plugin-rsc-index.js';\nimport { rscHmrPlugin, hotUpdate } from '../plugins/vite-plugin-rsc-hmr.js';\nimport type { HotUpdatePayload } from '../plugins/vite-plugin-rsc-hmr.js';\nimport { rscEnvPlugin } from '../plugins/vite-plugin-rsc-env.js';\nimport { rscPrivatePlugin } from '../plugins/vite-plugin-rsc-private.js';\nimport { rscManagedPlugin } from '../plugins/vite-plugin-rsc-managed.js';\nimport { rscDelegatePlugin } from '../plugins/vite-plugin-rsc-delegate.js';\nimport type { ClonableModuleNode, Middleware } from './types.js';\nimport { fsRouterTypegenPlugin } from '../plugins/vite-plugin-fs-router-typegen.js';\n\n// TODO there is huge room for refactoring in this file\n\n// For react-server-dom-webpack/server.edge\n(globalThis as any).AsyncLocalStorage = AsyncLocalStorage;\n\nconst createStreamPair = (): [Writable, Promise<ReadableStream | null>] => {\n let controller: ReadableStreamDefaultController | undefined;\n const readable = new ReadableStream({\n start(c) {\n controller = c;\n },\n cancel() {\n controller = undefined;\n },\n });\n let resolve: (value: ReadableStream | null) => void;\n const promise = new Promise<ReadableStream | null>((r) => (resolve = r));\n let hasData = false;\n const writable = new Writable({\n write(chunk, encoding, callback) {\n if (encoding !== ('buffer' as any)) {\n throw new Error('Unknown encoding');\n }\n if (controller) {\n controller.enqueue(chunk);\n if (!hasData) {\n hasData = true;\n resolve(readable);\n }\n }\n callback();\n },\n final(callback) {\n if (controller) {\n controller.close();\n if (!hasData) {\n resolve(null);\n }\n }\n callback();\n },\n });\n return [writable, promise];\n};\n\nconst hotUpdateCallbackSet = new Set<(payload: HotUpdatePayload) => void>();\nconst registerHotUpdateCallback = (fn: (payload: HotUpdatePayload) => void) =>\n hotUpdateCallbackSet.add(fn);\nconst hotUpdateCallback = (payload: HotUpdatePayload) =>\n hotUpdateCallbackSet.forEach((fn) => fn(payload));\n\nconst createMainViteServer = (\n env: Record<string, string>,\n configPromise: ReturnType<typeof resolveConfig>,\n) => {\n const vitePromise = configPromise.then(async (config) => {\n const vite = await createViteServer(\n extendViteConfig(\n {\n // Since we have multiple instances of vite, different ones might overwrite the others' cache.\n cacheDir: 'node_modules/.vite/waku-dev-server-main',\n base: config.basePath,\n plugins: [\n patchReactRefresh(viteReact()),\n nonjsResolvePlugin(),\n devCommonJsPlugin({\n filter: (id) => {\n if (\n id.includes('/node_modules/react-server-dom-webpack/') ||\n id.includes('/node_modules/react-dom/') ||\n id.includes('/node_modules/react/')\n ) {\n return true;\n }\n },\n }),\n rscRsdwPlugin(),\n rscEnvPlugin({ isDev: true, env, config }),\n rscPrivatePlugin(config),\n rscManagedPlugin(config),\n rscIndexPlugin(config),\n rscTransformPlugin({ isClient: true, isBuild: false }),\n rscHmrPlugin(),\n fsRouterTypegenPlugin(config),\n ],\n optimizeDeps: {\n include: ['react-server-dom-webpack/client', 'react-dom/client'],\n exclude: ['waku', 'rsc-html-stream/server'],\n entries: [\n `${config.srcDir}/${SRC_ENTRIES}.*`,\n // HACK hard-coded \"pages\"\n `${config.srcDir}/pages/**/*.*`,\n ],\n },\n ssr: {\n external: ['waku'],\n optimizeDeps: {\n include: ['react-server-dom-webpack/client.edge'],\n },\n },\n appType: 'custom',\n server: { middlewareMode: true },\n },\n config,\n 'dev-main',\n ),\n );\n registerHotUpdateCallback((payload) => hotUpdate(vite, payload));\n return vite;\n });\n\n const wakuDist = joinPath(fileURLToFilePath(import.meta.url), '../../..');\n\n const loadServerModuleMain = async (idOrFileURL: string) => {\n const vite = await vitePromise;\n if (!idOrFileURL.startsWith('file://')) {\n if (idOrFileURL === 'waku' || idOrFileURL.startsWith('waku/')) {\n // HACK `external: ['waku']` doesn't do the same\n return import(/* @vite-ignore */ idOrFileURL);\n }\n return vite.ssrLoadModule(idOrFileURL);\n }\n const filePath = fileURLToFilePath(idOrFileURL.split('?')[0]!);\n const file = filePath.startsWith('/')\n ? filePath\n : joinPath(vite.config.root, filePath);\n if (file.startsWith(wakuDist)) {\n // HACK `external: ['waku']` doesn't do the same\n return import(/* @vite-ignore */ filePathToFileURL(file));\n }\n if (file.includes('/node_modules/')) {\n // HACK node_modules should be externalized\n return import(/* @vite-ignore */ filePathToFileURL(file));\n }\n return vite.ssrLoadModule(fileURLToFilePath(idOrFileURL));\n };\n\n const transformIndexHtml = async (pathname: string) => {\n const vite = await vitePromise;\n const encoder = new TextEncoder();\n const decoder = new TextDecoder();\n let headSent = false;\n return new TransformStream({\n transform(chunk, controller) {\n if (!(chunk instanceof Uint8Array)) {\n throw new Error('Unknown chunk type');\n }\n if (!headSent) {\n headSent = true;\n let data = decoder.decode(chunk);\n // FIXME without removing async, Vite will move it\n // to the proxy cache, which breaks __WAKU_PUSH__.\n data = data.replace(/<script type=\"module\" async>/, '<script>');\n return new Promise<void>((resolve, reject) => {\n vite\n .transformIndexHtml(pathname, data)\n .then((result) => {\n controller.enqueue(encoder.encode(result));\n resolve();\n })\n .catch(reject);\n });\n }\n controller.enqueue(chunk);\n },\n flush() {\n if (!headSent) {\n throw new Error('head not yet sent');\n }\n },\n });\n };\n\n // FIXME This function feels like a hack\n const willBeHandled = async (pathname: string) => {\n const vite = await vitePromise;\n try {\n const result = await vite.transformRequest(pathname);\n if (result?.code === `export default \"/@fs${pathname}\"`) {\n return false;\n }\n return !!result;\n } catch {\n return false;\n }\n };\n\n return {\n vitePromise,\n loadServerModuleMain,\n transformIndexHtml,\n willBeHandled,\n };\n};\n\nconst createRscViteServer = (\n env: Record<string, string>,\n configPromise: ReturnType<typeof resolveConfig>,\n) => {\n const dummyServer = new Server(); // FIXME we hope to avoid this hack\n\n const vitePromise = configPromise.then(async (config) => {\n const vite = await createViteServer(\n extendViteConfig(\n {\n // Since we have multiple instances of vite, different ones might overwrite the others' cache.\n cacheDir: 'node_modules/.vite/waku-dev-server-rsc',\n plugins: [\n viteReact(),\n nonjsResolvePlugin(),\n devCommonJsPlugin({}),\n rscRsdwPlugin(),\n rscEnvPlugin({ isDev: true, env }),\n rscPrivatePlugin({\n privateDir: config.privateDir,\n hotUpdateCallback,\n }),\n rscManagedPlugin(config),\n rscTransformPlugin({ isClient: false, isBuild: false }),\n rscDelegatePlugin(hotUpdateCallback),\n ],\n optimizeDeps: {\n include: ['react-server-dom-webpack/client', 'react-dom/client'],\n exclude: ['waku'],\n entries: [\n `${config.srcDir}/${SRC_ENTRIES}.*`,\n // HACK hard-coded \"pages\"\n `${config.srcDir}/pages/**/*.*`,\n ],\n },\n ssr: {\n resolve: {\n conditions: ['react-server'],\n externalConditions: ['react-server'],\n },\n noExternal: /^(?!node:)/,\n optimizeDeps: {\n include: [\n 'react-server-dom-webpack/server.edge',\n 'react',\n 'react/jsx-runtime',\n 'react/jsx-dev-runtime',\n ],\n exclude: ['waku'],\n },\n },\n appType: 'custom',\n server: { middlewareMode: true, hmr: { server: dummyServer } },\n },\n config,\n 'dev-rsc',\n ),\n );\n return vite;\n });\n\n const loadServerModuleRsc = async (idOrFileURL: string) => {\n const vite = await vitePromise;\n return vite.ssrLoadModule(\n idOrFileURL.startsWith('file://')\n ? fileURLToFilePath(idOrFileURL)\n : idOrFileURL,\n );\n };\n\n const loadEntriesDev = async (config: { srcDir: string }) => {\n const vite = await vitePromise;\n const filePath = joinPath(vite.config.root, config.srcDir, SRC_ENTRIES);\n return vite.ssrLoadModule(filePath) as Promise<EntriesDev>;\n };\n\n const resolveClientEntry = (\n id: string,\n config: { rootDir: string; basePath: string },\n initialModules: ClonableModuleNode[],\n ) => {\n let file = id;\n if (file.startsWith('/@fs/')) {\n file = file.slice('/@fs'.length); // keep '/' at the beginning\n }\n for (const moduleNode of initialModules) {\n if (moduleNode.file === file) {\n return moduleNode.url;\n }\n }\n if (file.startsWith(config.rootDir)) {\n file = file.slice(config.rootDir.length + 1); // '+ 1' to remove '/'\n } else if (file.startsWith('/')) {\n file = '@fs' + file;\n } else {\n file = '@id/' + file;\n }\n return config.basePath + file;\n };\n\n return {\n loadServerModuleRsc,\n loadEntriesDev,\n resolveClientEntry,\n };\n};\n\nexport const devServer: Middleware = (options) => {\n if (options.cmd !== 'dev') {\n // pass through if not dev command\n return (_ctx, next) => next();\n }\n\n const env = options.env || {};\n const configPromise = resolveConfig(options.config);\n\n (globalThis as any).__WAKU_SERVER_IMPORT__ = (id: string) =>\n loadServerModuleRsc(id);\n\n (globalThis as any).__WAKU_CLIENT_IMPORT__ = (id: string) =>\n loadServerModuleMain(id);\n\n const {\n vitePromise,\n loadServerModuleMain,\n transformIndexHtml,\n willBeHandled,\n } = createMainViteServer(env, configPromise);\n\n const { loadServerModuleRsc, loadEntriesDev, resolveClientEntry } =\n createRscViteServer(env, configPromise);\n\n let initialModules: ClonableModuleNode[];\n\n return async (ctx, next) => {\n const [config, vite] = await Promise.all([\n configPromise.then(extractPureConfig),\n vitePromise,\n ]);\n\n if (!initialModules) {\n const processedModules = new Set<string>();\n\n const processModule = async (modulePath: string) => {\n if (processedModules.has(modulePath)) {\n return;\n }\n processedModules.add(modulePath);\n\n await vite.transformRequest(modulePath);\n const resolved = await vite.pluginContainer.resolveId(modulePath);\n if (!resolved) {\n return;\n }\n\n const module = vite.moduleGraph.idToModuleMap.get(resolved.id);\n if (!module) {\n return;\n }\n\n await Promise.all(\n Array.from(module.importedModules).map(async (importedModule) => {\n if (importedModule.id) {\n await processModule(importedModule.id);\n }\n }),\n );\n };\n\n const mainJs = `${config.basePath}${config.srcDir}/${SRC_MAIN}`;\n const entriesFile = `${vite.config.root}${config.basePath}${config.srcDir}/${SRC_ENTRIES}`;\n\n await processModule(mainJs);\n await processModule(entriesFile);\n\n initialModules = Array.from(\n vite.moduleGraph.idToModuleMap.values(),\n ).flatMap((m) => (m.file ? [{ url: m.url, file: m.file }] : []));\n }\n\n ctx.unstable_devServer = {\n rootDir: vite.config.root,\n resolveClientEntry: (id: string) =>\n resolveClientEntry(\n id,\n {\n rootDir: vite.config.root,\n basePath: config.basePath,\n },\n initialModules,\n ),\n loadServerModuleRsc,\n loadEntriesDev,\n loadServerModuleMain,\n transformIndexHtml,\n };\n\n if (!(await willBeHandled(ctx.req.url.pathname))) {\n await next();\n if (ctx.res.body || ctx.res.status) {\n return;\n }\n }\n\n const viteUrl = ctx.req.url.toString().slice(ctx.req.url.origin.length);\n const viteReq: any = ctx.req.body\n ? Readable.fromWeb(ctx.req.body as never)\n : Readable.from([]);\n viteReq.method = ctx.req.method;\n viteReq.url = viteUrl;\n viteReq.headers = ctx.req.headers;\n const [writable, readablePromise] = createStreamPair();\n const viteRes: any = writable;\n Object.defineProperty(viteRes, 'statusCode', {\n set(code) {\n ctx.res.status = code;\n },\n });\n const headers = new Map<string, string>();\n viteRes.setHeader = (name: string, value: string) => {\n headers.set(name, value);\n ctx.res.headers = {\n ...ctx.res.headers,\n [name]: String(value),\n };\n };\n viteRes.getHeader = (name: string) => headers.get(name);\n viteRes.writeHead = (code: number, headers?: Record<string, string>) => {\n ctx.res.status = code;\n for (const [name, value] of Object.entries(headers || {})) {\n viteRes.setHeader(name, value);\n }\n };\n vite.middlewares(viteReq, viteRes);\n const body = await readablePromise;\n if (body) {\n ctx.res.body = body;\n }\n };\n};\n"],"names":["Readable","Writable","Server","AsyncLocalStorage","createServer","createViteServer","viteReact","resolveConfig","extractPureConfig","SRC_MAIN","SRC_ENTRIES","joinPath","fileURLToFilePath","filePathToFileURL","extendViteConfig","patchReactRefresh","nonjsResolvePlugin","devCommonJsPlugin","rscRsdwPlugin","rscTransformPlugin","rscIndexPlugin","rscHmrPlugin","hotUpdate","rscEnvPlugin","rscPrivatePlugin","rscManagedPlugin","rscDelegatePlugin","fsRouterTypegenPlugin","globalThis","createStreamPair","controller","readable","ReadableStream","start","c","cancel","undefined","resolve","promise","Promise","r","hasData","writable","write","chunk","encoding","callback","Error","enqueue","final","close","hotUpdateCallbackSet","Set","registerHotUpdateCallback","fn","add","hotUpdateCallback","payload","forEach","createMainViteServer","env","configPromise","vitePromise","then","config","vite","cacheDir","base","basePath","plugins","filter","id","includes","isDev","isClient","isBuild","optimizeDeps","include","exclude","entries","srcDir","ssr","external","appType","server","middlewareMode","wakuDist","url","loadServerModuleMain","idOrFileURL","startsWith","ssrLoadModule","filePath","split","file","root","transformIndexHtml","pathname","encoder","TextEncoder","decoder","TextDecoder","headSent","TransformStream","transform","Uint8Array","data","decode","replace","reject","result","encode","catch","flush","willBeHandled","transformRequest","code","createRscViteServer","dummyServer","privateDir","conditions","externalConditions","noExternal","hmr","loadServerModuleRsc","loadEntriesDev","resolveClientEntry","initialModules","slice","length","moduleNode","rootDir","devServer","options","cmd","_ctx","next","__WAKU_SERVER_IMPORT__","__WAKU_CLIENT_IMPORT__","ctx","all","processedModules","processModule","modulePath","has","resolved","pluginContainer","resolveId","module","moduleGraph","idToModuleMap","get","Array","from","importedModules","map","importedModule","mainJs","entriesFile","values","flatMap","m","unstable_devServer","req","res","body","status","viteUrl","toString","origin","viteReq","fromWeb","method","headers","readablePromise","viteRes","Object","defineProperty","set","Map","setHeader","name","value","String","getHeader","writeHead","middlewares"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/lib/middleware/dev-server-impl.ts"],"sourcesContent":["import { Readable, Writable } from 'node:stream';\nimport { Server } from 'node:http';\nimport { AsyncLocalStorage } from 'node:async_hooks';\nimport { createServer as createViteServer } from 'vite';\nimport viteReact from '@vitejs/plugin-react';\n\nimport type { EntriesDev } from '../types.js';\nimport { resolveConfig, extractPureConfig } from '../config.js';\nimport { SRC_MAIN, SRC_ENTRIES } from '../constants.js';\nimport {\n joinPath,\n fileURLToFilePath,\n filePathToFileURL,\n} from '../utils/path.js';\nimport { extendViteConfig } from '../utils/vite-config.js';\nimport { patchReactRefresh } from '../plugins/patch-react-refresh.js';\nimport { nonjsResolvePlugin } from '../plugins/vite-plugin-nonjs-resolve.js';\nimport { devCommonJsPlugin } from '../plugins/vite-plugin-dev-commonjs.js';\nimport { rscRsdwPlugin } from '../plugins/vite-plugin-rsc-rsdw.js';\nimport { rscTransformPlugin } from '../plugins/vite-plugin-rsc-transform.js';\nimport { rscIndexPlugin } from '../plugins/vite-plugin-rsc-index.js';\nimport { rscHmrPlugin, hotUpdate } from '../plugins/vite-plugin-rsc-hmr.js';\nimport type { HotUpdatePayload } from '../plugins/vite-plugin-rsc-hmr.js';\nimport { rscEnvPlugin } from '../plugins/vite-plugin-rsc-env.js';\nimport { rscPrivatePlugin } from '../plugins/vite-plugin-rsc-private.js';\nimport { rscManagedPlugin } from '../plugins/vite-plugin-rsc-managed.js';\nimport { rscDelegatePlugin } from '../plugins/vite-plugin-rsc-delegate.js';\nimport type { ClonableModuleNode, Middleware } from './types.js';\nimport { fsRouterTypegenPlugin } from '../plugins/vite-plugin-fs-router-typegen.js';\n\n// TODO there is huge room for refactoring in this file\n\n// For react-server-dom-webpack/server.edge\n(globalThis as any).AsyncLocalStorage = AsyncLocalStorage;\n\nconst createStreamPair = (): [Writable, Promise<ReadableStream | null>] => {\n let controller: ReadableStreamDefaultController | undefined;\n const readable = new ReadableStream({\n start(c) {\n controller = c;\n },\n cancel() {\n controller = undefined;\n },\n });\n let resolve: (value: ReadableStream | null) => void;\n const promise = new Promise<ReadableStream | null>((r) => (resolve = r));\n let hasData = false;\n const writable = new Writable({\n write(chunk, encoding, callback) {\n if (encoding !== ('buffer' as any)) {\n throw new Error('Unknown encoding');\n }\n if (controller) {\n controller.enqueue(chunk);\n if (!hasData) {\n hasData = true;\n resolve(readable);\n }\n }\n callback();\n },\n final(callback) {\n if (controller) {\n controller.close();\n if (!hasData) {\n resolve(null);\n }\n }\n callback();\n },\n });\n return [writable, promise];\n};\n\nconst hotUpdateCallbackSet = new Set<(payload: HotUpdatePayload) => void>();\nconst registerHotUpdateCallback = (fn: (payload: HotUpdatePayload) => void) =>\n hotUpdateCallbackSet.add(fn);\nconst hotUpdateCallback = (payload: HotUpdatePayload) =>\n hotUpdateCallbackSet.forEach((fn) => fn(payload));\n\nconst createMainViteServer = (\n env: Record<string, string>,\n configPromise: ReturnType<typeof resolveConfig>,\n) => {\n const vitePromise = configPromise.then(async (config) => {\n const vite = await createViteServer(\n extendViteConfig(\n {\n // Since we have multiple instances of vite, different ones might overwrite the others' cache.\n cacheDir: 'node_modules/.vite/waku-dev-server-main',\n base: config.basePath,\n plugins: [\n patchReactRefresh(viteReact()),\n nonjsResolvePlugin(),\n devCommonJsPlugin({\n filter: (id) => {\n if (\n id.includes('/node_modules/react-server-dom-webpack/') ||\n id.includes('/node_modules/react-dom/') ||\n id.includes('/node_modules/react/')\n ) {\n return true;\n }\n },\n }),\n rscRsdwPlugin(),\n rscEnvPlugin({ isDev: true, env, config }),\n rscPrivatePlugin(config),\n rscManagedPlugin(config),\n rscIndexPlugin(config),\n rscTransformPlugin({ isClient: true, isBuild: false }),\n rscHmrPlugin(),\n fsRouterTypegenPlugin(config),\n ],\n optimizeDeps: {\n include: ['react-server-dom-webpack/client', 'react-dom/client'],\n exclude: ['waku', 'rsc-html-stream/server'],\n entries: [\n `${config.srcDir}/${SRC_ENTRIES}.*`,\n // HACK hard-coded \"pages\"\n `${config.srcDir}/pages/**/*.*`,\n ],\n },\n ssr: {\n external: ['waku'],\n optimizeDeps: {\n include: ['react-server-dom-webpack/client.edge'],\n },\n },\n appType: 'mpa',\n server: { middlewareMode: true },\n },\n config,\n 'dev-main',\n ),\n );\n registerHotUpdateCallback((payload) => hotUpdate(vite, payload));\n return vite;\n });\n\n const wakuDist = joinPath(fileURLToFilePath(import.meta.url), '../../..');\n\n const loadServerModuleMain = async (idOrFileURL: string) => {\n const vite = await vitePromise;\n if (!idOrFileURL.startsWith('file://')) {\n if (idOrFileURL === 'waku' || idOrFileURL.startsWith('waku/')) {\n // HACK `external: ['waku']` doesn't do the same\n return import(/* @vite-ignore */ idOrFileURL);\n }\n return vite.ssrLoadModule(idOrFileURL);\n }\n const filePath = fileURLToFilePath(idOrFileURL.split('?')[0]!);\n const file = filePath.startsWith('/')\n ? filePath\n : joinPath(vite.config.root, filePath);\n if (file.startsWith(wakuDist)) {\n // HACK `external: ['waku']` doesn't do the same\n return import(/* @vite-ignore */ filePathToFileURL(file));\n }\n if (file.includes('/node_modules/')) {\n // HACK node_modules should be externalized\n return import(/* @vite-ignore */ filePathToFileURL(file));\n }\n return vite.ssrLoadModule(fileURLToFilePath(idOrFileURL));\n };\n\n const transformIndexHtml = async (pathname: string) => {\n const vite = await vitePromise;\n const encoder = new TextEncoder();\n const decoder = new TextDecoder();\n let headSent = false;\n return new TransformStream({\n transform(chunk, controller) {\n if (!(chunk instanceof Uint8Array)) {\n throw new Error('Unknown chunk type');\n }\n if (!headSent) {\n headSent = true;\n let data = decoder.decode(chunk);\n // FIXME without removing async, Vite will move it\n // to the proxy cache, which breaks __WAKU_PUSH__.\n data = data.replace(/<script type=\"module\" async>/, '<script>');\n return new Promise<void>((resolve, reject) => {\n vite\n .transformIndexHtml(pathname, data)\n .then((result) => {\n controller.enqueue(encoder.encode(result));\n resolve();\n })\n .catch(reject);\n });\n }\n controller.enqueue(chunk);\n },\n flush() {\n if (!headSent) {\n throw new Error('head not yet sent');\n }\n },\n });\n };\n\n // FIXME This function feels like a hack\n const willBeHandled = async (pathname: string) => {\n const vite = await vitePromise;\n try {\n const result = await vite.transformRequest(pathname);\n if (result?.code === `export default \"/@fs${pathname}\"`) {\n return false;\n }\n return !!result;\n } catch {\n return false;\n }\n };\n\n return {\n vitePromise,\n loadServerModuleMain,\n transformIndexHtml,\n willBeHandled,\n };\n};\n\nconst createRscViteServer = (\n env: Record<string, string>,\n configPromise: ReturnType<typeof resolveConfig>,\n) => {\n const dummyServer = new Server(); // FIXME we hope to avoid this hack\n\n const vitePromise = configPromise.then(async (config) => {\n const vite = await createViteServer(\n extendViteConfig(\n {\n // Since we have multiple instances of vite, different ones might overwrite the others' cache.\n cacheDir: 'node_modules/.vite/waku-dev-server-rsc',\n plugins: [\n viteReact(),\n nonjsResolvePlugin(),\n devCommonJsPlugin({}),\n rscRsdwPlugin(),\n rscEnvPlugin({ isDev: true, env }),\n rscPrivatePlugin({\n privateDir: config.privateDir,\n hotUpdateCallback,\n }),\n rscManagedPlugin(config),\n rscTransformPlugin({ isClient: false, isBuild: false }),\n rscDelegatePlugin(hotUpdateCallback),\n ],\n optimizeDeps: {\n include: ['react-server-dom-webpack/client', 'react-dom/client'],\n exclude: ['waku'],\n entries: [\n `${config.srcDir}/${SRC_ENTRIES}.*`,\n // HACK hard-coded \"pages\"\n `${config.srcDir}/pages/**/*.*`,\n ],\n },\n ssr: {\n resolve: {\n conditions: ['react-server'],\n externalConditions: ['react-server'],\n },\n noExternal: /^(?!node:)/,\n optimizeDeps: {\n include: [\n 'react-server-dom-webpack/server.edge',\n 'react',\n 'react/jsx-runtime',\n 'react/jsx-dev-runtime',\n ],\n exclude: ['waku'],\n },\n },\n appType: 'custom',\n server: { middlewareMode: true, hmr: { server: dummyServer } },\n },\n config,\n 'dev-rsc',\n ),\n );\n return vite;\n });\n\n const loadServerModuleRsc = async (idOrFileURL: string) => {\n const vite = await vitePromise;\n return vite.ssrLoadModule(\n idOrFileURL.startsWith('file://')\n ? fileURLToFilePath(idOrFileURL)\n : idOrFileURL,\n );\n };\n\n const loadEntriesDev = async (config: { srcDir: string }) => {\n const vite = await vitePromise;\n const filePath = joinPath(vite.config.root, config.srcDir, SRC_ENTRIES);\n return vite.ssrLoadModule(filePath) as Promise<EntriesDev>;\n };\n\n const resolveClientEntry = (\n id: string,\n config: { rootDir: string; basePath: string },\n initialModules: ClonableModuleNode[],\n ) => {\n let file = id;\n if (file.startsWith('/@fs/')) {\n file = file.slice('/@fs'.length); // keep '/' at the beginning\n }\n for (const moduleNode of initialModules) {\n if (moduleNode.file === file) {\n return moduleNode.url;\n }\n }\n if (file.startsWith(config.rootDir)) {\n file = file.slice(config.rootDir.length + 1); // '+ 1' to remove '/'\n } else if (file.startsWith('/')) {\n file = '@fs' + file;\n } else {\n file = '@id/' + file;\n }\n return config.basePath + file;\n };\n\n return {\n loadServerModuleRsc,\n loadEntriesDev,\n resolveClientEntry,\n };\n};\n\nexport const devServer: Middleware = (options) => {\n if (options.cmd !== 'dev') {\n // pass through if not dev command\n return (_ctx, next) => next();\n }\n\n const env = options.env || {};\n const configPromise = resolveConfig(options.config);\n\n (globalThis as any).__WAKU_SERVER_IMPORT__ = (id: string) =>\n loadServerModuleRsc(id);\n\n (globalThis as any).__WAKU_CLIENT_IMPORT__ = (id: string) =>\n loadServerModuleMain(id);\n\n const {\n vitePromise,\n loadServerModuleMain,\n transformIndexHtml,\n willBeHandled,\n } = createMainViteServer(env, configPromise);\n\n const { loadServerModuleRsc, loadEntriesDev, resolveClientEntry } =\n createRscViteServer(env, configPromise);\n\n let initialModules: ClonableModuleNode[];\n\n return async (ctx, next) => {\n const [config, vite] = await Promise.all([\n configPromise.then(extractPureConfig),\n vitePromise,\n ]);\n\n if (!initialModules) {\n const processedModules = new Set<string>();\n\n const processModule = async (modulePath: string) => {\n if (processedModules.has(modulePath)) {\n return;\n }\n processedModules.add(modulePath);\n\n await vite.transformRequest(modulePath);\n const resolved = await vite.pluginContainer.resolveId(modulePath);\n if (!resolved) {\n return;\n }\n\n const module = vite.moduleGraph.idToModuleMap.get(resolved.id);\n if (!module) {\n return;\n }\n\n await Promise.all(\n Array.from(module.importedModules).map(async (importedModule) => {\n if (importedModule.id) {\n await processModule(importedModule.id);\n }\n }),\n );\n };\n\n const mainJs = `${config.basePath}${config.srcDir}/${SRC_MAIN}`;\n const entriesFile = `${vite.config.root}${config.basePath}${config.srcDir}/${SRC_ENTRIES}`;\n\n await processModule(mainJs);\n await processModule(entriesFile);\n\n initialModules = Array.from(\n vite.moduleGraph.idToModuleMap.values(),\n ).flatMap((m) => (m.file ? [{ url: m.url, file: m.file }] : []));\n }\n\n ctx.unstable_devServer = {\n rootDir: vite.config.root,\n resolveClientEntry: (id: string) =>\n resolveClientEntry(\n id,\n {\n rootDir: vite.config.root,\n basePath: config.basePath,\n },\n initialModules,\n ),\n loadServerModuleRsc,\n loadEntriesDev,\n loadServerModuleMain,\n transformIndexHtml,\n };\n\n if (!(await willBeHandled(ctx.req.url.pathname))) {\n await next();\n if (ctx.res.body || ctx.res.status) {\n return;\n }\n }\n\n const viteUrl = ctx.req.url.toString().slice(ctx.req.url.origin.length);\n const viteReq: any = ctx.req.body\n ? Readable.fromWeb(ctx.req.body as never)\n : Readable.from([]);\n viteReq.method = ctx.req.method;\n viteReq.url = viteUrl;\n viteReq.headers = ctx.req.headers;\n const [writable, readablePromise] = createStreamPair();\n const viteRes: any = writable;\n Object.defineProperty(viteRes, 'statusCode', {\n set(code) {\n ctx.res.status = code;\n },\n });\n const headers = new Map<string, string>();\n viteRes.setHeader = (name: string, value: string) => {\n headers.set(name, value);\n ctx.res.headers = {\n ...ctx.res.headers,\n [name]: String(value),\n };\n };\n viteRes.getHeader = (name: string) => headers.get(name);\n viteRes.writeHead = (code: number, headers?: Record<string, string>) => {\n ctx.res.status = code;\n for (const [name, value] of Object.entries(headers || {})) {\n viteRes.setHeader(name, value);\n }\n };\n vite.middlewares(viteReq, viteRes);\n const body = await readablePromise;\n if (body) {\n ctx.res.body = body;\n } else if (ctx.res.status === 404) {\n delete ctx.res.status;\n }\n };\n};\n"],"names":["Readable","Writable","Server","AsyncLocalStorage","createServer","createViteServer","viteReact","resolveConfig","extractPureConfig","SRC_MAIN","SRC_ENTRIES","joinPath","fileURLToFilePath","filePathToFileURL","extendViteConfig","patchReactRefresh","nonjsResolvePlugin","devCommonJsPlugin","rscRsdwPlugin","rscTransformPlugin","rscIndexPlugin","rscHmrPlugin","hotUpdate","rscEnvPlugin","rscPrivatePlugin","rscManagedPlugin","rscDelegatePlugin","fsRouterTypegenPlugin","globalThis","createStreamPair","controller","readable","ReadableStream","start","c","cancel","undefined","resolve","promise","Promise","r","hasData","writable","write","chunk","encoding","callback","Error","enqueue","final","close","hotUpdateCallbackSet","Set","registerHotUpdateCallback","fn","add","hotUpdateCallback","payload","forEach","createMainViteServer","env","configPromise","vitePromise","then","config","vite","cacheDir","base","basePath","plugins","filter","id","includes","isDev","isClient","isBuild","optimizeDeps","include","exclude","entries","srcDir","ssr","external","appType","server","middlewareMode","wakuDist","url","loadServerModuleMain","idOrFileURL","startsWith","ssrLoadModule","filePath","split","file","root","transformIndexHtml","pathname","encoder","TextEncoder","decoder","TextDecoder","headSent","TransformStream","transform","Uint8Array","data","decode","replace","reject","result","encode","catch","flush","willBeHandled","transformRequest","code","createRscViteServer","dummyServer","privateDir","conditions","externalConditions","noExternal","hmr","loadServerModuleRsc","loadEntriesDev","resolveClientEntry","initialModules","slice","length","moduleNode","rootDir","devServer","options","cmd","_ctx","next","__WAKU_SERVER_IMPORT__","__WAKU_CLIENT_IMPORT__","ctx","all","processedModules","processModule","modulePath","has","resolved","pluginContainer","resolveId","module","moduleGraph","idToModuleMap","get","Array","from","importedModules","map","importedModule","mainJs","entriesFile","values","flatMap","m","unstable_devServer","req","res","body","status","viteUrl","toString","origin","viteReq","fromWeb","method","headers","readablePromise","viteRes","Object","defineProperty","set","Map","setHeader","name","value","String","getHeader","writeHead","middlewares"],"mappings":"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"}
@@ -39,16 +39,20 @@ export function rscIndexPlugin(opts) {
39
39
  },
40
40
  configureServer (server) {
41
41
  return ()=>{
42
- server.middlewares.use((req, res)=>{
43
- server.transformIndexHtml(req.url || '', html).then((content)=>{
44
- res.statusCode = 200;
45
- res.setHeader('content-type', 'text/html; charset=utf-8');
46
- res.end(content);
47
- }).catch((err)=>{
48
- console.error('Error transforming index.html', err);
49
- res.statusCode = 500;
50
- res.end('Internal Server Error');
51
- });
42
+ server.middlewares.use((req, res, next)=>{
43
+ if (req.url === opts.basePath) {
44
+ server.transformIndexHtml(req.url, html).then((content)=>{
45
+ res.statusCode = 200;
46
+ res.setHeader('content-type', 'text/html; charset=utf-8');
47
+ res.end(content);
48
+ }).catch((err)=>{
49
+ console.error('Error transforming index.html', err);
50
+ res.statusCode = 500;
51
+ res.end('Internal Server Error');
52
+ });
53
+ } else {
54
+ next();
55
+ }
52
56
  });
53
57
  };
54
58
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/plugins/vite-plugin-rsc-index.ts"],"sourcesContent":["import type { Plugin } from 'vite';\n\nimport { SRC_MAIN } from '../constants.js';\n\nexport function rscIndexPlugin(opts: {\n basePath: string;\n srcDir: string;\n cssAssets?: string[];\n}): Plugin {\n const indexHtml = 'index.html';\n const html = `\n<!doctype html>\n<html>\n <head>\n </head>\n <body>\n <script src=\"${opts.basePath}${opts.srcDir}/${SRC_MAIN}\" async type=\"module\"></script>\n </body>\n</html>\n`;\n return {\n name: 'rsc-index-plugin',\n config() {\n return {\n optimizeDeps: {\n entries: [`${opts.srcDir}/${SRC_MAIN}.*`],\n },\n };\n },\n options(options) {\n if (typeof options.input === 'string') {\n throw new Error('string input is unsupported');\n }\n if (Array.isArray(options.input)) {\n throw new Error('array input is unsupported');\n }\n return {\n ...options,\n input: {\n indexHtml,\n ...options.input,\n },\n };\n },\n configureServer(server) {\n return () => {\n server.middlewares.use((req, res) => {\n server\n .transformIndexHtml(req.url || '', html)\n .then((content) => {\n res.statusCode = 200;\n res.setHeader('content-type', 'text/html; charset=utf-8');\n res.end(content);\n })\n .catch((err) => {\n console.error('Error transforming index.html', err);\n res.statusCode = 500;\n res.end('Internal Server Error');\n });\n });\n };\n },\n resolveId(id) {\n if (id === indexHtml) {\n return { id: indexHtml, moduleSideEffects: true };\n }\n },\n load(id) {\n if (id === indexHtml) {\n return html;\n }\n },\n transformIndexHtml() {\n return [\n {\n tag: 'script',\n attrs: { type: 'module', async: true },\n // HACK: vite won't inject __vite__injectQuery anymore\n // Vite optimizes `import()` so it adds `?import` to imported urls. That'd cause double module hazard! This way, I hack it to use a global function so it does not get optimized.\n children: `\nglobalThis.__WAKU_CLIENT_IMPORT__ = (id) => import(id);\n`,\n },\n ...(opts.cssAssets || []).map((href) => ({\n tag: 'link',\n attrs: { rel: 'stylesheet', href: `${opts.basePath}${href}` },\n injectTo: 'head' as const,\n })),\n ];\n },\n };\n}\n"],"names":["SRC_MAIN","rscIndexPlugin","opts","indexHtml","html","basePath","srcDir","name","config","optimizeDeps","entries","options","input","Error","Array","isArray","configureServer","server","middlewares","use","req","res","transformIndexHtml","url","then","content","statusCode","setHeader","end","catch","err","console","error","resolveId","id","moduleSideEffects","load","tag","attrs","type","async","children","cssAssets","map","href","rel","injectTo"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,kBAAkB;AAE3C,OAAO,SAASC,eAAeC,IAI9B;IACC,MAAMC,YAAY;IAClB,MAAMC,OAAO,CAAC;;;;;;iBAMC,EAAEF,KAAKG,QAAQ,GAAGH,KAAKI,MAAM,CAAC,CAAC,EAAEN,SAAS;;;AAG3D,CAAC;IACC,OAAO;QACLO,MAAM;QACNC;YACE,OAAO;gBACLC,cAAc;oBACZC,SAAS;wBAAC,GAAGR,KAAKI,MAAM,CAAC,CAAC,EAAEN,SAAS,EAAE,CAAC;qBAAC;gBAC3C;YACF;QACF;QACAW,SAAQA,OAAO;YACb,IAAI,OAAOA,QAAQC,KAAK,KAAK,UAAU;gBACrC,MAAM,IAAIC,MAAM;YAClB;YACA,IAAIC,MAAMC,OAAO,CAACJ,QAAQC,KAAK,GAAG;gBAChC,MAAM,IAAIC,MAAM;YAClB;YACA,OAAO;gBACL,GAAGF,OAAO;gBACVC,OAAO;oBACLT;oBACA,GAAGQ,QAAQC,KAAK;gBAClB;YACF;QACF;QACAI,iBAAgBC,MAAM;YACpB,OAAO;gBACLA,OAAOC,WAAW,CAACC,GAAG,CAAC,CAACC,KAAKC;oBAC3BJ,OACGK,kBAAkB,CAACF,IAAIG,GAAG,IAAI,IAAInB,MAClCoB,IAAI,CAAC,CAACC;wBACLJ,IAAIK,UAAU,GAAG;wBACjBL,IAAIM,SAAS,CAAC,gBAAgB;wBAC9BN,IAAIO,GAAG,CAACH;oBACV,GACCI,KAAK,CAAC,CAACC;wBACNC,QAAQC,KAAK,CAAC,iCAAiCF;wBAC/CT,IAAIK,UAAU,GAAG;wBACjBL,IAAIO,GAAG,CAAC;oBACV;gBACJ;YACF;QACF;QACAK,WAAUC,EAAE;YACV,IAAIA,OAAO/B,WAAW;gBACpB,OAAO;oBAAE+B,IAAI/B;oBAAWgC,mBAAmB;gBAAK;YAClD;QACF;QACAC,MAAKF,EAAE;YACL,IAAIA,OAAO/B,WAAW;gBACpB,OAAOC;YACT;QACF;QACAkB;YACE,OAAO;gBACL;oBACEe,KAAK;oBACLC,OAAO;wBAAEC,MAAM;wBAAUC,OAAO;oBAAK;oBACrC,sDAAsD;oBACtD,iLAAiL;oBACjLC,UAAU,CAAC;;AAErB,CAAC;gBACO;mBACG,AAACvC,CAAAA,KAAKwC,SAAS,IAAI,EAAE,AAAD,EAAGC,GAAG,CAAC,CAACC,OAAU,CAAA;wBACvCP,KAAK;wBACLC,OAAO;4BAAEO,KAAK;4BAAcD,MAAM,GAAG1C,KAAKG,QAAQ,GAAGuC,MAAM;wBAAC;wBAC5DE,UAAU;oBACZ,CAAA;aACD;QACH;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/lib/plugins/vite-plugin-rsc-index.ts"],"sourcesContent":["import type { Plugin } from 'vite';\n\nimport { SRC_MAIN } from '../constants.js';\n\nexport function rscIndexPlugin(opts: {\n basePath: string;\n srcDir: string;\n cssAssets?: string[];\n}): Plugin {\n const indexHtml = 'index.html';\n const html = `\n<!doctype html>\n<html>\n <head>\n </head>\n <body>\n <script src=\"${opts.basePath}${opts.srcDir}/${SRC_MAIN}\" async type=\"module\"></script>\n </body>\n</html>\n`;\n return {\n name: 'rsc-index-plugin',\n config() {\n return {\n optimizeDeps: {\n entries: [`${opts.srcDir}/${SRC_MAIN}.*`],\n },\n };\n },\n options(options) {\n if (typeof options.input === 'string') {\n throw new Error('string input is unsupported');\n }\n if (Array.isArray(options.input)) {\n throw new Error('array input is unsupported');\n }\n return {\n ...options,\n input: {\n indexHtml,\n ...options.input,\n },\n };\n },\n configureServer(server) {\n return () => {\n server.middlewares.use((req, res, next) => {\n if (req.url === opts.basePath) {\n server\n .transformIndexHtml(req.url, html)\n .then((content) => {\n res.statusCode = 200;\n res.setHeader('content-type', 'text/html; charset=utf-8');\n res.end(content);\n })\n .catch((err) => {\n console.error('Error transforming index.html', err);\n res.statusCode = 500;\n res.end('Internal Server Error');\n });\n } else {\n next();\n }\n });\n };\n },\n resolveId(id) {\n if (id === indexHtml) {\n return { id: indexHtml, moduleSideEffects: true };\n }\n },\n load(id) {\n if (id === indexHtml) {\n return html;\n }\n },\n transformIndexHtml() {\n return [\n {\n tag: 'script',\n attrs: { type: 'module', async: true },\n // HACK: vite won't inject __vite__injectQuery anymore\n // Vite optimizes `import()` so it adds `?import` to imported urls. That'd cause double module hazard! This way, I hack it to use a global function so it does not get optimized.\n children: `\nglobalThis.__WAKU_CLIENT_IMPORT__ = (id) => import(id);\n`,\n },\n ...(opts.cssAssets || []).map((href) => ({\n tag: 'link',\n attrs: { rel: 'stylesheet', href: `${opts.basePath}${href}` },\n injectTo: 'head' as const,\n })),\n ];\n },\n };\n}\n"],"names":["SRC_MAIN","rscIndexPlugin","opts","indexHtml","html","basePath","srcDir","name","config","optimizeDeps","entries","options","input","Error","Array","isArray","configureServer","server","middlewares","use","req","res","next","url","transformIndexHtml","then","content","statusCode","setHeader","end","catch","err","console","error","resolveId","id","moduleSideEffects","load","tag","attrs","type","async","children","cssAssets","map","href","rel","injectTo"],"mappings":"AAEA,SAASA,QAAQ,QAAQ,kBAAkB;AAE3C,OAAO,SAASC,eAAeC,IAI9B;IACC,MAAMC,YAAY;IAClB,MAAMC,OAAO,CAAC;;;;;;iBAMC,EAAEF,KAAKG,QAAQ,GAAGH,KAAKI,MAAM,CAAC,CAAC,EAAEN,SAAS;;;AAG3D,CAAC;IACC,OAAO;QACLO,MAAM;QACNC;YACE,OAAO;gBACLC,cAAc;oBACZC,SAAS;wBAAC,GAAGR,KAAKI,MAAM,CAAC,CAAC,EAAEN,SAAS,EAAE,CAAC;qBAAC;gBAC3C;YACF;QACF;QACAW,SAAQA,OAAO;YACb,IAAI,OAAOA,QAAQC,KAAK,KAAK,UAAU;gBACrC,MAAM,IAAIC,MAAM;YAClB;YACA,IAAIC,MAAMC,OAAO,CAACJ,QAAQC,KAAK,GAAG;gBAChC,MAAM,IAAIC,MAAM;YAClB;YACA,OAAO;gBACL,GAAGF,OAAO;gBACVC,OAAO;oBACLT;oBACA,GAAGQ,QAAQC,KAAK;gBAClB;YACF;QACF;QACAI,iBAAgBC,MAAM;YACpB,OAAO;gBACLA,OAAOC,WAAW,CAACC,GAAG,CAAC,CAACC,KAAKC,KAAKC;oBAChC,IAAIF,IAAIG,GAAG,KAAKrB,KAAKG,QAAQ,EAAE;wBAC7BY,OACGO,kBAAkB,CAACJ,IAAIG,GAAG,EAAEnB,MAC5BqB,IAAI,CAAC,CAACC;4BACLL,IAAIM,UAAU,GAAG;4BACjBN,IAAIO,SAAS,CAAC,gBAAgB;4BAC9BP,IAAIQ,GAAG,CAACH;wBACV,GACCI,KAAK,CAAC,CAACC;4BACNC,QAAQC,KAAK,CAAC,iCAAiCF;4BAC/CV,IAAIM,UAAU,GAAG;4BACjBN,IAAIQ,GAAG,CAAC;wBACV;oBACJ,OAAO;wBACLP;oBACF;gBACF;YACF;QACF;QACAY,WAAUC,EAAE;YACV,IAAIA,OAAOhC,WAAW;gBACpB,OAAO;oBAAEgC,IAAIhC;oBAAWiC,mBAAmB;gBAAK;YAClD;QACF;QACAC,MAAKF,EAAE;YACL,IAAIA,OAAOhC,WAAW;gBACpB,OAAOC;YACT;QACF;QACAoB;YACE,OAAO;gBACL;oBACEc,KAAK;oBACLC,OAAO;wBAAEC,MAAM;wBAAUC,OAAO;oBAAK;oBACrC,sDAAsD;oBACtD,iLAAiL;oBACjLC,UAAU,CAAC;;AAErB,CAAC;gBACO;mBACG,AAACxC,CAAAA,KAAKyC,SAAS,IAAI,EAAE,AAAD,EAAGC,GAAG,CAAC,CAACC,OAAU,CAAA;wBACvCP,KAAK;wBACLC,OAAO;4BAAEO,KAAK;4BAAcD,MAAM,GAAG3C,KAAKG,QAAQ,GAAGwC,MAAM;wBAAC;wBAC5DE,UAAU;oBACZ,CAAA;aACD;QACH;IACF;AACF"}
@@ -8,6 +8,8 @@ const collectExportNames = (mod)=>{
8
8
  if (item.type === 'ExportDeclaration') {
9
9
  if (item.declaration.type === 'FunctionDeclaration') {
10
10
  exportNames.add(item.declaration.identifier.value);
11
+ } else if (item.declaration.type === 'ClassDeclaration') {
12
+ exportNames.add(item.declaration.identifier.value);
11
13
  } else if (item.declaration.type === 'VariableDeclaration') {
12
14
  for (const d of item.declaration.declarations){
13
15
  if (d.id.type === 'Identifier') {
@@ -539,6 +541,9 @@ export function rscTransformPlugin(opts) {
539
541
  if (id.startsWith('/@id/')) {
540
542
  return (await this.resolve(id.slice('/@id/'.length), importer, options))?.id;
541
543
  }
544
+ if (id.startsWith('/@fs/')) {
545
+ return (await this.resolve(id.slice('/@fs'.length), importer, options))?.id;
546
+ }
542
547
  const resolved = await this.resolve(id, importer, options);
543
548
  let srcId = importer && (id.startsWith('./') || id.startsWith('../')) ? joinPath(importer.split('?')[0], '..', id) : id;
544
549
  if (srcId.startsWith('waku/')) {