UNPKG

softkave-js-utils

Version:

JavaScript & Typescript utility functions, types, and classes

22 lines (21 loc) 2.22 kB
export type ExtractFieldTransformer<T, TResult = any, TExtraArgs = any, TData = any> = (val: T, extraArgs: TExtraArgs, data: TData) => TResult; export type ExtractFieldsDefaultScalarTypes = undefined | boolean | string | number | bigint | symbol | null | Date; export type ExtractFieldsFrom<T extends object, TResult extends Record<keyof T, any> = T, TExtraArgs = undefined, TScalarTypes = ExtractFieldsDefaultScalarTypes> = { [Key in keyof Required<T>]: T[Key] extends TScalarTypes | TScalarTypes[] ? boolean | ExtractFieldTransformer<T[Key], TResult[Key], TExtraArgs, T> : ExtractFieldTransformer<T[Key], TResult[Key], TExtraArgs, T>; }; export interface ExtractObjectPaths<T extends object, TResult extends Record<keyof T, any> = T, TExtraArgs = any> { object: T; extraArgs: TExtraArgs; result: TResult; scalarFields: string[]; scalarFieldsWithTransformers: Array<{ property: string; transformer: ExtractFieldTransformer<any>; }>; finalize?: (data: T, currentResult: TResult, extraArgs: TExtraArgs) => TResult; } export declare function getExtractFields<T extends object, TResult extends Record<keyof T, any> = T, TExtraArgs = any, TScalarTypes = ExtractFieldsDefaultScalarTypes>(data: ExtractFieldsFrom<T, TResult, TExtraArgs, TScalarTypes>, finalizeFn?: (data: T, currentResult: TResult, extraArgs: TExtraArgs) => TResult): ExtractObjectPaths<T, TResult, TExtraArgs>; export declare function extractFields<TObjectPaths extends ExtractObjectPaths<any>, TData extends Partial<Record<keyof TObjectPaths['object'], any>> = TObjectPaths['object']>(data: TData, paths: TObjectPaths, extraArgs?: TObjectPaths['extraArgs']): TObjectPaths['result']; export declare function makeExtract<T extends ExtractObjectPaths<any>>(fields: T): <T1 extends T["object"]>(data: Partial<Record<keyof T1, any>>) => T["result"]; export declare function makeExtractIfPresent<T extends ExtractObjectPaths<any>>(fields: T): <T1 extends T["object"]>(data?: Partial<Record<keyof T1, any>> | undefined) => T["result"] | undefined; export declare function makeListExtract<T extends ExtractObjectPaths<any>>(fields: T): <T1 extends T["object"]>(data: Partial<Record<keyof T1, any>>[]) => T["result"][];