Files
HiveGrid-Wireframes/hivegrid-cloud/scripts/eslint-pnpm-exec-shim.cjs
T

33 lines
1.3 KiB
JavaScript

#!/usr/bin/env node
const { spawn } = require("node:child_process");
const { existsSync, readdirSync, statSync } = require("node:fs");
const { dirname, extname, join, relative, resolve } = require("node:path");
const repoRoot = process.env.TOOLCTRL_REPO_ROOT || resolve(dirname(__filename), process.env.ESLINT_PNPM_EXEC_REPO_ROOT_OFFSET ?? "../..");
const eslintEntry = resolve(dirname(require.resolve("eslint/package.json", { paths: [repoRoot] })), "bin/eslint.js");
const lintableExtensions = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"]);
function expandDirectoryArgument(argument) {
const absolute = resolve(repoRoot, argument);
if (!existsSync(absolute) || !statSync(absolute).isDirectory()) return [argument];
const files = readdirSync(absolute)
.map((entry) => join(absolute, entry))
.filter((entry) => statSync(entry).isFile() && lintableExtensions.has(extname(entry)))
.map((entry) => relative(repoRoot, entry));
return files.length > 0 ? files : [argument];
}
const args = process.argv.slice(2).flatMap(expandDirectoryArgument);
const child = spawn(process.execPath, [eslintEntry, ...args], { cwd: repoRoot, stdio: "inherit" });
child.on("exit", (code, signal) => {
if (signal) {
process.kill(process.pid, signal);
return;
}
process.exit(code ?? 1);
});