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.
- package/README.md +3 -3
- package/dist/cli.js +7 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +7 -8
- package/dist/config.js.map +1 -1
- package/dist/lib/builder/build.js +8 -6
- package/dist/lib/builder/build.js.map +1 -1
- package/dist/lib/config.js +5 -5
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/hono/engine.js +14 -7
- package/dist/lib/hono/engine.js.map +1 -1
- package/dist/lib/middleware/types.d.ts +0 -2
- package/dist/lib/middleware/types.js.map +1 -1
- package/dist/lib/plugins/vite-plugin-deploy-aws-lambda.d.ts +1 -0
- package/dist/lib/plugins/vite-plugin-deploy-aws-lambda.js +10 -4
- package/dist/lib/plugins/vite-plugin-deploy-aws-lambda.js.map +1 -1
- package/dist/lib/plugins/vite-plugin-deploy-cloudflare.d.ts +1 -0
- package/dist/lib/plugins/vite-plugin-deploy-cloudflare.js +10 -6
- package/dist/lib/plugins/vite-plugin-deploy-cloudflare.js.map +1 -1
- package/dist/lib/plugins/vite-plugin-deploy-deno.d.ts +1 -0
- package/dist/lib/plugins/vite-plugin-deploy-deno.js +10 -5
- package/dist/lib/plugins/vite-plugin-deploy-deno.js.map +1 -1
- package/dist/lib/plugins/vite-plugin-deploy-netlify.d.ts +1 -0
- package/dist/lib/plugins/vite-plugin-deploy-netlify.js +10 -5
- package/dist/lib/plugins/vite-plugin-deploy-netlify.js.map +1 -1
- package/dist/lib/plugins/vite-plugin-deploy-partykit.d.ts +1 -0
- package/dist/lib/plugins/vite-plugin-deploy-partykit.js +10 -6
- package/dist/lib/plugins/vite-plugin-deploy-partykit.js.map +1 -1
- package/dist/lib/plugins/vite-plugin-deploy-vercel.d.ts +1 -0
- package/dist/lib/plugins/vite-plugin-deploy-vercel.js +10 -5
- package/dist/lib/plugins/vite-plugin-deploy-vercel.js.map +1 -1
- package/dist/lib/plugins/vite-plugin-rsc-entries.d.ts +2 -0
- package/dist/lib/plugins/vite-plugin-rsc-entries.js +6 -5
- package/dist/lib/plugins/vite-plugin-rsc-entries.js.map +1 -1
- package/dist/lib/types.d.ts +4 -2
- package/dist/lib/types.js.map +1 -1
- package/dist/main.d.ts +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/main.react-server.d.ts +1 -1
- package/dist/main.react-server.js +1 -1
- package/dist/main.react-server.js.map +1 -1
- package/dist/router/client.d.ts +1 -1
- package/dist/router/client.js +12 -4
- package/dist/router/client.js.map +1 -1
- package/dist/router/create-pages.js +0 -4
- package/dist/router/create-pages.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- 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`
|
|
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 {
|
|
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 {
|
|
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
|
|
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
|
|
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
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
46
|
+
* [
|
|
47
|
+
* 'waku/middleware/context',
|
|
48
|
+
* 'waku/middleware/dev-server',
|
|
49
|
+
* 'waku/middleware/handler',
|
|
50
50
|
* ]
|
|
51
51
|
*/
|
|
52
|
-
middleware?:
|
|
53
|
-
default: Middleware;
|
|
54
|
-
}>[];
|
|
52
|
+
middleware?: string[];
|
|
55
53
|
/**
|
|
56
54
|
* Enhancer for Hono
|
|
57
55
|
* Defaults to `undefined`
|
|
58
56
|
*/
|
|
59
|
-
unstable_honoEnhancer?:
|
|
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;
|
package/dist/config.js.map
CHANGED
|
@@ -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 *
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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: '
|
|
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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"}
|
package/dist/lib/config.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
const DEFAULT_MIDDLEWARE =
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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 = {
|
package/dist/lib/config.js.map
CHANGED
|
@@ -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 =
|
|
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"}
|
package/dist/lib/hono/engine.js
CHANGED
|
@@ -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
|
|
7
|
-
const
|
|
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 {
|
|
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
|
|
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"}
|