islandflow/scripts/typecheck.ts
dirtydishes 44431c4e66
All checks were successful
CI / Validate (push) Successful in 1m13s
expand ci quality gates
2026-05-30 02:34:28 -04:00

71 lines
1.5 KiB
TypeScript

#!/usr/bin/env bun
import { readdirSync, statSync } from "node:fs";
import { join, relative } from "node:path";
const workspaceRoots = ["apps", "services", "packages"];
const findTsconfigs = (dir: string): string[] => {
const entries = readdirSync(dir, { withFileTypes: true });
const tsconfigs: string[] = [];
for (const entry of entries) {
if (!entry.isDirectory()) {
continue;
}
const workspacePath = join(dir, entry.name);
const tsconfigPath = join(workspacePath, "tsconfig.json");
if (statSync(tsconfigPath, { throwIfNoEntry: false })?.isFile()) {
tsconfigs.push(tsconfigPath);
}
}
return tsconfigs;
};
const tsconfigs = workspaceRoots.flatMap((root) => findTsconfigs(root)).sort();
if (tsconfigs.length === 0) {
console.log("No workspace tsconfig.json files found.");
process.exit(0);
}
let failed = false;
const bunExecutable = process.execPath;
for (const tsconfig of tsconfigs) {
const label = relative(process.cwd(), tsconfig);
console.log(`\nTypechecking ${label}`);
const result = Bun.spawnSync(
[
bunExecutable,
"x",
"tsc",
"-p",
tsconfig,
"--noEmit",
"--incremental",
"false",
"--pretty",
"false"
],
{
stdout: "inherit",
stderr: "inherit"
}
);
if (result.exitCode !== 0) {
failed = true;
}
}
if (failed) {
console.error("\nTypecheck failed.");
process.exit(1);
}
console.log("\nTypecheck passed.");