UNPKG

radashi-helper

Version:
116 lines (114 loc) 2.91 kB
import { esbuildRadashi } from "./chunk-WSWKTV6L.js"; import "./chunk-EGWAB2TU.js"; import "./chunk-V32CUL4H.js"; import "./chunk-OCHPTCP5.js"; import { stdio } from "./chunk-GGEXN2BI.js"; import "./chunk-652CQLOF.js"; import { getEnv } from "./chunk-DSXY7YVB.js"; import { exec, log } from "./chunk-JLKIE3A2.js"; import { sift } from "./chunk-VOEQFXI5.js"; // src/build.ts import * as chokidar from "chokidar"; import * as esbuild from "esbuild"; import fs, { readFile, writeFile } from "node:fs/promises"; import { join, resolve } from "node:path"; async function build_default(options = {}) { const env = options.env ?? getEnv(options.dir); const { root, config } = env; const outDir = resolve(options.outDir ?? env.outDir); await fs.rm(outDir, { recursive: true }).catch(() => { }); const esmOptions = { entryPoints: [env.modPath], external: ["radashi"], bundle: true, outfile: join(outDir, "radashi.js"), platform: "node", target: "node16", format: "esm", plugins: [esbuildRadashi({ env })], logLevel: "info" }; const cjsOptions = { ...esmOptions, format: "cjs", outfile: join(outDir, "radashi.cjs") }; if (options?.watch) { const ctx = await esbuild.context( config.formats.includes("esm") ? esmOptions : cjsOptions ); await ctx.watch(); } else { if (config.formats.includes("esm")) { await esbuild.build(esmOptions); } if (config.formats.includes("cjs")) { await esbuild.build(cjsOptions); } } if (config.dts) { await emitDeclarationTypes(root, join(outDir, "types"), options); } } async function emitDeclarationTypes(root, outDir, flags = {}) { log("Emitting declaration types..."); const result = exec( resolve(root, "node_modules/.bin/tsc"), sift([ "--project", "tsconfig.dts.json", "--outDir", outDir, "--emitDeclarationOnly", flags.watch && "--watch", flags.watch && "--preserveWatchOutput" ]), { cwd: root, stdio } ); const modPath = join(outDir, "mod.d.ts"); const rewriteRadashiImport = async () => { await editFile(modPath, (data) => { return data.replace("./node_modules/radashi/dist/radashi", "radashi"); }); }; if (flags.watch) { let rewriting = false; chokidar.watch(outDir).on("all", async (type, file) => { if (!rewriting && file === modPath && type !== "unlink") { rewriting = true; await rewriteRadashiImport(); setTimeout(() => { rewriting = false; }, 250); } }); } else { await result; await rewriteRadashiImport(); } } async function editFile(filePath, callback) { const data = await readFile(filePath, "utf-8"); const newData = await callback(data); if (newData) { await writeFile(filePath, newData, "utf-8"); } } export { build_default as default };