@fenge/eslint-config 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @fenge/eslint-config
2
2
 
3
+ ## 0.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 974ac53: feat(eslint-config): update function type signature. `pick` and `omit` properties disallow duplicated rule names
8
+
3
9
  ## 0.2.0
4
10
 
5
11
  ### Minor Changes
@@ -1,24 +1,29 @@
1
1
  import { javascript } from "./config/javascript.js";
2
2
  import { packagejson } from "./config/packagejson.js";
3
3
  import { typescript } from "./config/typescript.js";
4
+ type NoDuplicate<A extends unknown[]> = {
5
+ [I in keyof A]: true extends {
6
+ [J in keyof A]: J extends I ? false : A[J] extends A[I] ? true : false;
7
+ }[number] ? never : A[I];
8
+ };
4
9
  type JsRuleKey = keyof ReturnType<typeof javascript>[0]["rules"];
5
10
  type TsRuleKey = keyof ReturnType<typeof typescript>[0]["rules"];
6
11
  type PkgRuleKey = keyof ReturnType<typeof packagejson>[0]["rules"];
7
- interface Options<T extends string> {
8
- pick?: T[];
9
- omit?: T[];
12
+ interface Options<T extends string[]> {
13
+ pick?: NoDuplicate<T>;
14
+ omit?: NoDuplicate<T>;
10
15
  extend?: Record<string, "error" | "warn" | "off" | ["error" | "warn", ...unknown[]]>;
11
- override?: Partial<Record<T, "error" | "warn" | "off" | ["error" | "warn", ...unknown[]]>>;
16
+ override?: Partial<Record<T[number], "error" | "warn" | "off" | ["error" | "warn", ...unknown[]]>>;
12
17
  }
13
18
  export declare class Builder {
14
19
  private readonly configs;
15
20
  toConfig(): object[];
16
21
  private setup;
17
- enableTypescript(options?: Options<TsRuleKey> & {
22
+ enableTypescript<T extends TsRuleKey[]>(options?: Options<T> & {
18
23
  project?: string;
19
24
  }): this;
20
- enableJavascript(options?: Options<JsRuleKey>): this;
21
- enablePackagejson(options?: Options<PkgRuleKey>): this;
25
+ enableJavascript<T extends JsRuleKey[]>(options?: Options<T>): this;
26
+ enablePackagejson<T extends PkgRuleKey[]>(options?: Options<T>): this;
22
27
  }
23
28
  declare const _default: object[];
24
29
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"eslint.config.d.ts","sourceRoot":"","sources":["../src/eslint.config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,KAAK,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACjE,KAAK,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACjE,KAAK,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAEnE,UAAU,OAAO,CAAC,CAAC,SAAS,MAAM;IAChC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACX,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CACb,MAAM,EACN,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,OAAO,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAC5D,CAAC;IACF,QAAQ,CAAC,EAAE,OAAO,CAChB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,OAAO,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CACvE,CAAC;CACH;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IAEnE,QAAQ;IAIR,OAAO,CAAC,KAAK;IAqDb,gBAAgB,CAAC,OAAO,GAAE,OAAO,CAAC,SAAS,CAAC,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;IAIxE,gBAAgB,CAAC,OAAO,GAAE,OAAO,CAAC,SAAS,CAAM;IAIjD,iBAAiB,CAAC,OAAO,GAAE,OAAO,CAAC,UAAU,CAAM;CAGpD;;AAED,wBAIc"}
1
+ {"version":3,"file":"eslint.config.d.ts","sourceRoot":"","sources":["../src/eslint.config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,KAAK,WAAW,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI;KACrC,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,SAAS;SAC1B,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK;KACvE,CAAC,MAAM,CAAC,GACL,KAAK,GACL,CAAC,CAAC,CAAC,CAAC;CACT,CAAC;AAEF,KAAK,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACjE,KAAK,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACjE,KAAK,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AAEnE,UAAU,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE;IAClC,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CACb,MAAM,EACN,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,OAAO,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAC5D,CAAC;IACF,QAAQ,CAAC,EAAE,OAAO,CAChB,MAAM,CACJ,CAAC,CAAC,MAAM,CAAC,EACT,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,CAAC,OAAO,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAC5D,CACF,CAAC;CACH;AAED,qBAAa,OAAO;IAClB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IAEnE,QAAQ;IAIR,OAAO,CAAC,KAAK;IAqDb,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAAE,EACpC,OAAO,GAAE,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO;IAKjD,gBAAgB,CAAC,CAAC,SAAS,SAAS,EAAE,EAAE,OAAO,GAAE,OAAO,CAAC,CAAC,CAAM;IAIhE,iBAAiB,CAAC,CAAC,SAAS,UAAU,EAAE,EAAE,OAAO,GAAE,OAAO,CAAC,CAAC,CAAM;CAGnE;;AAED,wBAIc"}
@@ -65,4 +65,4 @@ export default new Builder()
65
65
  .enableJavascript()
66
66
  .enableTypescript()
67
67
  .toConfig();
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lc2xpbnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFrQnBELE1BQU0sT0FBTyxPQUFPO0lBQ0QsT0FBTyxHQUFhLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFbkUsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRU8sS0FBSyxDQUNYLENBQUMsVUFBVSxFQUFFLEdBQUcsWUFBWSxDQUczQixFQUNELEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQW1CO1FBRTNELE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFD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QUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2l0aWdub3JlIH0gZnJvbSBcIi4vY29uZmlnL2dpdGlnbm9yZS5qc1wiO1xuaW1wb3J0IHsgaWdub3JlIH0gZnJvbSBcIi4vY29uZmlnL2lnbm9yZS5qc1wiO1xuaW1wb3J0IHsgamF2YXNjcmlwdCB9IGZyb20gXCIuL2NvbmZpZy9qYXZhc2NyaXB0LmpzXCI7XG5pbXBvcnQgeyBwYWNrYWdlanNvbiB9IGZyb20gXCIuL2NvbmZpZy9wYWNrYWdlanNvbi5qc1wiO1xuaW1wb3J0IHsgdHlwZXNjcmlwdCB9IGZyb20gXCIuL2NvbmZpZy90eXBlc2NyaXB0LmpzXCI7XG5cbnR5cGUgSnNSdWxlS2V5ID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgamF2YXNjcmlwdD5bMF1bXCJydWxlc1wiXTtcbnR5cGUgVHNSdWxlS2V5ID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgdHlwZXNjcmlwdD5bMF1bXCJydWxlc1wiXTtcbnR5cGUgUGtnUnVsZUtleSA9IGtleW9mIFJldHVyblR5cGU8dHlwZW9mIHBhY2thZ2Vqc29uPlswXVtcInJ1bGVzXCJdO1xuXG5pbnRlcmZhY2UgT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nPiB7XG4gIHBpY2s/OiBUW107XG4gIG9taXQ/OiBUW107XG4gIGV4dGVuZD86IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgXCJlcnJvclwiIHwgXCJ3YXJuXCIgfCBcIm9mZlwiIHwgW1wiZXJyb3JcIiB8IFwid2FyblwiLCAuLi51bmtub3duW11dXG4gID47XG4gIG92ZXJyaWRlPzogUGFydGlhbDxcbiAgICBSZWNvcmQ8VCwgXCJlcnJvclwiIHwgXCJ3YXJuXCIgfCBcIm9mZlwiIHwgW1wiZXJyb3JcIiB8IFwid2FyblwiLCAuLi51bmtub3duW11dPlxuICA+O1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnczogb2JqZWN0W10gPSBbLi4uZ2l0aWdub3JlKCksIC4uLmlnbm9yZSgpXTtcblxuICB0b0NvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWdzO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cChcbiAgICBbbWFpbkNvbmZpZywgLi4ub3RoZXJDb25maWdzXTogcmVhZG9ubHkgW1xuICAgICAgeyBwbHVnaW5zOiBvYmplY3Q7IHJ1bGVzOiBvYmplY3QgfSxcbiAgICAgIC4uLm9iamVjdFtdLFxuICAgIF0sXG4gICAgeyBwaWNrLCBvbWl0LCBleHRlbmQgPSB7fSwgb3ZlcnJpZGUgPSB7fSB9OiBPcHRpb25zPHN0cmluZz4sXG4gICkge1xuICAgIGNvbnN0IHNlbGVjdCA9IChydWxlS2V5OiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghcGljayAmJiAhb21pdCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGljayAmJiAhb21pdCkge1xuICAgICAgICByZXR1cm4gcGljay5pbmNsdWRlcyhydWxlS2V5KTtcbiAgICAgIH0gZWxzZSBpZiAoIXBpY2sgJiYgb21pdCkge1xuICAgICAgICByZXR1cm4gIW9taXQuaW5jbHVkZXMocnVsZUtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgY2Fubm90IHNwZWNpZnkgYm90aCBwaWNrIGFuZCBvbWl0XCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcnVsZXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBPYmplY3QuZW50cmllcyhtYWluQ29uZmlnLnJ1bGVzKS5maWx0ZXIoKFtydWxlS2V5XSkgPT4gc2VsZWN0KHJ1bGVLZXkpKSxcbiAgICApO1xuICAgIC8vIGNoZWNrIGBvdmVycmlkZWAgZmllbGRcbiAgICBPYmplY3Qua2V5cyhvdmVycmlkZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoIShrZXkgaW4gcnVsZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG92ZXJyaWRpbmcgcnVsZSBrZXkgJHtrZXl9IGlzIG5vdCBleGlzdGluZy5gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBjaGVjayBgZXh0ZW5kYCBmaWVsZFxuICAgIE9iamVjdC5rZXlzKGV4dGVuZCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoa2V5IGluIHJ1bGVzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGV4dGVuZGluZyBydWxlIGtleSAke2tleX0gaXMgYWxyZWFkeSBleGlzdGluZy5gKTtcbiAgICAgIH1cbiAgICAgIGlmIChrZXkuaW5jbHVkZXMoXCIvXCIpKSB7XG4gICAgICAgIGNvbnN0IHBsdWdpbk5hbWUgPSBrZXkuc3BsaXQoXCIvXCIpWzBdO1xuICAgICAgICBpZiAoIXBsdWdpbk5hbWUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZXh0ZW5kaW5nIHJ1bGUga2V5ICcke2tleX0nIGlzIGludmFsaWRgKTtcbiAgICAgICAgaWYgKCEocGx1Z2luTmFtZSBpbiBtYWluQ29uZmlnLnBsdWdpbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc3VwcG9ydGVkUGx1Z2lucyA9IE9iamVjdC5rZXlzKG1haW5Db25maWcucGx1Z2lucylcbiAgICAgICAgICAgIC5tYXAoKGspID0+IGAnJHtrfSdgKVxuICAgICAgICAgICAgLmpvaW4oXCIsXCIpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaGUgcGx1Z2luIG5hbWUgJyR7cGx1Z2luTmFtZX0nIG9mIGV4dGVuZGluZyBydWxlIGtleSAnJHtrZXl9JyBpcyBub3Qgc3VwcG9ydGVkLiBPbmx5ICR7c3VwcG9ydGVkUGx1Z2luc30gcGx1Z2lucyBhcmUgc3VwcG9ydGVkLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY29uZmlncy5wdXNoKFxuICAgICAgeyAuLi5tYWluQ29uZmlnLCBydWxlczogeyAuLi5ydWxlcywgLi4ub3ZlcnJpZGUsIC4uLmV4dGVuZCB9IH0sXG4gICAgICAuLi5vdGhlckNvbmZpZ3MsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGVuYWJsZVR5cGVzY3JpcHQob3B0aW9uczogT3B0aW9uczxUc1J1bGVLZXk+ICYgeyBwcm9qZWN0Pzogc3RyaW5nIH0gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnNldHVwKHR5cGVzY3JpcHQob3B0aW9ucy5wcm9qZWN0KSwgb3B0aW9ucyk7XG4gIH1cblxuICBlbmFibGVKYXZhc2NyaXB0KG9wdGlvbnM6IE9wdGlvbnM8SnNSdWxlS2V5PiA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dXAoamF2YXNjcmlwdCgpLCBvcHRpb25zKTtcbiAgfVxuXG4gIGVuYWJsZVBhY2thZ2Vqc29uKG9wdGlvbnM6IE9wdGlvbnM8UGtnUnVsZUtleT4gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnNldHVwKHBhY2thZ2Vqc29uKCksIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBCdWlsZGVyKClcbiAgLmVuYWJsZVBhY2thZ2Vqc29uKClcbiAgLmVuYWJsZUphdmFzY3JpcHQoKVxuICAuZW5hYmxlVHlwZXNjcmlwdCgpXG4gIC50b0NvbmZpZygpO1xuIl19
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNsaW50LmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lc2xpbnQuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUE2QnBELE1BQU0sT0FBTyxPQUFPO0lBQ0QsT0FBTyxHQUFhLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFbkUsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRU8sS0FBSyxDQUNYLENBQUMsVUFBVSxFQUFFLEdBQUcsWUFBWSxDQUczQixFQUNELEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLFFBQVEsR0FBRyxFQUFFLEVBQXFCO1FBRTdELE1BQU0sTUFBTSxHQUFHLENBQUMsT0FBZSxFQUFFLEVBQUU7WUFDakMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuQixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7aUJBQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2hDLENBQUM7aUJBQU0sSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFD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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnaXRpZ25vcmUgfSBmcm9tIFwiLi9jb25maWcvZ2l0aWdub3JlLmpzXCI7XG5pbXBvcnQgeyBpZ25vcmUgfSBmcm9tIFwiLi9jb25maWcvaWdub3JlLmpzXCI7XG5pbXBvcnQgeyBqYXZhc2NyaXB0IH0gZnJvbSBcIi4vY29uZmlnL2phdmFzY3JpcHQuanNcIjtcbmltcG9ydCB7IHBhY2thZ2Vqc29uIH0gZnJvbSBcIi4vY29uZmlnL3BhY2thZ2Vqc29uLmpzXCI7XG5pbXBvcnQgeyB0eXBlc2NyaXB0IH0gZnJvbSBcIi4vY29uZmlnL3R5cGVzY3JpcHQuanNcIjtcblxudHlwZSBOb0R1cGxpY2F0ZTxBIGV4dGVuZHMgdW5rbm93bltdPiA9IHtcbiAgW0kgaW4ga2V5b2YgQV06IHRydWUgZXh0ZW5kcyB7XG4gICAgW0ogaW4ga2V5b2YgQV06IEogZXh0ZW5kcyBJID8gZmFsc2UgOiBBW0pdIGV4dGVuZHMgQVtJXSA/IHRydWUgOiBmYWxzZTtcbiAgfVtudW1iZXJdXG4gICAgPyBuZXZlclxuICAgIDogQVtJXTtcbn07XG5cbnR5cGUgSnNSdWxlS2V5ID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgamF2YXNjcmlwdD5bMF1bXCJydWxlc1wiXTtcbnR5cGUgVHNSdWxlS2V5ID0ga2V5b2YgUmV0dXJuVHlwZTx0eXBlb2YgdHlwZXNjcmlwdD5bMF1bXCJydWxlc1wiXTtcbnR5cGUgUGtnUnVsZUtleSA9IGtleW9mIFJldHVyblR5cGU8dHlwZW9mIHBhY2thZ2Vqc29uPlswXVtcInJ1bGVzXCJdO1xuXG5pbnRlcmZhY2UgT3B0aW9uczxUIGV4dGVuZHMgc3RyaW5nW10+IHtcbiAgcGljaz86IE5vRHVwbGljYXRlPFQ+O1xuICBvbWl0PzogTm9EdXBsaWNhdGU8VD47XG4gIGV4dGVuZD86IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgXCJlcnJvclwiIHwgXCJ3YXJuXCIgfCBcIm9mZlwiIHwgW1wiZXJyb3JcIiB8IFwid2FyblwiLCAuLi51bmtub3duW11dXG4gID47XG4gIG92ZXJyaWRlPzogUGFydGlhbDxcbiAgICBSZWNvcmQ8XG4gICAgICBUW251bWJlcl0sXG4gICAgICBcImVycm9yXCIgfCBcIndhcm5cIiB8IFwib2ZmXCIgfCBbXCJlcnJvclwiIHwgXCJ3YXJuXCIsIC4uLnVua25vd25bXV1cbiAgICA+XG4gID47XG59XG5cbmV4cG9ydCBjbGFzcyBCdWlsZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWdzOiBvYmplY3RbXSA9IFsuLi5naXRpZ25vcmUoKSwgLi4uaWdub3JlKCldO1xuXG4gIHRvQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ3M7XG4gIH1cblxuICBwcml2YXRlIHNldHVwKFxuICAgIFttYWluQ29uZmlnLCAuLi5vdGhlckNvbmZpZ3NdOiByZWFkb25seSBbXG4gICAgICB7IHBsdWdpbnM6IG9iamVjdDsgcnVsZXM6IG9iamVjdCB9LFxuICAgICAgLi4ub2JqZWN0W10sXG4gICAgXSxcbiAgICB7IHBpY2ssIG9taXQsIGV4dGVuZCA9IHt9LCBvdmVycmlkZSA9IHt9IH06IE9wdGlvbnM8c3RyaW5nW10+LFxuICApIHtcbiAgICBjb25zdCBzZWxlY3QgPSAocnVsZUtleTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIXBpY2sgJiYgIW9taXQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHBpY2sgJiYgIW9taXQpIHtcbiAgICAgICAgcmV0dXJuIHBpY2suaW5jbHVkZXMocnVsZUtleSk7XG4gICAgICB9IGVsc2UgaWYgKCFwaWNrICYmIG9taXQpIHtcbiAgICAgICAgcmV0dXJuICFvbWl0LmluY2x1ZGVzKHJ1bGVLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiWW91IGNhbm5vdCBzcGVjaWZ5IGJvdGggcGljayBhbmQgb21pdFwiKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJ1bGVzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMobWFpbkNvbmZpZy5ydWxlcykuZmlsdGVyKChbcnVsZUtleV0pID0+IHNlbGVjdChydWxlS2V5KSksXG4gICAgKTtcbiAgICAvLyBjaGVjayBgb3ZlcnJpZGVgIGZpZWxkXG4gICAgT2JqZWN0LmtleXMob3ZlcnJpZGUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKCEoa2V5IGluIHJ1bGVzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBvdmVycmlkaW5nIHJ1bGUga2V5ICR7a2V5fSBpcyBub3QgZXhpc3RpbmcuYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gY2hlY2sgYGV4dGVuZGAgZmllbGRcbiAgICBPYmplY3Qua2V5cyhleHRlbmQpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgaWYgKGtleSBpbiBydWxlcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBleHRlbmRpbmcgcnVsZSBrZXkgJHtrZXl9IGlzIGFscmVhZHkgZXhpc3RpbmcuYCk7XG4gICAgICB9XG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKFwiL1wiKSkge1xuICAgICAgICBjb25zdCBwbHVnaW5OYW1lID0ga2V5LnNwbGl0KFwiL1wiKVswXTtcbiAgICAgICAgaWYgKCFwbHVnaW5OYW1lKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGV4dGVuZGluZyBydWxlIGtleSAnJHtrZXl9JyBpcyBpbnZhbGlkYCk7XG4gICAgICAgIGlmICghKHBsdWdpbk5hbWUgaW4gbWFpbkNvbmZpZy5wbHVnaW5zKSkge1xuICAgICAgICAgIGNvbnN0IHN1cHBvcnRlZFBsdWdpbnMgPSBPYmplY3Qua2V5cyhtYWluQ29uZmlnLnBsdWdpbnMpXG4gICAgICAgICAgICAubWFwKChrKSA9PiBgJyR7a30nYClcbiAgICAgICAgICAgIC5qb2luKFwiLFwiKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGhlIHBsdWdpbiBuYW1lICcke3BsdWdpbk5hbWV9JyBvZiBleHRlbmRpbmcgcnVsZSBrZXkgJyR7a2V5fScgaXMgbm90IHN1cHBvcnRlZC4gT25seSAke3N1cHBvcnRlZFBsdWdpbnN9IHBsdWdpbnMgYXJlIHN1cHBvcnRlZC5gLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNvbmZpZ3MucHVzaChcbiAgICAgIHsgLi4ubWFpbkNvbmZpZywgcnVsZXM6IHsgLi4ucnVsZXMsIC4uLm92ZXJyaWRlLCAuLi5leHRlbmQgfSB9LFxuICAgICAgLi4ub3RoZXJDb25maWdzLFxuICAgICk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBlbmFibGVUeXBlc2NyaXB0PFQgZXh0ZW5kcyBUc1J1bGVLZXlbXT4oXG4gICAgb3B0aW9uczogT3B0aW9uczxUPiAmIHsgcHJvamVjdD86IHN0cmluZyB9ID0ge30sXG4gICkge1xuICAgIHJldHVybiB0aGlzLnNldHVwKHR5cGVzY3JpcHQob3B0aW9ucy5wcm9qZWN0KSwgb3B0aW9ucyk7XG4gIH1cblxuICBlbmFibGVKYXZhc2NyaXB0PFQgZXh0ZW5kcyBKc1J1bGVLZXlbXT4ob3B0aW9uczogT3B0aW9uczxUPiA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dXAoamF2YXNjcmlwdCgpLCBvcHRpb25zKTtcbiAgfVxuXG4gIGVuYWJsZVBhY2thZ2Vqc29uPFQgZXh0ZW5kcyBQa2dSdWxlS2V5W10+KG9wdGlvbnM6IE9wdGlvbnM8VD4gPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnNldHVwKHBhY2thZ2Vqc29uKCksIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBCdWlsZGVyKClcbiAgLmVuYWJsZVBhY2thZ2Vqc29uKClcbiAgLmVuYWJsZUphdmFzY3JpcHQoKVxuICAuZW5hYmxlVHlwZXNjcmlwdCgpXG4gIC50b0NvbmZpZygpO1xuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fenge/eslint-config",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "A super strict eslint config for linting js/ts/package.json.",
5
5
  "keywords": [
6
6
  "opinionated",
@@ -4,19 +4,30 @@ import { javascript } from "./config/javascript.js";
4
4
  import { packagejson } from "./config/packagejson.js";
5
5
  import { typescript } from "./config/typescript.js";
6
6
 
7
+ type NoDuplicate<A extends unknown[]> = {
8
+ [I in keyof A]: true extends {
9
+ [J in keyof A]: J extends I ? false : A[J] extends A[I] ? true : false;
10
+ }[number]
11
+ ? never
12
+ : A[I];
13
+ };
14
+
7
15
  type JsRuleKey = keyof ReturnType<typeof javascript>[0]["rules"];
8
16
  type TsRuleKey = keyof ReturnType<typeof typescript>[0]["rules"];
9
17
  type PkgRuleKey = keyof ReturnType<typeof packagejson>[0]["rules"];
10
18
 
11
- interface Options<T extends string> {
12
- pick?: T[];
13
- omit?: T[];
19
+ interface Options<T extends string[]> {
20
+ pick?: NoDuplicate<T>;
21
+ omit?: NoDuplicate<T>;
14
22
  extend?: Record<
15
23
  string,
16
24
  "error" | "warn" | "off" | ["error" | "warn", ...unknown[]]
17
25
  >;
18
26
  override?: Partial<
19
- Record<T, "error" | "warn" | "off" | ["error" | "warn", ...unknown[]]>
27
+ Record<
28
+ T[number],
29
+ "error" | "warn" | "off" | ["error" | "warn", ...unknown[]]
30
+ >
20
31
  >;
21
32
  }
22
33
 
@@ -32,7 +43,7 @@ export class Builder {
32
43
  { plugins: object; rules: object },
33
44
  ...object[],
34
45
  ],
35
- { pick, omit, extend = {}, override = {} }: Options<string>,
46
+ { pick, omit, extend = {}, override = {} }: Options<string[]>,
36
47
  ) {
37
48
  const select = (ruleKey: string) => {
38
49
  if (!pick && !omit) {
@@ -80,15 +91,17 @@ export class Builder {
80
91
  return this;
81
92
  }
82
93
 
83
- enableTypescript(options: Options<TsRuleKey> & { project?: string } = {}) {
94
+ enableTypescript<T extends TsRuleKey[]>(
95
+ options: Options<T> & { project?: string } = {},
96
+ ) {
84
97
  return this.setup(typescript(options.project), options);
85
98
  }
86
99
 
87
- enableJavascript(options: Options<JsRuleKey> = {}) {
100
+ enableJavascript<T extends JsRuleKey[]>(options: Options<T> = {}) {
88
101
  return this.setup(javascript(), options);
89
102
  }
90
103
 
91
- enablePackagejson(options: Options<PkgRuleKey> = {}) {
104
+ enablePackagejson<T extends PkgRuleKey[]>(options: Options<T> = {}) {
92
105
  return this.setup(packagejson(), options);
93
106
  }
94
107
  }