Skip to content

Commit

Permalink
feat: support configs as generics
Browse files Browse the repository at this point in the history
  • Loading branch information
danielwaltz committed Jan 25, 2025
1 parent 220d6ed commit 29fda64
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 17 deletions.
5 changes: 3 additions & 2 deletions src/configs/unicorn.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { BaseConfig } from "../types.js";
import type { ResolvableFlatConfig } from "eslint-flat-config-utils";

export function unicornConfigs() {
export function unicornConfigs<TConfig extends BaseConfig = BaseConfig>() {
return [
{
name: "danielwaltz/unicorn",
Expand All @@ -14,5 +15,5 @@ export function unicornConfigs() {
],
},
},
] as const satisfies ResolvableFlatConfig;
] as const satisfies ResolvableFlatConfig<TConfig>;
}
5 changes: 3 additions & 2 deletions src/configs/vue.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import type { BaseConfig } from "../types.js";
import type { ResolvableFlatConfig } from "eslint-flat-config-utils";

export function vueConfigs() {
export function vueConfigs<TConfig extends BaseConfig = BaseConfig>() {
return [
{
name: "danielwaltz/vue",
Expand Down Expand Up @@ -81,5 +82,5 @@ export function vueConfigs() {
"vue/valid-define-options": "error",
},
},
] as const satisfies ResolvableFlatConfig;
] as const satisfies ResolvableFlatConfig<TConfig>;
}
12 changes: 8 additions & 4 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,23 @@ import { hasVue, sxzz } from "@sxzz/eslint-config";
import { unicornConfigs } from "./configs/unicorn.js";
import { vueConfigs } from "./configs/vue.js";
import { defineFlatConfigs } from "./utils.js";
import type { BaseConfig, BaseConfigNames } from "./types.js";
import type { ResolvableFlatConfig } from "eslint-flat-config-utils";

export * from "@sxzz/eslint-config";
export * from "./utils.js";

export function danielwaltz(...userConfigs: ResolvableFlatConfig[]) {
const composer = defineFlatConfigs(...userConfigs);
export function danielwaltz<
TConfig extends BaseConfig = BaseConfig,
TConfigNames extends string = BaseConfigNames,
>(...userConfigs: ResolvableFlatConfig<TConfig>[]) {
const composer = defineFlatConfigs<TConfig, TConfigNames>(...userConfigs);

composer.prepend(sxzz());

composer.append(unicornConfigs());
composer.append(unicornConfigs<TConfig>());

if (hasVue) composer.append(vueConfigs());
if (hasVue) composer.append(vueConfigs<TConfig>());

return composer;
}
5 changes: 5 additions & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import type { Linter } from "eslint";
import type { DefaultConfigNamesMap } from "eslint-flat-config-utils";

export type BaseConfig = Linter.Config<Linter.RulesRecord>;
export type BaseConfigNames = keyof DefaultConfigNamesMap;
16 changes: 7 additions & 9 deletions src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import {
composer,
type FlatConfigComposer,
type ResolvableFlatConfig,
} from "eslint-flat-config-utils";
import { composer, type ResolvableFlatConfig } from "eslint-flat-config-utils";
import type { BaseConfig, BaseConfigNames } from "./types.js";

export function defineFlatConfigs(
...configs: ResolvableFlatConfig[]
): FlatConfigComposer {
return composer(...configs);
export function defineFlatConfigs<
TConfig extends BaseConfig = BaseConfig,
TConfigNames extends string = BaseConfigNames,
>(...configs: ResolvableFlatConfig<TConfig>[]) {
return composer<TConfig, TConfigNames>(...configs);
}

0 comments on commit 29fda64

Please sign in to comment.