export type TValue = object | string | number | boolean | null | undefined; export type TFunction = (...args: U) => T; export type Constructable = new (...args: U) => T; export type KeyOfUnion = T extends T ? keyof T : never; export type SetNonNullableKeys = T & { [K in U]-?: NonNullable; }; export type SetRequiredKeys = T & { [K in U]-?: T[K]; }; export type SetPartialKeys = Omit & { [K in U]?: T[K]; }; export type OmitNeverKeys = Pick>; export type OmitPartial = { [K in keyof T as (T[K] extends void | undefined ? never : K)]-?: T[K]; }; export type OmitRequired = { [K in keyof T as (T[K] extends void | undefined ? K : never)]-?: T[K]; }; export type PickWithType = Pick>; export type PickRequiredByKeys = T & { [K in U]-?: Pick; }; export type CheckKeyIsRequired = keyof T extends never ? false : ExtractRequiredKeys> extends never ? false : true; export type CheckKeyIsPartial = keyof T extends never ? false : ExtractPartialKeys> extends never ? false : true; export type ConvertToInstanceType = T extends Constructable ? InstanceType : T; export type ConvertTupleToUnion = T[number]; export type ConvertUndefinedKeysToOptionals = ExtractKeysWithType extends never ? T : SetPartialKeys>; export type ConvertUnionToTuple T, Q = (U extends never ? never : (arg: U) => never) extends (arg: infer I) => void ? I : never> = Q extends (arg: never) => infer R ? [...ConvertUnionToTuple>, R] : []; export type ExtractPartialKeys = keyof OmitRequired; export type ExtractRequiredKeys = keyof OmitPartial; export type ExtractKeysWithType = { [K in Q]-?: Extract extends never ? never : K; }[Q]; export type ExtractKeysWithoutType = { [K in Q]-?: T[K] extends U ? never : K; }[Q]; /** * Extracts parameters and return type of class method to tuple `[T, U[]]` * where `T` is return type and `U[]` is parameters * * @example * ```ts * class Test { * static build(type: string): Promise {...} * public hasType(type: string): boolean {...} * } * * type TTestBuildMethodContext = ExtractClassMethodContext; * // => [Promise, [string]] * * type TTestHasTypeMethodContext = ExtractClassMethodContext; * // => [boolean, [string]] * ``` */ export type ExtractClassMethodContext, K extends keyof T | keyof InstanceType> = (K extends keyof T ? T[K] : K extends keyof InstanceType ? InstanceType[K] : never) extends TFunction ? [R0, R1] : never; export type MergeObjects = keyof T2 extends never ? T1 : Omit & T2; export type MergeClasses, T2 extends Constructable> = keyof InstanceType extends never ? keyof T2 extends never ? T1 : Omit & T2 : Omit & Constructable, keyof InstanceType>> & T2; export type MergeClassesTuple[]> = T extends readonly [infer R0, ...infer RN] ? R0 extends Constructable ? RN extends readonly Constructable[] ? MergeClasses> : R0 : Constructable<{}> : Constructable<{}>; export type PartialDeep = { [K in keyof T]?: Extract extends never ? T[K] : PartialDeep> | Exclude; }; export type FlattenArrays = [ ...(T extends Array ? R extends unknown[][] ? FlattenArrays : R : T) ]; export type ConvertPathToObject = TPath extends `${infer R0}.${infer R1}` ? { [K in R0]: ConvertPathToObject; } : TPath extends string ? { [K in TPath]: TValue; } : never; export type ExtractObjectValueByPath = TPath extends `${infer R0}.${infer R1}` ? R0 extends keyof TObject ? Exclude extends object ? ExtractObjectValueByPath, R1> : TObject[R0] : never : TPath extends keyof TObject ? TObject[TPath] : never; //# sourceMappingURL=common.d.ts.map