UNPKG

@fenge/eslint-config

Version:

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

62 lines 9.72 kB
import { base } from "./config/base.js"; import { javascript } from "./config/javascript.js"; import { packagejson } from "./config/packagejson.js"; import { typescript } from "./config/typescript.js"; export class Builder { configs = []; options; enabled = new Set(); constructor(options = {}) { this.options = options; } toConfig() { return [...base(this.options, this.enabled), ...this.configs]; } setup(configItems, { pick, omit }) { const match = (pattern, ruleKey) => { if (pattern === ruleKey) return true; if (pattern.endsWith("/*")) return ruleKey.startsWith(pattern.slice(0, -1)); return false; }; const select = (ruleKey) => { let result = true; if (pick) { result &&= pick.some((pattern) => match(pattern, ruleKey)); } if (omit) { result &&= !omit.some((pattern) => match(pattern, ruleKey)); } return result; }; const result = configItems.map((configItem) => ({ ...configItem, rules: Object.fromEntries(Object.entries(configItem.rules).filter(([ruleKey]) => select(ruleKey))), })); this.configs.push(...result); return this; } enableTypeScript(options = {}) { this.enabled.add("ts"); return this.setup(typescript(), options); } enableJavaScript(options = {}) { this.enabled.add("js"); return this.setup(javascript(), options); } enablePackageJson(options = {}) { this.enabled.add("pkg"); return this.setup(packagejson(), options); } append(config) { this.configs.push(config); return this; } } export default new Builder() .enablePackageJson() .enableJavaScript() .enableTypeScript() .toConfig(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lc2xpbnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxJQUFJLEVBQW9CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFzQ3BELE1BQU0sT0FBTyxPQUFPO0lBQ0QsT0FBTyxHQUFtQixFQUFFLENBQUM7SUFDN0IsT0FBTyxDQUFpQjtJQUV4QixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7SUFFMUQsWUFBWSxVQUEwQixFQUFFO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxLQUFLLENBQ1gsV0FBeUMsRUFDekMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFxQjtRQUVqQyxNQUFNLEtBQUssR0FBRyxDQUFDLE9BQWUsRUFBRSxPQUFlLEVBQUUsRUFBRTtZQUNqRCxJQUFJLE9BQU8sS0FBSyxPQUFPO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3JDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO1lBQ2pDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztZQUNsQixJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULE1BQU0sS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUNELElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ1QsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLEdBQUcsVUFBVTtZQUNiLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxDQUN2QixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDeEU7U0FDRixDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFFN0IsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0JBQWdCLENBQXdCLFVBQXNCLEVBQUU7UUFDOUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBd0IsVUFBc0IsRUFBRTtRQUM5RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGlCQUFpQixDQUF5QixVQUFzQixFQUFFO1FBQ2hFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQWtCO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBRUQsZUFBZSxJQUFJLE9BQU8sRUFBRTtLQUN6QixpQkFBaUIsRUFBRTtLQUNuQixnQkFBZ0IsRUFBRTtLQUNsQixnQkFBZ0IsRUFBRTtLQUNsQixRQUFRLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTGludGVyIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHsgYmFzZSwgdHlwZSBCYXNlT3B0aW9ucyB9IGZyb20gXCIuL2NvbmZpZy9iYXNlLnRzXCI7XG5pbXBvcnQgeyBqYXZhc2NyaXB0IH0gZnJvbSBcIi4vY29uZmlnL2phdmFzY3JpcHQudHNcIjtcbmltcG9ydCB7IHBhY2thZ2Vqc29uIH0gZnJvbSBcIi4vY29uZmlnL3BhY2thZ2Vqc29uLnRzXCI7XG5pbXBvcnQgeyB0eXBlc2NyaXB0IH0gZnJvbSBcIi4vY29uZmlnL3R5cGVzY3JpcHQudHNcIjtcblxudHlwZSBOb0R1cGxpY2F0ZTxBIGV4dGVuZHMgdW5rbm93bltdPiA9IHtcbiAgW0kgaW4ga2V5b2YgQV06IHRydWUgZXh0ZW5kcyB7XG4gICAgW0ogaW4ga2V5b2YgQV06IEogZXh0ZW5kcyBJID8gZmFsc2UgOiBBW0pdIGV4dGVuZHMgQVtJXSA/IHRydWUgOiBmYWxzZTtcbiAgfVtudW1iZXJdXG4gICAgPyBuZXZlclxuICAgIDogQVtJXTtcbn07XG5cbnR5cGUgT3JpZ2luSnNSdWxlS2V5ID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgamF2YXNjcmlwdD5bMF1bXCJydWxlc1wiXTtcbnR5cGUgT3JpZ2luVHNSdWxlS2V5ID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgdHlwZXNjcmlwdD5bMF1bXCJydWxlc1wiXTtcbnR5cGUgT3JpZ2luUGtnUnVsZUtleSA9IGtleW9mIFJldHVyblR5cGU8dHlwZW9mIHBhY2thZ2Vqc29uPlswXVtcInJ1bGVzXCJdO1xuXG50eXBlIEdldFBsdWdpbnM8VCBleHRlbmRzIHN0cmluZz4gPSBUIGV4dGVuZHMgYCR7aW5mZXIgTGVmdH0vJHtzdHJpbmd9YFxuICA/IExlZnRcbiAgOiBuZXZlcjtcblxudHlwZSBKc1J1bGVLZXkgPSBPcmlnaW5Kc1J1bGVLZXkgfCBgJHtHZXRQbHVnaW5zPE9yaWdpbkpzUnVsZUtleT59LypgO1xudHlwZSBUc1J1bGVLZXkgPSBPcmlnaW5Uc1J1bGVLZXkgfCBgJHtHZXRQbHVnaW5zPE9yaWdpblRzUnVsZUtleT59LypgO1xudHlwZSBQa2dSdWxlS2V5ID0gT3JpZ2luUGtnUnVsZUtleSB8IGAke0dldFBsdWdpbnM8T3JpZ2luUGtnUnVsZUtleT59LypgO1xuXG50eXBlIFJ1bGVWYWx1ZSA9IFwiZXJyb3JcIiB8IFwid2FyblwiIHwgXCJvZmZcIiB8IFtcImVycm9yXCIgfCBcIndhcm5cIiwgLi4udW5rbm93bltdXTtcbmludGVyZmFjZSBPcHRpb25zPFQgZXh0ZW5kcyBzdHJpbmdbXT4ge1xuICBwaWNrPzogTm9EdXBsaWNhdGU8VD47XG4gIG9taXQ/OiBOb0R1cGxpY2F0ZTxUPjtcbn1cbmludGVyZmFjZSBDb25maWdJdGVtIHtcbiAgbmFtZT86IHN0cmluZztcbiAgZmlsZXM/OiBzdHJpbmdbXTtcbiAgcGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG4gIHJ1bGVzOlxuICAgIHwgUGFydGlhbDxSZWNvcmQ8UGtnUnVsZUtleSB8IEpzUnVsZUtleSB8IFRzUnVsZUtleSwgUnVsZVZhbHVlPj5cbiAgICB8IFJlY29yZDxzdHJpbmcsIFJ1bGVWYWx1ZT47XG59XG5cbmV4cG9ydCB0eXBlIExpbnRlckNvbmZpZyA9IExpbnRlci5Db25maWc7XG5leHBvcnQgdHlwZSBCdWlsZGVyT3B0aW9ucyA9IEJhc2VPcHRpb25zO1xuZXhwb3J0IGNsYXNzIEJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ3M6IExpbnRlckNvbmZpZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogQnVpbGRlck9wdGlvbnM7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVkID0gbmV3IFNldDxcImpzXCIgfCBcInRzXCIgfCBcInBrZ1wiPigpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJ1aWxkZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICB9XG5cbiAgdG9Db25maWcoKTogTGludGVyQ29uZmlnW10ge1xuICAgIHJldHVybiBbLi4uYmFzZSh0aGlzLm9wdGlvbnMsIHRoaXMuZW5hYmxlZCksIC4uLnRoaXMuY29uZmlnc107XG4gIH1cblxuICBwcml2YXRlIHNldHVwKFxuICAgIGNvbmZpZ0l0ZW1zOiByZWFkb25seSB7IHJ1bGVzOiBvYmplY3QgfVtdLFxuICAgIHsgcGljaywgb21pdCB9OiBPcHRpb25zPHN0cmluZ1tdPixcbiAgKSB7XG4gICAgY29uc3QgbWF0Y2ggPSAocGF0dGVybjogc3RyaW5nLCBydWxlS2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChwYXR0ZXJuID09PSBydWxlS2V5KSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChwYXR0ZXJuLmVuZHNXaXRoKFwiLypcIikpXG4gICAgICAgIHJldHVybiBydWxlS2V5LnN0YXJ0c1dpdGgocGF0dGVybi5zbGljZSgwLCAtMSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0ID0gKHJ1bGVLZXk6IHN0cmluZykgPT4ge1xuICAgICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgICBpZiAocGljaykge1xuICAgICAgICByZXN1bHQgJiY9IHBpY2suc29tZSgocGF0dGVybikgPT4gbWF0Y2gocGF0dGVybiwgcnVsZUtleSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9taXQpIHtcbiAgICAgICAgcmVzdWx0ICYmPSAhb21pdC5zb21lKChwYXR0ZXJuKSA9PiBtYXRjaChwYXR0ZXJuLCBydWxlS2V5KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgcmVzdWx0ID0gY29uZmlnSXRlbXMubWFwKChjb25maWdJdGVtKSA9PiAoe1xuICAgICAgLi4uY29uZmlnSXRlbSxcbiAgICAgIHJ1bGVzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbmZpZ0l0ZW0ucnVsZXMpLmZpbHRlcigoW3J1bGVLZXldKSA9PiBzZWxlY3QocnVsZUtleSkpLFxuICAgICAgKSxcbiAgICB9KSk7XG4gICAgdGhpcy5jb25maWdzLnB1c2goLi4ucmVzdWx0KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZW5hYmxlVHlwZVNjcmlwdDxUIGV4dGVuZHMgVHNSdWxlS2V5W10+KG9wdGlvbnM6IE9wdGlvbnM8VD4gPSB7fSkge1xuICAgIHRoaXMuZW5hYmxlZC5hZGQoXCJ0c1wiKTtcbiAgICByZXR1cm4gdGhpcy5zZXR1cCh0eXBlc2NyaXB0KCksIG9wdGlvbnMpO1xuICB9XG5cbiAgZW5hYmxlSmF2YVNjcmlwdDxUIGV4dGVuZHMgSnNSdWxlS2V5W10+KG9wdGlvbnM6IE9wdGlvbnM8VD4gPSB7fSkge1xuICAgIHRoaXMuZW5hYmxlZC5hZGQoXCJqc1wiKTtcbiAgICByZXR1cm4gdGhpcy5zZXR1cChqYXZhc2NyaXB0KCksIG9wdGlvbnMpO1xuICB9XG5cbiAgZW5hYmxlUGFja2FnZUpzb248VCBleHRlbmRzIFBrZ1J1bGVLZXlbXT4ob3B0aW9uczogT3B0aW9uczxUPiA9IHt9KSB7XG4gICAgdGhpcy5lbmFibGVkLmFkZChcInBrZ1wiKTtcbiAgICByZXR1cm4gdGhpcy5zZXR1cChwYWNrYWdlanNvbigpLCBvcHRpb25zKTtcbiAgfVxuXG4gIGFwcGVuZChjb25maWc6IENvbmZpZ0l0ZW0pIHtcbiAgICB0aGlzLmNvbmZpZ3MucHVzaChjb25maWcpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBCdWlsZGVyKClcbiAgLmVuYWJsZVBhY2thZ2VKc29uKClcbiAgLmVuYWJsZUphdmFTY3JpcHQoKVxuICAuZW5hYmxlVHlwZVNjcmlwdCgpXG4gIC50b0NvbmZpZygpO1xuIl19