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