import { Circ } from 'json10'; type DeepPartial = { [K in keyof T]?: T[K] extends object ? DeepPartial : T[K]; }; export type ModelValue = DeepPartial | Partial, any>>; type Constructor = new (...args: any[]) => T; type DecrementDepth = [never, 0, 1, 2, 3, 4, 5]; type MappingFrom = [Depth] extends [never] ? never : { [K in keyof T & string]: T[K] extends Primitive ? K : T[K] extends Array ? K | `${K}.${MappingFrom}` : K | `${K}.${MappingFrom}`; }[keyof T & string]; /** * Mapping schema that can be set from decorator * * @DefaultMapping(() => ({ * '': User, * 'book': Book, * 'book.author': Author, * })) * class User { } * */ export type EncodeSchema = { ''?: Constructor; } & { [K in MappingFrom]?: Constructor | [Constructor]; }; /** * Mapping schema returned or sended inside http headers */ export type EncodeSchemaString = { ''?: string; '[]'?: string[]; } & { [K in MappingFrom]?: string | string[]; }; type Primitive = string | number | boolean | bigint | symbol | null | undefined | Date | Function; export declare function DefaultMapping(mapping?: () => EncodeSchema): (target: Constructor) => void; export declare function DefaultModel(defaults?: () => ModelValue): (target: Constructor) => void; export declare function getDefaultModel(instanceOrClass: T | Constructor): ModelValue | undefined; export declare function getDefaultMappingSingleObjOrClass(instanceOrClass: T | Constructor): EncodeSchema | undefined; /** * This will be send in request header to later restore class mapping */ export declare function getMappingHeaderString(instanceOrClass: T | Constructor | (T | Constructor)[]): string; /** * * @param instanceOrClass class instance or class object * OR array of class instancess or class objects * @returns Mapping object ready to be JSON.stringify */ export declare function decodeMappingForHeaderJson(instanceOrClass: T | Constructor | (T | Constructor)[], options?: { useFirstArrayItemClassNameForAllElements?: boolean; }): EncodeSchemaString; export declare const encodeMapping: (input: any, schema: EncodeSchema | EncodeSchemaString, circular?: Circ[]) => T; export {};