Luigit
repositories / pi-ext

pi-ext

bugabingas pi extensions

owned by admin

scripts/build/cli.ts

Raw
import { allExtensionNames, buildExtension } from "./build.ts";

function usage(): never {
	console.error(
		"usage: node scripts/build/cli.ts [--release] [--all] <extension>...",
	);
	process.exit(2);
}

export async function main(argv = process.argv.slice(2)): Promise<number> {
	let release = false;
	let all = false;
	const names: string[] = [];
	for (const arg of argv) {
		if (arg === "--release") release = true;
		else if (arg === "--all") all = true;
		else if (arg.startsWith("-")) usage();
		else names.push(arg);
	}
	const selected = all ? allExtensionNames() : names;
	if (!selected.length) usage();
	let failed = 0;
	for (const name of selected) {
		const started = performance.now();
		try {
			const built = await buildExtension(name, { release });
			console.log(
				`OK ${name} → ${built.dir} (${built.entries.join(", ")}) ${Math.round(performance.now() - started)}ms`,
			);
		} catch (error) {
			failed += 1;
			console.error(
				`ERROR ${name}: ${error instanceof Error ? error.message : String(error)}`,
			);
		}
	}
	return failed ? 1 : 0;
}

process.exitCode = await main();