/*!
|
|
* Module dependencies.
|
|
*/
|
|
|
|
var MongooseError = require('../error.js');
|
|
|
|
/**
|
|
* Schema validator error
|
|
*
|
|
* @param {Object} properties
|
|
* @inherits MongooseError
|
|
* @api private
|
|
*/
|
|
|
|
function ValidatorError(properties) {
|
|
var msg = properties.message;
|
|
if (!msg) {
|
|
msg = MongooseError.messages.general.default;
|
|
}
|
|
|
|
var message = this.formatMessage(msg, properties);
|
|
MongooseError.call(this, message);
|
|
if (Error.captureStackTrace) {
|
|
Error.captureStackTrace(this);
|
|
} else {
|
|
this.stack = new Error().stack;
|
|
}
|
|
this.properties = properties;
|
|
this.name = 'ValidatorError';
|
|
this.kind = properties.type;
|
|
this.path = properties.path;
|
|
this.value = properties.value;
|
|
}
|
|
|
|
/*!
|
|
* Inherits from MongooseError
|
|
*/
|
|
|
|
ValidatorError.prototype = Object.create(MongooseError.prototype);
|
|
ValidatorError.prototype.constructor = MongooseError;
|
|
|
|
/*!
|
|
* 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
|
|
});
|
|
|
|
/*!
|
|
* Formats error messages
|
|
*/
|
|
|
|
ValidatorError.prototype.formatMessage = function(msg, properties) {
|
|
var propertyNames = Object.keys(properties);
|
|
for (var i = 0; i < propertyNames.length; ++i) {
|
|
var propertyName = propertyNames[i];
|
|
if (propertyName === 'message') {
|
|
continue;
|
|
}
|
|
msg = msg.replace('{' + propertyName.toUpperCase() + '}', properties[propertyName]);
|
|
}
|
|
return msg;
|
|
};
|
|
|
|
/*!
|
|
* toString helper
|
|
*/
|
|
|
|
ValidatorError.prototype.toString = function() {
|
|
return this.message;
|
|
};
|
|
|
|
/*!
|
|
* exports
|
|
*/
|
|
|
|
module.exports = ValidatorError;
|