38 lines
1.3 KiB
JavaScript
38 lines
1.3 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import { spawn } from "node:child_process";
|
|
|
|
const rootArgs = ["--dir", "../..", "exec", "tsc", "-p"];
|
|
const projects = [
|
|
"apps/web/tsconfig.core.json",
|
|
"apps/web/tsconfig.routes-admin.json",
|
|
"apps/web/tsconfig.routes-tenant.json",
|
|
"apps/web/tsconfig.routes-other.json",
|
|
];
|
|
|
|
function runProject(project) {
|
|
return new Promise((resolve) => {
|
|
const child = spawn("pnpm", [...rootArgs, project], {
|
|
stdio: "inherit",
|
|
env: process.env,
|
|
// shell: true lets Windows resolve pnpm.cmd; POSIX is unaffected.
|
|
// All args here are space-free paths, so shell quoting is safe.
|
|
shell: true,
|
|
});
|
|
child.on("error", (error) => resolve({ project, code: 1, error }));
|
|
child.on("exit", (code, signal) => resolve({ project, code: code ?? 1, signal }));
|
|
});
|
|
}
|
|
|
|
const results = await Promise.all(projects.map((project) => runProject(project)));
|
|
const failed = results.filter((result) => result.code !== 0);
|
|
|
|
if (failed.length > 0) {
|
|
for (const result of failed) {
|
|
const signal = result.signal ? ` signal=${result.signal}` : "";
|
|
const error = result.error instanceof Error ? ` ${result.error.message}` : "";
|
|
console.error(`[typecheck-web] ${result.project} failed with code=${result.code}${signal}${error}`);
|
|
}
|
|
process.exit(1);
|
|
}
|