import { createReadStream, createWriteStream } from "node:fs"; import { mkdir, readdir, writeFile } from "node:fs/promises"; import { dirname, resolve } from "node:path"; import { pipeline } from "node:stream/promises"; import { fileURLToPath } from "node:url"; import { build } from "esbuild"; import locales from "../locales/index.js"; import meta from "../package.json" with { type: "json" }; const root = resolve(dirname(fileURLToPath(import.meta.url)), ".."); const viewsSrc = resolve(root, "packages/backend/src/server/web/views"); const viewsOut = resolve(root, "packages/backend/built/server/web/views"); await mkdir(viewsOut, { recursive: true }); await mkdir(resolve(root, "built/_client_dist_/locales"), { recursive: true }); const localeVersion = { _version_: meta.version }; for (const [lang, locale] of Object.entries(locales)) { await writeFile( resolve(root, `built/_client_dist_/locales/${lang}.${meta.version}.json`), JSON.stringify({ ...locale, ...localeVersion }), "utf-8", ); } for (const entry of await readdir(viewsSrc, { withFileTypes: true })) { if (!entry.isFile()) continue; await pipeline( createReadStream(resolve(viewsSrc, entry.name)), createWriteStream(resolve(viewsOut, entry.name)), ); } await build({ entryPoints: [ resolve(root, "packages/backend/src/server/web/boot.js"), resolve(root, "packages/backend/src/server/web/bios.js"), resolve(root, "packages/backend/src/server/web/cli.js"), ], outdir: resolve(root, "packages/backend/built/server/web"), define: { LANGS: JSON.stringify(Object.keys(locales)), }, minify: true, }); await build({ entryPoints: [ resolve(root, "packages/backend/src/server/web/style.css"), resolve(root, "packages/backend/src/server/web/bios.css"), resolve(root, "packages/backend/src/server/web/cli.css"), ], outdir: resolve(root, "packages/backend/built/server/web"), minify: true, });