UNPKG

@fenge/eslint-config

Version:

A super strict eslint config for linting js/ts/package.json.

63 lines 9.14 kB
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", html: "**/*.html", }; 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,cts,mts,tsx}": "**/*.d.{ts,cts,mts,tsx}", }; 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") .map((line) => line.trim()) .filter(Boolean), ...(options.ignores ?? []), ], }, { 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLGVBQWUsTUFBTSwwQkFBMEIsQ0FBQztBQWdCdkQsTUFBTSxVQUFVLElBQUksQ0FDbEIsT0FBb0IsRUFDcEIsT0FBMEM7SUFFMUMsTUFBTSxRQUFRLEdBQUc7UUFDZixFQUFFLEVBQUUsdUJBQXVCO1FBQzNCLEVBQUUsRUFBRSx1QkFBdUI7UUFDM0IsR0FBRyxFQUFFLGlCQUFpQjtRQUN0QixJQUFJLEVBQUUsV0FBVztLQUNULENBQUM7SUFDWCxNQUFNLGVBQWUsR0FBRztRQUN0QixXQUFXLEVBQUUsUUFBUTtRQUNyQixTQUFTLEVBQUUsYUFBYTtRQUN4QixXQUFXLEVBQUUsWUFBWTtRQUV6Qix3QkFBd0IsRUFBRSxXQUFXO1FBQ3JDLDJDQUEyQyxFQUN6Qyx3Q0FBd0MsRUFBRSxnSEFBZ0g7UUFDNUosdUNBQXVDLEVBQ3JDLG1DQUFtQztRQUVyQywyQkFBMkIsRUFBRSx5QkFBeUI7S0FDOUMsQ0FBQztJQUVYLE1BQU0sZUFBZSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDckQsT0FBTztRQUNMLHVIQUF1SDtRQUN2SDtZQUNFLElBQUksRUFBRSxpQkFBaUI7WUFDdkIsOERBQThEO1lBQzlELHNEQUFzRDtZQUN0RCx3R0FBd0c7WUFDeEcsT0FBTyxFQUFFO2dCQUNQLEdBQUcsQ0FDRCxZQUFZLENBQUMsU0FBUyxDQUNwQixLQUFLLEVBQ0w7b0JBQ0UsVUFBVTtvQkFDVixVQUFVO29CQUNWLFdBQVc7b0JBQ1gsb0JBQW9CO29CQUNwQixhQUFhO2lCQUNkLEVBQ0QsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQ3JCLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FDZjtxQkFDRSxLQUFLLENBQUMsSUFBSSxDQUFDO3FCQUNYLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3FCQUMxQixNQUFNLENBQUMsT0FBTyxDQUFDO2dCQUNsQixHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7YUFDM0I7U0FDRjtRQUNEO1lBQ0UsSUFBSSxFQUFFLGNBQWM7WUFDcEIsS0FBSyxFQUFFLENBQUMsR0FBRyxlQUFlLEVBQUUsR0FBRyxlQUFlLENBQUM7WUFDL0MsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhO2dCQUN2QixDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLGFBQWEsRUFBRTtnQkFDMUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLE9BQU8sRUFBRTtnQkFDUCxZQUFZLEVBQUUsZUFBZTthQUM5QjtZQUNELEtBQUssRUFBRTtnQkFDTCwrQkFBK0IsRUFBRTtvQkFDL0IsT0FBTztvQkFDUCxNQUFNLENBQUMsV0FBVyxDQUNoQixNQUFNLENBQUMsT0FBTyxDQUFpQjt3QkFDN0IsR0FBRyxlQUFlO3dCQUNsQixHQUFHLE9BQU8sQ0FBQyxZQUFZO3FCQUN4QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUNqQztpQkFDRjthQUNGO1NBQ0Y7S0FDTyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGlsZFByb2Nlc3MgZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHR5cGUgeyBMaW50ZXIgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgY2hlY2tGaWxlUGx1Z2luIGZyb20gXCJlc2xpbnQtcGx1Z2luLWNoZWNrLWZpbGVcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlT3B0aW9ucyB7XG4gIGxpbnRlck9wdGlvbnM/OiBMaW50ZXIuTGludGVyT3B0aW9ucztcbiAgLyoqXG4gICAqIFRoZSBrZXkgcmVwcmVzZW50cyB0aGUgZmlsZSBwYXR0ZXJuIHRvIGJsb2NrLlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgYGZhbHNlYCwgZmlsZXMgbWF0Y2hpbmcgdGhlIGtleSBwYXR0ZXJuIGFyZSBhbGxvd2VkLlxuICAgKiBJZiB0aGUgdmFsdWUgaXMgYSBgc3RyaW5nYCwgZmlsZXMgbWF0Y2hpbmcgdGhlIGtleSBwYXR0ZXJuIGFyZSBibG9ja2VkLCBhbmQgdGhlIHN0cmluZyBpbmRpY2F0ZXMgdGhlIHByZWZlcnJlZCBmaWxlbmFtZSBwYXR0ZXJuLlxuICAgKi9cbiAgYmxvY2tlZEZpbGVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgZmFsc2U+O1xuICAvKipcbiAgICogVGhlIGZpbGUgcGF0dGVybnMgdG8gaWdub3JlLiBGaWxlcyBtYXRjaGluZyB0aGUgcGF0dGVybiBhcmUgbm90IGxpbnRlZC5cbiAgICovXG4gIGlnbm9yZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhc2UoXG4gIG9wdGlvbnM6IEJhc2VPcHRpb25zLFxuICBlbmFibGVkOiBTZXQ8XCJqc1wiIHwgXCJ0c1wiIHwgXCJwa2dcIiB8IFwiaHRtbFwiPixcbik6IExpbnRlci5Db25maWdbXSB7XG4gIGNvbnN0IGZpbGVzTWFwID0ge1xuICAgIGpzOiBcIioqLyoue2pzLGNqcyxtanMsanN4fVwiLFxuICAgIHRzOiBcIioqLyoue3RzLGN0cyxtdHMsdHN4fVwiLFxuICAgIHBrZzogXCIqKi9wYWNrYWdlLmpzb25cIixcbiAgICBodG1sOiBcIioqLyouaHRtbFwiLFxuICB9IGFzIGNvbnN0O1xuICBjb25zdCBibG9ja2VkRmlsZXNNYXAgPSB7XG4gICAgXCIqKi8uZW52LipcIjogXCIuKi5lbnZcIixcbiAgICBcIioqLy4qcmNcIjogXCIqLmNvbmZpZy5qc1wiLFxuICAgIFwiKiovLipyYy4qXCI6IFwiKi5jb25maWcuKlwiLFxuXG4gICAgXCIqKi8qLntjanMsbWpzLGN0cyxtdHN9XCI6IFwiKi57anMsdHN9XCIsXG4gICAgXCIqKi8qLnNwZWMue2pzLGNqcyxtanMsanN4LHRzLGN0cyxtdHMsdHN4fVwiOlxuICAgICAgXCIqLnRlc3Que2pzLGNqcyxtanMsanN4LHRzLGN0cyxtdHMsdHN4fVwiLCAvLyBOb2RlLmpzIGJ1aWx0LWluIHN1cHBvcnQgKi50ZXN0LmpzLiBTZWUgaHR0cHM6Ly9ub2RlanMub3JnL2FwaS90ZXN0Lmh0bWwjcnVubmluZy10ZXN0cy1mcm9tLXRoZS1jb21tYW5kLWxpbmUuXG4gICAgXCIqKi8uKi57anMsY2pzLG1qcyxqc3gsdHMsY3RzLG10cyx0c3h9XCI6XG4gICAgICBcIioue2pzLGNqcyxtanMsanN4LHRzLGN0cyxtdHMsdHN4fVwiLFxuXG4gICAgXCIqKi8qLmQuKi57dHMsY3RzLG10cyx0c3h9XCI6IFwiKiovKi5kLnt0cyxjdHMsbXRzLHRzeH1cIixcbiAgfSBhcyBjb25zdDtcblxuICBjb25zdCBlbmFibGVkUGF0dGVybnMgPSBbLi4uZW5hYmxlZF0ubWFwKChrZXkpID0+IGZpbGVzTWFwW2tleV0pO1xuICBjb25zdCBibG9ja2VkUGF0dGVybnMgPSBPYmplY3Qua2V5cyhibG9ja2VkRmlsZXNNYXApO1xuICByZXR1cm4gW1xuICAgIC8vIEdsb2JhbCBpZ25vcmUuIFJlZmVyOiBodHRwczovL2VzbGludC5vcmcvZG9jcy9sYXRlc3QvdXNlL2NvbmZpZ3VyZS9jb25maWd1cmF0aW9uLWZpbGVzI3NwZWNpZnlpbmctZmlsZXMtYW5kLWlnbm9yZXMuXG4gICAge1xuICAgICAgbmFtZTogXCJmZW5nZS9naXRpZ25vcmVcIixcbiAgICAgIC8vIFRoZXJlIGFyZSAyIGtpbmRzIG9mIGV4Y2VwdGlvbiB3aGVuIHJ1bm5pbmcgYGdpdCBscy1maWxlc2A6XG4gICAgICAvLyAxLiBHaXQgaXMgbm90IGluc3RhbGxlZC4gVGhlIGBzdGRvdXRgIHdpbGwgYmUgbnVsbC5cbiAgICAgIC8vIDIuIFRoZSBydW5uaW5nIGRpcmVjdG9yeSBpcyBub3QgaW5pdGlhbGl6ZWQgYnkgYGdpdCBpbml0YCBjb21tYW5kLiBUaGUgYHN0ZG91dGAgd2lsbCBhbiBlbXB0eSBzdHJpbmcuXG4gICAgICBpZ25vcmVzOiBbXG4gICAgICAgIC4uLihcbiAgICAgICAgICBjaGlsZFByb2Nlc3Muc3Bhd25TeW5jKFxuICAgICAgICAgICAgXCJnaXRcIixcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgXCJscy1maWxlc1wiLFxuICAgICAgICAgICAgICBcIi0tb3RoZXJzXCIsXG4gICAgICAgICAgICAgIFwiLS1pZ25vcmVkXCIsXG4gICAgICAgICAgICAgIFwiLS1leGNsdWRlLXN0YW5kYXJkXCIsXG4gICAgICAgICAgICAgIFwiLS1kaXJlY3RvcnlcIixcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB7IGVuY29kaW5nOiBcInV0ZjhcIiB9LFxuICAgICAgICAgICkuc3Rkb3V0IHx8IFwiXCJcbiAgICAgICAgKVxuICAgICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAgIC5tYXAoKGxpbmUpID0+IGxpbmUudHJpbSgpKVxuICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbiksXG4gICAgICAgIC4uLihvcHRpb25zLmlnbm9yZXMgPz8gW10pLFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IFwiZmVuZ2UvY29tbW9uXCIsXG4gICAgICBmaWxlczogWy4uLmVuYWJsZWRQYXR0ZXJucywgLi4uYmxvY2tlZFBhdHRlcm5zXSxcbiAgICAgIC4uLihvcHRpb25zLmxpbnRlck9wdGlvbnNcbiAgICAgICAgPyB7IGxpbnRlck9wdGlvbnM6IG9wdGlvbnMubGludGVyT3B0aW9ucyB9XG4gICAgICAgIDoge30pLFxuICAgICAgcGx1Z2luczoge1xuICAgICAgICBcImNoZWNrLWZpbGVcIjogY2hlY2tGaWxlUGx1Z2luLFxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIFwiY2hlY2stZmlsZS9maWxlbmFtZS1ibG9ja2xpc3RcIjogW1xuICAgICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllczxzdHJpbmcgfCBmYWxzZT4oe1xuICAgICAgICAgICAgICAuLi5ibG9ja2VkRmlsZXNNYXAsXG4gICAgICAgICAgICAgIC4uLm9wdGlvbnMuYmxvY2tlZEZpbGVzLFxuICAgICAgICAgICAgfSkuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSksXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSBhcyBjb25zdDtcbn1cbiJdfQ==