/** * Bun macro that inlines HTML template with CSS/JS at compile time. * This runs during `bun build` and embeds the result as a string. */ export async function getTemplate(): Promise { const dir = new URL(".", import.meta.url).pathname; // Read all files const html = await Bun.file(`${dir}template.html`).text(); const css = await Bun.file(`${dir}template.css`).text(); const js = await Bun.file(`${dir}template.js`).text(); // Minify CSS const minifiedCss = css .replace(/\/\*[\s\S]*?\*\//g, "") .replace(/\s+/g, " ") .replace(/\s*([{}:;,])\s*/g, "$1") .trim(); // Inline everything; use function replacements so `$'`, `$&`, `$$`, etc. // inside the embedded CSS/JS are not interpreted as substitution patterns. return html .replace("", () => ``) .replace("", () => ``); }