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.
		
		
		
		
		
			
		
			
				
					
					
						
							95 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							95 lines
						
					
					
						
							1.9 KiB
						
					
					
				| /*!
 | |
|  * Module dependencies.
 | |
|  */
 | |
| 
 | |
| 'use strict';
 | |
| 
 | |
| const MongooseError = require('./');
 | |
| 
 | |
| 
 | |
| class ValidatorError extends MongooseError {
 | |
|   /**
 | |
|    * Schema validator error
 | |
|    *
 | |
|    * @param {Object} properties
 | |
|    * @api private
 | |
|    */
 | |
|   constructor(properties) {
 | |
|     let msg = properties.message;
 | |
|     if (!msg) {
 | |
|       msg = MongooseError.messages.general.default;
 | |
|     }
 | |
| 
 | |
|     const message = formatMessage(msg, properties);
 | |
|     super(message);
 | |
| 
 | |
|     properties = Object.assign({}, properties, { message: message });
 | |
|     this.properties = properties;
 | |
|     this.kind = properties.type;
 | |
|     this.path = properties.path;
 | |
|     this.value = properties.value;
 | |
|     this.reason = properties.reason;
 | |
|   }
 | |
| 
 | |
|   /*!
 | |
|    * toString helper
 | |
|    * TODO remove? This defaults to `${this.name}: ${this.message}`
 | |
|    */
 | |
|   toString() {
 | |
|     return this.message;
 | |
|   }
 | |
| 
 | |
|   /*!
 | |
|    * Ensure `name` and `message` show up in toJSON output re: gh-9296
 | |
|    */
 | |
| 
 | |
|   toJSON() {
 | |
|     return Object.assign({ name: this.name, message: this.message }, this);
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| Object.defineProperty(ValidatorError.prototype, 'name', {
 | |
|   value: 'ValidatorError'
 | |
| });
 | |
| 
 | |
| /*!
 | |
|  * The object used to define this validator. Not enumerable to hide
 | |
|  * it from `require('util').inspect()` output re: gh-3925
 | |
|  */
 | |
| 
 | |
| Object.defineProperty(ValidatorError.prototype, 'properties', {
 | |
|   enumerable: false,
 | |
|   writable: true,
 | |
|   value: null
 | |
| });
 | |
| 
 | |
| // Exposed for testing
 | |
| ValidatorError.prototype.formatMessage = formatMessage;
 | |
| 
 | |
| /*!
 | |
|  * Formats error messages
 | |
|  */
 | |
| 
 | |
| function formatMessage(msg, properties) {
 | |
|   if (typeof msg === 'function') {
 | |
|     return msg(properties);
 | |
|   }
 | |
| 
 | |
|   const propertyNames = Object.keys(properties);
 | |
|   for (const propertyName of propertyNames) {
 | |
|     if (propertyName === 'message') {
 | |
|       continue;
 | |
|     }
 | |
|     msg = msg.replace('{' + propertyName.toUpperCase() + '}', properties[propertyName]);
 | |
|   }
 | |
| 
 | |
|   return msg;
 | |
| }
 | |
| 
 | |
| /*!
 | |
|  * exports
 | |
|  */
 | |
| 
 | |
| module.exports = ValidatorError;
 |