UNPKG

express-form2

Version:

Form validation and data filtering for Express

87 lines (68 loc) 2.24 kB
var extend = require( 'node.extend' ); var utils = require( './utils' ); var filters = require( './filters' ); var validators = require( './validators' ); var validator = require( 'validator' ); var FilterPrototype = validator.Filter.prototype; var externalFilter = new validator.Filter(); var Field = function ( prop, label, msg ){ var self = this; var tasks = []; label = label || prop; this.name = prop; this.__required = false; this.__isArray = false; this.msg = msg; this.add = function ( func ){ tasks.push( func ); return this; }; this.run_tasks = function ( val ){ tasks.forEach( function ( rule ){ var result = rule( val, self.src ); // Pass src for 'equals' rule. if( result === undefined || result === null ) return; if( result.valid ) return; if( result.error ){ // If this field is not required and it doesn't have a val, ignore error. if( !utils.hasValue( val ) && !self.__required ) return; return self.errors.push( result.error.replace( '%s', label )); } val = result; }); return val; }; this.run = function ( src, form, opt ){ var val = utils.get( prop, form ) || utils.get( prop, src ); this.src = src; this.errors = []; this.__checkIsArray = this.__isArray; if( opt.autoTrim ){ tasks.unshift( function ( val ){ return utils.typeof( val ) === 'string' ? FilterPrototype.trim.apply( externalFilter.sanitize( val )) : val; }); } if( this.__isArray ){ if( this.__forceArray ){ if( !utils.hasValue( val )) val = []; if( !Array.isArray( val )) val = [ val ]; val = val.map( this.run_tasks ); }else{ if( Array.isArray( val )){ val = val.map( this.run_tasks ); }else{ this.__checkIsArray = false; val = this.run_tasks( val ); } } }else{ val = this.run_tasks( val ); } utils.set( prop, form, val ); if( this.errors.length ) return this.errors; }; }; extend( Field.prototype, filters ); extend( Field.prototype, validators ); module.exports = Field;