mirror of
https://github.com/Xevion/banner.git
synced 2026-01-31 14:23:36 -06:00
Move all [script("bun")] blocks into standalone TypeScript files under
scripts/ with shared utilities in scripts/lib/. The Justfile is now ~40
lines of thin `bun scripts/*.ts` wrappers.
Shared code consolidated into two lib files:
- lib/proc.ts: process spawning (run, spawnCollect, raceInOrder, ProcessGroup)
- lib/fmt.ts: color output, elapsed timers, reusable flag parser
33 lines
906 B
TypeScript
33 lines
906 B
TypeScript
/**
|
|
* Generate TypeScript bindings from Rust types (ts-rs).
|
|
*
|
|
* Usage: bun scripts/bindings.ts
|
|
*/
|
|
|
|
import { readdirSync, writeFileSync, rmSync } from "fs";
|
|
import { run } from "./lib/proc";
|
|
|
|
const BINDINGS_DIR = "web/src/lib/bindings";
|
|
|
|
// Build test binary first (slow part) — fail before deleting anything
|
|
run(["cargo", "test", "--no-run"]);
|
|
|
|
// Clean slate
|
|
rmSync(BINDINGS_DIR, { recursive: true, force: true });
|
|
|
|
// Run the export (fast, already compiled)
|
|
run(["cargo", "test", "export_bindings"]);
|
|
|
|
// Auto-generate index.ts from emitted .ts files
|
|
const types = readdirSync(BINDINGS_DIR)
|
|
.filter((f) => f.endsWith(".ts") && f !== "index.ts")
|
|
.map((f) => f.replace(/\.ts$/, ""))
|
|
.sort();
|
|
|
|
writeFileSync(
|
|
`${BINDINGS_DIR}/index.ts`,
|
|
types.map((t) => `export type { ${t} } from "./${t}";`).join("\n") + "\n",
|
|
);
|
|
|
|
console.log(`Generated ${BINDINGS_DIR}/index.ts (${types.length} types)`);
|