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
						
					
					
				| /*!
 | |
|  * 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;
 |