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.

35 lines (34 loc) 1.71 kB
import { NumberRange, PropertyData, PropertyParser, PropertyParserStrictDataTypes, StringLength } from '../types'; import { OpenApiSchema } from '../openapi'; export interface BaseFieldOptions<T> extends PropertyData<T> { /** * Manual overrides or additional metadata for OpenAPI generation. * Properties like 'type', 'format', or constraints (like 'minLength') * provided in this object will take precedence over auto-generated ones. */ readonly openApi?: OpenApiSchema; } export type StringFieldOptions = BaseFieldOptions<string> & StringLength; export type NumberFieldOptions = BaseFieldOptions<number> & PropertyParserStrictDataTypes & NumberRange; export type BooleanFieldOptions = BaseFieldOptions<boolean> & PropertyParserStrictDataTypes; export type EnumFieldOptions<T extends string | number> = BaseFieldOptions<T>; export type DateFieldOptions = BaseFieldOptions<Date>; export type RegexFieldOptions = BaseFieldOptions<string>; export interface ArrayFieldOptions<T> extends BaseFieldOptions<T[]> { readonly minLength?: number; readonly maxLength?: number; readonly strictDataTypes?: boolean; /** Per-item constraints when itemType === 'string' */ readonly stringsLength?: StringLength; /** Per-item constraints when itemType === 'number' */ readonly numbersRange?: NumberRange; } export interface ArrayDtoFieldOptions<T> extends BaseFieldOptions<T[]> { readonly minLength?: number; readonly maxLength?: number; } export type DtoFieldOptions<T> = BaseFieldOptions<T>; export interface CustomFieldOptions<T> extends BaseFieldOptions<T> { /** The parser instance to use for this field. */ readonly parser: PropertyParser<T>; }