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
TypeScript
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>;
}