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.
- package/dist/lib/builder/build.js +6 -2
- package/dist/lib/builder/build.js.map +1 -1
- package/dist/lib/middleware/dev-server-impl.js +3 -1
- package/dist/lib/middleware/dev-server-impl.js.map +1 -1
- package/dist/lib/plugins/vite-plugin-rsc-index.js +14 -10
- package/dist/lib/plugins/vite-plugin-rsc-index.js.map +1 -1
- package/dist/lib/plugins/vite-plugin-rsc-transform.js +5 -0
- package/dist/lib/plugins/vite-plugin-rsc-transform.js.map +1 -1
- package/dist/minimal/client.d.ts +23 -2
- package/dist/minimal/client.js +50 -4
- package/dist/minimal/client.js.map +1 -1
- package/dist/router/client.d.ts +16 -5
- package/dist/router/client.js +14 -6
- package/dist/router/client.js.map +1 -1
- package/dist/router/create-pages.d.ts +6 -1
- package/dist/router/create-pages.js +45 -28
- package/dist/router/create-pages.js.map +1 -1
- package/dist/router/define-router.d.ts +4 -0
- package/dist/router/define-router.js +3 -2
- package/dist/router/define-router.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js.map +1 -1
- package/package.json +4 -4
|
@@ -117,7 +117,10 @@ const analyzeEntries = async (rootDir, config)=>{
|
|
|
117
117
|
isClient: true,
|
|
118
118
|
serverFileSet
|
|
119
119
|
}),
|
|
120
|
-
rscManagedPlugin(
|
|
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(
|
|
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: '
|
|
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":"AAAA,SAASA,QAAQ,EAAEC,QAAQ,QAAQ,cAAc;AACjD,SAASC,MAAM,QAAQ,YAAY;AACnC,SAASC,iBAAiB,QAAQ,mBAAmB;AACrD,SAASC,gBAAgBC,gBAAgB,QAAQ,OAAO;AACxD,OAAOC,eAAe,uBAAuB;AAG7C,SAASC,aAAa,EAAEC,iBAAiB,QAAQ,eAAe;AAChE,SAASC,QAAQ,EAAEC,WAAW,QAAQ,kBAAkB;AACxD,SACEC,QAAQ,EACRC,iBAAiB,EACjBC,iBAAiB,QACZ,mBAAmB;AAC1B,SAASC,gBAAgB,QAAQ,0BAA0B;AAC3D,SAASC,iBAAiB,QAAQ,oCAAoC;AACtE,SAASC,kBAAkB,QAAQ,0CAA0C;AAC7E,SAASC,iBAAiB,QAAQ,yCAAyC;AAC3E,SAASC,aAAa,QAAQ,qCAAqC;AACnE,SAASC,kBAAkB,QAAQ,0CAA0C;AAC7E,SAASC,cAAc,QAAQ,sCAAsC;AACrE,SAASC,YAAY,EAAEC,SAAS,QAAQ,oCAAoC;AAE5E,SAASC,YAAY,QAAQ,oCAAoC;AACjE,SAASC,gBAAgB,QAAQ,wCAAwC;AACzE,SAASC,gBAAgB,QAAQ,wCAAwC;AACzE,SAASC,iBAAiB,QAAQ,yCAAyC;AAE3E,SAASC,qBAAqB,QAAQ,8CAA8C;AAEpF,uDAAuD;AAEvD,2CAA2C;AAC1CC,WAAmBzB,iBAAiB,GAAGA;AAExC,MAAM0B,mBAAmB;IACvB,IAAIC;IACJ,MAAMC,WAAW,IAAIC,eAAe;QAClCC,OAAMC,CAAC;YACLJ,aAAaI;QACf;QACAC;YACEL,aAAaM;QACf;IACF;IACA,IAAIC;IACJ,MAAMC,UAAU,IAAIC,QAA+B,CAACC,IAAOH,UAAUG;IACrE,IAAIC,UAAU;IACd,MAAMC,WAAW,IAAIzC,SAAS;QAC5B0C,OAAMC,KAAK,EAAEC,QAAQ,EAAEC,QAAQ;YAC7B,IAAID,aAAc,UAAkB;gBAClC,MAAM,IAAIE,MAAM;YAClB;YACA,IAAIjB,YAAY;gBACdA,WAAWkB,OAAO,CAACJ;gBACnB,IAAI,CAACH,SAAS;oBACZA,UAAU;oBACVJ,QAAQN;gBACV;YACF;YACAe;QACF;QACAG,OAAMH,QAAQ;YACZ,IAAIhB,YAAY;gBACdA,WAAWoB,KAAK;gBAChB,IAAI,CAACT,SAAS;oBACZJ,QAAQ;gBACV;YACF;YACAS;QACF;IACF;IACA,OAAO;QAACJ;QAAUJ;KAAQ;AAC5B;AAEA,MAAMa,uBAAuB,IAAIC;AACjC,MAAMC,4BAA4B,CAACC,KACjCH,qBAAqBI,GAAG,CAACD;AAC3B,MAAME,oBAAoB,CAACC,UACzBN,qBAAqBO,OAAO,CAAC,CAACJ,KAAOA,GAAGG;AAE1C,MAAME,uBAAuB,CAC3BC,KACAC;IAEA,MAAMC,cAAcD,cAAcE,IAAI,CAAC,OAAOC;QAC5C,MAAMC,OAAO,MAAM5D,iBACjBS,iBACE;YACE,8FAA8F;YAC9FoD,UAAU;YACVC,MAAMH,OAAOI,QAAQ;YACrBC,SAAS;gBACPtD,kBAAkBT;gBAClBU;gBACAC,kBAAkB;oBAChBqD,QAAQ,CAACC;wBACP,IACEA,GAAGC,QAAQ,CAAC,8CACZD,GAAGC,QAAQ,CAAC,+BACZD,GAAGC,QAAQ,CAAC,yBACZ;4BACA,OAAO;wBACT;oBACF;gBACF;gBACAtD;gBACAK,aAAa;oBAAEkD,OAAO;oBAAMb;oBAAKI;gBAAO;gBACxCxC,iBAAiBwC;gBACjBvC,iBAAiBuC;gBACjB5C,eAAe4C;gBACf7C,mBAAmB;oBAAEuD,UAAU;oBAAMC,SAAS;gBAAM;gBACpDtD;gBACAM,sBAAsBqC;aACvB;YACDY,cAAc;gBACZC,SAAS;oBAAC;oBAAmC;iBAAmB;gBAChEC,SAAS;oBAAC;oBAAQ;iBAAyB;gBAC3CC,SAAS;oBACP,GAAGf,OAAOgB,MAAM,CAAC,CAAC,EAAEtE,YAAY,EAAE,CAAC;oBACnC,0BAA0B;oBAC1B,GAAGsD,OAAOgB,MAAM,CAAC,aAAa,CAAC;iBAChC;YACH;YACAC,KAAK;gBACHC,UAAU;oBAAC;iBAAO;gBAClBN,cAAc;oBACZC,SAAS;wBAAC;qBAAuC;gBACnD;YACF;YACAM,SAAS;YACTC,QAAQ;gBAAEC,gBAAgB;YAAK;QACjC,GACArB,QACA;QAGJX,0BAA0B,CAACI,UAAYnC,UAAU2C,MAAMR;QACvD,OAAOQ;IACT;IAEA,MAAMqB,WAAW3E,SAASC,kBAAkB,YAAY2E,GAAG,GAAG;IAE9D,MAAMC,uBAAuB,OAAOC;QAClC,MAAMxB,OAAO,MAAMH;QACnB,IAAI,CAAC2B,YAAYC,UAAU,CAAC,YAAY;YACtC,IAAID,gBAAgB,UAAUA,YAAYC,UAAU,CAAC,UAAU;gBAC7D,gDAAgD;gBAChD,OAAO,MAAM,CAAC,gBAAgB,GAAGD;YACnC;YACA,OAAOxB,KAAK0B,aAAa,CAACF;QAC5B;QACA,MAAMG,WAAWhF,kBAAkB6E,YAAYI,KAAK,CAAC,IAAI,CAAC,EAAE;QAC5D,MAAMC,OAAOF,SAASF,UAAU,CAAC,OAC7BE,WACAjF,SAASsD,KAAKD,MAAM,CAAC+B,IAAI,EAAEH;QAC/B,IAAIE,KAAKJ,UAAU,CAACJ,WAAW;YAC7B,gDAAgD;YAChD,OAAO,MAAM,CAAC,gBAAgB,GAAGzE,kBAAkBiF;QACrD;QACA,IAAIA,KAAKtB,QAAQ,CAAC,mBAAmB;YACnC,2CAA2C;YAC3C,OAAO,MAAM,CAAC,gBAAgB,GAAG3D,kBAAkBiF;QACrD;QACA,OAAO7B,KAAK0B,aAAa,CAAC/E,kBAAkB6E;IAC9C;IAEA,MAAMO,qBAAqB,OAAOC;QAChC,MAAMhC,OAAO,MAAMH;QACnB,MAAMoC,UAAU,IAAIC;QACpB,MAAMC,UAAU,IAAIC;QACpB,IAAIC,WAAW;QACf,OAAO,IAAIC,gBAAgB;YACzBC,WAAU5D,KAAK,EAAEd,UAAU;gBACzB,IAAI,CAAEc,CAAAA,iBAAiB6D,UAAS,GAAI;oBAClC,MAAM,IAAI1D,MAAM;gBAClB;gBACA,IAAI,CAACuD,UAAU;oBACbA,WAAW;oBACX,IAAII,OAAON,QAAQO,MAAM,CAAC/D;oBAC1B,kDAAkD;oBAClD,kDAAkD;oBAClD8D,OAAOA,KAAKE,OAAO,CAAC,gCAAgC;oBACpD,OAAO,IAAIrE,QAAc,CAACF,SAASwE;wBACjC5C,KACG+B,kBAAkB,CAACC,UAAUS,MAC7B3C,IAAI,CAAC,CAAC+C;4BACLhF,WAAWkB,OAAO,CAACkD,QAAQa,MAAM,CAACD;4BAClCzE;wBACF,GACC2E,KAAK,CAACH;oBACX;gBACF;gBACA/E,WAAWkB,OAAO,CAACJ;YACrB;YACAqE;gBACE,IAAI,CAACX,UAAU;oBACb,MAAM,IAAIvD,MAAM;gBAClB;YACF;QACF;IACF;IAEA,wCAAwC;IACxC,MAAMmE,gBAAgB,OAAOjB;QAC3B,MAAMhC,OAAO,MAAMH;QACnB,IAAI;YACF,MAAMgD,SAAS,MAAM7C,KAAKkD,gBAAgB,CAAClB;YAC3C,IAAIa,QAAQM,SAAS,CAAC,oBAAoB,EAAEnB,SAAS,CAAC,CAAC,EAAE;gBACvD,OAAO;YACT;YACA,OAAO,CAAC,CAACa;QACX,EAAE,OAAM;YACN,OAAO;QACT;IACF;IAEA,OAAO;QACLhD;QACA0B;QACAQ;QACAkB;IACF;AACF;AAEA,MAAMG,sBAAsB,CAC1BzD,KACAC;IAEA,MAAMyD,cAAc,IAAIpH,UAAU,mCAAmC;IAErE,MAAM4D,cAAcD,cAAcE,IAAI,CAAC,OAAOC;QAC5C,MAAMC,OAAO,MAAM5D,iBACjBS,iBACE;YACE,8FAA8F;YAC9FoD,UAAU;YACVG,SAAS;gBACP/D;gBACAU;gBACAC,kBAAkB,CAAC;gBACnBC;gBACAK,aAAa;oBAAEkD,OAAO;oBAAMb;gBAAI;gBAChCpC,iBAAiB;oBACf+F,YAAYvD,OAAOuD,UAAU;oBAC7B/D;gBACF;gBACA/B,iBAAiBuC;gBACjB7C,mBAAmB;oBAAEuD,UAAU;oBAAOC,SAAS;gBAAM;gBACrDjD,kBAAkB8B;aACnB;YACDoB,cAAc;gBACZC,SAAS;oBAAC;oBAAmC;iBAAmB;gBAChEC,SAAS;oBAAC;iBAAO;gBACjBC,SAAS;oBACP,GAAGf,OAAOgB,MAAM,CAAC,CAAC,EAAEtE,YAAY,EAAE,CAAC;oBACnC,0BAA0B;oBAC1B,GAAGsD,OAAOgB,MAAM,CAAC,aAAa,CAAC;iBAChC;YACH;YACAC,KAAK;gBACH5C,SAAS;oBACPmF,YAAY;wBAAC;qBAAe;oBAC5BC,oBAAoB;wBAAC;qBAAe;gBACtC;gBACAC,YAAY;gBACZ9C,cAAc;oBACZC,SAAS;wBACP;wBACA;wBACA;wBACA;qBACD;oBACDC,SAAS;wBAAC;qBAAO;gBACnB;YACF;YACAK,SAAS;YACTC,QAAQ;gBAAEC,gBAAgB;gBAAMsC,KAAK;oBAAEvC,QAAQkC;gBAAY;YAAE;QAC/D,GACAtD,QACA;QAGJ,OAAOC;IACT;IAEA,MAAM2D,sBAAsB,OAAOnC;QACjC,MAAMxB,OAAO,MAAMH;QACnB,OAAOG,KAAK0B,aAAa,CACvBF,YAAYC,UAAU,CAAC,aACnB9E,kBAAkB6E,eAClBA;IAER;IAEA,MAAMoC,iBAAiB,OAAO7D;QAC5B,MAAMC,OAAO,MAAMH;QACnB,MAAM8B,WAAWjF,SAASsD,KAAKD,MAAM,CAAC+B,IAAI,EAAE/B,OAAOgB,MAAM,EAAEtE;QAC3D,OAAOuD,KAAK0B,aAAa,CAACC;IAC5B;IAEA,MAAMkC,qBAAqB,CACzBvD,IACAP,QACA+D;QAEA,IAAIjC,OAAOvB;QACX,IAAIuB,KAAKJ,UAAU,CAAC,UAAU;YAC5BI,OAAOA,KAAKkC,KAAK,CAAC,OAAOC,MAAM,GAAG,4BAA4B;QAChE;QACA,KAAK,MAAMC,cAAcH,eAAgB;YACvC,IAAIG,WAAWpC,IAAI,KAAKA,MAAM;gBAC5B,OAAOoC,WAAW3C,GAAG;YACvB;QACF;QACA,IAAIO,KAAKJ,UAAU,CAAC1B,OAAOmE,OAAO,GAAG;YACnCrC,OAAOA,KAAKkC,KAAK,CAAChE,OAAOmE,OAAO,CAACF,MAAM,GAAG,IAAI,sBAAsB;QACtE,OAAO,IAAInC,KAAKJ,UAAU,CAAC,MAAM;YAC/BI,OAAO,QAAQA;QACjB,OAAO;YACLA,OAAO,SAASA;QAClB;QACA,OAAO9B,OAAOI,QAAQ,GAAG0B;IAC3B;IAEA,OAAO;QACL8B;QACAC;QACAC;IACF;AACF;AAEA,OAAO,MAAMM,YAAwB,CAACC;IACpC,IAAIA,QAAQC,GAAG,KAAK,OAAO;QACzB,kCAAkC;QAClC,OAAO,CAACC,MAAMC,OAASA;IACzB;IAEA,MAAM5E,MAAMyE,QAAQzE,GAAG,IAAI,CAAC;IAC5B,MAAMC,gBAAgBtD,cAAc8H,QAAQrE,MAAM;IAEjDpC,WAAmB6G,sBAAsB,GAAG,CAAClE,KAC5CqD,oBAAoBrD;IAErB3C,WAAmB8G,sBAAsB,GAAG,CAACnE,KAC5CiB,qBAAqBjB;IAEvB,MAAM,EACJT,WAAW,EACX0B,oBAAoB,EACpBQ,kBAAkB,EAClBkB,aAAa,EACd,GAAGvD,qBAAqBC,KAAKC;IAE9B,MAAM,EAAE+D,mBAAmB,EAAEC,cAAc,EAAEC,kBAAkB,EAAE,GAC/DT,oBAAoBzD,KAAKC;IAE3B,IAAIkE;IAEJ,OAAO,OAAOY,KAAKH;QACjB,MAAM,CAACxE,QAAQC,KAAK,GAAG,MAAM1B,QAAQqG,GAAG,CAAC;YACvC/E,cAAcE,IAAI,CAACvD;YACnBsD;SACD;QAED,IAAI,CAACiE,gBAAgB;YACnB,MAAMc,mBAAmB,IAAIzF;YAE7B,MAAM0F,gBAAgB,OAAOC;gBAC3B,IAAIF,iBAAiBG,GAAG,CAACD,aAAa;oBACpC;gBACF;gBACAF,iBAAiBtF,GAAG,CAACwF;gBAErB,MAAM9E,KAAKkD,gBAAgB,CAAC4B;gBAC5B,MAAME,WAAW,MAAMhF,KAAKiF,eAAe,CAACC,SAAS,CAACJ;gBACtD,IAAI,CAACE,UAAU;oBACb;gBACF;gBAEA,MAAMG,SAASnF,KAAKoF,WAAW,CAACC,aAAa,CAACC,GAAG,CAACN,SAAS1E,EAAE;gBAC7D,IAAI,CAAC6E,QAAQ;oBACX;gBACF;gBAEA,MAAM7G,QAAQqG,GAAG,CACfY,MAAMC,IAAI,CAACL,OAAOM,eAAe,EAAEC,GAAG,CAAC,OAAOC;oBAC5C,IAAIA,eAAerF,EAAE,EAAE;wBACrB,MAAMuE,cAAcc,eAAerF,EAAE;oBACvC;gBACF;YAEJ;YAEA,MAAMsF,SAAS,GAAG7F,OAAOI,QAAQ,GAAGJ,OAAOgB,MAAM,CAAC,CAAC,EAAEvE,UAAU;YAC/D,MAAMqJ,cAAc,GAAG7F,KAAKD,MAAM,CAAC+B,IAAI,GAAG/B,OAAOI,QAAQ,GAAGJ,OAAOgB,MAAM,CAAC,CAAC,EAAEtE,aAAa;YAE1F,MAAMoI,cAAce;YACpB,MAAMf,cAAcgB;YAEpB/B,iBAAiByB,MAAMC,IAAI,CACzBxF,KAAKoF,WAAW,CAACC,aAAa,CAACS,MAAM,IACrCC,OAAO,CAAC,CAACC,IAAOA,EAAEnE,IAAI,GAAG;oBAAC;wBAAEP,KAAK0E,EAAE1E,GAAG;wBAAEO,MAAMmE,EAAEnE,IAAI;oBAAC;iBAAE,GAAG,EAAE;QAChE;QAEA6C,IAAIuB,kBAAkB,GAAG;YACvB/B,SAASlE,KAAKD,MAAM,CAAC+B,IAAI;YACzB+B,oBAAoB,CAACvD,KACnBuD,mBACEvD,IACA;oBACE4D,SAASlE,KAAKD,MAAM,CAAC+B,IAAI;oBACzB3B,UAAUJ,OAAOI,QAAQ;gBAC3B,GACA2D;YAEJH;YACAC;YACArC;YACAQ;QACF;QAEA,IAAI,CAAE,MAAMkB,cAAcyB,IAAIwB,GAAG,CAAC5E,GAAG,CAACU,QAAQ,GAAI;YAChD,MAAMuC;YACN,IAAIG,IAAIyB,GAAG,CAACC,IAAI,IAAI1B,IAAIyB,GAAG,CAACE,MAAM,EAAE;gBAClC;YACF;QACF;QAEA,MAAMC,UAAU5B,IAAIwB,GAAG,CAAC5E,GAAG,CAACiF,QAAQ,GAAGxC,KAAK,CAACW,IAAIwB,GAAG,CAAC5E,GAAG,CAACkF,MAAM,CAACxC,MAAM;QACtE,MAAMyC,UAAe/B,IAAIwB,GAAG,CAACE,IAAI,GAC7BrK,SAAS2K,OAAO,CAAChC,IAAIwB,GAAG,CAACE,IAAI,IAC7BrK,SAASyJ,IAAI,CAAC,EAAE;QACpBiB,QAAQE,MAAM,GAAGjC,IAAIwB,GAAG,CAACS,MAAM;QAC/BF,QAAQnF,GAAG,GAAGgF;QACdG,QAAQG,OAAO,GAAGlC,IAAIwB,GAAG,CAACU,OAAO;QACjC,MAAM,CAACnI,UAAUoI,gBAAgB,GAAGjJ;QACpC,MAAMkJ,UAAerI;QACrBsI,OAAOC,cAAc,CAACF,SAAS,cAAc;YAC3CG,KAAI9D,IAAI;gBACNuB,IAAIyB,GAAG,CAACE,MAAM,GAAGlD;YACnB;QACF;QACA,MAAMyD,UAAU,IAAIM;QACpBJ,QAAQK,SAAS,GAAG,CAACC,MAAcC;YACjCT,QAAQK,GAAG,CAACG,MAAMC;YAClB3C,IAAIyB,GAAG,CAACS,OAAO,GAAG;gBAChB,GAAGlC,IAAIyB,GAAG,CAACS,OAAO;gBAClB,CAACQ,KAAK,EAAEE,OAAOD;YACjB;QACF;QACAP,QAAQS,SAAS,GAAG,CAACH,OAAiBR,QAAQtB,GAAG,CAAC8B;QAClDN,QAAQU,SAAS,GAAG,CAACrE,MAAcyD;YACjClC,IAAIyB,GAAG,CAACE,MAAM,GAAGlD;YACjB,KAAK,MAAM,CAACiE,MAAMC,MAAM,IAAIN,OAAOjG,OAAO,CAAC8F,WAAW,CAAC,GAAI;gBACzDE,QAAQK,SAAS,CAACC,MAAMC;YAC1B;QACF;QACArH,KAAKyH,WAAW,CAAChB,SAASK;QAC1B,MAAMV,OAAO,MAAMS;QACnB,IAAIT,MAAM;YACR1B,IAAIyB,GAAG,CAACC,IAAI,GAAGA;QACjB,OAAO,IAAI1B,IAAIyB,GAAG,CAACE,MAAM,KAAK,KAAK;YACjC,OAAO3B,IAAIyB,GAAG,CAACE,MAAM;QACvB;IACF;AACF,EAAE"}
|
|
@@ -39,16 +39,20 @@ export function rscIndexPlugin(opts) {
|
|
|
39
39
|
},
|
|
40
40
|
configureServer (server) {
|
|
41
41
|
return ()=>{
|
|
42
|
-
server.middlewares.use((req, res)=>{
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
|
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/')) {
|