import * as mongoose from "mongoose"; import { IDocumentValidator } from "./IDocumentValidator"; import { DocumentValidator, IDocumentValidatorOptions } from "./DocumentValidator"; import { HookNextFunction } from "mongoose"; export interface IValidatableOptions extends IDocumentValidatorOptions { validator?: IDocumentValidator; } /** * mongoose model plugin to create the pre validate hook that performs * the validates based on the models schema and extra logic. * * @param {mongoose.Schema} schema * @param {IValidatableOptions} options */ export function validatable( schema: mongoose.Schema, options: IValidatableOptions = {} ) { const validator = options.validator || new DocumentValidator(schema, options); schema.pre("validate", function(next: HookNextFunction) { validator .validate(this) .then(() => next()) .catch((err: Error) => next(err)); }); } export * from "./config"; export * from "./DocumentValidator"; export * from "./IDocumentValidator";