import { KnownKeys } from './index'; import { TypeModificatorOptions } from '../defaultModificators/typeModificator'; import { DeepModificatorOptions } from '../defaultModificators/deepModificator'; import { AutocleanModificatorOptions } from '../defaultModificators/autocleanModificator'; import { DefaultModificatorOptions } from '../defaultModificators/defaultModificator'; import { ModificatorDefaultFormater, ModificatorInFormater, ModificatorOutFormater } from './formaters'; interface ModificatorsSchema { [k: string]: any; } export interface Modificators extends ModificatorsSchema { deep: DeepModificatorOptions; autoclean: AutocleanModificatorOptions; type: TypeModificatorOptions; default: DefaultModificatorOptions; } export type PartialModificators = Partial; export type ModificatorsNames = M extends Modificators ? KnownKeys : KnownKeys; export interface IModificator | unknown = unknown> { name: N extends ModificatorsNames ? N : ModificatorsNames; inFormater?: ModificatorInFormater; outFormater?: ModificatorOutFormater; defaultFormater?: ModificatorDefaultFormater; }