@fenge/eslint-config
Version:
A super strict eslint config for linting js/ts/package.json.
58 lines • 8.31 kB
JavaScript
import childProcess from "node:child_process";
import checkFilePlugin from "eslint-plugin-check-file";
export function base(options, enabled) {
const filesMap = {
js: "**/*.{js,cjs,mjs,jsx}",
ts: "**/*.{ts,cts,mts,tsx}",
pkg: "**/package.json",
};
const blockedFilesMap = {
"**/.env.*": ".*.env",
"**/.*rc": "*.config.js",
"**/.*rc.*": "*.config.*",
"**/*.{cjs,mjs,cts,mts}": "*.{js,ts}",
"**/*.spec.{js,cjs,mjs,jsx,ts,cts,mts,tsx}": "*.test.{js,cjs,mjs,jsx,ts,cts,mts,tsx}", // Node.js built-in support *.test.js. See https://nodejs.org/api/test.html#running-tests-from-the-command-line.
"**/.*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}": "*.{js,cjs,mjs,jsx,ts,cts,mts,tsx}",
"**/*.d.*.ts": "**/*.d.ts",
};
const enabledPatterns = [...enabled].map((key) => filesMap[key]);
const blockedPatterns = Object.keys(blockedFilesMap);
return [
// Global ignore. Refer: https://eslint.org/docs/latest/use/configure/configuration-files#specifying-files-and-ignores.
{
name: "fenge/gitignore",
// There are 2 kinds of exception when running `git ls-files`:
// 1. Git is not installed. The `stdout` will be null.
// 2. The running directory is not initialized by `git init` command. The `stdout` will an empty string.
ignores: (childProcess.spawnSync("git", [
"ls-files",
"--others",
"--ignored",
"--exclude-standard",
"--directory",
], { encoding: "utf8" }).stdout || "")
.split("\n")
.filter(Boolean),
},
{
name: "fenge/common",
files: [...enabledPatterns, ...blockedPatterns],
...(options.linterOptions
? { linterOptions: options.linterOptions }
: {}),
plugins: {
"check-file": checkFilePlugin,
},
rules: {
"check-file/filename-blocklist": [
"error",
Object.fromEntries(Object.entries({
...blockedFilesMap,
...options.blockedFiles,
}).filter(([_, value]) => value)),
],
},
},
];
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLGVBQWUsTUFBTSwwQkFBMEIsQ0FBQztBQVl2RCxNQUFNLFVBQVUsSUFBSSxDQUNsQixPQUFvQixFQUNwQixPQUFpQztJQUVqQyxNQUFNLFFBQVEsR0FBRztRQUNmLEVBQUUsRUFBRSx1QkFBdUI7UUFDM0IsRUFBRSxFQUFFLHVCQUF1QjtRQUMzQixHQUFHLEVBQUUsaUJBQWlCO0tBQ2QsQ0FBQztJQUNYLE1BQU0sZUFBZSxHQUFHO1FBQ3RCLFdBQVcsRUFBRSxRQUFRO1FBQ3JCLFNBQVMsRUFBRSxhQUFhO1FBQ3hCLFdBQVcsRUFBRSxZQUFZO1FBRXpCLHdCQUF3QixFQUFFLFdBQVc7UUFDckMsMkNBQTJDLEVBQ3pDLHdDQUF3QyxFQUFFLGdIQUFnSDtRQUM1Six1Q0FBdUMsRUFDckMsbUNBQW1DO1FBRXJDLGFBQWEsRUFBRSxXQUFXO0tBQ2xCLENBQUM7SUFFWCxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JELE9BQU87UUFDTCx1SEFBdUg7UUFDdkg7WUFDRSxJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLDhEQUE4RDtZQUM5RCxzREFBc0Q7WUFDdEQsd0dBQXdHO1lBQ3hHLE9BQU8sRUFBRSxDQUNQLFlBQVksQ0FBQyxTQUFTLENBQ3BCLEtBQUssRUFDTDtnQkFDRSxVQUFVO2dCQUNWLFVBQVU7Z0JBQ1YsV0FBVztnQkFDWCxvQkFBb0I7Z0JBQ3BCLGFBQWE7YUFDZCxFQUNELEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUNyQixDQUFDLE1BQU0sSUFBSSxFQUFFLENBQ2Y7aUJBQ0UsS0FBSyxDQUFDLElBQUksQ0FBQztpQkFDWCxNQUFNLENBQUMsT0FBTyxDQUFDO1NBQ25CO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsY0FBYztZQUNwQixLQUFLLEVBQUUsQ0FBQyxHQUFHLGVBQWUsRUFBRSxHQUFHLGVBQWUsQ0FBQztZQUMvQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWE7Z0JBQ3ZCLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxFQUFFO2dCQUMxQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsT0FBTyxFQUFFO2dCQUNQLFlBQVksRUFBRSxlQUFlO2FBQzlCO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLCtCQUErQixFQUFFO29CQUMvQixPQUFPO29CQUNQLE1BQU0sQ0FBQyxXQUFXLENBQ2hCLE1BQU0sQ0FBQyxPQUFPLENBQWlCO3dCQUM3QixHQUFHLGVBQWU7d0JBQ2xCLEdBQUcsT0FBTyxDQUFDLFlBQVk7cUJBQ3hCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQ2pDO2lCQUNGO2FBQ0Y7U0FDRjtLQUNPLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoaWxkUHJvY2VzcyBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gXCJlc2xpbnRcIjtcbmltcG9ydCBjaGVja0ZpbGVQbHVnaW4gZnJvbSBcImVzbGludC1wbHVnaW4tY2hlY2stZmlsZVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VPcHRpb25zIHtcbiAgbGludGVyT3B0aW9ucz86IExpbnRlci5MaW50ZXJPcHRpb25zO1xuICAvKipcbiAgICogVGhlIGtleSByZXByZXNlbnRzIHRoZSBmaWxlIHBhdHRlcm4gdG8gYmxvY2suXG4gICAqIElmIHRoZSB2YWx1ZSBpcyBgZmFsc2VgLCBmaWxlcyBtYXRjaGluZyB0aGUga2V5IHBhdHRlcm4gYXJlIGFsbG93ZWQuXG4gICAqIElmIHRoZSB2YWx1ZSBpcyBhIGBzdHJpbmdgLCBmaWxlcyBtYXRjaGluZyB0aGUga2V5IHBhdHRlcm4gYXJlIGJsb2NrZWQsIGFuZCB0aGUgc3RyaW5nIGluZGljYXRlcyB0aGUgcHJlZmVycmVkIGZpbGVuYW1lIHBhdHRlcm4uXG4gICAqL1xuICBibG9ja2VkRmlsZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBmYWxzZT47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlKFxuICBvcHRpb25zOiBCYXNlT3B0aW9ucyxcbiAgZW5hYmxlZDogU2V0PFwianNcIiB8IFwidHNcIiB8IFwicGtnXCI+LFxuKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgZmlsZXNNYXAgPSB7XG4gICAganM6IFwiKiovKi57anMsY2pzLG1qcyxqc3h9XCIsXG4gICAgdHM6IFwiKiovKi57dHMsY3RzLG10cyx0c3h9XCIsXG4gICAgcGtnOiBcIioqL3BhY2thZ2UuanNvblwiLFxuICB9IGFzIGNvbnN0O1xuICBjb25zdCBibG9ja2VkRmlsZXNNYXAgPSB7XG4gICAgXCIqKi8uZW52LipcIjogXCIuKi5lbnZcIixcbiAgICBcIioqLy4qcmNcIjogXCIqLmNvbmZpZy5qc1wiLFxuICAgIFwiKiovLipyYy4qXCI6IFwiKi5jb25maWcuKlwiLFxuXG4gICAgXCIqKi8qLntjanMsbWpzLGN0cyxtdHN9XCI6IFwiKi57anMsdHN9XCIsXG4gICAgXCIqKi8qLnNwZWMue2pzLGNqcyxtanMsanN4LHRzLGN0cyxtdHMsdHN4fVwiOlxuICAgICAgXCIqLnRlc3Que2pzLGNqcyxtanMsanN4LHRzLGN0cyxtdHMsdHN4fVwiLCAvLyBOb2RlLmpzIGJ1aWx0LWluIHN1cHBvcnQgKi50ZXN0LmpzLiBTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS90ZXN0Lmh0bWwjcnVubmluZy10ZXN0cy1mcm9tLXRoZS1jb21tYW5kLWxpbmUuXG4gICAgXCIqKi8uKi57anMsY2pzLG1qcyxqc3gsdHMsY3RzLG10cyx0c3h9XCI6XG4gICAgICBcIioue2pzLGNqcyxtanMsanN4LHRzLGN0cyxtdHMsdHN4fVwiLFxuXG4gICAgXCIqKi8qLmQuKi50c1wiOiBcIioqLyouZC50c1wiLFxuICB9IGFzIGNvbnN0O1xuXG4gIGNvbnN0IGVuYWJsZWRQYXR0ZXJucyA9IFsuLi5lbmFibGVkXS5tYXAoKGtleSkgPT4gZmlsZXNNYXBba2V5XSk7XG4gIGNvbnN0IGJsb2NrZWRQYXR0ZXJucyA9IE9iamVjdC5rZXlzKGJsb2NrZWRGaWxlc01hcCk7XG4gIHJldHVybiBbXG4gICAgLy8gR2xvYmFsIGlnbm9yZS4gUmVmZXI6IGh0dHBzOi8vZXNsaW50Lm9yZy9kb2NzL2xhdGVzdC91c2UvY29uZmlndXJlL2NvbmZpZ3VyYXRpb24tZmlsZXMjc3BlY2lmeWluZy1maWxlcy1hbmQtaWdub3Jlcy5cbiAgICB7XG4gICAgICBuYW1lOiBcImZlbmdlL2dpdGlnbm9yZVwiLFxuICAgICAgLy8gVGhlcmUgYXJlIDIga2luZHMgb2YgZXhjZXB0aW9uIHdoZW4gcnVubmluZyBgZ2l0IGxzLWZpbGVzYDpcbiAgICAgIC8vIDEuIEdpdCBpcyBub3QgaW5zdGFsbGVkLiBUaGUgYHN0ZG91dGAgd2lsbCBiZSBudWxsLlxuICAgICAgLy8gMi4gVGhlIHJ1bm5pbmcgZGlyZWN0b3J5IGlzIG5vdCBpbml0aWFsaXplZCBieSBgZ2l0IGluaXRgIGNvbW1hbmQuIFRoZSBgc3Rkb3V0YCB3aWxsIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgIGlnbm9yZXM6IChcbiAgICAgICAgY2hpbGRQcm9jZXNzLnNwYXduU3luYyhcbiAgICAgICAgICBcImdpdFwiLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIFwibHMtZmlsZXNcIixcbiAgICAgICAgICAgIFwiLS1vdGhlcnNcIixcbiAgICAgICAgICAgIFwiLS1pZ25vcmVkXCIsXG4gICAgICAgICAgICBcIi0tZXhjbHVkZS1zdGFuZGFyZFwiLFxuICAgICAgICAgICAgXCItLWRpcmVjdG9yeVwiLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSxcbiAgICAgICAgKS5zdGRvdXQgfHwgXCJcIlxuICAgICAgKVxuICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZmVuZ2UvY29tbW9uXCIsXG4gICAgICBmaWxlczogWy4uLmVuYWJsZWRQYXR0ZXJucywgLi4uYmxvY2tlZFBhdHRlcm5zXSxcbiAgICAgIC4uLihvcHRpb25zLmxpbnRlck9wdGlvbnNcbiAgICAgICAgPyB7IGxpbnRlck9wdGlvbnM6IG9wdGlvbnMubGludGVyT3B0aW9ucyB9XG4gICAgICAgIDoge30pLFxuICAgICAgcGx1Z2luczoge1xuICAgICAgICBcImNoZWNrLWZpbGVcIjogY2hlY2tGaWxlUGx1Z2luLFxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIFwiY2hlY2stZmlsZS9maWxlbmFtZS1ibG9ja2xpc3RcIjogW1xuICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllczxzdHJpbmcgfCBmYWxzZT4oe1xuICAgICAgICAgICAgICAuLi5ibG9ja2VkRmlsZXNNYXAsXG4gICAgICAgICAgICAgIC4uLm9wdGlvbnMuYmxvY2tlZEZpbGVzLFxuICAgICAgICAgICAgfSkuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSBhcyBjb25zdDtcbn1cbiJdfQ==