@git-validator/eslint-config
Version:
A strict eslint config for better code quality.
44 lines • 7.24 kB
JavaScript
import fs from "node:fs/promises";
import path from "node:path";
import process from "node:process";
import { gitignoreToMinimatch } from "@humanwhocodes/gitignore-to-minimatch";
import jsConfig from "./js-config.js";
import packagejsonConfig from "./packagejson-config.js";
import tsConfig from "./ts-config.js";
async function globallyIgnore() {
const ignores = (await fs
.readFile(path.resolve(process.cwd(), ".gitignore"), "utf-8")
.catch(() => ""))
.split("\n")
.map((i) => i.trim())
.filter(Boolean)
.filter((i) => !i.startsWith("#"))
.map((i) => gitignoreToMinimatch(i));
// Globally ignore. https://eslint.org/docs/latest/use/configure/configuration-files-new#globally-ignoring-files-with-ignores
return { ignores };
}
const ignore = await globallyIgnore();
const config = [jsConfig, ...tsConfig, packagejsonConfig];
function factory(type) {
return (rules) => {
const find = (key) => {
switch (type) {
case "pick":
return !!rules.find((rule) => rule === key)?.toString();
case "omit":
return !rules.find((rule) => rule === key)?.toString();
}
};
return [
ignore,
...config.map((configItem) => ({
...configItem,
rules: Object.fromEntries(Object.entries(configItem.rules).filter(([k]) => find(k))),
})),
];
};
}
export const pick = (rules) => factory("pick")(rules);
export const omit = (rules) => factory("omit")(rules);
export default [ignore, ...config];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEMsT0FBTyxJQUFJLE1BQU0sV0FBVyxDQUFDO0FBQzdCLE9BQU8sT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUNuQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLGlCQUFpQixNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sUUFBUSxNQUFNLGdCQUFnQixDQUFDO0FBRXRDLEtBQUssVUFBVSxjQUFjO0lBQzNCLE1BQU0sT0FBTyxHQUFHLENBQ2QsTUFBTSxFQUFFO1NBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQztTQUM1RCxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQ25CO1NBQ0UsS0FBSyxDQUFDLElBQUksQ0FBQztTQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ3BCLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDZixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsNkhBQTZIO0lBQzdILE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUNyQixDQUFDO0FBRUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxjQUFjLEVBQUUsQ0FBQztBQUN0QyxNQUFNLE1BQU0sR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLFFBQVEsRUFBRSxpQkFBaUIsQ0FJdEQsQ0FBQztBQWFILFNBQVMsT0FBTyxDQUFDLElBQXFCO0lBQ3BDLE9BQU8sQ0FBQyxLQUFxQixFQUFFLEVBQUU7UUFDL0IsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUMzQixRQUFRLElBQUksRUFBRSxDQUFDO2dCQUNiLEtBQUssTUFBTTtvQkFDVCxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUM7Z0JBQzFELEtBQUssTUFBTTtvQkFDVCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixPQUFPO1lBQ0wsTUFBTTtZQUNOLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDN0IsR0FBRyxVQUFVO2dCQUNiLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxDQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDMUQ7YUFDRixDQUFDLENBQUM7U0FDSixDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFrQixLQUEwQixFQUFFLEVBQUUsQ0FDbEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFrQixLQUEwQixFQUFFLEVBQUUsQ0FDbEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLGVBQWUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSBcIm5vZGU6cHJvY2Vzc1wiO1xuaW1wb3J0IHsgZ2l0aWdub3JlVG9NaW5pbWF0Y2ggfSBmcm9tIFwiQGh1bWFud2hvY29kZXMvZ2l0aWdub3JlLXRvLW1pbmltYXRjaFwiO1xuaW1wb3J0IGpzQ29uZmlnIGZyb20gXCIuL2pzLWNvbmZpZy5qc1wiO1xuaW1wb3J0IHBhY2thZ2Vqc29uQ29uZmlnIGZyb20gXCIuL3BhY2thZ2Vqc29uLWNvbmZpZy5qc1wiO1xuaW1wb3J0IHRzQ29uZmlnIGZyb20gXCIuL3RzLWNvbmZpZy5qc1wiO1xuXG5hc3luYyBmdW5jdGlvbiBnbG9iYWxseUlnbm9yZSgpIHtcbiAgY29uc3QgaWdub3JlcyA9IChcbiAgICBhd2FpdCBmc1xuICAgICAgLnJlYWRGaWxlKHBhdGgucmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBcIi5naXRpZ25vcmVcIiksIFwidXRmLThcIilcbiAgICAgIC5jYXRjaCgoKSA9PiBcIlwiKVxuICApXG4gICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgLm1hcCgoaSkgPT4gaS50cmltKCkpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5maWx0ZXIoKGkpID0+ICFpLnN0YXJ0c1dpdGgoXCIjXCIpKVxuICAgIC5tYXAoKGkpID0+IGdpdGlnbm9yZVRvTWluaW1hdGNoKGkpKTtcbiAgLy8gR2xvYmFsbHkgaWdub3JlLiBodHRwczovL2VzbGludC5vcmcvZG9jcy9sYXRlc3QvdXNlL2NvbmZpZ3VyZS9jb25maWd1cmF0aW9uLWZpbGVzLW5ldyNnbG9iYWxseS1pZ25vcmluZy1maWxlcy13aXRoLWlnbm9yZXNcbiAgcmV0dXJuIHsgaWdub3JlcyB9O1xufVxuXG5jb25zdCBpZ25vcmUgPSBhd2FpdCBnbG9iYWxseUlnbm9yZSgpO1xuY29uc3QgY29uZmlnID0gW2pzQ29uZmlnLCAuLi50c0NvbmZpZywgcGFja2FnZWpzb25Db25maWddIHNhdGlzZmllcyBBcnJheTx7XG4gIGZpbGVzOiBzdHJpbmdbXTtcbiAgcGx1Z2luczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJ1bGVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn0+O1xuXG50eXBlIEtleW9mPFQ+ID0gVCBleHRlbmRzIGluZmVyIFUgPyBrZXlvZiBVIDogbmV2ZXI7XG50eXBlIEtleSA9IEtleW9mPCh0eXBlb2YgY29uZmlnKVtudW1iZXJdW1wicnVsZXNcIl0+O1xudHlwZSBOb0R1cGxpY2F0ZTxBIGV4dGVuZHMgdW5rbm93bltdPiA9IHtcbiAgW0kgaW4ga2V5b2YgQV06IHRydWUgZXh0ZW5kcyB7XG4gICAgW0ogaW4ga2V5b2YgQV06IEogZXh0ZW5kcyBJID8gZmFsc2UgOiBBW0pdIGV4dGVuZHMgQVtJXSA/IHRydWUgOiBmYWxzZTtcbiAgfVtudW1iZXJdXG4gICAgPyBuZXZlclxuICAgIDogQVtJXTtcbn07XG50eXBlIE5vRHVwbGljYXRlQXJyYXk8VCBleHRlbmRzIHVua25vd25bXT4gPSBbLi4uTm9EdXBsaWNhdGU8VD5dO1xuXG5mdW5jdGlvbiBmYWN0b3J5KHR5cGU6IFwicGlja1wiIHwgXCJvbWl0XCIpIHtcbiAgcmV0dXJuIChydWxlczogcmVhZG9ubHkgS2V5W10pID0+IHtcbiAgICBjb25zdCBmaW5kID0gKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcInBpY2tcIjpcbiAgICAgICAgICByZXR1cm4gISFydWxlcy5maW5kKChydWxlKSA9PiBydWxlID09PSBrZXkpPy50b1N0cmluZygpO1xuICAgICAgICBjYXNlIFwib21pdFwiOlxuICAgICAgICAgIHJldHVybiAhcnVsZXMuZmluZCgocnVsZSkgPT4gcnVsZSA9PT0ga2V5KT8udG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIFtcbiAgICAgIGlnbm9yZSxcbiAgICAgIC4uLmNvbmZpZy5tYXAoKGNvbmZpZ0l0ZW0pID0+ICh7XG4gICAgICAgIC4uLmNvbmZpZ0l0ZW0sXG4gICAgICAgIHJ1bGVzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoY29uZmlnSXRlbS5ydWxlcykuZmlsdGVyKChba10pID0+IGZpbmQoaykpLFxuICAgICAgICApLFxuICAgICAgfSkpLFxuICAgIF07XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBwaWNrID0gPFQgZXh0ZW5kcyBLZXlbXT4ocnVsZXM6IE5vRHVwbGljYXRlQXJyYXk8VD4pID0+XG4gIGZhY3RvcnkoXCJwaWNrXCIpKHJ1bGVzKTtcbmV4cG9ydCBjb25zdCBvbWl0ID0gPFQgZXh0ZW5kcyBLZXlbXT4ocnVsZXM6IE5vRHVwbGljYXRlQXJyYXk8VD4pID0+XG4gIGZhY3RvcnkoXCJvbWl0XCIpKHJ1bGVzKTtcbmV4cG9ydCBkZWZhdWx0IFtpZ25vcmUsIC4uLmNvbmZpZ107XG4iXX0=