UNPKG

dynamodb-toolbox

Version:

Lightweight and type-safe query builder for DynamoDB and TypeScript.

29 lines (28 loc) 2.36 kB
import type { ComposeLeft } from 'hotscript'; import type { ITransformerDTO, SerializableTransformer, Transformer, TypedTransformer } from './transformer.js'; import type { TransformerDTOs, TypeModifiers } from './types.js'; export declare class Pipe<TRANSFORMERS extends Transformer[] = Transformer[]> implements TypedTransformer<ReturnType<TRANSFORMERS[0]['decode']>, Parameters<TRANSFORMERS[0]['encode']>[0], ReturnType<LastTransformer<TRANSFORMERS>['encode']>, ComposeLeft<TypeModifiers<TRANSFORMERS>>> { _typeModifier: ComposeLeft<TypeModifiers<TRANSFORMERS>>; transformerId: 'pipe'; transformers: TRANSFORMERS; encode: (decoded: Parameters<TRANSFORMERS[0]['encode']>[0]) => ReturnType<LastTransformer<TRANSFORMERS>['encode']>; decode: (encoded: ReturnType<LastTransformer<TRANSFORMERS>['encode']>) => ReturnType<TRANSFORMERS[0]['decode']>; constructor(transformers: TRANSFORMERS); pipe<TRANSFORMER extends Transformer<ReturnType<LastTransformer<TRANSFORMERS>['encode']>>>(transformer: TRANSFORMER): Piped<[...TRANSFORMERS, TRANSFORMER]>; } export declare class SerializablePipe<TRANSFORMERS extends SerializableTransformer[] = SerializableTransformer[]> extends Pipe<TRANSFORMERS> implements SerializableTransformer<ReturnType<TRANSFORMERS[0]['decode']>, Parameters<TRANSFORMERS[0]['encode']>[0], ReturnType<LastTransformer<TRANSFORMERS>['encode']>, ComposeLeft<TypeModifiers<TRANSFORMERS>>, PipeDTO<TransformerDTOs<TRANSFORMERS>>> { constructor(transformers: TRANSFORMERS); toJSON(): PipeDTO<TransformerDTOs<TRANSFORMERS>>; } export interface PipeDTO<TRANSFORMER_DTOS extends ITransformerDTO[] = ITransformerDTO[]> { transformerId: 'pipe'; transformers: TRANSFORMER_DTOS; } type LastTransformer<TRANSFORMERS extends Transformer[]> = TRANSFORMERS extends [ infer TRANSFORMERS_HEAD, ...infer TRANSFORMERS_TAIL ] ? TRANSFORMERS_HEAD extends Transformer ? TRANSFORMERS_TAIL extends [Transformer, ...Transformer[]] ? LastTransformer<TRANSFORMERS_TAIL> : TRANSFORMERS_HEAD : never : TRANSFORMERS[0]; export type Piped<TRANSFORMERS extends Transformer[]> = TRANSFORMERS extends SerializableTransformer[] ? SerializablePipe<TRANSFORMERS> : Pipe<TRANSFORMERS>; type Piper = <TRANSFORMERS extends Transformer[]>(...transformers: TRANSFORMERS) => Piped<TRANSFORMERS>; export declare const pipe: Piper; export {};