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;
							 |