@fenge/eslint-config
Version:
A super strict eslint config for linting js/ts/package.json.
59 lines • 8.48 kB
JavaScript
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=