import { generateStimulusControllers } from "../generate-stimulus.js"; import { promises as fs } from "fs"; import { build } from "esbuild"; import { Builder } from "./builder.js"; import { relative } from "node:path"; export class FrontendTSBuilder extends Builder { constructor( public project_dir: string, public style_dirs: string[], public controller_dirs: string[] ) { super(project_dir, style_dirs); } getName(): string { return "frontend-ts"; } ownsFile(file_path: string) { return ( file_path.startsWith("src/front") || file_path.endsWith(".stimulus.ts") ); } async dispose(): Promise {} async _build(): Promise { await generateStimulusControllers(this.controller_dirs); const { metafile } = await build({ entryPoints: ["./src/front/index.ts"], sourcemap: true, outfile: "./public/dist/bundle.js", logLevel: "info", bundle: true, minify: true, metafile: true, treeShaking: true, }); await fs.writeFile( relative(this.project_dir, "dist") + "/" + "front" + ".meta.json", JSON.stringify(metafile) ); } }