validations: support non-V8 browsers

Call `Error.captureStackTrace()` only when it is available.

Use `this.stack = (new Error).stack` when `captureStackTrace` is not
available but the `stack` property is (Firefox).
This commit is contained in:
Miroslav Bajtoš 2014-06-23 14:39:37 +02:00
parent ce8254125f
commit 3572ecd12d
1 changed files with 11 additions and 1 deletions

View File

@ -703,11 +703,21 @@ function ValidationError(obj) {
messages: obj.errors
};
Error.captureStackTrace(this, this.constructor);
if (Error.captureStackTrace) {
// V8 (Chrome, Opera, Node)
Error.captureStackTrace(this, this.constructor);
} else if (errorHasStackProperty) {
// Firefox
this.stack = (new Error).stack;
}
// Safari and PhantomJS initializes `error.stack` on throw
// Internet Explorer does not support `error.stack`
}
util.inherits(ValidationError, Error);
var errorHasStackProperty = !!(new Error).stack;
function formatErrors(errors) {
var DELIM = '; ';
errors = errors || {};