import * as fs from "fs"; import { destructivelyRecreateDirectory } from "./toolchain-helpers.js"; import { MenuManifest, Plugin, IPluginBuilder } from "./typings.js"; export type Paths = { outputDirectory: string; }; export class ToolchainBuilder { private paths: Paths; private plugins: Plugin[] = []; private menuManifest: MenuManifest = []; constructor(paths: Paths) { this.paths = paths; } addPlugins(plugins: IPluginBuilder[]): ToolchainBuilder { this.plugins = plugins.map((p) => p.build()); return this; } async build() { destructivelyRecreateDirectory(this.paths.outputDirectory); for (const plugin of this.plugins) { await plugin({ menuManifest: this.menuManifest, outputDirectory: this.paths.outputDirectory, }); } } }