waku 0.23.2 → 0.23.4

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.
Files changed (72) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +2 -13
  3. package/dist/cli.js.map +1 -1
  4. package/dist/lib/builder/build.d.ts +4 -0
  5. package/dist/lib/builder/build.js +9 -3
  6. package/dist/lib/builder/build.js.map +1 -1
  7. package/dist/lib/builder/constants.d.ts +3 -3
  8. package/dist/lib/builder/constants.js +3 -3
  9. package/dist/lib/builder/constants.js.map +1 -1
  10. package/dist/lib/builder/platform-data.js +2 -2
  11. package/dist/lib/builder/platform-data.js.map +1 -1
  12. package/dist/lib/middleware/dev-server-impl.js +20 -7
  13. package/dist/lib/middleware/dev-server-impl.js.map +1 -1
  14. package/dist/lib/middleware/dev-server.d.ts +0 -5
  15. package/dist/lib/middleware/dev-server.js.map +1 -1
  16. package/dist/lib/middleware/handler.js +2 -2
  17. package/dist/lib/middleware/handler.js.map +1 -1
  18. package/dist/lib/plugins/vite-plugin-deploy-aws-lambda.js +2 -2
  19. package/dist/lib/plugins/vite-plugin-deploy-aws-lambda.js.map +1 -1
  20. package/dist/lib/plugins/vite-plugin-deploy-cloudflare.d.ts +5 -0
  21. package/dist/lib/plugins/vite-plugin-deploy-cloudflare.js +4 -3
  22. package/dist/lib/plugins/vite-plugin-deploy-cloudflare.js.map +1 -1
  23. package/dist/lib/plugins/vite-plugin-deploy-deno.js +2 -2
  24. package/dist/lib/plugins/vite-plugin-deploy-deno.js.map +1 -1
  25. package/dist/lib/plugins/vite-plugin-deploy-netlify.js +2 -2
  26. package/dist/lib/plugins/vite-plugin-deploy-netlify.js.map +1 -1
  27. package/dist/lib/plugins/vite-plugin-deploy-partykit.js +2 -2
  28. package/dist/lib/plugins/vite-plugin-deploy-partykit.js.map +1 -1
  29. package/dist/lib/plugins/vite-plugin-deploy-vercel.js +2 -2
  30. package/dist/lib/plugins/vite-plugin-deploy-vercel.js.map +1 -1
  31. package/dist/lib/plugins/vite-plugin-fs-router-typegen.js +2 -2
  32. package/dist/lib/plugins/vite-plugin-fs-router-typegen.js.map +1 -1
  33. package/dist/lib/plugins/vite-plugin-rsc-entries.js +2 -2
  34. package/dist/lib/plugins/vite-plugin-rsc-entries.js.map +1 -1
  35. package/dist/lib/plugins/vite-plugin-rsc-index.js +3 -3
  36. package/dist/lib/plugins/vite-plugin-rsc-index.js.map +1 -1
  37. package/dist/lib/plugins/vite-plugin-rsc-managed.d.ts +5 -0
  38. package/dist/lib/plugins/vite-plugin-rsc-managed.js +10 -8
  39. package/dist/lib/plugins/vite-plugin-rsc-managed.js.map +1 -1
  40. package/dist/lib/plugins/vite-plugin-rsc-resolve-rsdw.d.ts +2 -0
  41. package/dist/lib/plugins/vite-plugin-rsc-resolve-rsdw.js +14 -0
  42. package/dist/lib/plugins/vite-plugin-rsc-resolve-rsdw.js.map +1 -0
  43. package/dist/lib/plugins/vite-plugin-rsc-transform.d.ts +3 -0
  44. package/dist/lib/plugins/vite-plugin-rsc-transform.js +3 -2
  45. package/dist/lib/plugins/vite-plugin-rsc-transform.js.map +1 -1
  46. package/dist/lib/renderers/html.d.ts +1 -0
  47. package/dist/lib/renderers/html.js +4 -3
  48. package/dist/lib/renderers/html.js.map +1 -1
  49. package/dist/main.d.ts +1 -1
  50. package/dist/main.js +1 -1
  51. package/dist/main.js.map +1 -1
  52. package/dist/main.react-server.d.ts +1 -1
  53. package/dist/main.react-server.js +1 -1
  54. package/dist/main.react-server.js.map +1 -1
  55. package/dist/minimal/client.d.ts +2 -8
  56. package/dist/minimal/client.js +6 -9
  57. package/dist/minimal/client.js.map +1 -1
  58. package/dist/router/client.d.ts +13 -5
  59. package/dist/router/client.js +110 -38
  60. package/dist/router/client.js.map +1 -1
  61. package/dist/router/common.d.ts +2 -0
  62. package/dist/router/common.js +15 -1
  63. package/dist/router/common.js.map +1 -1
  64. package/dist/router/create-pages.js +49 -17
  65. package/dist/router/create-pages.js.map +1 -1
  66. package/dist/router/define-router.d.ts +13 -4
  67. package/dist/router/define-router.js +102 -50
  68. package/dist/router/define-router.js.map +1 -1
  69. package/dist/types.d.js +1 -0
  70. package/dist/types.d.js.map +1 -1
  71. package/dist/unstable_hono.d.ts +1 -1
  72. package/package.json +13 -13
package/README.md CHANGED
@@ -27,7 +27,7 @@ Start a new Waku project with the `create` command for your preferred package ma
27
27
  npm create waku@latest
28
28
  ```
29
29
 
30
- **Node.js version requirement:** `^24.0.0` or `^22.7.0` or `^20.8.0`
30
+ **Node.js version requirement:** `^24.0.0` or `^22.12.0` or `^20.19.0`
31
31
 
32
32
  ## Rendering
33
33
 
package/dist/cli.js CHANGED
@@ -11,7 +11,7 @@ import { serveStatic } from '@hono/node-server/serve-static';
11
11
  import * as dotenv from 'dotenv';
12
12
  import { serverEngine } from './lib/hono/engine.js';
13
13
  import { build } from './lib/builder/build.js';
14
- import { DIST_ENTRIES_JS, DIST_PUBLIC } from './lib/builder/constants.js';
14
+ import { DIST_SERVER_ENTRY_JS, DIST_PUBLIC } from './lib/builder/constants.js';
15
15
  const require = createRequire(new URL('.', import.meta.url));
16
16
  dotenv.config({
17
17
  path: [
@@ -93,18 +93,7 @@ if (values.version) {
93
93
  break;
94
94
  }
95
95
  }
96
- function catchUncaughtExceptionInDev() {
97
- // Workaround for https://github.com/wakujs/waku/issues/756
98
- process.on('uncaughtException', (err)=>{
99
- if (err.code === 'ERR_INVALID_STATE' && err.message.includes('Unable to enqueue')) {
100
- // ignore this error
101
- return;
102
- }
103
- throw err;
104
- });
105
- }
106
96
  async function runDev() {
107
- catchUncaughtExceptionInDev();
108
97
  const config = await loadConfig();
109
98
  const honoEnhancer = config.unstable_honoEnhancer ? await loadHonoEnhancer(config.unstable_honoEnhancer) : (fn)=>fn;
110
99
  const createApp = (app)=>{
@@ -144,7 +133,7 @@ async function runStart() {
144
133
  const config = await loadConfig();
145
134
  const { distDir = 'dist' } = config;
146
135
  const honoEnhancer = config.unstable_honoEnhancer ? await loadHonoEnhancer(config.unstable_honoEnhancer) : (fn)=>fn;
147
- const loadEntries = ()=>import(pathToFileURL(path.resolve(distDir, DIST_ENTRIES_JS)).toString());
136
+ const loadEntries = ()=>import(pathToFileURL(path.resolve(distDir, DIST_SERVER_ENTRY_JS)).toString());
148
137
  const createApp = (app)=>{
149
138
  if (values['experimental-compress']) {
150
139
  app.use(compress());
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["import path from 'node:path';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport { parseArgs } from 'node:util';\nimport { createRequire } from 'node:module';\nimport process from 'node:process';\nimport { Hono } from 'hono';\nimport { compress } from 'hono/compress';\nimport { serve } from '@hono/node-server';\nimport { serveStatic } from '@hono/node-server/serve-static';\nimport * as dotenv from 'dotenv';\n\nimport type { Config } from './config.js';\nimport { serverEngine } from './lib/hono/engine.js';\nimport { build } from './lib/builder/build.js';\nimport { DIST_ENTRIES_JS, DIST_PUBLIC } from './lib/builder/constants.js';\n\nconst require = createRequire(new URL('.', import.meta.url));\n\ndotenv.config({ path: ['.env.local', '.env'] });\n\nconst CONFIG_FILE = 'waku.config.ts'; // XXX only ts extension\n\nconst { values, positionals } = parseArgs({\n args: process.argv.slice(2),\n allowPositionals: true,\n options: {\n 'with-vercel': {\n type: 'boolean',\n },\n 'with-vercel-static': {\n type: 'boolean',\n },\n 'with-netlify': {\n type: 'boolean',\n },\n 'with-netlify-static': {\n type: 'boolean',\n },\n 'with-cloudflare': {\n type: 'boolean',\n },\n 'with-partykit': {\n type: 'boolean',\n },\n 'with-deno': {\n type: 'boolean',\n },\n 'with-aws-lambda': {\n type: 'boolean',\n },\n 'experimental-partial': {\n type: 'boolean',\n },\n 'experimental-compress': {\n type: 'boolean',\n },\n port: {\n type: 'string',\n short: 'p',\n },\n version: {\n type: 'boolean',\n short: 'v',\n },\n help: {\n type: 'boolean',\n short: 'h',\n },\n },\n});\n\nconst cmd = positionals[0];\n\nif (values.version) {\n const { version } = require('../package.json');\n console.log(version);\n} else if (values.help) {\n displayUsage();\n} else {\n switch (cmd) {\n case 'dev':\n await runDev();\n break;\n case 'build':\n await runBuild();\n break;\n case 'start':\n await runStart();\n break;\n default:\n if (cmd) {\n console.error('Unknown command:', cmd);\n }\n displayUsage();\n break;\n }\n}\n\nfunction catchUncaughtExceptionInDev() {\n // Workaround for https://github.com/wakujs/waku/issues/756\n process.on('uncaughtException', (err) => {\n if (\n (err as { code?: unknown }).code === 'ERR_INVALID_STATE' &&\n err.message.includes('Unable to enqueue')\n ) {\n // ignore this error\n return;\n }\n throw err;\n });\n}\n\nasync function runDev() {\n catchUncaughtExceptionInDev();\n const config = await loadConfig();\n const honoEnhancer: HonoEnhancer = config.unstable_honoEnhancer\n ? await loadHonoEnhancer(config.unstable_honoEnhancer)\n : (fn) => fn;\n const createApp = (app: Hono) => {\n if (values['experimental-compress']) {\n app.use(compress());\n }\n app.use(\n serverEngine({\n cmd: 'dev',\n config,\n env: process.env as any,\n unstable_onError: new Set(),\n }),\n );\n app.notFound((c) => {\n // FIXME can we avoid hardcoding the public path?\n const file = path.join('public', '404.html');\n if (existsSync(file)) {\n return c.html(readFileSync(file, 'utf8'), 404);\n }\n return c.text('404 Not Found', 404);\n });\n return app;\n };\n const port = parseInt(values.port || '3000', 10);\n await startServer(honoEnhancer(createApp)(new Hono()), port);\n}\n\nasync function runBuild() {\n const config = await loadConfig();\n process.env.NODE_ENV = 'production';\n await build({\n config,\n env: process.env as any,\n partial: !!values['experimental-partial'],\n deploy:\n ((values['with-vercel'] ?? !!process.env.VERCEL)\n ? values['with-vercel-static']\n ? 'vercel-static'\n : 'vercel-serverless'\n : undefined) ||\n ((values['with-netlify'] ?? !!process.env.NETLIFY)\n ? values['with-netlify-static']\n ? 'netlify-static'\n : 'netlify-functions'\n : undefined) ||\n (values['with-cloudflare'] ? 'cloudflare' : undefined) ||\n (values['with-partykit'] ? 'partykit' : undefined) ||\n (values['with-deno'] ? 'deno' : undefined) ||\n (values['with-aws-lambda'] ? 'aws-lambda' : undefined),\n });\n}\n\nasync function runStart() {\n const config = await loadConfig();\n const { distDir = 'dist' } = config;\n const honoEnhancer: HonoEnhancer = config.unstable_honoEnhancer\n ? await loadHonoEnhancer(config.unstable_honoEnhancer)\n : (fn) => fn;\n const loadEntries = () =>\n import(pathToFileURL(path.resolve(distDir, DIST_ENTRIES_JS)).toString());\n const createApp = (app: Hono) => {\n if (values['experimental-compress']) {\n app.use(compress());\n }\n app.use(serveStatic({ root: path.join(distDir, DIST_PUBLIC) }));\n app.use(\n serverEngine({\n cmd: 'start',\n loadEntries,\n env: process.env as any,\n unstable_onError: new Set(),\n }),\n );\n app.notFound((c) => {\n // FIXME better implementation using node stream?\n const file = path.join(distDir, DIST_PUBLIC, '404.html');\n if (existsSync(file)) {\n return c.html(readFileSync(file, 'utf8'), 404);\n }\n return c.text('404 Not Found', 404);\n });\n return app;\n };\n const port = parseInt(values.port || '8080', 10);\n await startServer(honoEnhancer(createApp)(new Hono()), port);\n}\n\nfunction startServer(app: Hono, port: number) {\n return new Promise<void>((resolve, reject) => {\n const server = serve({ ...app, port }, () => {\n console.log(`ready: Listening on http://localhost:${port}/`);\n resolve();\n });\n server.on('error', (err: NodeJS.ErrnoException) => {\n if (err.code === 'EADDRINUSE') {\n console.log(\n `warn: Port ${port} is in use, trying ${port + 1} instead.`,\n );\n startServer(app, port + 1)\n .then(resolve)\n .catch(reject);\n } else {\n console.error(`Failed to start server: ${err.message}`);\n }\n });\n });\n}\n\nfunction displayUsage() {\n console.log(`\nUsage: waku [options] <command>\n\nCommands:\n dev Start the development server\n build Build the application for production\n start Start the production server\n\nOptions:\n --with-vercel Output for Vercel on build\n --with-netlify Output for Netlify on build\n --with-cloudflare Output for Cloudflare on build\n --with-partykit Output for PartyKit on build\n --with-deno Output for Deno on build\n --with-aws-lambda Output for AWS Lambda on build\n -p, --port Port number for the server\n -v, --version Display the version number\n -h, --help Display this help message\n`);\n}\n\nasync function loadConfig(): Promise<Config> {\n if (!existsSync(CONFIG_FILE)) {\n return {};\n }\n const { loadServerModule } = await import('./lib/utils/vite-loader.js');\n const file = pathToFileURL(path.resolve(CONFIG_FILE)).toString();\n return (await loadServerModule<{ default: Config }>(file)).default;\n}\n\ntype HonoEnhancer = <Hono>(fn: (app: Hono) => Hono) => (app: Hono) => Hono;\n\nasync function loadHonoEnhancer(file: string): Promise<HonoEnhancer> {\n const { loadServerModule } = await import('./lib/utils/vite-loader.js');\n const fileUrl = pathToFileURL(\n path.resolve(CONFIG_FILE, '..', file),\n ).toString();\n return (await loadServerModule<{ default: HonoEnhancer }>(fileUrl)).default;\n}\n"],"names":["path","existsSync","readFileSync","pathToFileURL","parseArgs","createRequire","process","Hono","compress","serve","serveStatic","dotenv","serverEngine","build","DIST_ENTRIES_JS","DIST_PUBLIC","require","URL","url","config","CONFIG_FILE","values","positionals","args","argv","slice","allowPositionals","options","type","port","short","version","help","cmd","console","log","displayUsage","runDev","runBuild","runStart","error","catchUncaughtExceptionInDev","on","err","code","message","includes","loadConfig","honoEnhancer","unstable_honoEnhancer","loadHonoEnhancer","fn","createApp","app","use","env","unstable_onError","Set","notFound","c","file","join","html","text","parseInt","startServer","NODE_ENV","partial","deploy","VERCEL","undefined","NETLIFY","distDir","loadEntries","resolve","toString","root","Promise","reject","server","then","catch","loadServerModule","default","fileUrl"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/cli.ts"],"sourcesContent":["import path from 'node:path';\nimport { existsSync, readFileSync } from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport { parseArgs } from 'node:util';\nimport { createRequire } from 'node:module';\nimport process from 'node:process';\nimport { Hono } from 'hono';\nimport { compress } from 'hono/compress';\nimport { serve } from '@hono/node-server';\nimport { serveStatic } from '@hono/node-server/serve-static';\nimport * as dotenv from 'dotenv';\n\nimport type { Config } from './config.js';\nimport { serverEngine } from './lib/hono/engine.js';\nimport { build } from './lib/builder/build.js';\nimport { DIST_SERVER_ENTRY_JS, DIST_PUBLIC } from './lib/builder/constants.js';\n\nconst require = createRequire(new URL('.', import.meta.url));\n\ndotenv.config({ path: ['.env.local', '.env'] });\n\nconst CONFIG_FILE = 'waku.config.ts'; // XXX only ts extension\n\nconst { values, positionals } = parseArgs({\n args: process.argv.slice(2),\n allowPositionals: true,\n options: {\n 'with-vercel': {\n type: 'boolean',\n },\n 'with-vercel-static': {\n type: 'boolean',\n },\n 'with-netlify': {\n type: 'boolean',\n },\n 'with-netlify-static': {\n type: 'boolean',\n },\n 'with-cloudflare': {\n type: 'boolean',\n },\n 'with-partykit': {\n type: 'boolean',\n },\n 'with-deno': {\n type: 'boolean',\n },\n 'with-aws-lambda': {\n type: 'boolean',\n },\n 'experimental-partial': {\n type: 'boolean',\n },\n 'experimental-compress': {\n type: 'boolean',\n },\n port: {\n type: 'string',\n short: 'p',\n },\n version: {\n type: 'boolean',\n short: 'v',\n },\n help: {\n type: 'boolean',\n short: 'h',\n },\n },\n});\n\nconst cmd = positionals[0];\n\nif (values.version) {\n const { version } = require('../package.json');\n console.log(version);\n} else if (values.help) {\n displayUsage();\n} else {\n switch (cmd) {\n case 'dev':\n await runDev();\n break;\n case 'build':\n await runBuild();\n break;\n case 'start':\n await runStart();\n break;\n default:\n if (cmd) {\n console.error('Unknown command:', cmd);\n }\n displayUsage();\n break;\n }\n}\n\nasync function runDev() {\n const config = await loadConfig();\n const honoEnhancer: HonoEnhancer = config.unstable_honoEnhancer\n ? await loadHonoEnhancer(config.unstable_honoEnhancer)\n : (fn) => fn;\n const createApp = (app: Hono) => {\n if (values['experimental-compress']) {\n app.use(compress());\n }\n app.use(\n serverEngine({\n cmd: 'dev',\n config,\n env: process.env as any,\n unstable_onError: new Set(),\n }),\n );\n app.notFound((c) => {\n // FIXME can we avoid hardcoding the public path?\n const file = path.join('public', '404.html');\n if (existsSync(file)) {\n return c.html(readFileSync(file, 'utf8'), 404);\n }\n return c.text('404 Not Found', 404);\n });\n return app;\n };\n const port = parseInt(values.port || '3000', 10);\n await startServer(honoEnhancer(createApp)(new Hono()), port);\n}\n\nasync function runBuild() {\n const config = await loadConfig();\n process.env.NODE_ENV = 'production';\n await build({\n config,\n env: process.env as any,\n partial: !!values['experimental-partial'],\n deploy:\n ((values['with-vercel'] ?? !!process.env.VERCEL)\n ? values['with-vercel-static']\n ? 'vercel-static'\n : 'vercel-serverless'\n : undefined) ||\n ((values['with-netlify'] ?? !!process.env.NETLIFY)\n ? values['with-netlify-static']\n ? 'netlify-static'\n : 'netlify-functions'\n : undefined) ||\n (values['with-cloudflare'] ? 'cloudflare' : undefined) ||\n (values['with-partykit'] ? 'partykit' : undefined) ||\n (values['with-deno'] ? 'deno' : undefined) ||\n (values['with-aws-lambda'] ? 'aws-lambda' : undefined),\n });\n}\n\nasync function runStart() {\n const config = await loadConfig();\n const { distDir = 'dist' } = config;\n const honoEnhancer: HonoEnhancer = config.unstable_honoEnhancer\n ? await loadHonoEnhancer(config.unstable_honoEnhancer)\n : (fn) => fn;\n const loadEntries = () =>\n import(\n pathToFileURL(path.resolve(distDir, DIST_SERVER_ENTRY_JS)).toString()\n );\n const createApp = (app: Hono) => {\n if (values['experimental-compress']) {\n app.use(compress());\n }\n app.use(serveStatic({ root: path.join(distDir, DIST_PUBLIC) }));\n app.use(\n serverEngine({\n cmd: 'start',\n loadEntries,\n env: process.env as any,\n unstable_onError: new Set(),\n }),\n );\n app.notFound((c) => {\n // FIXME better implementation using node stream?\n const file = path.join(distDir, DIST_PUBLIC, '404.html');\n if (existsSync(file)) {\n return c.html(readFileSync(file, 'utf8'), 404);\n }\n return c.text('404 Not Found', 404);\n });\n return app;\n };\n const port = parseInt(values.port || '8080', 10);\n await startServer(honoEnhancer(createApp)(new Hono()), port);\n}\n\nfunction startServer(app: Hono, port: number) {\n return new Promise<void>((resolve, reject) => {\n const server = serve({ ...app, port }, () => {\n console.log(`ready: Listening on http://localhost:${port}/`);\n resolve();\n });\n server.on('error', (err: NodeJS.ErrnoException) => {\n if (err.code === 'EADDRINUSE') {\n console.log(\n `warn: Port ${port} is in use, trying ${port + 1} instead.`,\n );\n startServer(app, port + 1)\n .then(resolve)\n .catch(reject);\n } else {\n console.error(`Failed to start server: ${err.message}`);\n }\n });\n });\n}\n\nfunction displayUsage() {\n console.log(`\nUsage: waku [options] <command>\n\nCommands:\n dev Start the development server\n build Build the application for production\n start Start the production server\n\nOptions:\n --with-vercel Output for Vercel on build\n --with-netlify Output for Netlify on build\n --with-cloudflare Output for Cloudflare on build\n --with-partykit Output for PartyKit on build\n --with-deno Output for Deno on build\n --with-aws-lambda Output for AWS Lambda on build\n -p, --port Port number for the server\n -v, --version Display the version number\n -h, --help Display this help message\n`);\n}\n\nasync function loadConfig(): Promise<Config> {\n if (!existsSync(CONFIG_FILE)) {\n return {};\n }\n const { loadServerModule } = await import('./lib/utils/vite-loader.js');\n const file = pathToFileURL(path.resolve(CONFIG_FILE)).toString();\n return (await loadServerModule<{ default: Config }>(file)).default;\n}\n\ntype HonoEnhancer = <Hono>(fn: (app: Hono) => Hono) => (app: Hono) => Hono;\n\nasync function loadHonoEnhancer(file: string): Promise<HonoEnhancer> {\n const { loadServerModule } = await import('./lib/utils/vite-loader.js');\n const fileUrl = pathToFileURL(\n path.resolve(CONFIG_FILE, '..', file),\n ).toString();\n return (await loadServerModule<{ default: HonoEnhancer }>(fileUrl)).default;\n}\n"],"names":["path","existsSync","readFileSync","pathToFileURL","parseArgs","createRequire","process","Hono","compress","serve","serveStatic","dotenv","serverEngine","build","DIST_SERVER_ENTRY_JS","DIST_PUBLIC","require","URL","url","config","CONFIG_FILE","values","positionals","args","argv","slice","allowPositionals","options","type","port","short","version","help","cmd","console","log","displayUsage","runDev","runBuild","runStart","error","loadConfig","honoEnhancer","unstable_honoEnhancer","loadHonoEnhancer","fn","createApp","app","use","env","unstable_onError","Set","notFound","c","file","join","html","text","parseInt","startServer","NODE_ENV","partial","deploy","VERCEL","undefined","NETLIFY","distDir","loadEntries","resolve","toString","root","Promise","reject","server","on","err","code","then","catch","message","loadServerModule","default","fileUrl"],"mappings":"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"}
@@ -1,4 +1,8 @@
1
1
  import type { Config } from '../../config.js';
2
+ import type { ConfigDev } from '../config.js';
3
+ declare const waitForTasks: () => Promise<void>;
4
+ export { waitForTasks };
5
+ export declare const emitStaticFile: (rootDir: string, config: Pick<ConfigDev, "distDir">, pathname: string, body: Promise<ReadableStream> | string) => void;
2
6
  export declare function build(options: {
3
7
  config: Config;
4
8
  env?: Record<string, string>;
@@ -12,6 +12,7 @@ import { collectClientModules, renderRsc } from '../renderers/rsc.js';
12
12
  import { renderHtml } from '../renderers/html.js';
13
13
  import { SERVER_MODULE_MAP, CLIENT_MODULE_MAP, CLIENT_PREFIX } from '../middleware/handler.js';
14
14
  import { rscRsdwPlugin } from '../plugins/vite-plugin-rsc-rsdw.js';
15
+ import { rscResolveRsdwPlugin } from '../plugins/vite-plugin-rsc-resolve-rsdw.js';
15
16
  import { rscIndexPlugin } from '../plugins/vite-plugin-rsc-index.js';
16
17
  import { rscAnalyzePlugin } from '../plugins/vite-plugin-rsc-analyze.js';
17
18
  import { nonjsResolvePlugin } from '../plugins/vite-plugin-nonjs-resolve.js';
@@ -20,7 +21,7 @@ import { rscEntriesPlugin } from '../plugins/vite-plugin-rsc-entries.js';
20
21
  import { rscEnvPlugin } from '../plugins/vite-plugin-rsc-env.js';
21
22
  import { rscPrivatePlugin } from '../plugins/vite-plugin-rsc-private.js';
22
23
  import { rscManagedPlugin } from '../plugins/vite-plugin-rsc-managed.js';
23
- import { EXTENSIONS, DIST_ENTRIES_JS, DIST_PUBLIC, DIST_ASSETS, DIST_SSR } from './constants.js';
24
+ import { EXTENSIONS, DIST_SERVER_ENTRY_JS, DIST_PUBLIC, DIST_ASSETS, DIST_SSR } from './constants.js';
24
25
  import { deployVercelPlugin } from '../plugins/vite-plugin-deploy-vercel.js';
25
26
  import { deployNetlifyPlugin } from '../plugins/vite-plugin-deploy-netlify.js';
26
27
  import { deployCloudflarePlugin } from '../plugins/vite-plugin-deploy-cloudflare.js';
@@ -66,6 +67,7 @@ const analyzeEntries = async (rootDir, config)=>{
66
67
  await buildVite(extendViteConfig({
67
68
  mode: 'production',
68
69
  plugins: [
70
+ rscResolveRsdwPlugin(),
69
71
  rscAnalyzePlugin({
70
72
  isClient: false,
71
73
  clientFileMap,
@@ -182,6 +184,7 @@ const buildServerBundle = async (rootDir, env, config, clientEntryFiles, serverE
182
184
  clientEntryFiles,
183
185
  serverEntryFiles
184
186
  }),
187
+ rscResolveRsdwPlugin(),
185
188
  rscRsdwPlugin(),
186
189
  rscEnvPlugin({
187
190
  isDev: false,
@@ -429,7 +432,10 @@ const createTaskRunner = (limit)=>{
429
432
  };
430
433
  const WRITE_FILE_BATCH_SIZE = 2500;
431
434
  const { runTask, waitForTasks } = createTaskRunner(WRITE_FILE_BATCH_SIZE);
432
- const emitStaticFile = (rootDir, config, pathname, body)=>{
435
+ // This is exported for vite-rsc. https://github.com/wakujs/waku/pull/1493
436
+ export { waitForTasks };
437
+ // This is exported for vite-rsc. https://github.com/wakujs/waku/pull/1493
438
+ export const emitStaticFile = (rootDir, config, pathname, body)=>{
433
439
  const destFile = joinPath(rootDir, config.distDir, DIST_PUBLIC, extname(pathname) ? pathname : pathname === '/404' ? '404.html' // HACK special treatment for 404, better way?
434
440
  : pathname + '/index.html');
435
441
  // In partial mode, skip if the file already exists.
@@ -564,7 +570,7 @@ export async function build(options) {
564
570
  const env = options.env || {};
565
571
  const config = await resolveConfigDev(options.config);
566
572
  const rootDir = (await resolveViteConfig({}, 'build', 'production', 'production')).root;
567
- const distEntriesFile = joinPath(rootDir, config.distDir, DIST_ENTRIES_JS);
573
+ const distEntriesFile = joinPath(rootDir, config.distDir, DIST_SERVER_ENTRY_JS);
568
574
  const buildOptions = unstable_getBuildOptions();
569
575
  buildOptions.deploy = options.deploy;
570
576
  buildOptions.unstable_phase = 'analyzeEntries';
@@ -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 { INTERNAL_setAllEnv, unstable_getBuildOptions } from '../../server.js';\nimport type { EntriesPrd } from '../types.js';\nimport type { ConfigDev } from '../config.js';\nimport { resolveConfigDev } from '../config.js';\nimport type { PathSpec } from '../utils/path.js';\nimport { extname, filePathToFileURL, joinPath } from '../utils/path.js';\nimport { extendViteConfig } from '../utils/vite-config.js';\nimport {\n copyFile,\n createWriteStream,\n existsSync,\n mkdir,\n readdir,\n readFile,\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 EXTENSIONS,\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';\nimport { emitPlatformData } from './platform-data.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: ConfigDev) => [\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: ConfigDev) => {\n const clientFileMap = new Map<string, string>();\n const serverFileMap = new Map<string, string>();\n const serverPageFiles: Record<string, string> = {}; // page 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 serverPageFiles[joinPath(config.pagesDir, file.slice(0, -ext.length))] =\n joinPath(pagesDirPath, file);\n }\n }\n }\n await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n plugins: [\n rscAnalyzePlugin({ isClient: false, clientFileMap, serverFileMap }),\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: 'node20',\n rollupOptions: {\n onwarn,\n input: {\n ...SERVER_MODULE_MAP,\n ...serverPageFiles,\n },\n output: {\n inlineDynamicImports: false,\n },\n },\n },\n },\n config,\n 'build-analyze',\n ),\n );\n const clientAnalyzeOutput = await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n plugins: [\n rscAnalyzePlugin({ isClient: true, clientFileMap, serverFileMap }),\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: 'node20',\n rollupOptions: {\n onwarn,\n input: {\n ...CLIENT_MODULE_MAP,\n ...Object.fromEntries(\n Array.from(clientFileMap).map(([fname, hash], i) => [\n `${DIST_ASSETS}/rsc${i}-${hash}`,\n fname,\n ]),\n ),\n },\n output: {\n inlineDynamicImports: false,\n },\n },\n },\n },\n config,\n 'build-analyze',\n ),\n );\n if (!('output' in clientAnalyzeOutput)) {\n throw new Error('Unexpected vite client analyze output');\n }\n const clientEntryFiles: Record<string, string> = {};\n const clientEntryAliasMap = new Map<string, string>();\n let index = 0;\n for (const [fname, hash] of clientFileMap) {\n const entry = `${DIST_ASSETS}/rsc${index++}-${hash}`;\n clientEntryFiles[entry] = fname;\n for (const key of Object.keys(CLIENT_MODULE_MAP)) {\n if (\n clientAnalyzeOutput.output.find(\n (item) =>\n item.type === 'chunk' &&\n item.name === key &&\n item.moduleIds.includes(fname),\n )\n ) {\n clientEntryAliasMap.set(key, entry);\n }\n }\n }\n const serverEntryFiles: Record<string, string> = {};\n index = 0;\n for (const [fname, hash] of serverFileMap) {\n const entry = `${DIST_ASSETS}/rsf${index++}-${hash}`;\n serverEntryFiles[entry] = fname;\n }\n return {\n clientEntryFiles,\n serverEntryFiles,\n serverPageFiles,\n clientEntryAliasMap,\n };\n};\n\n// For RSC\nconst buildServerBundle = async (\n rootDir: string,\n env: Record<string, string>,\n config: ConfigDev,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverPageFiles: Record<string, string>,\n clientEntryAliasMap: Map<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({ ...config, addEntriesToInput: true }),\n rscEntriesPlugin({\n basePath: config.basePath,\n rscBase: config.rscBase,\n middleware: config.middleware,\n rootDir,\n srcDir: config.srcDir,\n ssrDir: DIST_SSR,\n moduleMap: {\n ...SERVER_MODULE_MAP,\n ...Object.fromEntries(\n Object.entries(serverEntryFiles).map(([key, val]) => [\n `${key}.js`,\n val,\n ]),\n ),\n ...Object.fromEntries(\n Object.keys(CLIENT_MODULE_MAP).map((key) => [\n `${CLIENT_PREFIX}${key}`,\n `./${DIST_SSR}/${clientEntryAliasMap.get(key) || 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 },\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: 'node20',\n outDir: joinPath(rootDir, config.distDir),\n rollupOptions: {\n onwarn,\n input: {\n ...clientEntryFiles,\n ...serverEntryFiles,\n ...SERVER_MODULE_MAP,\n ...serverPageFiles,\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 const serverAssets = serverBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' ? [fileName] : [],\n );\n return { serverAssets };\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: ConfigDev,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverAssets: string[],\n partial: boolean,\n) => {\n const cssAssets = serverAssets.filter((fileName) =>\n fileName.endsWith('.css'),\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: 'node20',\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[chunkInfo.name as never] ||\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: ConfigDev,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverAssets: string[],\n partial: boolean,\n) => {\n const nonJsAssets = serverAssets.filter(\n (fileName) => !fileName.endsWith('.js'),\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 const clientAssets = clientBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' ? [fileName] : [],\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 copyFile(from, to);\n }\n return { clientAssets };\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: ConfigDev,\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: ConfigDev,\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 new Set(),\n options?.moduleIdCallback,\n ),\n renderHtml: async (\n elements: Record<string, unknown>,\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 new Set(),\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 let distEntriesFileContent = await readFile(distEntriesFile, {\n encoding: 'utf8',\n });\n distEntriesFileContent = distEntriesFileContent.replace(\n 'globalThis.__WAKU_DEFAULT_HTML_HEAD__',\n JSON.stringify(defaultHtmlHead),\n );\n distEntriesFileContent = distEntriesFileContent.replace(\n 'globalThis.__WAKU_DYNAMIC_HTML_PATHS__',\n JSON.stringify(dynamicHtmlPaths),\n );\n distEntriesFileContent = distEntriesFileContent.replace(\n 'globalThis.__WAKU_PUBLIC_INDEX_HTML__',\n JSON.stringify(defaultHtmlStr),\n );\n await writeFile(distEntriesFile, distEntriesFileContent);\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: ConfigDev) => {\n const DUMMY = 'dummy-entry';\n await buildVite(\n extendViteConfig(\n {\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 config,\n 'build-deploy',\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 resolveConfigDev(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 buildOptions = unstable_getBuildOptions();\n buildOptions.deploy = options.deploy;\n\n buildOptions.unstable_phase = 'analyzeEntries';\n const {\n clientEntryFiles,\n serverEntryFiles,\n serverPageFiles,\n clientEntryAliasMap,\n } = await analyzeEntries(rootDir, config);\n buildOptions.unstable_phase = 'buildServerBundle';\n const { serverAssets } = await buildServerBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverPageFiles,\n clientEntryAliasMap,\n !!options.partial,\n );\n buildOptions.unstable_phase = 'buildSsrBundle';\n await buildSsrBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverAssets,\n !!options.partial,\n );\n buildOptions.unstable_phase = 'buildClientBundle';\n const { clientAssets } = await buildClientBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverAssets,\n !!options.partial,\n );\n delete buildOptions.unstable_phase;\n\n const distEntries: EntriesPrd = await import(\n filePathToFileURL(distEntriesFile)\n );\n\n INTERNAL_setAllEnv(env);\n const cssAssets = clientAssets.filter((fileName) =>\n fileName.endsWith('.css'),\n );\n buildOptions.unstable_phase = 'emitStaticFiles';\n await emitStaticFiles(\n rootDir,\n config,\n distEntriesFile,\n distEntries,\n cssAssets,\n );\n\n buildOptions.unstable_phase = 'buildDeploy';\n await buildDeploy(rootDir, config);\n delete buildOptions.unstable_phase;\n\n if (existsSync(distEntriesFile)) {\n await emitPlatformData(joinPath(rootDir, config.distDir));\n }\n}\n"],"names":["Readable","pipeline","build","buildVite","resolveConfig","resolveViteConfig","viteReact","INTERNAL_setAllEnv","unstable_getBuildOptions","resolveConfigDev","extname","filePathToFileURL","joinPath","extendViteConfig","copyFile","createWriteStream","existsSync","mkdir","readdir","readFile","unlink","writeFile","encodeRscPath","generatePrefetchCode","collectClientModules","renderRsc","renderHtml","SERVER_MODULE_MAP","CLIENT_MODULE_MAP","CLIENT_PREFIX","rscRsdwPlugin","rscIndexPlugin","rscAnalyzePlugin","nonjsResolvePlugin","rscTransformPlugin","rscEntriesPlugin","rscEnvPlugin","rscPrivatePlugin","rscManagedPlugin","EXTENSIONS","DIST_ENTRIES_JS","DIST_PUBLIC","DIST_ASSETS","DIST_SSR","deployVercelPlugin","deployNetlifyPlugin","deployCloudflarePlugin","deployDenoPlugin","deployPartykitPlugin","deployAwsLambdaPlugin","emitPlatformData","onwarn","warning","defaultHandler","code","test","message","loc","column","line","deployPlugins","config","analyzeEntries","rootDir","clientFileMap","Map","serverFileMap","serverPageFiles","pagesDirPath","srcDir","pagesDir","files","encoding","recursive","file","ext","includes","slice","length","mode","plugins","isClient","addEntriesToInput","ssr","target","resolve","conditions","externalConditions","noExternal","write","rollupOptions","input","output","inlineDynamicImports","clientAnalyzeOutput","addMainToInput","Object","fromEntries","Array","from","map","fname","hash","i","Error","clientEntryFiles","clientEntryAliasMap","index","entry","key","keys","find","item","type","name","moduleIds","set","serverEntryFiles","buildServerBundle","env","partial","serverBuildOutput","isBuild","isDev","basePath","rscBase","middleware","ssrDir","moduleMap","entries","val","get","esbuild","jsx","define","JSON","stringify","publicDir","emptyOutDir","ssrEmitAssets","outDir","distDir","serverAssets","flatMap","fileName","buildSsrBundle","cssAssets","filter","endsWith","base","entryFileNames","chunkInfo","buildClientBundle","nonJsAssets","asset","clientBuildOutput","preserveEntrySignatures","clientAssets","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","utils","elements","options","Set","moduleIdCallback","html","htmlHead","rscPath","headers","rscPath2pathname","unstable_generatePrefetchCode","rscPaths","unstable_collectClientModules","dynamicHtmlPathMap","buildConfigs","default","handleBuild","buildConfig","pathSpec","head","dynamicHtmlPaths","distEntriesFileContent","buildDeploy","DUMMY","resolveId","source","load","id","generateBundle","_options","bundle","forEach","value","warn","startsWith","root","buildOptions","deploy","unstable_phase"],"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 { INTERNAL_setAllEnv, unstable_getBuildOptions } from '../../server.js';\nimport type { EntriesPrd } from '../types.js';\nimport type { ConfigDev } from '../config.js';\nimport { resolveConfigDev } from '../config.js';\nimport type { PathSpec } from '../utils/path.js';\nimport { extname, filePathToFileURL, joinPath } from '../utils/path.js';\nimport { extendViteConfig } from '../utils/vite-config.js';\nimport {\n copyFile,\n createWriteStream,\n existsSync,\n mkdir,\n readdir,\n readFile,\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 { rscResolveRsdwPlugin } from '../plugins/vite-plugin-rsc-resolve-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 EXTENSIONS,\n DIST_SERVER_ENTRY_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';\nimport { emitPlatformData } from './platform-data.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: ConfigDev) => [\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: ConfigDev) => {\n const clientFileMap = new Map<string, string>();\n const serverFileMap = new Map<string, string>();\n const serverPageFiles: Record<string, string> = {}; // page 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 serverPageFiles[joinPath(config.pagesDir, file.slice(0, -ext.length))] =\n joinPath(pagesDirPath, file);\n }\n }\n }\n await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n plugins: [\n rscResolveRsdwPlugin(),\n rscAnalyzePlugin({ isClient: false, clientFileMap, serverFileMap }),\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: 'node20',\n rollupOptions: {\n onwarn,\n input: {\n ...SERVER_MODULE_MAP,\n ...serverPageFiles,\n },\n output: {\n inlineDynamicImports: false,\n },\n },\n },\n },\n config,\n 'build-analyze',\n ),\n );\n const clientAnalyzeOutput = await buildVite(\n extendViteConfig(\n {\n mode: 'production',\n plugins: [\n rscAnalyzePlugin({ isClient: true, clientFileMap, serverFileMap }),\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: 'node20',\n rollupOptions: {\n onwarn,\n input: {\n ...CLIENT_MODULE_MAP,\n ...Object.fromEntries(\n Array.from(clientFileMap).map(([fname, hash], i) => [\n `${DIST_ASSETS}/rsc${i}-${hash}`,\n fname,\n ]),\n ),\n },\n output: {\n inlineDynamicImports: false,\n },\n },\n },\n },\n config,\n 'build-analyze',\n ),\n );\n if (!('output' in clientAnalyzeOutput)) {\n throw new Error('Unexpected vite client analyze output');\n }\n const clientEntryFiles: Record<string, string> = {};\n const clientEntryAliasMap = new Map<string, string>();\n let index = 0;\n for (const [fname, hash] of clientFileMap) {\n const entry = `${DIST_ASSETS}/rsc${index++}-${hash}`;\n clientEntryFiles[entry] = fname;\n for (const key of Object.keys(CLIENT_MODULE_MAP)) {\n if (\n clientAnalyzeOutput.output.find(\n (item) =>\n item.type === 'chunk' &&\n item.name === key &&\n item.moduleIds.includes(fname),\n )\n ) {\n clientEntryAliasMap.set(key, entry);\n }\n }\n }\n const serverEntryFiles: Record<string, string> = {};\n index = 0;\n for (const [fname, hash] of serverFileMap) {\n const entry = `${DIST_ASSETS}/rsf${index++}-${hash}`;\n serverEntryFiles[entry] = fname;\n }\n return {\n clientEntryFiles,\n serverEntryFiles,\n serverPageFiles,\n clientEntryAliasMap,\n };\n};\n\n// For RSC\nconst buildServerBundle = async (\n rootDir: string,\n env: Record<string, string>,\n config: ConfigDev,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverPageFiles: Record<string, string>,\n clientEntryAliasMap: Map<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 rscResolveRsdwPlugin(),\n rscRsdwPlugin(),\n rscEnvPlugin({ isDev: false, env, config }),\n rscPrivatePlugin(config),\n rscManagedPlugin({ ...config, addEntriesToInput: true }),\n rscEntriesPlugin({\n basePath: config.basePath,\n rscBase: config.rscBase,\n middleware: config.middleware,\n rootDir,\n srcDir: config.srcDir,\n ssrDir: DIST_SSR,\n moduleMap: {\n ...SERVER_MODULE_MAP,\n ...Object.fromEntries(\n Object.entries(serverEntryFiles).map(([key, val]) => [\n `${key}.js`,\n val,\n ]),\n ),\n ...Object.fromEntries(\n Object.keys(CLIENT_MODULE_MAP).map((key) => [\n `${CLIENT_PREFIX}${key}`,\n `./${DIST_SSR}/${clientEntryAliasMap.get(key) || 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 },\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: 'node20',\n outDir: joinPath(rootDir, config.distDir),\n rollupOptions: {\n onwarn,\n input: {\n ...clientEntryFiles,\n ...serverEntryFiles,\n ...SERVER_MODULE_MAP,\n ...serverPageFiles,\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 const serverAssets = serverBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' ? [fileName] : [],\n );\n return { serverAssets };\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: ConfigDev,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverAssets: string[],\n partial: boolean,\n) => {\n const cssAssets = serverAssets.filter((fileName) =>\n fileName.endsWith('.css'),\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: 'node20',\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[chunkInfo.name as never] ||\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: ConfigDev,\n clientEntryFiles: Record<string, string>,\n serverEntryFiles: Record<string, string>,\n serverAssets: string[],\n partial: boolean,\n) => {\n const nonJsAssets = serverAssets.filter(\n (fileName) => !fileName.endsWith('.js'),\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 const clientAssets = clientBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' ? [fileName] : [],\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 copyFile(from, to);\n }\n return { clientAssets };\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\n// This is exported for vite-rsc. https://github.com/wakujs/waku/pull/1493\nexport { waitForTasks };\n\n// This is exported for vite-rsc. https://github.com/wakujs/waku/pull/1493\nexport const emitStaticFile = (\n rootDir: string,\n config: Pick<ConfigDev, 'distDir'>,\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: ConfigDev,\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 new Set(),\n options?.moduleIdCallback,\n ),\n renderHtml: async (\n elements: Record<string, unknown>,\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 new Set(),\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 let distEntriesFileContent = await readFile(distEntriesFile, {\n encoding: 'utf8',\n });\n distEntriesFileContent = distEntriesFileContent.replace(\n 'globalThis.__WAKU_DEFAULT_HTML_HEAD__',\n JSON.stringify(defaultHtmlHead),\n );\n distEntriesFileContent = distEntriesFileContent.replace(\n 'globalThis.__WAKU_DYNAMIC_HTML_PATHS__',\n JSON.stringify(dynamicHtmlPaths),\n );\n distEntriesFileContent = distEntriesFileContent.replace(\n 'globalThis.__WAKU_PUBLIC_INDEX_HTML__',\n JSON.stringify(defaultHtmlStr),\n );\n await writeFile(distEntriesFile, distEntriesFileContent);\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: ConfigDev) => {\n const DUMMY = 'dummy-entry';\n await buildVite(\n extendViteConfig(\n {\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 config,\n 'build-deploy',\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 resolveConfigDev(options.config);\n const rootDir = (\n await resolveViteConfig({}, 'build', 'production', 'production')\n ).root;\n const distEntriesFile = joinPath(\n rootDir,\n config.distDir,\n DIST_SERVER_ENTRY_JS,\n );\n\n const buildOptions = unstable_getBuildOptions();\n buildOptions.deploy = options.deploy;\n\n buildOptions.unstable_phase = 'analyzeEntries';\n const {\n clientEntryFiles,\n serverEntryFiles,\n serverPageFiles,\n clientEntryAliasMap,\n } = await analyzeEntries(rootDir, config);\n buildOptions.unstable_phase = 'buildServerBundle';\n const { serverAssets } = await buildServerBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverPageFiles,\n clientEntryAliasMap,\n !!options.partial,\n );\n buildOptions.unstable_phase = 'buildSsrBundle';\n await buildSsrBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverAssets,\n !!options.partial,\n );\n buildOptions.unstable_phase = 'buildClientBundle';\n const { clientAssets } = await buildClientBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverAssets,\n !!options.partial,\n );\n delete buildOptions.unstable_phase;\n\n const distEntries: EntriesPrd = await import(\n filePathToFileURL(distEntriesFile)\n );\n\n INTERNAL_setAllEnv(env);\n const cssAssets = clientAssets.filter((fileName) =>\n fileName.endsWith('.css'),\n );\n buildOptions.unstable_phase = 'emitStaticFiles';\n await emitStaticFiles(\n rootDir,\n config,\n distEntriesFile,\n distEntries,\n cssAssets,\n );\n\n buildOptions.unstable_phase = 'buildDeploy';\n await buildDeploy(rootDir, config);\n delete buildOptions.unstable_phase;\n\n if (existsSync(distEntriesFile)) {\n await emitPlatformData(joinPath(rootDir, config.distDir));\n }\n}\n"],"names":["Readable","pipeline","build","buildVite","resolveConfig","resolveViteConfig","viteReact","INTERNAL_setAllEnv","unstable_getBuildOptions","resolveConfigDev","extname","filePathToFileURL","joinPath","extendViteConfig","copyFile","createWriteStream","existsSync","mkdir","readdir","readFile","unlink","writeFile","encodeRscPath","generatePrefetchCode","collectClientModules","renderRsc","renderHtml","SERVER_MODULE_MAP","CLIENT_MODULE_MAP","CLIENT_PREFIX","rscRsdwPlugin","rscResolveRsdwPlugin","rscIndexPlugin","rscAnalyzePlugin","nonjsResolvePlugin","rscTransformPlugin","rscEntriesPlugin","rscEnvPlugin","rscPrivatePlugin","rscManagedPlugin","EXTENSIONS","DIST_SERVER_ENTRY_JS","DIST_PUBLIC","DIST_ASSETS","DIST_SSR","deployVercelPlugin","deployNetlifyPlugin","deployCloudflarePlugin","deployDenoPlugin","deployPartykitPlugin","deployAwsLambdaPlugin","emitPlatformData","onwarn","warning","defaultHandler","code","test","message","loc","column","line","deployPlugins","config","analyzeEntries","rootDir","clientFileMap","Map","serverFileMap","serverPageFiles","pagesDirPath","srcDir","pagesDir","files","encoding","recursive","file","ext","includes","slice","length","mode","plugins","isClient","addEntriesToInput","ssr","target","resolve","conditions","externalConditions","noExternal","write","rollupOptions","input","output","inlineDynamicImports","clientAnalyzeOutput","addMainToInput","Object","fromEntries","Array","from","map","fname","hash","i","Error","clientEntryFiles","clientEntryAliasMap","index","entry","key","keys","find","item","type","name","moduleIds","set","serverEntryFiles","buildServerBundle","env","partial","serverBuildOutput","isBuild","isDev","basePath","rscBase","middleware","ssrDir","moduleMap","entries","val","get","esbuild","jsx","define","JSON","stringify","publicDir","emptyOutDir","ssrEmitAssets","outDir","distDir","serverAssets","flatMap","fileName","buildSsrBundle","cssAssets","filter","endsWith","base","entryFileNames","chunkInfo","buildClientBundle","nonJsAssets","asset","clientBuildOutput","preserveEntrySignatures","clientAssets","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","utils","elements","options","Set","moduleIdCallback","html","htmlHead","rscPath","headers","rscPath2pathname","unstable_generatePrefetchCode","rscPaths","unstable_collectClientModules","dynamicHtmlPathMap","buildConfigs","default","handleBuild","buildConfig","pathSpec","head","dynamicHtmlPaths","distEntriesFileContent","buildDeploy","DUMMY","resolveId","source","load","id","generateBundle","_options","bundle","forEach","value","warn","startsWith","root","buildOptions","deploy","unstable_phase"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  export declare const EXTENSIONS: string[];
2
- export declare const SRC_MAIN = "main";
3
- export declare const SRC_ENTRIES = "entries";
4
- export declare const DIST_ENTRIES_JS = "entries.js";
2
+ export declare const SRC_CLIENT_ENTRY = "client-entry";
3
+ export declare const SRC_SERVER_ENTRY = "server-entry";
4
+ export declare const DIST_SERVER_ENTRY_JS = "server-entry.js";
5
5
  export declare const DIST_SERVE_JS = "serve.js";
6
6
  export declare const DIST_PUBLIC = "public";
7
7
  export declare const DIST_ASSETS = "assets";
@@ -6,11 +6,11 @@ export const EXTENSIONS = [
6
6
  '.mjs',
7
7
  '.cjs'
8
8
  ];
9
- export const SRC_MAIN = 'main';
10
- export const SRC_ENTRIES = 'entries';
9
+ export const SRC_CLIENT_ENTRY = 'client-entry';
10
+ export const SRC_SERVER_ENTRY = 'server-entry';
11
11
  // Some file and dir names for dist
12
12
  // We may change this in the future
13
- export const DIST_ENTRIES_JS = 'entries.js';
13
+ export const DIST_SERVER_ENTRY_JS = 'server-entry.js';
14
14
  export const DIST_SERVE_JS = 'serve.js';
15
15
  export const DIST_PUBLIC = 'public';
16
16
  export const DIST_ASSETS = 'assets';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/builder/constants.ts"],"sourcesContent":["export const EXTENSIONS = ['.js', '.ts', '.tsx', '.jsx', '.mjs', '.cjs'];\nexport const SRC_MAIN = 'main';\nexport const SRC_ENTRIES = 'entries';\n\n// Some file and dir names for dist\n// We may change this in the future\nexport const DIST_ENTRIES_JS = 'entries.js';\nexport const DIST_SERVE_JS = 'serve.js';\nexport const DIST_PUBLIC = 'public';\nexport const DIST_ASSETS = 'assets';\nexport const DIST_SSR = 'ssr';\n"],"names":["EXTENSIONS","SRC_MAIN","SRC_ENTRIES","DIST_ENTRIES_JS","DIST_SERVE_JS","DIST_PUBLIC","DIST_ASSETS","DIST_SSR"],"mappings":"AAAA,OAAO,MAAMA,aAAa;IAAC;IAAO;IAAO;IAAQ;IAAQ;IAAQ;CAAO,CAAC;AACzE,OAAO,MAAMC,WAAW,OAAO;AAC/B,OAAO,MAAMC,cAAc,UAAU;AAErC,mCAAmC;AACnC,mCAAmC;AACnC,OAAO,MAAMC,kBAAkB,aAAa;AAC5C,OAAO,MAAMC,gBAAgB,WAAW;AACxC,OAAO,MAAMC,cAAc,SAAS;AACpC,OAAO,MAAMC,cAAc,SAAS;AACpC,OAAO,MAAMC,WAAW,MAAM"}
1
+ {"version":3,"sources":["../../../src/lib/builder/constants.ts"],"sourcesContent":["export const EXTENSIONS = ['.js', '.ts', '.tsx', '.jsx', '.mjs', '.cjs'];\nexport const SRC_CLIENT_ENTRY = 'client-entry';\nexport const SRC_SERVER_ENTRY = 'server-entry';\n\n// Some file and dir names for dist\n// We may change this in the future\nexport const DIST_SERVER_ENTRY_JS = 'server-entry.js';\nexport const DIST_SERVE_JS = 'serve.js';\nexport const DIST_PUBLIC = 'public';\nexport const DIST_ASSETS = 'assets';\nexport const DIST_SSR = 'ssr';\n"],"names":["EXTENSIONS","SRC_CLIENT_ENTRY","SRC_SERVER_ENTRY","DIST_SERVER_ENTRY_JS","DIST_SERVE_JS","DIST_PUBLIC","DIST_ASSETS","DIST_SSR"],"mappings":"AAAA,OAAO,MAAMA,aAAa;IAAC;IAAO;IAAO;IAAQ;IAAQ;IAAQ;CAAO,CAAC;AACzE,OAAO,MAAMC,mBAAmB,eAAe;AAC/C,OAAO,MAAMC,mBAAmB,eAAe;AAE/C,mCAAmC;AACnC,mCAAmC;AACnC,OAAO,MAAMC,uBAAuB,kBAAkB;AACtD,OAAO,MAAMC,gBAAgB,WAAW;AACxC,OAAO,MAAMC,cAAc,SAAS;AACpC,OAAO,MAAMC,cAAc,SAAS;AACpC,OAAO,MAAMC,WAAW,MAAM"}
@@ -1,7 +1,7 @@
1
1
  import { INTERNAL_iterateSerializablePlatformData } from '../../server.js';
2
2
  import { joinPath } from '../utils/path.js';
3
3
  import { mkdir, readFile, writeFile } from '../utils/node-fs.js';
4
- import { DIST_ENTRIES_JS } from './constants.js';
4
+ import { DIST_SERVER_ENTRY_JS } from './constants.js';
5
5
  const DIST_PLATFORM_DATA = 'platform-data';
6
6
  export const emitPlatformData = async (distDir)=>{
7
7
  const keys = new Set();
@@ -13,7 +13,7 @@ export const emitPlatformData = async (distDir)=>{
13
13
  const destFile = joinPath(distDir, DIST_PLATFORM_DATA, key + '.js');
14
14
  await writeFile(destFile, `export default ${JSON.stringify(data)};`);
15
15
  }
16
- const distEntriesFile = joinPath(distDir, DIST_ENTRIES_JS);
16
+ const distEntriesFile = joinPath(distDir, DIST_SERVER_ENTRY_JS);
17
17
  let distEntriesFileContent = await readFile(distEntriesFile, {
18
18
  encoding: 'utf8'
19
19
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/builder/platform-data.ts"],"sourcesContent":["import { INTERNAL_iterateSerializablePlatformData } from '../../server.js';\nimport { joinPath } from '../utils/path.js';\nimport { mkdir, readFile, writeFile } from '../utils/node-fs.js';\nimport { DIST_ENTRIES_JS } from './constants.js';\n\nconst DIST_PLATFORM_DATA = 'platform-data';\n\nexport const emitPlatformData = async (distDir: string) => {\n const keys = new Set<string>();\n await mkdir(joinPath(distDir, DIST_PLATFORM_DATA), {\n recursive: true,\n });\n for (const [key, data] of INTERNAL_iterateSerializablePlatformData()) {\n keys.add(key);\n const destFile = joinPath(distDir, DIST_PLATFORM_DATA, key + '.js');\n await writeFile(destFile, `export default ${JSON.stringify(data)};`);\n }\n const distEntriesFile = joinPath(distDir, DIST_ENTRIES_JS);\n let distEntriesFileContent = await readFile(distEntriesFile, {\n encoding: 'utf8',\n });\n distEntriesFileContent = distEntriesFileContent.replace(\n 'globalThis.__WAKU_LOAD_PLATFORM_DATA__',\n `\n(key) => {\n switch (key) {\n ${Array.from(keys)\n .map(\n (k) =>\n `case '${k}': return import('./${DIST_PLATFORM_DATA}/${k}.js').then((m) => m.default);`,\n )\n .join('\\n')}\n default: throw new Error('Cannot find platform data: ' + key);\n }\n}\n`,\n );\n await writeFile(distEntriesFile, distEntriesFileContent);\n};\n"],"names":["INTERNAL_iterateSerializablePlatformData","joinPath","mkdir","readFile","writeFile","DIST_ENTRIES_JS","DIST_PLATFORM_DATA","emitPlatformData","distDir","keys","Set","recursive","key","data","add","destFile","JSON","stringify","distEntriesFile","distEntriesFileContent","encoding","replace","Array","from","map","k","join"],"mappings":"AAAA,SAASA,wCAAwC,QAAQ,kBAAkB;AAC3E,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,KAAK,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,sBAAsB;AACjE,SAASC,eAAe,QAAQ,iBAAiB;AAEjD,MAAMC,qBAAqB;AAE3B,OAAO,MAAMC,mBAAmB,OAAOC;IACrC,MAAMC,OAAO,IAAIC;IACjB,MAAMR,MAAMD,SAASO,SAASF,qBAAqB;QACjDK,WAAW;IACb;IACA,KAAK,MAAM,CAACC,KAAKC,KAAK,IAAIb,2CAA4C;QACpES,KAAKK,GAAG,CAACF;QACT,MAAMG,WAAWd,SAASO,SAASF,oBAAoBM,MAAM;QAC7D,MAAMR,UAAUW,UAAU,CAAC,eAAe,EAAEC,KAAKC,SAAS,CAACJ,MAAM,CAAC,CAAC;IACrE;IACA,MAAMK,kBAAkBjB,SAASO,SAASH;IAC1C,IAAIc,yBAAyB,MAAMhB,SAASe,iBAAiB;QAC3DE,UAAU;IACZ;IACAD,yBAAyBA,uBAAuBE,OAAO,CACrD,0CACA,CAAC;;;IAGD,EAAEC,MAAMC,IAAI,CAACd,MACVe,GAAG,CACF,CAACC,IACC,CAAC,MAAM,EAAEA,EAAE,oBAAoB,EAAEnB,mBAAmB,CAAC,EAAEmB,EAAE,6BAA6B,CAAC,EAE1FC,IAAI,CAAC,MAAM;;;;AAIlB,CAAC;IAEC,MAAMtB,UAAUc,iBAAiBC;AACnC,EAAE"}
1
+ {"version":3,"sources":["../../../src/lib/builder/platform-data.ts"],"sourcesContent":["import { INTERNAL_iterateSerializablePlatformData } from '../../server.js';\nimport { joinPath } from '../utils/path.js';\nimport { mkdir, readFile, writeFile } from '../utils/node-fs.js';\nimport { DIST_SERVER_ENTRY_JS } from './constants.js';\n\nconst DIST_PLATFORM_DATA = 'platform-data';\n\nexport const emitPlatformData = async (distDir: string) => {\n const keys = new Set<string>();\n await mkdir(joinPath(distDir, DIST_PLATFORM_DATA), {\n recursive: true,\n });\n for (const [key, data] of INTERNAL_iterateSerializablePlatformData()) {\n keys.add(key);\n const destFile = joinPath(distDir, DIST_PLATFORM_DATA, key + '.js');\n await writeFile(destFile, `export default ${JSON.stringify(data)};`);\n }\n const distEntriesFile = joinPath(distDir, DIST_SERVER_ENTRY_JS);\n let distEntriesFileContent = await readFile(distEntriesFile, {\n encoding: 'utf8',\n });\n distEntriesFileContent = distEntriesFileContent.replace(\n 'globalThis.__WAKU_LOAD_PLATFORM_DATA__',\n `\n(key) => {\n switch (key) {\n ${Array.from(keys)\n .map(\n (k) =>\n `case '${k}': return import('./${DIST_PLATFORM_DATA}/${k}.js').then((m) => m.default);`,\n )\n .join('\\n')}\n default: throw new Error('Cannot find platform data: ' + key);\n }\n}\n`,\n );\n await writeFile(distEntriesFile, distEntriesFileContent);\n};\n"],"names":["INTERNAL_iterateSerializablePlatformData","joinPath","mkdir","readFile","writeFile","DIST_SERVER_ENTRY_JS","DIST_PLATFORM_DATA","emitPlatformData","distDir","keys","Set","recursive","key","data","add","destFile","JSON","stringify","distEntriesFile","distEntriesFileContent","encoding","replace","Array","from","map","k","join"],"mappings":"AAAA,SAASA,wCAAwC,QAAQ,kBAAkB;AAC3E,SAASC,QAAQ,QAAQ,mBAAmB;AAC5C,SAASC,KAAK,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,sBAAsB;AACjE,SAASC,oBAAoB,QAAQ,iBAAiB;AAEtD,MAAMC,qBAAqB;AAE3B,OAAO,MAAMC,mBAAmB,OAAOC;IACrC,MAAMC,OAAO,IAAIC;IACjB,MAAMR,MAAMD,SAASO,SAASF,qBAAqB;QACjDK,WAAW;IACb;IACA,KAAK,MAAM,CAACC,KAAKC,KAAK,IAAIb,2CAA4C;QACpES,KAAKK,GAAG,CAACF;QACT,MAAMG,WAAWd,SAASO,SAASF,oBAAoBM,MAAM;QAC7D,MAAMR,UAAUW,UAAU,CAAC,eAAe,EAAEC,KAAKC,SAAS,CAACJ,MAAM,CAAC,CAAC;IACrE;IACA,MAAMK,kBAAkBjB,SAASO,SAASH;IAC1C,IAAIc,yBAAyB,MAAMhB,SAASe,iBAAiB;QAC3DE,UAAU;IACZ;IACAD,yBAAyBA,uBAAuBE,OAAO,CACrD,0CACA,CAAC;;;IAGD,EAAEC,MAAMC,IAAI,CAACd,MACVe,GAAG,CACF,CAACC,IACC,CAAC,MAAM,EAAEA,EAAE,oBAAoB,EAAEnB,mBAAmB,CAAC,EAAEmB,EAAE,6BAA6B,CAAC,EAE1FC,IAAI,CAAC,MAAM;;;;AAIlB,CAAC;IAEC,MAAMtB,UAAUc,iBAAiBC;AACnC,EAAE"}
@@ -1,10 +1,11 @@
1
1
  import { Readable, Writable } from 'node:stream';
2
2
  import { Server } from 'node:http';
3
+ import net from 'node:net';
3
4
  import { AsyncLocalStorage } from 'node:async_hooks';
4
5
  import { createServer as createViteServer } from 'vite';
5
6
  import viteReact from '@vitejs/plugin-react';
6
7
  import { resolveConfigDev } from '../config.js';
7
- import { SRC_MAIN, SRC_ENTRIES } from '../builder/constants.js';
8
+ import { SRC_CLIENT_ENTRY, SRC_SERVER_ENTRY } from '../builder/constants.js';
8
9
  import { decodeFilePathFromAbsolute, joinPath, fileURLToFilePath, filePathToFileURL } from '../utils/path.js';
9
10
  import { extendViteConfig } from '../utils/vite-config.js';
10
11
  import { patchReactRefresh } from '../plugins/patch-react-refresh.js';
@@ -83,6 +84,15 @@ const splitByLastEndTag = (input)=>{
83
84
  ];
84
85
  }
85
86
  };
87
+ async function getFreePort() {
88
+ return new Promise((resolve)=>{
89
+ const srv = net.createServer();
90
+ srv.listen(0, ()=>{
91
+ const port = srv.address().port;
92
+ srv.close(()=>resolve(port));
93
+ });
94
+ });
95
+ }
86
96
  const createMainViteServer = (env, configPromise, hotUpdateCallbackSet, resolvedMap)=>{
87
97
  const registerHotUpdateCallback = (fn)=>hotUpdateCallbackSet.add(fn);
88
98
  const vitePromise = configPromise.then(async (config)=>{
@@ -127,7 +137,7 @@ const createMainViteServer = (env, configPromise, hotUpdateCallbackSet, resolved
127
137
  'rsc-html-stream/server'
128
138
  ],
129
139
  entries: [
130
- `${config.srcDir}/${SRC_ENTRIES}.*`,
140
+ `${config.srcDir}/${SRC_SERVER_ENTRY}.*`,
131
141
  // HACK hard-coded "pages"
132
142
  `${config.srcDir}/pages/**/*.*`
133
143
  ]
@@ -144,7 +154,10 @@ const createMainViteServer = (env, configPromise, hotUpdateCallbackSet, resolved
144
154
  },
145
155
  appType: 'mpa',
146
156
  server: {
147
- middlewareMode: true
157
+ middlewareMode: true,
158
+ hmr: {
159
+ port: await getFreePort()
160
+ }
148
161
  }
149
162
  }, config, 'dev-main'));
150
163
  registerHotUpdateCallback((payload)=>hotUpdate(vite, payload));
@@ -278,7 +291,7 @@ const createRscViteServer = (env, configPromise, hotUpdateCallbackSet, resolvedM
278
291
  'waku'
279
292
  ],
280
293
  entries: [
281
- `${config.srcDir}/${SRC_ENTRIES}.*`,
294
+ `${config.srcDir}/${SRC_SERVER_ENTRY}.*`,
282
295
  // HACK hard-coded "pages"
283
296
  `${config.srcDir}/pages/**/*.*`
284
297
  ]
@@ -322,7 +335,7 @@ const createRscViteServer = (env, configPromise, hotUpdateCallbackSet, resolvedM
322
335
  };
323
336
  const loadEntriesDev = async (config)=>{
324
337
  const vite = await vitePromise;
325
- const filePath = joinPath(vite.config.root, config.srcDir, SRC_ENTRIES);
338
+ const filePath = joinPath(vite.config.root, config.srcDir, SRC_SERVER_ENTRY);
326
339
  return vite.ssrLoadModule(filePath);
327
340
  };
328
341
  const resolveClientEntry = (id, config, initialModules)=>{
@@ -395,8 +408,8 @@ export const devServer = (options)=>{
395
408
  }
396
409
  }));
397
410
  };
398
- const mainJs = `${config.basePath}${config.srcDir}/${SRC_MAIN}`;
399
- const entriesFile = `${vite.config.root}${config.basePath}${config.srcDir}/${SRC_ENTRIES}`;
411
+ const mainJs = `${config.basePath}${config.srcDir}/${SRC_CLIENT_ENTRY}`;
412
+ const entriesFile = `${vite.config.root}${config.basePath}${config.srcDir}/${SRC_SERVER_ENTRY}`;
400
413
  await processModule(mainJs);
401
414
  await processModule(entriesFile);
402
415
  initialModules = Array.from(vite.moduleGraph.idToModuleMap.values()).flatMap((m)=>m.file ? [