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