softkave-js-utils
Version:
JavaScript & Typescript utility functions, types, and classes
22 lines (21 loc) • 2.22 kB
TypeScript
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"][];