import { glob } from "fast-glob";
import * as fs from "fs/promises";
import ora from "ora";
import yargs from "yargs/yargs";
import libraryCompatCheck from "./checks/libraryCompat";
import reactCompilerCheck from "./checks/reactCompiler";
import strictModeCheck from "./checks/strictMode";
async function main() {
const argv = yargs(process.argv.slice(2))
.scriptName("healthcheck")
.usage("$ npx healthcheck <src>")
.option("src", {
description: "glob expression matching src files to compile",
type: "string",
default: "**/+(*.{js,mjs,jsx,ts,tsx}|package.json)",
})
.parseSync();
const spinner = ora("Checking").start();
let src = argv.src;
const globOptions = {
onlyFiles: true,
ignore: [
"**/node_modules/**",
"**/dist/**",
"**/tests/**",
"**/__tests__/**",
"**/__mocks__/**",
"**/__e2e__/**",
],
};
for (const path of await glob(src, globOptions)) {
const source = await fs.readFile(path, "utf-8");
spinner.text = `Checking ${path}`;
reactCompilerCheck.run(source, path);
strictModeCheck.run(source, path);
libraryCompatCheck.run(source, path);
}
spinner.stop();
reactCompilerCheck.report();
strictModeCheck.report();
libraryCompatCheck.report();
}
main();