@fenge/eslint-config
Version:
A super strict eslint config for linting js/ts/package.json.
71 lines • 12.6 kB
JavaScript
import { base } from "./config/base.js";
import { html } from "./config/html.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;
}
// We must use generics instead of removing them and directly using `options: Options<TsRuleKey[], TsRuleKey[]>`,
// otherwise `NoDuplicate` will not work, allowing users to pass duplicate values, e.g.: `enableTypeScript({ pick: ['no-var', 'no-var'] })`
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);
}
enableHtml(options = {}) {
this.enabled.add("html");
return this.setup(html(), options);
}
enableAll(options) {
return this.enableHtml(options?.html)
.enablePackageJson(options?.packagejson)
.enableJavaScript(options?.javascript)
.enableTypeScript(options?.typescript);
}
append(config) {
this.configs.push(config);
return this;
}
}
export default new Builder().enableAll().toConfig();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lc2xpbnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxJQUFJLEVBQW9CLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBd0NwRCxNQUFNLE9BQU8sT0FBTztJQUNELE9BQU8sR0FBbUIsRUFBRSxDQUFDO0lBQzdCLE9BQU8sQ0FBaUI7SUFFeEIsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFnQyxDQUFDO0lBRW5FLFlBQVksVUFBMEIsRUFBRTtRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU8sS0FBSyxDQUNYLFdBQXlDLEVBQ3pDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBK0I7UUFFM0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxPQUFlLEVBQUUsT0FBZSxFQUFFLEVBQUU7WUFDakQsSUFBSSxPQUFPLEtBQUssT0FBTztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNyQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUN4QixPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FB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dCB0eXBlIHsgTGludGVyIH0gZnJvbSBcImVzbGludFwiO1xuaW1wb3J0IHsgYmFzZSwgdHlwZSBCYXNlT3B0aW9ucyB9IGZyb20gXCIuL2NvbmZpZy9iYXNlLnRzXCI7XG5pbXBvcnQgeyBodG1sIH0gZnJvbSBcIi4vY29uZmlnL2h0bWwudHNcIjtcbmltcG9ydCB7IGphdmFzY3JpcHQgfSBmcm9tIFwiLi9jb25maWcvamF2YXNjcmlwdC50c1wiO1xuaW1wb3J0IHsgcGFja2FnZWpzb24gfSBmcm9tIFwiLi9jb25maWcvcGFja2FnZWpzb24udHNcIjtcbmltcG9ydCB7IHR5cGVzY3JpcHQgfSBmcm9tIFwiLi9jb25maWcvdHlwZXNjcmlwdC50c1wiO1xuXG50eXBlIE5vRHVwbGljYXRlPEEgZXh0ZW5kcyB1bmtub3duW10+ID0ge1xuICBbSSBpbiBrZXlvZiBBXTogdHJ1ZSBleHRlbmRzIHtcbiAgICBbSiBpbiBrZXlvZiBBXTogSiBleHRlbmRzIEkgPyBmYWxzZSA6IEFbSl0gZXh0ZW5kcyBBW0ldID8gdHJ1ZSA6IGZhbHNlO1xuICB9W251bWJlcl1cbiAgICA/IG5ldmVyXG4gICAgOiBBW0ldO1xufTtcblxudHlwZSBPcmlnaW5Kc1J1bGVLZXkgPSBrZXlvZiBSZXR1cm5UeXBlPHR5cGVvZiBqYXZhc2NyaXB0PlswXVtcInJ1bGVzXCJdO1xudHlwZSBPcmlnaW5Uc1J1bGVLZXkgPSBrZXlvZiBSZXR1cm5UeXBlPHR5cGVvZiB0eXBlc2NyaXB0PlswXVtcInJ1bGVzXCJdO1xudHlwZSBPcmlnaW5Qa2dSdWxlS2V5ID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgcGFja2FnZWpzb24+WzBdW1wicnVsZXNcIl07XG50eXBlIE9yaWdpbkh0bWxSdWxlS2V5ID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgaHRtbD5bMF1bXCJydWxlc1wiXTtcblxudHlwZSBHZXRQbHVnaW5zPFQgZXh0ZW5kcyBzdHJpbmc+ID0gVCBleHRlbmRzIGAke2luZmVyIExlZnR9LyR7c3RyaW5nfWBcbiAgPyBMZWZ0XG4gIDogbmV2ZXI7XG5cbnR5cGUgSnNSdWxlS2V5ID0gT3JpZ2luSnNSdWxlS2V5IHwgYCR7R2V0UGx1Z2luczxPcmlnaW5Kc1J1bGVLZXk+fS8qYDtcbnR5cGUgVHNSdWxlS2V5ID0gT3JpZ2luVHNSdWxlS2V5IHwgYCR7R2V0UGx1Z2luczxPcmlnaW5Uc1J1bGVLZXk+fS8qYDtcbnR5cGUgUGtnUnVsZUtleSA9IE9yaWdpblBrZ1J1bGVLZXkgfCBgJHtHZXRQbHVnaW5zPE9yaWdpblBrZ1J1bGVLZXk+fS8qYDtcbnR5cGUgSHRtbFJ1bGVLZXkgPSBPcmlnaW5IdG1sUnVsZUtleSB8IGAke0dldFBsdWdpbnM8T3JpZ2luSHRtbFJ1bGVLZXk+fS8qYDtcblxudHlwZSBSdWxlVmFsdWUgPSBcImVycm9yXCIgfCBcIndhcm5cIiB8IFwib2ZmXCIgfCBbXCJlcnJvclwiIHwgXCJ3YXJuXCIsIC4uLnVua25vd25bXV07XG5pbnRlcmZhY2UgT3B0aW9uczxQIGV4dGVuZHMgc3RyaW5nW10sIE8gZXh0ZW5kcyBzdHJpbmdbXT4ge1xuICBwaWNrPzogTm9EdXBsaWNhdGU8UD47XG4gIG9taXQ/OiBOb0R1cGxpY2F0ZTxPPjtcbn1cbmludGVyZmFjZSBDb25maWdJdGVtIHtcbiAgbmFtZT86IHN0cmluZztcbiAgZmlsZXM/OiBzdHJpbmdbXTtcbiAgcGx1Z2lucz86IFJlY29yZDxzdHJpbmcsIG9iamVjdD47XG4gIHJ1bGVzOlxuICAgIHwgUGFydGlhbDxSZWNvcmQ8UGtnUnVsZUtleSB8IEpzUnVsZUtleSB8IFRzUnVsZUtleSwgUnVsZVZhbHVlPj5cbiAgICB8IFJlY29yZDxzdHJpbmcsIFJ1bGVWYWx1ZT47XG59XG5cbmV4cG9ydCB0eXBlIExpbnRlckNvbmZpZyA9IExpbnRlci5Db25maWc7XG5leHBvcnQgdHlwZSBCdWlsZGVyT3B0aW9ucyA9IEJhc2VPcHRpb25zO1xuZXhwb3J0IGNsYXNzIEJ1aWxkZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ3M6IExpbnRlckNvbmZpZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogQnVpbGRlck9wdGlvbnM7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbmFibGVkID0gbmV3IFNldDxcImpzXCIgfCBcInRzXCIgfCBcInBrZ1wiIHwgXCJodG1sXCI+KCk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQnVpbGRlck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICB0b0NvbmZpZygpOiBMaW50ZXJDb25maWdbXSB7XG4gICAgcmV0dXJuIFsuLi5iYXNlKHRoaXMub3B0aW9ucywgdGhpcy5lbmFibGVkKSwgLi4udGhpcy5jb25maWdzXTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXAoXG4gICAgY29uZmlnSXRlbXM6IHJlYWRvbmx5IHsgcnVsZXM6IG9iamVjdCB9W10sXG4gICAgeyBwaWNrLCBvbWl0IH06IE9wdGlvbnM8c3RyaW5nW10sIHN0cmluZ1tdPixcbiAgKSB7XG4gICAgY29uc3QgbWF0Y2ggPSAocGF0dGVybjogc3RyaW5nLCBydWxlS2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChwYXR0ZXJuID09PSBydWxlS2V5KSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChwYXR0ZXJuLmVuZHNXaXRoKFwiLypcIikpXG4gICAgICAgIHJldHVybiBydWxlS2V5LnN0YXJ0c1dpdGgocGF0dGVybi5zbGljZSgwLCAtMSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3Qgc2VsZWN0ID0gKHJ1bGVLZXk6IHN0cmluZykgPT4ge1xuICAgICAgbGV0IHJlc3VsdCA9IHRydWU7XG4gICAgICBpZiAocGljaykge1xuICAgICAgICByZXN1bHQgJiY9IHBpY2suc29tZSgocGF0dGVybikgPT4gbWF0Y2gocGF0dGVybiwgcnVsZUtleSkpO1xuICAgICAgfVxuICAgICAgaWYgKG9taXQpIHtcbiAgICAgICAgcmVzdWx0ICYmPSAhb21pdC5zb21lKChwYXR0ZXJuKSA9PiBtYXRjaChwYXR0ZXJuLCBydWxlS2V5KSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH07XG4gICAgY29uc3QgcmVzdWx0ID0gY29uZmlnSXRlbXMubWFwKChjb25maWdJdGVtKSA9PiAoe1xuICAgICAgLi4uY29uZmlnSXRlbSxcbiAgICAgIHJ1bGVzOiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGNvbmZpZ0l0ZW0ucnVsZXMpLmZpbHRlcigoW3J1bGVLZXldKSA9PiBzZWxlY3QocnVsZUtleSkpLFxuICAgICAgKSxcbiAgICB9KSk7XG4gICAgdGhpcy5jb25maWdzLnB1c2goLi4ucmVzdWx0KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gV2UgbXVzdCB1c2UgZ2VuZXJpY3MgaW5zdGVhZCBvZiByZW1vdmluZyB0aGVtIGFuZCBkaXJlY3RseSB1c2luZyBgb3B0aW9uczogT3B0aW9uczxUc1J1bGVLZXlbXSwgVHNSdWxlS2V5W10+YCxcbiAgLy8gb3RoZXJ3aXNlIGBOb0R1cGxpY2F0ZWAgd2lsbCBub3Qgd29yaywgYWxsb3dpbmcgdXNlcnMgdG8gcGFzcyBkdXBsaWNhdGUgdmFsdWVzLCBlLmcuOiBgZW5hYmxlVHlwZVNjcmlwdCh7IHBpY2s6IFsnbm8tdmFyJywgJ25vLXZhciddIH0pYFxuICBlbmFibGVUeXBlU2NyaXB0PFAgZXh0ZW5kcyBUc1J1bGVLZXlbXSwgTyBleHRlbmRzIFRzUnVsZUtleVtdPihcbiAgICBvcHRpb25zOiBPcHRpb25zPFAsIE8+ID0ge30sXG4gICkge1xuICAgIHRoaXMuZW5hYmxlZC5hZGQoXCJ0c1wiKTtcbiAgICByZXR1cm4gdGhpcy5zZXR1cCh0eXBlc2NyaXB0KCksIG9wdGlvbnMpO1xuICB9XG5cbiAgZW5hYmxlSmF2YVNjcmlwdDxQIGV4dGVuZHMgSnNSdWxlS2V5W10sIE8gZXh0ZW5kcyBKc1J1bGVLZXlbXT4oXG4gICAgb3B0aW9uczogT3B0aW9uczxQLCBPPiA9IHt9LFxuICApIHtcbiAgICB0aGlzLmVuYWJsZWQuYWRkKFwianNcIik7XG4gICAgcmV0dXJuIHRoaXMuc2V0dXAoamF2YXNjcmlwdCgpLCBvcHRpb25zKTtcbiAgfVxuXG4gIGVuYWJsZVBhY2thZ2VKc29uPFAgZXh0ZW5kcyBQa2dSdWxlS2V5W10sIE8gZXh0ZW5kcyBQa2dSdWxlS2V5W10+KFxuICAgIG9wdGlvbnM6IE9wdGlvbnM8UCwgTz4gPSB7fSxcbiAgKSB7XG4gICAgdGhpcy5lbmFibGVkLmFkZChcInBrZ1wiKTtcbiAgICByZXR1cm4gdGhpcy5zZXR1cChwYWNrYWdlanNvbigpLCBvcHRpb25zKTtcbiAgfVxuXG4gIGVuYWJsZUh0bWw8UCBleHRlbmRzIEh0bWxSdWxlS2V5W10sIE8gZXh0ZW5kcyBIdG1sUnVsZUtleVtdPihcbiAgICBvcHRpb25zOiBPcHRpb25zPFAsIE8+ID0ge30sXG4gICkge1xuICAgIHRoaXMuZW5hYmxlZC5hZGQoXCJodG1sXCIpO1xuICAgIHJldHVybiB0aGlzLnNldHVwKGh0bWwoKSwgb3B0aW9ucyk7XG4gIH1cblxuICBlbmFibGVBbGw8XG4gICAgSFAgZXh0ZW5kcyBIdG1sUnVsZUtleVtdLFxuICAgIEhPIGV4dGVuZHMgSHRtbFJ1bGVLZXlbXSxcbiAgICBQUCBleHRlbmRzIFBrZ1J1bGVLZXlbXSxcbiAgICBQTyBleHRlbmRzIFBrZ1J1bGVLZXlbXSxcbiAgICBKUCBleHRlbmRzIEpzUnVsZUtleVtdLFxuICAgIEpPIGV4dGVuZHMgSnNSdWxlS2V5W10sXG4gICAgVFAgZXh0ZW5kcyBUc1J1bGVLZXlbXSxcbiAgICBUTyBleHRlbmRzIFRzUnVsZUtleVtdLFxuICA+KG9wdGlvbnM/OiB7XG4gICAgaHRtbD86IE9wdGlvbnM8SFAsIEhPPjtcbiAgICBwYWNrYWdlanNvbj86IE9wdGlvbnM8UFAsIFBPPjtcbiAgICBqYXZhc2NyaXB0PzogT3B0aW9uczxKUCwgSk8+O1xuICAgIHR5cGVzY3JpcHQ/OiBPcHRpb25zPFRQLCBUTz47XG4gIH0pIHtcbiAgICByZXR1cm4gdGhpcy5lbmFibGVIdG1sKG9wdGlvbnM/Lmh0bWwpXG4gICAgICAuZW5hYmxlUGFja2FnZUpzb24ob3B0aW9ucz8ucGFja2FnZWpzb24pXG4gICAgICAuZW5hYmxlSmF2YVNjcmlwdChvcHRpb25zPy5qYXZhc2NyaXB0KVxuICAgICAgLmVuYWJsZVR5cGVTY3JpcHQob3B0aW9ucz8udHlwZXNjcmlwdCk7XG4gIH1cblxuICBhcHBlbmQoY29uZmlnOiBDb25maWdJdGVtKSB7XG4gICAgdGhpcy5jb25maWdzLnB1c2goY29uZmlnKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQnVpbGRlcigpLmVuYWJsZUFsbCgpLnRvQ29uZmlnKCk7XG4iXX0=