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