UNPKG

@decaf-ts/decorator-validation

Version:
85 lines (84 loc) 6.21 kB
import { Model } from "./Model"; import { ObjectAccumulator } from "typed-object-accumulator"; import { Constructor } from "@decaf-ts/decoration"; import { ComparisonValidatorOptions } from "../validation/types"; import { ExtendedMetadata } from "../overrides/types"; type BuildableModel = Model & Record<PropertyKey, any>; export interface DecorateOption<M extends Model> { decorate(...decorators: PropertyDecorator[]): ModelBuilder<M>; } export declare class AttributeBuilder<M extends BuildableModel, N extends keyof M, T> implements DecorateOption<M> { protected parent: ModelBuilder<M>; readonly attr: N; readonly declaredType: T; constructor(parent: ModelBuilder<M>, attr: N, declaredType: T); private decorators; decorate(...decorators: PropertyDecorator[]): ModelBuilder<M>; undecorate(...decorators: PropertyDecorator[]): ModelBuilder<M>; required(messageOrMeta?: string | Record<string, any>): ModelBuilder<M>; min(valueOrMeta: number | Date | string | Record<string, any>, message?: string): ModelBuilder<M>; max(valueOrMeta: number | Date | string | Record<string, any>, message?: string): ModelBuilder<M>; step(valueOrMeta: number | Record<string, any>, message?: string): ModelBuilder<M>; minlength(valueOrMeta: number | Record<string, any>, message?: string): ModelBuilder<M>; maxlength(valueOrMeta: number | Record<string, any>, message?: string): ModelBuilder<M>; pattern(valueOrMeta: RegExp | string | Record<string, any>, message?: string): ModelBuilder<M>; email(messageOrMeta?: string | Record<string, any>): ModelBuilder<M>; url(messageOrMeta?: string | Record<string, any>): ModelBuilder<M>; type(valueOrMeta: Constructor | (() => Constructor) | (Constructor | (() => Constructor))[] | Record<string, any>, message?: string): ModelBuilder<M>; date(formatOrMeta?: string | Record<string, any>, message?: string): ModelBuilder<M>; password(valueOrMeta?: RegExp | string | Record<string, any>, message?: string): ModelBuilder<M>; list(clazzOrMeta: Constructor | (() => Constructor) | (Constructor | (() => Constructor))[] | Record<string, any>, collection?: "Array" | "Set", message?: string): ModelBuilder<M>; set(clazzOrMeta: Constructor | Record<string, any>, message?: string): ModelBuilder<M>; enum(valueOrMeta: any[] | Record<any, any> | Record<string, any>, message?: string): ModelBuilder<M>; option(value: any[] | Record<any, any>, message?: string): ModelBuilder<M>; private static isMetadataPayload; private static asMeta; private static resolveMessage; private static patternFromString; private resolveComparison; equals(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; eq(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; different(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; diff(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; lessThan(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; lt(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; lessThanOrEqual(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; lte(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; greaterThan(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; gt(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; greaterThanOrEqual(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; gte(propertyOrMeta: string | Record<string, any>, options?: Omit<ComparisonValidatorOptions, "async" | "description">): ModelBuilder<M>; description(desc: string): ModelBuilder<M>; /** * Applies the attribute metadata and decorators to the provided constructor. */ build(constructor: Constructor<M>): void; } declare class ListAttributeBuilder<M extends BuildableModel, N extends keyof M> { private readonly parent; private readonly attribute; private readonly collection; constructor(parent: ModelBuilder<M>, attribute: AttributeBuilder<M, N, any>, collection: "Array" | "Set"); ofPrimitives(clazz: Constructor | (() => Constructor) | (Constructor | (() => Constructor))[], message?: string): ModelBuilder<M>; ofModel<MM extends BuildableModel>(): ModelBuilder<MM>; } export declare class ModelBuilder<M extends BuildableModel = BuildableModel> extends ObjectAccumulator<M> { private attributes; private _name?; private _description?; private _parent?; setName(name: string): this; description(desc: string): this; private attribute; string<N extends keyof M>(attr: N): AttributeBuilder<M, N, StringConstructor>; number<N extends keyof M>(attr: N): AttributeBuilder<M, N, NumberConstructor>; date<N extends keyof M>(attr: N): AttributeBuilder<M, N, DateConstructor>; bigint<N extends keyof M>(attr: N): AttributeBuilder<M, N, BigIntConstructor>; instance<N extends keyof M>(clazz: Constructor<any>, attr: N): AttributeBuilder<M, N, Constructor<any>>; model<MM extends Model, N extends keyof M>(attr: N): ModelBuilder<MM>; listOf<N extends keyof M>(attr: N, collection?: "Array" | "Set"): ListAttributeBuilder<M, N>; build(): Constructor<M>; static builder<M extends BuildableModel = BuildableModel>(): ModelBuilder<M>; static from<N extends Model, M extends ExtendedMetadata<N>>(meta: M, name?: string): Constructor<N>; } export {};