import { Schema } from '../schema'; import { CustomValidations, FactoryFunction, FieldMap, SchemaDef } from '../interfaces/schema.types'; import { CastOptions } from '../../utils/cast-strategy'; /** * Build the fields using the given definition. * If the [[obj]] is a schema instance, the data will be taken from the fields provided. * @function * @public * * @param {Schema|Object} obj the definition or schema instance * @param strict will drop all properties not defined in the schema * @returns {FieldMap} * @throws {Error} * * @example * ```ts * const fields = buildFields({ name: String, hasChild: { type: Boolean, default: true } }); * ``` */ export declare const buildFields: (obj: Schema | SchemaDef, strict?: boolean) => FieldMap; /** * Validate data using the schema definition. * @param data that is going to be validated * @param schema that will be used to validate * @param options * @throws BuildSchemaError, ValidationError * @example * ```ts * const data = { * name: "John", * age: "50" * }; * const schema = new Schema({ * name: String, * age: {type: Number, intVal: true} * }); * const strictSchema = new Schema({ * name: String, * age: {type: Number, intVal: true} * }, * { * validationStrategy: VALIDATION_STRATEGY.STRICT * }); * console.log(castSchema(data, schema)); // Print { name: "John", age: 50 } * console.log(castSchema(data, strictSchema)); // Throw "Property age must be of type Number" * ``` */ export declare const validate: (data: any, schema: Schema | SchemaDef, options?: CastOptions) => any; /** * Apply default values defined on schema to an object instance. * @param obj reference to object instance * @param schema definition will be used to determine default definitions * * @example * ```ts * const schema = { name: { type: String, default: 'John' }, hasChild: { type: Boolean, default: true } }; * const obj: any = applyDefaultValue(obj, schema) * * console.log(obj); * ``` */ export declare const applyDefaultValue: (obj: any, schema: Schema | SchemaDef) => any; /** * Register a custom type to Schema supported types. * @function * @param name * @param factory * @throws Error * @example * ```ts * registerType(Int8.name, (fieldName, opts) => new Int8(fieldName, opts.required)); * ``` */ export declare const registerType: (name: string, factory: FactoryFunction) => void; /** * Register custom validators to Schema validators register. * @function * @param validators * @throws Error * @example * ```ts * addValidators({ * email: (value) => { * regexp = new RegExp(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/); * if (!regexp.test(value)) { * throw new Error('Email address is invalid.') * } * } * }); * * const ContactSchema = new Schema({ * name: String, * contact: { type: String, validator: 'email' } * }); * ``` */ export declare const addValidators: (validators: CustomValidations) => void; export declare const mergeHooks: (hook: Record, other: Record) => { [x: string]: unknown[]; };