dynamodb-toolbox
Version:
Lightweight and type-safe query builder for DynamoDB and TypeScript.
29 lines (28 loc) • 2.36 kB
TypeScript
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 {};