UNPKG

bookish-potato-dto

Version:

A TypeScript DTO (Data Transfer Object) parsing and validation library. Define a schema once — get runtime validation and a fully inferred TypeScript type for free.

66 lines (65 loc) 3.6 kB
import { EnumAllowedGenericType, EnumType, PrimitiveMap } from '../_types'; import { ArrayDtoFieldDescriptor, ArrayFieldDescriptor, BooleanFieldDescriptor, CustomFieldDescriptor, DateFieldDescriptor, DtoFieldDescriptor, EnumFieldDescriptor, IntegerFieldDescriptor, NumberFieldDescriptor, RegexFieldDescriptor, SchemaMap, StringFieldDescriptor } from './field-descriptor.type'; import { ArrayDtoFieldOptions, ArrayFieldOptions, BooleanFieldOptions, CustomFieldOptions, DateFieldOptions, DtoFieldOptions, EnumFieldOptions, NumberFieldOptions, RegexFieldOptions, StringFieldOptions } from './field-options.type'; import { DtoDefinition } from './dto-definition.type'; import { InferDto } from './infer-dto.type'; /** * Namespace of field builder functions for the schema-first API. * Each builder returns a plain FieldDescriptor object. * * @example * const PersonDto = defineDto({ * name: field.string(), * age: field.integer({ strictDataTypes: true }), * }); */ /** * A field descriptor extended with `optional`, `nullable`, and * `optionalAndNullable` modifier methods. Each method returns a *new* * descriptor with the requested flag(s) merged into `options`. */ type WithModifiers<T extends { readonly options: object; }> = T & { optional: () => T & { options: { isOptional: true; }; }; nullable: () => T & { options: { isNullable: true; }; }; optionalAndNullable: () => T & { options: { isOptional: true; isNullable: true; }; }; }; export declare const field: { /** A string field. Replaces @StringProperty. */ readonly string: (options?: StringFieldOptions) => WithModifiers<StringFieldDescriptor>; /** A floating-point number field. Replaces @NumberProperty. */ readonly number: (options?: NumberFieldOptions) => WithModifiers<NumberFieldDescriptor>; /** An integer field. Replaces @IntegerProperty. */ readonly integer: (options?: NumberFieldOptions) => WithModifiers<IntegerFieldDescriptor>; /** A boolean field. Replaces @BooleanProperty. */ readonly boolean: (options?: BooleanFieldOptions) => WithModifiers<BooleanFieldDescriptor>; /** An enum field. Replaces @EnumProperty. */ readonly enum: <T extends EnumAllowedGenericType>(enumObj: EnumType<T>, options?: EnumFieldOptions<T>) => WithModifiers<EnumFieldDescriptor<T>>; /** A Date field. Replaces @DateProperty. */ readonly date: (options?: DateFieldOptions) => WithModifiers<DateFieldDescriptor>; /** A regex-validated string field. Replaces @RegexProperty. */ readonly regex: (pattern: RegExp, options?: RegexFieldOptions) => WithModifiers<RegexFieldDescriptor>; /** An array of primitives. Replaces @ArrayProperty. */ readonly array: <K extends keyof PrimitiveMap>(itemType: K, options?: ArrayFieldOptions<PrimitiveMap[K]>) => WithModifiers<ArrayFieldDescriptor<K>>; /** An array of nested DTOs. Replaces @ArrayDtoProperty. */ readonly arrayDto: <S extends SchemaMap>(dtoDefinition: DtoDefinition<S>, options?: ArrayDtoFieldOptions<InferDto<DtoDefinition<S>>>) => WithModifiers<ArrayDtoFieldDescriptor<S>>; /** A nested DTO field. Replaces @DtoProperty. */ readonly dto: <S extends SchemaMap>(dtoDefinition: DtoDefinition<S>, options?: DtoFieldOptions<InferDto<DtoDefinition<S>>>) => WithModifiers<DtoFieldDescriptor<S>>; /** A field with a fully custom parser. Replaces @CustomProperty. */ readonly custom: <T>(options: CustomFieldOptions<T>) => WithModifiers<CustomFieldDescriptor<T>>; }; export {};