31 lines
865 B
TypeScript
31 lines
865 B
TypeScript
import type { Merge, SetRequired } from 'type-fest';
|
|
import type { ESLintConfig, KnownExtends, Settings } from '@aet/eslint-define-config';
|
|
import type { RuleOptions } from './index';
|
|
|
|
type OptionalObjectKey<T> = Exclude<
|
|
{
|
|
[Key in keyof T]: undefined | any[] extends T[Key]
|
|
? Key
|
|
: undefined | Record<any, any> extends T[Key]
|
|
? Key
|
|
: never;
|
|
}[keyof T],
|
|
undefined
|
|
>;
|
|
|
|
export type MiddlewareConfig = Merge<
|
|
SetRequired<ESLintConfig, OptionalObjectKey<ESLintConfig>>,
|
|
{ extends: KnownExtends[] }
|
|
>;
|
|
|
|
export interface MiddlewareFunctions {
|
|
addRules(rules: Partial<RuleOptions>): void;
|
|
addSettings(settings: Partial<Settings>): void;
|
|
}
|
|
|
|
export type Middleware = (config: MiddlewareConfig, helpers: MiddlewareFunctions) => void;
|
|
|
|
export function defineMiddleware(middleware: Middleware): Middleware {
|
|
return middleware;
|
|
}
|