radashi-helper
Version:
Help with managing your own Radashi
116 lines (114 loc) • 2.91 kB
JavaScript
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
};