/** @module evolve-type.ts */ import { AnyFunction, AnyObject, ContainsAny, ContainsType, ExtractFunctionArguments, ExtractFunctionReturnValue, IsAny, KeySubset } from './helper-types'; declare type EvolvingValueNotAFunction = T; declare type BadEvolve = 'ERROR: Evolving / left-side function argument type does not match right-side corresponding value type'; declare type WrongKeys = 'ERROR: All keys on the type for the left-side object must be in the right-side object'; declare type Evolve10 = { 'evaluate': ContainsType<[E, I], {}> extends true ? {} : { [K in keyof I]: K extends keyof E ? E[K] extends AnyFunction ? IsAny[0]> extends true ? ExtractFunctionReturnValue : [I[K]] extends ExtractFunctionArguments ? ExtractFunctionReturnValue : BadEvolve : E[K] extends number | string | symbol | any[] ? EvolvingValueNotAFunction : Evolve10 : I[K]; }; 'done': ContainsAny<[E, I], {}, WrongKeys>; }[KeySubset extends true ? 'evaluate' : 'done']; declare type Evolve9 = { 'evaluate': ContainsType<[E, I], {}> extends true ? {} : { [K in keyof I]: K extends keyof E ? E[K] extends AnyFunction ? IsAny[0]> extends true ? ExtractFunctionReturnValue : [I[K]] extends ExtractFunctionArguments ? ExtractFunctionReturnValue : BadEvolve : E[K] extends number | string | symbol ? EvolvingValueNotAFunction : Evolve10 : I[K]; }; 'done': ContainsAny<[E, I], {}, WrongKeys>; }[KeySubset extends true ? 'evaluate' : 'done']; declare type Evolve8 = { 'evaluate': ContainsType<[E, I], {}> extends true ? {} : { [K in keyof I]: K extends keyof E ? E[K] extends AnyFunction ? IsAny[0]> extends true ? ExtractFunctionReturnValue : [I[K]] extends ExtractFunctionArguments ? ExtractFunctionReturnValue : BadEvolve : E[K] extends number | string | symbol ? EvolvingValueNotAFunction : Evolve9 : I[K]; }; 'done': ContainsAny<[E, I], {}, WrongKeys>; }[KeySubset extends true ? 'evaluate' : 'done']; declare type Evolve7 = { 'evaluate': ContainsType<[E, I], {}> extends true ? {} : { [K in keyof I]: K extends keyof E ? E[K] extends AnyFunction ? IsAny[0]> extends true ? ExtractFunctionReturnValue : [I[K]] extends ExtractFunctionArguments ? ExtractFunctionReturnValue : BadEvolve : E[K] extends number | string | symbol ? EvolvingValueNotAFunction : Evolve8 : I[K]; }; 'done': ContainsAny<[E, I], {}, WrongKeys>; }[KeySubset extends true ? 'evaluate' : 'done']; declare type Evolve6 = { 'evaluate': ContainsType<[E, I], {}> extends true ? {} : { [K in keyof I]: K extends keyof E ? E[K] extends AnyFunction ? IsAny[0]> extends true ? ExtractFunctionReturnValue : [I[K]] extends ExtractFunctionArguments ? ExtractFunctionReturnValue : BadEvolve : E[K] extends number | string | symbol ? EvolvingValueNotAFunction : Evolve7 : I[K]; }; 'done': ContainsAny<[E, I], {}, WrongKeys>; }[KeySubset extends true ? 'evaluate' : 'done']; declare type Evolve5 = { 'evaluate': ContainsType<[E, I], {}> extends true ? {} : { [K in keyof I]: K extends keyof E ? E[K] extends AnyFunction ? IsAny[0]> extends true ? ExtractFunctionReturnValue : [I[K]] extends ExtractFunctionArguments ? ExtractFunctionReturnValue : BadEvolve : E[K] extends number | string | symbol ? EvolvingValueNotAFunction : Evolve6 : I[K]; }; 'done': ContainsAny<[E, I], {}, WrongKeys>; }[KeySubset extends true ? 'evaluate' : 'done']; declare type Evolve4 = { 'evaluate': ContainsType<[E, I], {}> extends true ? {} : { [K in keyof I]: K extends keyof E ? E[K] extends AnyFunction ? IsAny[0]> extends true ? ExtractFunctionReturnValue : [I[K]] extends ExtractFunctionArguments ? ExtractFunctionReturnValue : BadEvolve : E[K] extends number | string | symbol ? EvolvingValueNotAFunction : Evolve5 : I[K]; }; 'done': ContainsAny<[E, I], {}, WrongKeys>; }[KeySubset extends true ? 'evaluate' : 'done']; declare type Evolve3 = { 'evaluate': ContainsType<[E, I], {}> extends true ? {} : { [K in keyof I]: K extends keyof E ? E[K] extends AnyFunction ? IsAny[0]> extends true ? ExtractFunctionReturnValue : [I[K]] extends ExtractFunctionArguments ? ExtractFunctionReturnValue : BadEvolve : E[K] extends number | string | symbol ? EvolvingValueNotAFunction : Evolve4 : I[K]; }; 'done': ContainsAny<[E, I], {}, WrongKeys>; }[KeySubset extends true ? 'evaluate' : 'done']; declare type Evolve2 = { 'evaluate': ContainsType<[E, I], {}> extends true ? {} : { [K in keyof I]: K extends keyof E ? E[K] extends AnyFunction ? IsAny[0]> extends true ? ExtractFunctionReturnValue : [I[K]] extends ExtractFunctionArguments ? ExtractFunctionReturnValue : BadEvolve : E[K] extends number | string | symbol ? EvolvingValueNotAFunction : Evolve3 : I[K]; }; 'done': ContainsAny<[E, I], {}, WrongKeys>; }[KeySubset extends true ? 'evaluate' : 'done']; export declare type Evolve = { 'evaluate': ContainsType<[E, I], {}> extends true ? {} : { [K in keyof I]: K extends keyof E ? E[K] extends AnyFunction ? IsAny[0]> extends true ? ExtractFunctionReturnValue : [I[K]] extends ExtractFunctionArguments ? ExtractFunctionReturnValue : BadEvolve : E[K] extends number | string | symbol ? EvolvingValueNotAFunction : Evolve2 : I[K]; }; 'done': ContainsAny<[E, I], {}, WrongKeys>; }[KeySubset extends true ? 'evaluate' : 'done']; export declare type EvolveRecursive[0]> = KeySubset extends true ? { [K in keyof I]: K extends keyof E ? E[K] extends AnyFunction ? [I[K]] extends ExtractFunctionArguments ? ExtractFunctionReturnValue : BadEvolve : EvolveRecursive : I[K]; } : ContainsAny<[E, I], {}, WrongKeys>; export {};