UNPKG

@fenge/eslint-config

Version:

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

65 lines 9.56 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 = { // Comment out "**/.env.*" and "**/.*rc" because of parsing error. // TODO: We should disable "**/.env.*" and "**/.*rc" patterns later in another way. // "**/.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxPQUFPLGVBQWUsTUFBTSwwQkFBMEIsQ0FBQztBQWdCdkQsTUFBTSxVQUFVLElBQUksQ0FDbEIsT0FBb0IsRUFDcEIsT0FBMEM7SUFFMUMsTUFBTSxRQUFRLEdBQUc7UUFDZixFQUFFLEVBQUUsdUJBQXVCO1FBQzNCLEVBQUUsRUFBRSx1QkFBdUI7UUFDM0IsR0FBRyxFQUFFLGlCQUFpQjtRQUN0QixJQUFJLEVBQUUsV0FBVztLQUNULENBQUM7SUFDWCxNQUFNLGVBQWUsR0FBRztRQUN0QixrRUFBa0U7UUFDbEUsbUZBQW1GO1FBQ25GLHlCQUF5QjtRQUN6Qiw0QkFBNEI7UUFDNUIsV0FBVyxFQUFFLFlBQVk7UUFFekIsd0JBQXdCLEVBQUUsV0FBVztRQUNyQywyQ0FBMkMsRUFDekMsd0NBQXdDLEVBQUUsZ0hBQWdIO1FBQzVKLHVDQUF1QyxFQUNyQyxtQ0FBbUM7UUFFckMsMkJBQTJCLEVBQUUseUJBQXlCO0tBQzlDLENBQUM7SUFFWCxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxNQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JELE9BQU87UUFDTCx1SEFBdUg7UUFDdkg7WUFDRSxJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLDhEQUE4RDtZQUM5RCxzREFBc0Q7WUFDdEQsd0dBQXdHO1lBQ3hHLE9BQU8sRUFBRTtnQkFDUCxHQUFHLENBQ0QsWUFBWSxDQUFDLFNBQVMsQ0FDcEIsS0FBSyxFQUNMO29CQUNFLFVBQVU7b0JBQ1YsVUFBVTtvQkFDVixXQUFXO29CQUNYLG9CQUFvQjtvQkFDcEIsYUFBYTtpQkFDZCxFQUNELEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUNyQixDQUFDLE1BQU0sSUFBSSxFQUFFLENBQ2Y7cUJBQ0UsS0FBSyxDQUFDLElBQUksQ0FBQztxQkFDWCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztxQkFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQztnQkFDbEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2FBQzNCO1NBQ0Y7UUFDRDtZQUNFLElBQUksRUFBRSxjQUFjO1lBQ3BCLEtBQUssRUFBRSxDQUFDLEdBQUcsZUFBZSxFQUFFLEdBQUcsZUFBZSxDQUFDO1lBQy9DLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYTtnQkFDdkIsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQUU7Z0JBQzFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxPQUFPLEVBQUU7Z0JBQ1AsWUFBWSxFQUFFLGVBQWU7YUFDOUI7WUFDRCxLQUFLLEVBQUU7Z0JBQ0wsK0JBQStCLEVBQUU7b0JBQy9CLE9BQU87b0JBQ1AsTUFBTSxDQUFDLFdBQVcsQ0FDaEIsTUFBTSxDQUFDLE9BQU8sQ0FBaUI7d0JBQzdCLEdBQUcsZUFBZTt3QkFDbEIsR0FBRyxPQUFPLENBQUMsWUFBWTtxQkFDeEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FDakM7aUJBQ0Y7YUFDRjtTQUNGO0tBQ08sQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hpbGRQcm9jZXNzIGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IGNoZWNrRmlsZVBsdWdpbiBmcm9tIFwiZXNsaW50LXBsdWdpbi1jaGVjay1maWxlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZU9wdGlvbnMge1xuICBsaW50ZXJPcHRpb25zPzogTGludGVyLkxpbnRlck9wdGlvbnM7XG4gIC8qKlxuICAgKiBUaGUga2V5IHJlcHJlc2VudHMgdGhlIGZpbGUgcGF0dGVybiB0byBibG9jay5cbiAgICogSWYgdGhlIHZhbHVlIGlzIGBmYWxzZWAsIGZpbGVzIG1hdGNoaW5nIHRoZSBrZXkgcGF0dGVybiBhcmUgYWxsb3dlZC5cbiAgICogSWYgdGhlIHZhbHVlIGlzIGEgYHN0cmluZ2AsIGZpbGVzIG1hdGNoaW5nIHRoZSBrZXkgcGF0dGVybiBhcmUgYmxvY2tlZCwgYW5kIHRoZSBzdHJpbmcgaW5kaWNhdGVzIHRoZSBwcmVmZXJyZWQgZmlsZW5hbWUgcGF0dGVybi5cbiAgICovXG4gIGJsb2NrZWRGaWxlcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IGZhbHNlPjtcbiAgLyoqXG4gICAqIFRoZSBmaWxlIHBhdHRlcm5zIHRvIGlnbm9yZS4gRmlsZXMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gYXJlIG5vdCBsaW50ZWQuXG4gICAqL1xuICBpZ25vcmVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlKFxuICBvcHRpb25zOiBCYXNlT3B0aW9ucyxcbiAgZW5hYmxlZDogU2V0PFwianNcIiB8IFwidHNcIiB8IFwicGtnXCIgfCBcImh0bWxcIj4sXG4pOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCBmaWxlc01hcCA9IHtcbiAgICBqczogXCIqKi8qLntqcyxjanMsbWpzLGpzeH1cIixcbiAgICB0czogXCIqKi8qLnt0cyxjdHMsbXRzLHRzeH1cIixcbiAgICBwa2c6IFwiKiovcGFja2FnZS5qc29uXCIsXG4gICAgaHRtbDogXCIqKi8qLmh0bWxcIixcbiAgfSBhcyBjb25zdDtcbiAgY29uc3QgYmxvY2tlZEZpbGVzTWFwID0ge1xuICAgIC8vIENvbW1lbnQgb3V0IFwiKiovLmVudi4qXCIgYW5kIFwiKiovLipyY1wiIGJlY2F1c2Ugb2YgcGFyc2luZyBlcnJvci5cbiAgICAvLyBUT0RPOiBXZSBzaG91bGQgZGlzYWJsZSBcIioqLy5lbnYuKlwiIGFuZCBcIioqLy4qcmNcIiBwYXR0ZXJucyBsYXRlciBpbiBhbm90aGVyIHdheS5cbiAgICAvLyBcIioqLy5lbnYuKlwiOiBcIi4qLmVudlwiLFxuICAgIC8vIFwiKiovLipyY1wiOiBcIiouY29uZmlnLmpzXCIsXG4gICAgXCIqKi8uKnJjLipcIjogXCIqLmNvbmZpZy4qXCIsXG5cbiAgICBcIioqLyoue2NqcyxtanMsY3RzLG10c31cIjogXCIqLntqcyx0c31cIixcbiAgICBcIioqLyouc3BlYy57anMsY2pzLG1qcyxqc3gsdHMsY3RzLG10cyx0c3h9XCI6XG4gICAgICBcIioudGVzdC57anMsY2pzLG1qcyxqc3gsdHMsY3RzLG10cyx0c3h9XCIsIC8vIE5vZGUuanMgYnVpbHQtaW4gc3VwcG9ydCAqLnRlc3QuanMuIFNlZSBodHRwczovL25vZGVqcy5vcmcvYXBpL3Rlc3QuaHRtbCNydW5uaW5nLXRlc3RzLWZyb20tdGhlLWNvbW1hbmQtbGluZS5cbiAgICBcIioqLy4qLntqcyxjanMsbWpzLGpzeCx0cyxjdHMsbXRzLHRzeH1cIjpcbiAgICAgIFwiKi57anMsY2pzLG1qcyxqc3gsdHMsY3RzLG10cyx0c3h9XCIsXG5cbiAgICBcIioqLyouZC4qLnt0cyxjdHMsbXRzLHRzeH1cIjogXCIqKi8qLmQue3RzLGN0cyxtdHMsdHN4fVwiLFxuICB9IGFzIGNvbnN0O1xuXG4gIGNvbnN0IGVuYWJsZWRQYXR0ZXJucyA9IFsuLi5lbmFibGVkXS5tYXAoKGtleSkgPT4gZmlsZXNNYXBba2V5XSk7XG4gIGNvbnN0IGJsb2NrZWRQYXR0ZXJucyA9IE9iamVjdC5rZXlzKGJsb2NrZWRGaWxlc01hcCk7XG4gIHJldHVybiBbXG4gICAgLy8gR2xvYmFsIGlnbm9yZS4gUmVmZXI6IGh0dHBzOi8vZXNsaW50Lm9yZy9kb2NzL2xhdGVzdC91c2UvY29uZmlndXJlL2NvbmZpZ3VyYXRpb24tZmlsZXMjc3BlY2lmeWluZy1maWxlcy1hbmQtaWdub3Jlcy5cbiAgICB7XG4gICAgICBuYW1lOiBcImZlbmdlL2dpdGlnbm9yZVwiLFxuICAgICAgLy8gVGhlcmUgYXJlIDIga2luZHMgb2YgZXhjZXB0aW9uIHdoZW4gcnVubmluZyBgZ2l0IGxzLWZpbGVzYDpcbiAgICAgIC8vIDEuIEdpdCBpcyBub3QgaW5zdGFsbGVkLiBUaGUgYHN0ZG91dGAgd2lsbCBiZSBudWxsLlxuICAgICAgLy8gMi4gVGhlIHJ1bm5pbmcgZGlyZWN0b3J5IGlzIG5vdCBpbml0aWFsaXplZCBieSBgZ2l0IGluaXRgIGNvbW1hbmQuIFRoZSBgc3Rkb3V0YCB3aWxsIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgIGlnbm9yZXM6IFtcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGNoaWxkUHJvY2Vzcy5zcGF3blN5bmMoXG4gICAgICAgICAgICBcImdpdFwiLFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBcImxzLWZpbGVzXCIsXG4gICAgICAgICAgICAgIFwiLS1vdGhlcnNcIixcbiAgICAgICAgICAgICAgXCItLWlnbm9yZWRcIixcbiAgICAgICAgICAgICAgXCItLWV4Y2x1ZGUtc3RhbmRhcmRcIixcbiAgICAgICAgICAgICAgXCItLWRpcmVjdG9yeVwiLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0sXG4gICAgICAgICAgKS5zdGRvdXQgfHwgXCJcIlxuICAgICAgICApXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLm1hcCgobGluZSkgPT4gbGluZS50cmltKCkpXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKSxcbiAgICAgICAgLi4uKG9wdGlvbnMuaWdub3JlcyA/PyBbXSksXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogXCJmZW5nZS9jb21tb25cIixcbiAgICAgIGZpbGVzOiBbLi4uZW5hYmxlZFBhdHRlcm5zLCAuLi5ibG9ja2VkUGF0dGVybnNdLFxuICAgICAgLi4uKG9wdGlvbnMubGludGVyT3B0aW9uc1xuICAgICAgICA/IHsgbGludGVyT3B0aW9uczogb3B0aW9ucy5saW50ZXJPcHRpb25zIH1cbiAgICAgICAgOiB7fSksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIFwiY2hlY2stZmlsZVwiOiBjaGVja0ZpbGVQbHVnaW4sXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgXCJjaGVjay1maWxlL2ZpbGVuYW1lLWJsb2NrbGlzdFwiOiBbXG4gICAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICAgIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzPHN0cmluZyB8IGZhbHNlPih7XG4gICAgICAgICAgICAgIC4uLmJsb2NrZWRGaWxlc01hcCxcbiAgICAgICAgICAgICAgLi4ub3B0aW9ucy5ibG9ja2VkRmlsZXMsXG4gICAgICAgICAgICB9KS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlKSxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9LFxuICBdIGFzIGNvbnN0O1xufVxuIl19