You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					113 lines
				
				2.1 KiB
			
		
		
			
		
	
	
					113 lines
				
				2.1 KiB
			| 
											3 years ago
										 | /*! | ||
|  |  * Module requirements | ||
|  |  */ | ||
|  | 
 | ||
|  | 'use strict'; | ||
|  | 
 | ||
|  | const MongooseError = require('./mongooseError'); | ||
|  | const getConstructorName = require('../helpers/getConstructorName'); | ||
|  | const util = require('util'); | ||
|  | 
 | ||
|  | class ValidationError extends MongooseError { | ||
|  |   /** | ||
|  |    * Document Validation Error | ||
|  |    * | ||
|  |    * @api private | ||
|  |    * @param {Document} [instance] | ||
|  |    * @inherits MongooseError | ||
|  |    */ | ||
|  |   constructor(instance) { | ||
|  |     let _message; | ||
|  |     if (getConstructorName(instance) === 'model') { | ||
|  |       _message = instance.constructor.modelName + ' validation failed'; | ||
|  |     } else { | ||
|  |       _message = 'Validation failed'; | ||
|  |     } | ||
|  | 
 | ||
|  |     super(_message); | ||
|  | 
 | ||
|  |     this.errors = {}; | ||
|  |     this._message = _message; | ||
|  | 
 | ||
|  |     if (instance) { | ||
|  |       instance.errors = this.errors; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   /** | ||
|  |    * Console.log helper | ||
|  |    */ | ||
|  |   toString() { | ||
|  |     return this.name + ': ' + _generateMessage(this); | ||
|  |   } | ||
|  | 
 | ||
|  |   /*! | ||
|  |    * inspect helper | ||
|  |    */ | ||
|  |   inspect() { | ||
|  |     return Object.assign(new Error(this.message), this); | ||
|  |   } | ||
|  | 
 | ||
|  |   /*! | ||
|  |   * add message | ||
|  |   */ | ||
|  |   addError(path, error) { | ||
|  |     this.errors[path] = error; | ||
|  |     this.message = this._message + ': ' + _generateMessage(this); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | if (util.inspect.custom) { | ||
|  |   /*! | ||
|  |   * Avoid Node deprecation warning DEP0079 | ||
|  |   */ | ||
|  | 
 | ||
|  |   ValidationError.prototype[util.inspect.custom] = ValidationError.prototype.inspect; | ||
|  | } | ||
|  | 
 | ||
|  | /*! | ||
|  |  * Helper for JSON.stringify | ||
|  |  * Ensure `name` and `message` show up in toJSON output re: gh-9847 | ||
|  |  */ | ||
|  | Object.defineProperty(ValidationError.prototype, 'toJSON', { | ||
|  |   enumerable: false, | ||
|  |   writable: false, | ||
|  |   configurable: true, | ||
|  |   value: function() { | ||
|  |     return Object.assign({}, this, { name: this.name, message: this.message }); | ||
|  |   } | ||
|  | }); | ||
|  | 
 | ||
|  | 
 | ||
|  | Object.defineProperty(ValidationError.prototype, 'name', { | ||
|  |   value: 'ValidationError' | ||
|  | }); | ||
|  | 
 | ||
|  | /*! | ||
|  |  * ignore | ||
|  |  */ | ||
|  | 
 | ||
|  | function _generateMessage(err) { | ||
|  |   const keys = Object.keys(err.errors || {}); | ||
|  |   const len = keys.length; | ||
|  |   const msgs = []; | ||
|  |   let key; | ||
|  | 
 | ||
|  |   for (let i = 0; i < len; ++i) { | ||
|  |     key = keys[i]; | ||
|  |     if (err === err.errors[key]) { | ||
|  |       continue; | ||
|  |     } | ||
|  |     msgs.push(key + ': ' + err.errors[key].message); | ||
|  |   } | ||
|  | 
 | ||
|  |   return msgs.join(', '); | ||
|  | } | ||
|  | 
 | ||
|  | /*! | ||
|  |  * Module exports | ||
|  |  */ | ||
|  | 
 | ||
|  | module.exports = ValidationError; |