25 lines
894 B
JavaScript
25 lines
894 B
JavaScript
#!/usr/bin/env node
|
|
import { readFile } from "node:fs/promises";
|
|
import { resolve } from "node:path";
|
|
|
|
const root = resolve(import.meta.dirname, "..");
|
|
const manifest = JSON.parse(await readFile(resolve(root, "package.json"), "utf8"));
|
|
const command = manifest.scripts?.typecheck;
|
|
const required = ["tsconfig.app.json", "tsconfig.node.json"];
|
|
const missing = required.filter((config) => !command?.includes(`-p ${config}`));
|
|
|
|
if (missing.length) {
|
|
console.error(`TypeScript gate does not compile: ${missing.join(", ")}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
for (const config of required) {
|
|
const content = await readFile(resolve(root, config), "utf8");
|
|
if (!/"noEmit"\s*:\s*true/.test(content) && !command.includes("--noEmit")) {
|
|
console.error(`TypeScript gate may emit files for ${config}.`);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
console.log("TypeScript gate covers application and Node configurations.");
|