waku 0.21.24 → 0.22.0

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 (51) hide show
  1. package/README.md +3 -3
  2. package/dist/cli.js +7 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +7 -8
  5. package/dist/config.js.map +1 -1
  6. package/dist/lib/builder/build.js +8 -6
  7. package/dist/lib/builder/build.js.map +1 -1
  8. package/dist/lib/config.js +5 -5
  9. package/dist/lib/config.js.map +1 -1
  10. package/dist/lib/hono/engine.js +14 -7
  11. package/dist/lib/hono/engine.js.map +1 -1
  12. package/dist/lib/middleware/types.d.ts +0 -2
  13. package/dist/lib/middleware/types.js.map +1 -1
  14. package/dist/lib/plugins/vite-plugin-deploy-aws-lambda.d.ts +1 -0
  15. package/dist/lib/plugins/vite-plugin-deploy-aws-lambda.js +10 -4
  16. package/dist/lib/plugins/vite-plugin-deploy-aws-lambda.js.map +1 -1
  17. package/dist/lib/plugins/vite-plugin-deploy-cloudflare.d.ts +1 -0
  18. package/dist/lib/plugins/vite-plugin-deploy-cloudflare.js +10 -6
  19. package/dist/lib/plugins/vite-plugin-deploy-cloudflare.js.map +1 -1
  20. package/dist/lib/plugins/vite-plugin-deploy-deno.d.ts +1 -0
  21. package/dist/lib/plugins/vite-plugin-deploy-deno.js +10 -5
  22. package/dist/lib/plugins/vite-plugin-deploy-deno.js.map +1 -1
  23. package/dist/lib/plugins/vite-plugin-deploy-netlify.d.ts +1 -0
  24. package/dist/lib/plugins/vite-plugin-deploy-netlify.js +10 -5
  25. package/dist/lib/plugins/vite-plugin-deploy-netlify.js.map +1 -1
  26. package/dist/lib/plugins/vite-plugin-deploy-partykit.d.ts +1 -0
  27. package/dist/lib/plugins/vite-plugin-deploy-partykit.js +10 -6
  28. package/dist/lib/plugins/vite-plugin-deploy-partykit.js.map +1 -1
  29. package/dist/lib/plugins/vite-plugin-deploy-vercel.d.ts +1 -0
  30. package/dist/lib/plugins/vite-plugin-deploy-vercel.js +10 -5
  31. package/dist/lib/plugins/vite-plugin-deploy-vercel.js.map +1 -1
  32. package/dist/lib/plugins/vite-plugin-rsc-entries.d.ts +2 -0
  33. package/dist/lib/plugins/vite-plugin-rsc-entries.js +6 -5
  34. package/dist/lib/plugins/vite-plugin-rsc-entries.js.map +1 -1
  35. package/dist/lib/types.d.ts +4 -2
  36. package/dist/lib/types.js.map +1 -1
  37. package/dist/main.d.ts +1 -1
  38. package/dist/main.js +1 -1
  39. package/dist/main.js.map +1 -1
  40. package/dist/main.react-server.d.ts +1 -1
  41. package/dist/main.react-server.js +1 -1
  42. package/dist/main.react-server.js.map +1 -1
  43. package/dist/router/client.d.ts +1 -1
  44. package/dist/router/client.js +12 -4
  45. package/dist/router/client.js.map +1 -1
  46. package/dist/router/create-pages.js +0 -4
  47. package/dist/router/create-pages.js.map +1 -1
  48. package/dist/server.d.ts +1 -1
  49. package/dist/server.js +1 -1
  50. package/dist/server.js.map +1 -1
  51. package/package.json +12 -12
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:** `^22.7.0` or `^20.8.0` or `^18.17.0`
30
+ **Node.js version requirement:** `^22.7.0` or `^20.8.0`
31
31
 
32
32
  ## Rendering
33
33
 
@@ -544,7 +544,7 @@ The `router` object has two properties related to the current route: `path` (str
544
544
  ```tsx
545
545
  'use client';
546
546
 
547
- import { useRouter_UNSTABLE as useRouter } from 'waku';
547
+ import { useRouter } from 'waku';
548
548
 
549
549
  export const Component = () => {
550
550
  const { path, query } = useRouter();
@@ -577,7 +577,7 @@ The `router` object also contains several methods for programmatic navigation:
577
577
  ```tsx
578
578
  'use client';
579
579
 
580
- import { useRouter_UNSTABLE as useRouter } from 'waku';
580
+ import { useRouter } from 'waku';
581
581
 
582
582
  export const Component = () => {
583
583
  const router = useRouter();
package/dist/cli.js CHANGED
@@ -94,7 +94,7 @@ if (values.version) {
94
94
  }
95
95
  async function runDev() {
96
96
  const config = await loadConfig();
97
- const honoEnhancer = config.unstable_honoEnhancer || ((createApp)=>createApp);
97
+ const honoEnhancer = config.unstable_honoEnhancer ? await loadHonoEnhancer(config.unstable_honoEnhancer) : (fn)=>fn;
98
98
  const createApp = (app)=>{
99
99
  if (values['experimental-compress']) {
100
100
  app.use(compress());
@@ -131,7 +131,7 @@ async function runBuild() {
131
131
  async function runStart() {
132
132
  const config = await loadConfig();
133
133
  const { distDir = 'dist' } = config;
134
- const honoEnhancer = config.unstable_honoEnhancer || ((createApp)=>createApp);
134
+ const honoEnhancer = config.unstable_honoEnhancer ? await loadHonoEnhancer(config.unstable_honoEnhancer) : (fn)=>fn;
135
135
  const loadEntries = ()=>import(pathToFileURL(path.resolve(distDir, DIST_ENTRIES_JS)).toString());
136
136
  const createApp = (app)=>{
137
137
  if (values['experimental-compress']) {
@@ -207,5 +207,10 @@ async function loadConfig() {
207
207
  const file = pathToFileURL(path.resolve(CONFIG_FILE)).toString();
208
208
  return (await loadServerModule(file)).default;
209
209
  }
210
+ async function loadHonoEnhancer(file) {
211
+ const { loadServerModule } = await import('./lib/utils/vite-loader.js');
212
+ const fileUrl = pathToFileURL(path.resolve(CONFIG_FILE, '..', file)).toString();
213
+ return (await loadServerModule(fileUrl)).default;
214
+ }
210
215
 
211
216
  //# sourceMappingURL=cli.js.map
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 { 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\nasync function runDev() {\n const config = await loadConfig();\n const honoEnhancer =\n config.unstable_honoEnhancer || ((createApp) => createApp);\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 =\n config.unstable_honoEnhancer || ((createApp) => createApp);\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"],"names":["path","existsSync","readFileSync","pathToFileURL","parseArgs","createRequire","Hono","compress","serve","serveStatic","dotenv","serverEngine","build","DIST_ENTRIES_JS","DIST_PUBLIC","require","URL","url","config","CONFIG_FILE","values","positionals","args","process","argv","slice","allowPositionals","options","type","port","short","version","help","cmd","console","log","displayUsage","runDev","runBuild","runStart","error","loadConfig","honoEnhancer","unstable_honoEnhancer","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"],"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 { 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\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(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","Hono","compress","serve","serveStatic","dotenv","serverEngine","build","DIST_ENTRIES_JS","DIST_PUBLIC","require","URL","url","config","CONFIG_FILE","values","positionals","args","process","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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"}
package/dist/config.d.ts CHANGED
@@ -43,20 +43,18 @@ export interface Config {
43
43
  /**
44
44
  * Middleware to use
45
45
  * Defaults to:
46
- * () => [
47
- * import('waku/middleware/context'),
48
- * import('waku/middleware/dev-server'),
49
- * import('waku/middleware/handler'),
46
+ * [
47
+ * 'waku/middleware/context',
48
+ * 'waku/middleware/dev-server',
49
+ * 'waku/middleware/handler',
50
50
  * ]
51
51
  */
52
- middleware?: () => Promise<{
53
- default: Middleware;
54
- }>[];
52
+ middleware?: string[];
55
53
  /**
56
54
  * Enhancer for Hono
57
55
  * Defaults to `undefined`
58
56
  */
59
- unstable_honoEnhancer?: (<Hono>(createApp: (app: Hono) => Hono) => (app: Hono) => Hono) | undefined;
57
+ unstable_honoEnhancer?: string | undefined;
60
58
  /**
61
59
  * Vite configuration options.
62
60
  * `common` can contains shared configs that are shallowly merged with other configs.
@@ -70,6 +68,7 @@ export interface Config {
70
68
  'build-server'?: () => UserConfig;
71
69
  'build-ssr'?: () => UserConfig;
72
70
  'build-client'?: () => UserConfig;
71
+ 'build-deploy'?: () => UserConfig;
73
72
  } | undefined;
74
73
  }
75
74
  export declare function defineConfig(config: Config): Config;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config.ts"],"sourcesContent":["import type { UserConfig } from 'vite';\nimport type { Middleware } from './lib/middleware/types.js';\n\nexport type { Middleware };\n\nexport interface Config {\n /**\n * The base path for serve HTTP.\n * Defaults to \"/\".\n * TODO https://github.com/wakujs/waku/issues/698\n */\n basePath?: string;\n /**\n * The source directory relative to root.\n * Defaults to \"src\".\n */\n srcDir?: string;\n /**\n * The dist directory relative to root.\n * This will be the folder to contain the built files.\n * Defaults to \"dist\".\n */\n distDir?: string;\n /**\n * The pages directory relative to srcDir.\n * Defaults to \"pages\".\n */\n pagesDir?: string;\n /**\n * The api directory inside pagesDir.\n * Defaults to \"api\".\n */\n apiDir?: string;\n /**\n * The private directory relative to root.\n * This folder will contain files that should be read only on the server.\n * Defaults to \"private\".\n */\n privateDir?: string;\n /**\n * Bse path for HTTP requests to indicate RSC requests.\n * Defaults to \"RSC\".\n */\n rscBase?: string;\n /**\n * Middleware to use\n * Defaults to:\n * () => [\n * import('waku/middleware/context'),\n * import('waku/middleware/dev-server'),\n * import('waku/middleware/handler'),\n * ]\n */\n middleware?: () => Promise<{ default: Middleware }>[];\n /**\n * Enhancer for Hono\n * Defaults to `undefined`\n */\n unstable_honoEnhancer?:\n | (<Hono>(createApp: (app: Hono) => Hono) => (app: Hono) => Hono)\n | undefined;\n /**\n * Vite configuration options.\n * `common` can contains shared configs that are shallowly merged with other configs.\n * Defaults to `undefined` if not provided.\n */\n unstable_viteConfigs?:\n | {\n common?: () => UserConfig;\n 'dev-main'?: () => UserConfig;\n 'dev-rsc'?: () => UserConfig;\n 'build-analyze'?: () => UserConfig;\n 'build-server'?: () => UserConfig;\n 'build-ssr'?: () => UserConfig;\n 'build-client'?: () => UserConfig;\n }\n | undefined;\n}\n\nexport function defineConfig(config: Config) {\n return config;\n}\n"],"names":["defineConfig","config"],"mappings":"AA+EA,OAAO,SAASA,aAAaC,MAAc;IACzC,OAAOA;AACT"}
1
+ {"version":3,"sources":["../src/config.ts"],"sourcesContent":["import type { UserConfig } from 'vite';\nimport type { Middleware } from './lib/middleware/types.js';\n\nexport type { Middleware };\n\nexport interface Config {\n /**\n * The base path for serve HTTP.\n * Defaults to \"/\".\n * TODO https://github.com/wakujs/waku/issues/698\n */\n basePath?: string;\n /**\n * The source directory relative to root.\n * Defaults to \"src\".\n */\n srcDir?: string;\n /**\n * The dist directory relative to root.\n * This will be the folder to contain the built files.\n * Defaults to \"dist\".\n */\n distDir?: string;\n /**\n * The pages directory relative to srcDir.\n * Defaults to \"pages\".\n */\n pagesDir?: string;\n /**\n * The api directory inside pagesDir.\n * Defaults to \"api\".\n */\n apiDir?: string;\n /**\n * The private directory relative to root.\n * This folder will contain files that should be read only on the server.\n * Defaults to \"private\".\n */\n privateDir?: string;\n /**\n * Bse path for HTTP requests to indicate RSC requests.\n * Defaults to \"RSC\".\n */\n rscBase?: string;\n /**\n * Middleware to use\n * Defaults to:\n * [\n * 'waku/middleware/context',\n * 'waku/middleware/dev-server',\n * 'waku/middleware/handler',\n * ]\n */\n middleware?: string[];\n /**\n * Enhancer for Hono\n * Defaults to `undefined`\n */\n unstable_honoEnhancer?: string | undefined;\n /**\n * Vite configuration options.\n * `common` can contains shared configs that are shallowly merged with other configs.\n * Defaults to `undefined` if not provided.\n */\n unstable_viteConfigs?:\n | {\n common?: () => UserConfig;\n 'dev-main'?: () => UserConfig;\n 'dev-rsc'?: () => UserConfig;\n 'build-analyze'?: () => UserConfig;\n 'build-server'?: () => UserConfig;\n 'build-ssr'?: () => UserConfig;\n 'build-client'?: () => UserConfig;\n 'build-deploy'?: () => UserConfig;\n }\n | undefined;\n}\n\nexport function defineConfig(config: Config) {\n return config;\n}\n"],"names":["defineConfig","config"],"mappings":"AA8EA,OAAO,SAASA,aAAaC,MAAc;IACzC,OAAOA;AACT"}
@@ -104,7 +104,7 @@ const analyzeEntries = async (rootDir, config)=>{
104
104
  build: {
105
105
  write: false,
106
106
  ssr: true,
107
- target: 'node18',
107
+ target: 'node20',
108
108
  rollupOptions: {
109
109
  onwarn,
110
110
  input: Object.fromEntries(moduleFileMap)
@@ -136,7 +136,7 @@ const analyzeEntries = async (rootDir, config)=>{
136
136
  build: {
137
137
  write: false,
138
138
  ssr: true,
139
- target: 'node18',
139
+ target: 'node20',
140
140
  rollupOptions: {
141
141
  onwarn,
142
142
  input: clientEntryFiles
@@ -184,6 +184,8 @@ const buildServerBundle = async (rootDir, env, config, clientEntryFiles, serverE
184
184
  rscEntriesPlugin({
185
185
  basePath: config.basePath,
186
186
  rscBase: config.rscBase,
187
+ middleware: config.middleware,
188
+ rootDir,
187
189
  srcDir: config.srcDir,
188
190
  ssrDir: DIST_SSR,
189
191
  moduleMap: {
@@ -229,7 +231,7 @@ const buildServerBundle = async (rootDir, env, config, clientEntryFiles, serverE
229
231
  emptyOutDir: !partial,
230
232
  ssr: true,
231
233
  ssrEmitAssets: true,
232
- target: 'node18',
234
+ target: 'node20',
233
235
  outDir: joinPath(rootDir, config.distDir),
234
236
  rollupOptions: {
235
237
  onwarn,
@@ -291,7 +293,7 @@ const buildSsrBundle = async (rootDir, env, config, clientEntryFiles, serverEntr
291
293
  build: {
292
294
  emptyOutDir: !partial,
293
295
  ssr: true,
294
- target: 'node18',
296
+ target: 'node20',
295
297
  outDir: joinPath(rootDir, config.distDir, DIST_SSR),
296
298
  rollupOptions: {
297
299
  onwarn,
@@ -499,7 +501,7 @@ const emitStaticFiles = async (rootDir, config, distEntriesFile, distEntries, cs
499
501
  // FIXME Is this a good approach? I wonder if there's something missing.
500
502
  const buildDeploy = async (rootDir, config)=>{
501
503
  const DUMMY = 'dummy-entry';
502
- await buildVite({
504
+ await buildVite(extendViteConfig({
503
505
  plugins: [
504
506
  {
505
507
  // FIXME This is too hacky. There must be a better way.
@@ -540,7 +542,7 @@ const buildDeploy = async (rootDir, config)=>{
540
542
  },
541
543
  outDir: joinPath(rootDir, config.distDir)
542
544
  }
543
- });
545
+ }, config, 'build-deploy'));
544
546
  };
545
547
  export async function build(options) {
546
548
  const env = options.env || {};
@@ -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 {\n decodeFilePathFromAbsolute,\n extname,\n filePathToFileURL,\n fileURLToFilePath,\n joinPath,\n} 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 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 clientFileMap = new Map<string, string>([\n // FIXME 'lib' should be the real hash\n [wakuClientDist, 'lib'],\n [wakuMinimalClientDist, 'lib'],\n ]);\n const serverFileMap = 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 clientFileMap,\n serverFileMap,\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 let clientEntryFiles = Object.fromEntries(\n Array.from(clientFileMap).map(([fname, hash], i) => [\n `${DIST_ASSETS}/rsc${i}-${hash}`,\n fname,\n ]),\n );\n 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: 'node18',\n rollupOptions: {\n onwarn,\n input: clientEntryFiles,\n },\n },\n },\n config,\n 'build-analyze',\n ),\n );\n clientEntryFiles = Object.fromEntries(\n Array.from(clientFileMap).map(([fname, hash], i) => [\n `${DIST_ASSETS}/rsc${i}-${hash}`,\n fname,\n ]),\n );\n const serverEntryFiles = Object.fromEntries(\n Array.from(serverFileMap).map(([fname, hash], i) => [\n `${DIST_ASSETS}/rsf${i}-${hash}`,\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: ConfigDev,\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 basePath: config.basePath,\n rscBase: config.rscBase,\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: ConfigDev,\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: ConfigDev,\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 copyFile(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: 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_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 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 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 { clientEntryFiles, serverEntryFiles, serverModuleFiles } =\n await analyzeEntries(rootDir, config);\n 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 buildOptions.unstable_phase = 'buildSsrBundle';\n await buildSsrBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverBuildOutput,\n !!options.partial,\n );\n 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 buildOptions.unstable_phase;\n\n const distEntries: EntriesPrd = await import(\n filePathToFileURL(distEntriesFile)\n );\n\n INTERNAL_setAllEnv(env);\n const cssAssets = clientBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' && fileName.endsWith('.css') ? [fileName] : [],\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","decodeFilePathFromAbsolute","extname","filePathToFileURL","fileURLToFilePath","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","wakuClientDist","url","wakuMinimalClientDist","clientFileMap","Map","serverFileMap","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","hash","i","addMainToInput","serverEntryFiles","serverModuleFiles","buildServerBundle","env","partial","serverBuildOutput","isBuild","isDev","basePath","rscBase","ssrDir","moduleMap","keys","key","esbuild","jsx","define","JSON","stringify","publicDir","emptyOutDir","ssrEmitAssets","outDir","distDir","Error","buildSsrBundle","cssAssets","output","flatMap","type","fileName","endsWith","base","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","utils","elements","options","Set","moduleIdCallback","html","htmlHead","rscPath","headers","rscPath2pathname","unstable_generatePrefetchCode","rscPaths","moduleIds","unstable_collectClientModules","dynamicHtmlPathMap","buildConfigs","default","handleBuild","buildConfig","pathSpec","head","dynamicHtmlPaths","distEntriesFileContent","buildDeploy","DUMMY","resolveId","source","load","id","generateBundle","_options","bundle","entries","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 {\n decodeFilePathFromAbsolute,\n extname,\n filePathToFileURL,\n fileURLToFilePath,\n joinPath,\n} 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 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 clientFileMap = new Map<string, string>([\n // FIXME 'lib' should be the real hash\n [wakuClientDist, 'lib'],\n [wakuMinimalClientDist, 'lib'],\n ]);\n const serverFileMap = 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 clientFileMap,\n serverFileMap,\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: 'node20',\n rollupOptions: {\n onwarn,\n input: Object.fromEntries(moduleFileMap),\n },\n },\n },\n config,\n 'build-analyze',\n ),\n );\n let clientEntryFiles = Object.fromEntries(\n Array.from(clientFileMap).map(([fname, hash], i) => [\n `${DIST_ASSETS}/rsc${i}-${hash}`,\n fname,\n ]),\n );\n 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: clientEntryFiles,\n },\n },\n },\n config,\n 'build-analyze',\n ),\n );\n clientEntryFiles = Object.fromEntries(\n Array.from(clientFileMap).map(([fname, hash], i) => [\n `${DIST_ASSETS}/rsc${i}-${hash}`,\n fname,\n ]),\n );\n const serverEntryFiles = Object.fromEntries(\n Array.from(serverFileMap).map(([fname, hash], i) => [\n `${DIST_ASSETS}/rsf${i}-${hash}`,\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: ConfigDev,\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 basePath: config.basePath,\n rscBase: config.rscBase,\n middleware: config.middleware,\n rootDir,\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: 'node20',\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: ConfigDev,\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: '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[\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: ConfigDev,\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 copyFile(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: 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_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 { clientEntryFiles, serverEntryFiles, serverModuleFiles } =\n await analyzeEntries(rootDir, config);\n 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 buildOptions.unstable_phase = 'buildSsrBundle';\n await buildSsrBundle(\n rootDir,\n env,\n config,\n clientEntryFiles,\n serverEntryFiles,\n serverBuildOutput,\n !!options.partial,\n );\n 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 buildOptions.unstable_phase;\n\n const distEntries: EntriesPrd = await import(\n filePathToFileURL(distEntriesFile)\n );\n\n INTERNAL_setAllEnv(env);\n const cssAssets = clientBuildOutput.output.flatMap(({ type, fileName }) =>\n type === 'asset' && fileName.endsWith('.css') ? [fileName] : [],\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","decodeFilePathFromAbsolute","extname","filePathToFileURL","fileURLToFilePath","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","wakuClientDist","url","wakuMinimalClientDist","clientFileMap","Map","serverFileMap","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","hash","i","addMainToInput","serverEntryFiles","serverModuleFiles","buildServerBundle","env","partial","serverBuildOutput","isBuild","isDev","basePath","rscBase","middleware","ssrDir","moduleMap","keys","key","esbuild","jsx","define","JSON","stringify","publicDir","emptyOutDir","ssrEmitAssets","outDir","distDir","Error","buildSsrBundle","cssAssets","output","flatMap","type","fileName","endsWith","base","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","utils","elements","options","Set","moduleIdCallback","html","htmlHead","rscPath","headers","rscPath2pathname","unstable_generatePrefetchCode","rscPaths","moduleIds","unstable_collectClientModules","dynamicHtmlPathMap","buildConfigs","default","handleBuild","buildConfig","pathSpec","head","dynamicHtmlPaths","distEntriesFileContent","buildDeploy","DUMMY","resolveId","source","load","id","generateBundle","_options","bundle","entries","forEach","value","warn","startsWith","root","buildOptions","deploy","unstable_phase"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- const DEFAULT_MIDDLEWARE = ()=>[
2
- import('waku/middleware/context'),
3
- import('waku/middleware/dev-server'),
4
- import('waku/middleware/handler')
5
- ];
1
+ const DEFAULT_MIDDLEWARE = [
2
+ 'waku/middleware/context',
3
+ 'waku/middleware/dev-server',
4
+ 'waku/middleware/handler'
5
+ ];
6
6
  // Keep async function for future extension
7
7
  export async function resolveConfigDev(config) {
8
8
  const configDev = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/config.ts"],"sourcesContent":["import type { Config } from '../config.js';\n\nexport type ConfigDev = Required<Config>;\n\nconst DEFAULT_MIDDLEWARE = () => [\n import('waku/middleware/context'),\n import('waku/middleware/dev-server'),\n import('waku/middleware/handler'),\n];\n\n// Keep async function for future extension\nexport async function resolveConfigDev(config: Config) {\n const configDev: ConfigDev = {\n basePath: '/',\n srcDir: 'src',\n distDir: 'dist',\n pagesDir: 'pages',\n apiDir: 'api',\n privateDir: 'private',\n rscBase: 'RSC',\n middleware: DEFAULT_MIDDLEWARE,\n unstable_honoEnhancer: undefined,\n unstable_viteConfigs: undefined,\n ...config,\n };\n return configDev;\n}\n\nexport type ConfigPrd = Pick<Required<Config>, 'basePath' | 'rscBase'>;\n"],"names":["DEFAULT_MIDDLEWARE","resolveConfigDev","config","configDev","basePath","srcDir","distDir","pagesDir","apiDir","privateDir","rscBase","middleware","unstable_honoEnhancer","undefined","unstable_viteConfigs"],"mappings":"AAIA,MAAMA,qBAAqB,IAAM;QAC/B,MAAM,CAAC;QACP,MAAM,CAAC;QACP,MAAM,CAAC;KACR;AAED,2CAA2C;AAC3C,OAAO,eAAeC,iBAAiBC,MAAc;IACnD,MAAMC,YAAuB;QAC3BC,UAAU;QACVC,QAAQ;QACRC,SAAS;QACTC,UAAU;QACVC,QAAQ;QACRC,YAAY;QACZC,SAAS;QACTC,YAAYX;QACZY,uBAAuBC;QACvBC,sBAAsBD;QACtB,GAAGX,MAAM;IACX;IACA,OAAOC;AACT"}
1
+ {"version":3,"sources":["../../src/lib/config.ts"],"sourcesContent":["import type { Config } from '../config.js';\n\nexport type ConfigDev = Required<Config>;\n\nconst DEFAULT_MIDDLEWARE = [\n 'waku/middleware/context',\n 'waku/middleware/dev-server',\n 'waku/middleware/handler',\n];\n\n// Keep async function for future extension\nexport async function resolveConfigDev(config: Config) {\n const configDev: ConfigDev = {\n basePath: '/',\n srcDir: 'src',\n distDir: 'dist',\n pagesDir: 'pages',\n apiDir: 'api',\n privateDir: 'private',\n rscBase: 'RSC',\n middleware: DEFAULT_MIDDLEWARE,\n unstable_honoEnhancer: undefined,\n unstable_viteConfigs: undefined,\n ...config,\n };\n return configDev;\n}\n\nexport type ConfigPrd = Pick<Required<Config>, 'basePath' | 'rscBase'>;\n"],"names":["DEFAULT_MIDDLEWARE","resolveConfigDev","config","configDev","basePath","srcDir","distDir","pagesDir","apiDir","privateDir","rscBase","middleware","unstable_honoEnhancer","undefined","unstable_viteConfigs"],"mappings":"AAIA,MAAMA,qBAAqB;IACzB;IACA;IACA;CACD;AAED,2CAA2C;AAC3C,OAAO,eAAeC,iBAAiBC,MAAc;IACnD,MAAMC,YAAuB;QAC3BC,UAAU;QACVC,QAAQ;QACRC,SAAS;QACTC,UAAU;QACVC,QAAQ;QACRC,YAAY;QACZC,SAAS;QACTC,YAAYX;QACZY,uBAAuBC;QACvBC,sBAAsBD;QACtB,GAAGX,MAAM;IACX;IACA,OAAOC;AACT"}
@@ -3,10 +3,8 @@ import { resolveConfigDev } from '../config.js';
3
3
  const HONO_CONTEXT = '__hono_context';
4
4
  // serverEngine returns hono middleware that runs Waku middleware.
5
5
  export const serverEngine = (options)=>{
6
- const entriesPromise = options.cmd === 'start' ? options.loadEntries() : 'Error: loadEntries are not available';
7
- const configPromise = options.cmd === 'start' ? entriesPromise.then((entries)=>// TODO eliminate loadConfig
8
- entries.loadConfig().then((config)=>resolveConfigDev(config))) : resolveConfigDev(options.config);
9
- const handlersPromise = configPromise.then((config)=>Promise.all(config.middleware().map(async (middleware)=>(await middleware).default(options))));
6
+ const middlewarePromise = options.cmd === 'start' ? options.loadEntries().then((entries)=>entries.loadMiddleware()) : resolveConfigDev(options.config).then((config)=>loadMiddlewareDev(config));
7
+ const handlersPromise = middlewarePromise.then((middlewareList)=>middlewareList.map((middleware)=>middleware.default(options)));
10
8
  return async (c, next)=>{
11
9
  const ctx = {
12
10
  req: {
@@ -16,9 +14,6 @@ export const serverEngine = (options)=>{
16
14
  headers: c.req.header()
17
15
  },
18
16
  res: {},
19
- context: {
20
- [HONO_CONTEXT]: c
21
- },
22
17
  data: {
23
18
  [HONO_CONTEXT]: c
24
19
  }
@@ -48,5 +43,17 @@ export const serverEngine = (options)=>{
48
43
  await next();
49
44
  };
50
45
  };
46
+ const DO_NOT_BUNDLE = '';
47
+ async function loadMiddlewareDev(configDev) {
48
+ const [{ resolve }, { pathToFileURL }, { loadServerModule }] = await Promise.all([
49
+ import(/* @vite-ignore */ DO_NOT_BUNDLE + 'node:path'),
50
+ import(/* @vite-ignore */ DO_NOT_BUNDLE + 'node:url'),
51
+ import(/* @vite-ignore */ DO_NOT_BUNDLE + '../utils/vite-loader.js')
52
+ ]);
53
+ return Promise.all(configDev.middleware.map(async (file)=>{
54
+ const idOrFileURL = file.startsWith('./') ? pathToFileURL(resolve(file)).toString() : file;
55
+ return loadServerModule(idOrFileURL);
56
+ }));
57
+ }
51
58
 
52
59
  //# sourceMappingURL=engine.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/hono/engine.ts"],"sourcesContent":["import type { MiddlewareHandler } from 'hono';\n\nimport { resolveConfigDev } from '../config.js';\nimport type { HandlerContext, MiddlewareOptions } from '../middleware/types.js';\n\n// Internal context key\nconst HONO_CONTEXT = '__hono_context';\n\n// serverEngine returns hono middleware that runs Waku middleware.\nexport const serverEngine = (options: MiddlewareOptions): MiddlewareHandler => {\n const entriesPromise =\n options.cmd === 'start'\n ? options.loadEntries()\n : ('Error: loadEntries are not available' as never);\n const configPromise =\n options.cmd === 'start'\n ? entriesPromise.then((entries) =>\n // TODO eliminate loadConfig\n entries.loadConfig().then((config) => resolveConfigDev(config)),\n )\n : resolveConfigDev(options.config);\n const handlersPromise = configPromise.then((config) =>\n Promise.all(\n config\n .middleware()\n .map(async (middleware) => (await middleware).default(options)),\n ),\n );\n return async (c, next) => {\n const ctx: HandlerContext = {\n req: {\n body: c.req.raw.body,\n url: new URL(c.req.url),\n method: c.req.method,\n headers: c.req.header(),\n },\n res: {},\n context: {\n [HONO_CONTEXT]: c,\n },\n data: {\n [HONO_CONTEXT]: c,\n },\n };\n const handlers = await handlersPromise;\n const run = async (index: number) => {\n if (index >= handlers.length) {\n return;\n }\n let alreadyCalled = false;\n await handlers[index]!(ctx, async () => {\n if (!alreadyCalled) {\n alreadyCalled = true;\n await run(index + 1);\n }\n });\n };\n await run(0);\n if (ctx.res.body || ctx.res.status) {\n const status = ctx.res.status || 200;\n const headers = ctx.res.headers || {};\n if (ctx.res.body) {\n return c.body(ctx.res.body, status as never, headers);\n }\n return c.body(null, status as never, headers);\n }\n await next();\n };\n};\n"],"names":["resolveConfigDev","HONO_CONTEXT","serverEngine","options","entriesPromise","cmd","loadEntries","configPromise","then","entries","loadConfig","config","handlersPromise","Promise","all","middleware","map","default","c","next","ctx","req","body","raw","url","URL","method","headers","header","res","context","data","handlers","run","index","length","alreadyCalled","status"],"mappings":"AAEA,SAASA,gBAAgB,QAAQ,eAAe;AAGhD,uBAAuB;AACvB,MAAMC,eAAe;AAErB,kEAAkE;AAClE,OAAO,MAAMC,eAAe,CAACC;IAC3B,MAAMC,iBACJD,QAAQE,GAAG,KAAK,UACZF,QAAQG,WAAW,KAClB;IACP,MAAMC,gBACJJ,QAAQE,GAAG,KAAK,UACZD,eAAeI,IAAI,CAAC,CAACC,UACnB,4BAA4B;QAC5BA,QAAQC,UAAU,GAAGF,IAAI,CAAC,CAACG,SAAWX,iBAAiBW,YAEzDX,iBAAiBG,QAAQQ,MAAM;IACrC,MAAMC,kBAAkBL,cAAcC,IAAI,CAAC,CAACG,SAC1CE,QAAQC,GAAG,CACTH,OACGI,UAAU,GACVC,GAAG,CAAC,OAAOD,aAAe,AAAC,CAAA,MAAMA,UAAS,EAAGE,OAAO,CAACd;IAG5D,OAAO,OAAOe,GAAGC;QACf,MAAMC,MAAsB;YAC1BC,KAAK;gBACHC,MAAMJ,EAAEG,GAAG,CAACE,GAAG,CAACD,IAAI;gBACpBE,KAAK,IAAIC,IAAIP,EAAEG,GAAG,CAACG,GAAG;gBACtBE,QAAQR,EAAEG,GAAG,CAACK,MAAM;gBACpBC,SAAST,EAAEG,GAAG,CAACO,MAAM;YACvB;YACAC,KAAK,CAAC;YACNC,SAAS;gBACP,CAAC7B,aAAa,EAAEiB;YAClB;YACAa,MAAM;gBACJ,CAAC9B,aAAa,EAAEiB;YAClB;QACF;QACA,MAAMc,WAAW,MAAMpB;QACvB,MAAMqB,MAAM,OAAOC;YACjB,IAAIA,SAASF,SAASG,MAAM,EAAE;gBAC5B;YACF;YACA,IAAIC,gBAAgB;YACpB,MAAMJ,QAAQ,CAACE,MAAM,CAAEd,KAAK;gBAC1B,IAAI,CAACgB,eAAe;oBAClBA,gBAAgB;oBAChB,MAAMH,IAAIC,QAAQ;gBACpB;YACF;QACF;QACA,MAAMD,IAAI;QACV,IAAIb,IAAIS,GAAG,CAACP,IAAI,IAAIF,IAAIS,GAAG,CAACQ,MAAM,EAAE;YAClC,MAAMA,SAASjB,IAAIS,GAAG,CAACQ,MAAM,IAAI;YACjC,MAAMV,UAAUP,IAAIS,GAAG,CAACF,OAAO,IAAI,CAAC;YACpC,IAAIP,IAAIS,GAAG,CAACP,IAAI,EAAE;gBAChB,OAAOJ,EAAEI,IAAI,CAACF,IAAIS,GAAG,CAACP,IAAI,EAAEe,QAAiBV;YAC/C;YACA,OAAOT,EAAEI,IAAI,CAAC,MAAMe,QAAiBV;QACvC;QACA,MAAMR;IACR;AACF,EAAE"}
1
+ {"version":3,"sources":["../../../src/lib/hono/engine.ts"],"sourcesContent":["import type { MiddlewareHandler } from 'hono';\n\nimport type { ConfigDev } from '../config.js';\nimport { resolveConfigDev } from '../config.js';\nimport type {\n HandlerContext,\n Middleware,\n MiddlewareOptions,\n} from '../middleware/types.js';\n\n// Internal context key\nconst HONO_CONTEXT = '__hono_context';\n\n// serverEngine returns hono middleware that runs Waku middleware.\nexport const serverEngine = (options: MiddlewareOptions): MiddlewareHandler => {\n const middlewarePromise: Promise<{ default: Middleware }[]> =\n options.cmd === 'start'\n ? options.loadEntries().then((entries) => entries.loadMiddleware())\n : resolveConfigDev(options.config).then((config) =>\n loadMiddlewareDev(config),\n );\n const handlersPromise = middlewarePromise.then((middlewareList) =>\n middlewareList.map((middleware) => middleware.default(options)),\n );\n return async (c, next) => {\n const ctx: HandlerContext = {\n req: {\n body: c.req.raw.body,\n url: new URL(c.req.url),\n method: c.req.method,\n headers: c.req.header(),\n },\n res: {},\n data: {\n [HONO_CONTEXT]: c,\n },\n };\n const handlers = await handlersPromise;\n const run = async (index: number) => {\n if (index >= handlers.length) {\n return;\n }\n let alreadyCalled = false;\n await handlers[index]!(ctx, async () => {\n if (!alreadyCalled) {\n alreadyCalled = true;\n await run(index + 1);\n }\n });\n };\n await run(0);\n if (ctx.res.body || ctx.res.status) {\n const status = ctx.res.status || 200;\n const headers = ctx.res.headers || {};\n if (ctx.res.body) {\n return c.body(ctx.res.body, status as never, headers);\n }\n return c.body(null, status as never, headers);\n }\n await next();\n };\n};\n\nconst DO_NOT_BUNDLE = '';\n\nasync function loadMiddlewareDev(\n configDev: ConfigDev,\n): Promise<{ default: Middleware }[]> {\n const [{ resolve }, { pathToFileURL }, { loadServerModule }] =\n await Promise.all([\n import(/* @vite-ignore */ DO_NOT_BUNDLE + 'node:path'),\n import(/* @vite-ignore */ DO_NOT_BUNDLE + 'node:url'),\n import(/* @vite-ignore */ DO_NOT_BUNDLE + '../utils/vite-loader.js'),\n ]);\n return Promise.all(\n configDev.middleware.map(async (file) => {\n const idOrFileURL = file.startsWith('./')\n ? pathToFileURL(resolve(file)).toString()\n : file;\n return loadServerModule(idOrFileURL);\n }),\n );\n}\n"],"names":["resolveConfigDev","HONO_CONTEXT","serverEngine","options","middlewarePromise","cmd","loadEntries","then","entries","loadMiddleware","config","loadMiddlewareDev","handlersPromise","middlewareList","map","middleware","default","c","next","ctx","req","body","raw","url","URL","method","headers","header","res","data","handlers","run","index","length","alreadyCalled","status","DO_NOT_BUNDLE","configDev","resolve","pathToFileURL","loadServerModule","Promise","all","file","idOrFileURL","startsWith","toString"],"mappings":"AAGA,SAASA,gBAAgB,QAAQ,eAAe;AAOhD,uBAAuB;AACvB,MAAMC,eAAe;AAErB,kEAAkE;AAClE,OAAO,MAAMC,eAAe,CAACC;IAC3B,MAAMC,oBACJD,QAAQE,GAAG,KAAK,UACZF,QAAQG,WAAW,GAAGC,IAAI,CAAC,CAACC,UAAYA,QAAQC,cAAc,MAC9DT,iBAAiBG,QAAQO,MAAM,EAAEH,IAAI,CAAC,CAACG,SACrCC,kBAAkBD;IAE1B,MAAME,kBAAkBR,kBAAkBG,IAAI,CAAC,CAACM,iBAC9CA,eAAeC,GAAG,CAAC,CAACC,aAAeA,WAAWC,OAAO,CAACb;IAExD,OAAO,OAAOc,GAAGC;QACf,MAAMC,MAAsB;YAC1BC,KAAK;gBACHC,MAAMJ,EAAEG,GAAG,CAACE,GAAG,CAACD,IAAI;gBACpBE,KAAK,IAAIC,IAAIP,EAAEG,GAAG,CAACG,GAAG;gBACtBE,QAAQR,EAAEG,GAAG,CAACK,MAAM;gBACpBC,SAAST,EAAEG,GAAG,CAACO,MAAM;YACvB;YACAC,KAAK,CAAC;YACNC,MAAM;gBACJ,CAAC5B,aAAa,EAAEgB;YAClB;QACF;QACA,MAAMa,WAAW,MAAMlB;QACvB,MAAMmB,MAAM,OAAOC;YACjB,IAAIA,SAASF,SAASG,MAAM,EAAE;gBAC5B;YACF;YACA,IAAIC,gBAAgB;YACpB,MAAMJ,QAAQ,CAACE,MAAM,CAAEb,KAAK;gBAC1B,IAAI,CAACe,eAAe;oBAClBA,gBAAgB;oBAChB,MAAMH,IAAIC,QAAQ;gBACpB;YACF;QACF;QACA,MAAMD,IAAI;QACV,IAAIZ,IAAIS,GAAG,CAACP,IAAI,IAAIF,IAAIS,GAAG,CAACO,MAAM,EAAE;YAClC,MAAMA,SAAShB,IAAIS,GAAG,CAACO,MAAM,IAAI;YACjC,MAAMT,UAAUP,IAAIS,GAAG,CAACF,OAAO,IAAI,CAAC;YACpC,IAAIP,IAAIS,GAAG,CAACP,IAAI,EAAE;gBAChB,OAAOJ,EAAEI,IAAI,CAACF,IAAIS,GAAG,CAACP,IAAI,EAAEc,QAAiBT;YAC/C;YACA,OAAOT,EAAEI,IAAI,CAAC,MAAMc,QAAiBT;QACvC;QACA,MAAMR;IACR;AACF,EAAE;AAEF,MAAMkB,gBAAgB;AAEtB,eAAezB,kBACb0B,SAAoB;IAEpB,MAAM,CAAC,EAAEC,OAAO,EAAE,EAAE,EAAEC,aAAa,EAAE,EAAE,EAAEC,gBAAgB,EAAE,CAAC,GAC1D,MAAMC,QAAQC,GAAG,CAAC;QAChB,MAAM,CAAC,gBAAgB,GAAGN,gBAAgB;QAC1C,MAAM,CAAC,gBAAgB,GAAGA,gBAAgB;QAC1C,MAAM,CAAC,gBAAgB,GAAGA,gBAAgB;KAC3C;IACH,OAAOK,QAAQC,GAAG,CAChBL,UAAUtB,UAAU,CAACD,GAAG,CAAC,OAAO6B;QAC9B,MAAMC,cAAcD,KAAKE,UAAU,CAAC,QAChCN,cAAcD,QAAQK,OAAOG,QAAQ,KACrCH;QACJ,OAAOH,iBAAiBI;IAC1B;AAEJ"}
@@ -7,8 +7,6 @@ export type ClonableModuleNode = {
7
7
  export type HandlerContext = {
8
8
  readonly req: HandlerReq;
9
9
  readonly res: HandlerRes;
10
- /** @deprecated use `data` */
11
- readonly context: Record<string, unknown>;
12
10
  readonly data: Record<string, unknown>;
13
11
  unstable_devServer?: {
14
12
  rootDir: string;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/lib/middleware/types.ts"],"sourcesContent":["import type { Config } from '../../config.js';\n\nimport type {\n EntriesDev,\n EntriesPrd,\n HandlerReq,\n HandlerRes,\n} from '../types.js';\n\nexport type ClonableModuleNode = { url: string; file: string };\n\nexport type HandlerContext = {\n readonly req: HandlerReq;\n readonly res: HandlerRes;\n /** @deprecated use `data` */\n readonly context: Record<string, unknown>;\n readonly data: Record<string, unknown>;\n unstable_devServer?: {\n rootDir: string;\n resolveClientEntry: (id: string) => string;\n loadServerModuleRsc: (idOrFileURL: string) => Promise<Record<string, any>>;\n loadEntriesDev: (config: { srcDir: string }) => Promise<EntriesDev>;\n loadServerModuleMain: (idOrFileURL: string) => Promise<Record<string, any>>;\n transformIndexHtml: (\n pathname: string,\n ) => Promise<TransformStream<any, any>>;\n };\n unstable_modules?: {\n rsdwServer: unknown;\n rdServer: unknown;\n rsdwClient: unknown;\n wakuMinimalClient: unknown;\n };\n};\n\nexport type Handler = (\n ctx: HandlerContext,\n next: () => Promise<void>,\n) => Promise<void>;\n\n// This is highly experimental\nexport type ErrorCallback = (\n err: unknown,\n ctx: HandlerContext,\n origin: 'handler' | 'rsc' | 'html',\n) => void;\n\nexport type MiddlewareOptions = {\n env: Record<string, string>;\n unstable_onError: Set<ErrorCallback>;\n} & (\n | { cmd: 'dev'; config: Config }\n | { cmd: 'start'; loadEntries: () => Promise<EntriesPrd> }\n);\n\nexport type Middleware = (options: MiddlewareOptions) => Handler;\n"],"names":[],"mappings":"AAuDA,WAAiE"}
1
+ {"version":3,"sources":["../../../src/lib/middleware/types.ts"],"sourcesContent":["import type { Config } from '../../config.js';\n\nimport type {\n EntriesDev,\n EntriesPrd,\n HandlerReq,\n HandlerRes,\n} from '../types.js';\n\nexport type ClonableModuleNode = { url: string; file: string };\n\nexport type HandlerContext = {\n readonly req: HandlerReq;\n readonly res: HandlerRes;\n readonly data: Record<string, unknown>;\n unstable_devServer?: {\n rootDir: string;\n resolveClientEntry: (id: string) => string;\n loadServerModuleRsc: (idOrFileURL: string) => Promise<Record<string, any>>;\n loadEntriesDev: (config: { srcDir: string }) => Promise<EntriesDev>;\n loadServerModuleMain: (idOrFileURL: string) => Promise<Record<string, any>>;\n transformIndexHtml: (\n pathname: string,\n ) => Promise<TransformStream<any, any>>;\n };\n unstable_modules?: {\n rsdwServer: unknown;\n rdServer: unknown;\n rsdwClient: unknown;\n wakuMinimalClient: unknown;\n };\n};\n\nexport type Handler = (\n ctx: HandlerContext,\n next: () => Promise<void>,\n) => Promise<void>;\n\n// This is highly experimental\nexport type ErrorCallback = (\n err: unknown,\n ctx: HandlerContext,\n origin: 'handler' | 'rsc' | 'html',\n) => void;\n\nexport type MiddlewareOptions = {\n env: Record<string, string>;\n unstable_onError: Set<ErrorCallback>;\n} & (\n | { cmd: 'dev'; config: Config }\n | { cmd: 'start'; loadEntries: () => Promise<EntriesPrd> }\n);\n\nexport type Middleware = (options: MiddlewareOptions) => Handler;\n"],"names":[],"mappings":"AAqDA,WAAiE"}
@@ -2,4 +2,5 @@ import type { Plugin } from 'vite';
2
2
  export declare function deployAwsLambdaPlugin(opts: {
3
3
  srcDir: string;
4
4
  distDir: string;
5
+ unstable_honoEnhancer: string | undefined;
5
6
  }): Plugin;