UNPKG

@fenge/eslint-config

Version:

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

59 lines 8.48 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 select = (ruleKey) => { if (!pick && !omit) { return true; } else if (pick && !omit) { return pick.includes(ruleKey); } else if (!pick && omit) { return !omit.includes(ruleKey); } else { throw new Error("You cannot specify both pick and omit"); } }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lc2xpbnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxJQUFJLEVBQW9CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUE2QnBELE1BQU0sT0FBTyxPQUFPO0lBQ0QsT0FBTyxHQUFvQixFQUFFLENBQUM7SUFDOUIsT0FBTyxDQUFpQjtJQUV4QixPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7SUFFMUQsWUFBWSxVQUEwQixFQUFFO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxLQUFLLENBQ1gsV0FBeUMsRUFDekMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFxQjtRQUVqQyxNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO2lCQUFNLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQyxDQUFDO2lCQUFNLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDM0QsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUMsR0FBRyxVQUFVO1lBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUN4RTtTQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUU3QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsQ0FBd0IsVUFBc0IsRUFBRTtRQUM5RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGdCQUFnQixDQUF3QixVQUFzQixFQUFFO1FBQzlELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsaUJBQWlCLENBQXlCLFVBQXNCLEVBQUU7UUFDaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBa0I7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFFRCxlQUFlLElBQUksT0FBTyxFQUFFO0tBQ3pCLGlCQUFpQixFQUFFO0tBQ25CLGdCQUFnQixFQUFFO0tBQ2xCLGdCQUFnQixFQUFFO0tBQ2xCLFFBQVEsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMaW50ZXIgfSBmcm9tIFwiZXNsaW50XCI7XG5pbXBvcnQgeyBiYXNlLCB0eXBlIEJhc2VPcHRpb25zIH0gZnJvbSBcIi4vY29uZmlnL2Jhc2UudHNcIjtcbmltcG9ydCB7IGphdmFzY3JpcHQgfSBmcm9tIFwiLi9jb25maWcvamF2YXNjcmlwdC50c1wiO1xuaW1wb3J0IHsgcGFja2FnZWpzb24gfSBmcm9tIFwiLi9jb25maWcvcGFja2FnZWpzb24udHNcIjtcbmltcG9ydCB7IHR5cGVzY3JpcHQgfSBmcm9tIFwiLi9jb25maWcvdHlwZXNjcmlwdC50c1wiO1xuXG50eXBlIE5vRHVwbGljYXRlPEEgZXh0ZW5kcyB1bmtub3duW10+ID0ge1xuICBbSSBpbiBrZXlvZiBBXTogdHJ1ZSBleHRlbmRzIHtcbiAgICBbSiBpbiBrZXlvZiBBXTogSiBleHRlbmRzIEkgPyBmYWxzZSA6IEFbSl0gZXh0ZW5kcyBBW0ldID8gdHJ1ZSA6IGZhbHNlO1xuICB9W251bWJlcl1cbiAgICA/IG5ldmVyXG4gICAgOiBBW0ldO1xufTtcblxudHlwZSBKc1J1bGVLZXkgPSBrZXlvZiBSZXR1cm5UeXBlPHR5cGVvZiBqYXZhc2NyaXB0PlswXVtcInJ1bGVzXCJdO1xudHlwZSBUc1J1bGVLZXkgPSBrZXlvZiBSZXR1cm5UeXBlPHR5cGVvZiB0eXBlc2NyaXB0PlswXVtcInJ1bGVzXCJdO1xudHlwZSBQa2dSdWxlS2V5ID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgcGFja2FnZWpzb24+WzBdW1wicnVsZXNcIl07XG5cbnR5cGUgUnVsZVZhbHVlID0gXCJlcnJvclwiIHwgXCJ3YXJuXCIgfCBcIm9mZlwiIHwgW1wiZXJyb3JcIiB8IFwid2FyblwiLCAuLi51bmtub3duW11dO1xuaW50ZXJmYWNlIE9wdGlvbnM8VCBleHRlbmRzIHN0cmluZ1tdPiB7XG4gIHBpY2s/OiBOb0R1cGxpY2F0ZTxUPjtcbiAgb21pdD86IE5vRHVwbGljYXRlPFQ+O1xufVxuaW50ZXJmYWNlIENvbmZpZ0l0ZW0ge1xuICBuYW1lPzogc3RyaW5nO1xuICBmaWxlczogc3RyaW5nW107XG4gIHBsdWdpbnM/OiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+O1xuICBydWxlczpcbiAgICB8IFBhcnRpYWw8UmVjb3JkPFBrZ1J1bGVLZXkgfCBKc1J1bGVLZXkgfCBUc1J1bGVLZXksIFJ1bGVWYWx1ZT4+XG4gICAgfCBSZWNvcmQ8c3RyaW5nLCBSdWxlVmFsdWU+O1xufVxuXG5leHBvcnQgdHlwZSBCdWlsZGVyT3B0aW9ucyA9IEJhc2VPcHRpb25zO1xuZXhwb3J0IGNsYXNzIEJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ3M6IExpbnRlci5Db25maWdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IEJ1aWxkZXJPcHRpb25zO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZW5hYmxlZCA9IG5ldyBTZXQ8XCJqc1wiIHwgXCJ0c1wiIHwgXCJwa2dcIj4oKTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBCdWlsZGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgfVxuXG4gIHRvQ29uZmlnKCkge1xuICAgIHJldHVybiBbLi4uYmFzZSh0aGlzLm9wdGlvbnMsIHRoaXMuZW5hYmxlZCksIC4uLnRoaXMuY29uZmlnc107XG4gIH1cblxuICBwcml2YXRlIHNldHVwKFxuICAgIGNvbmZpZ0l0ZW1zOiByZWFkb25seSB7IHJ1bGVzOiBvYmplY3QgfVtdLFxuICAgIHsgcGljaywgb21pdCB9OiBPcHRpb25zPHN0cmluZ1tdPixcbiAgKSB7XG4gICAgY29uc3Qgc2VsZWN0ID0gKHJ1bGVLZXk6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFwaWNrICYmICFvbWl0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChwaWNrICYmICFvbWl0KSB7XG4gICAgICAgIHJldHVybiBwaWNrLmluY2x1ZGVzKHJ1bGVLZXkpO1xuICAgICAgfSBlbHNlIGlmICghcGljayAmJiBvbWl0KSB7XG4gICAgICAgIHJldHVybiAhb21pdC5pbmNsdWRlcyhydWxlS2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIllvdSBjYW5ub3Qgc3BlY2lmeSBib3RoIHBpY2sgYW5kIG9taXRcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZXN1bHQgPSBjb25maWdJdGVtcy5tYXAoKGNvbmZpZ0l0ZW0pID0+ICh7XG4gICAgICAuLi5jb25maWdJdGVtLFxuICAgICAgcnVsZXM6IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY29uZmlnSXRlbS5ydWxlcykuZmlsdGVyKChbcnVsZUtleV0pID0+IHNlbGVjdChydWxlS2V5KSksXG4gICAgICApLFxuICAgIH0pKTtcbiAgICB0aGlzLmNvbmZpZ3MucHVzaCguLi5yZXN1bHQpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBlbmFibGVUeXBlU2NyaXB0PFQgZXh0ZW5kcyBUc1J1bGVLZXlbXT4ob3B0aW9uczogT3B0aW9uczxUPiA9IHt9KSB7XG4gICAgdGhpcy5lbmFibGVkLmFkZChcInRzXCIpO1xuICAgIHJldHVybiB0aGlzLnNldHVwKHR5cGVzY3JpcHQoKSwgb3B0aW9ucyk7XG4gIH1cblxuICBlbmFibGVKYXZhU2NyaXB0PFQgZXh0ZW5kcyBKc1J1bGVLZXlbXT4ob3B0aW9uczogT3B0aW9uczxUPiA9IHt9KSB7XG4gICAgdGhpcy5lbmFibGVkLmFkZChcImpzXCIpO1xuICAgIHJldHVybiB0aGlzLnNldHVwKGphdmFzY3JpcHQoKSwgb3B0aW9ucyk7XG4gIH1cblxuICBlbmFibGVQYWNrYWdlSnNvbjxUIGV4dGVuZHMgUGtnUnVsZUtleVtdPihvcHRpb25zOiBPcHRpb25zPFQ+ID0ge30pIHtcbiAgICB0aGlzLmVuYWJsZWQuYWRkKFwicGtnXCIpO1xuICAgIHJldHVybiB0aGlzLnNldHVwKHBhY2thZ2Vqc29uKCksIG9wdGlvbnMpO1xuICB9XG5cbiAgYXBwZW5kKGNvbmZpZzogQ29uZmlnSXRlbSkge1xuICAgIHRoaXMuY29uZmlncy5wdXNoKGNvbmZpZyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEJ1aWxkZXIoKVxuICAuZW5hYmxlUGFja2FnZUpzb24oKVxuICAuZW5hYmxlSmF2YVNjcmlwdCgpXG4gIC5lbmFibGVUeXBlU2NyaXB0KClcbiAgLnRvQ29uZmlnKCk7XG4iXX0=