@decaf-ts/decorator-validation
Version:
simple decorator based validation engine
85 lines (84 loc) • 6.21 kB
TypeScript
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 {};