UNPKG

@fenge/eslint-config

Version:

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

58 lines 8.31 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", }; 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==