33 lines
807 B
TypeScript
33 lines
807 B
TypeScript
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,
|
|
});
|
|
}
|
|
}
|
|
}
|