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