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.
116 lines
3.6 KiB
116 lines
3.6 KiB
"use strict"; |
|
var es5 = require("./es5"); |
|
var Objectfreeze = es5.freeze; |
|
var util = require("./util"); |
|
var inherits = util.inherits; |
|
var notEnumerableProp = util.notEnumerableProp; |
|
|
|
function subError(nameProperty, defaultMessage) { |
|
function SubError(message) { |
|
if (!(this instanceof SubError)) return new SubError(message); |
|
notEnumerableProp(this, "message", |
|
typeof message === "string" ? message : defaultMessage); |
|
notEnumerableProp(this, "name", nameProperty); |
|
if (Error.captureStackTrace) { |
|
Error.captureStackTrace(this, this.constructor); |
|
} else { |
|
Error.call(this); |
|
} |
|
} |
|
inherits(SubError, Error); |
|
return SubError; |
|
} |
|
|
|
var _TypeError, _RangeError; |
|
var Warning = subError("Warning", "warning"); |
|
var CancellationError = subError("CancellationError", "cancellation error"); |
|
var TimeoutError = subError("TimeoutError", "timeout error"); |
|
var AggregateError = subError("AggregateError", "aggregate error"); |
|
try { |
|
_TypeError = TypeError; |
|
_RangeError = RangeError; |
|
} catch(e) { |
|
_TypeError = subError("TypeError", "type error"); |
|
_RangeError = subError("RangeError", "range error"); |
|
} |
|
|
|
var methods = ("join pop push shift unshift slice filter forEach some " + |
|
"every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); |
|
|
|
for (var i = 0; i < methods.length; ++i) { |
|
if (typeof Array.prototype[methods[i]] === "function") { |
|
AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; |
|
} |
|
} |
|
|
|
es5.defineProperty(AggregateError.prototype, "length", { |
|
value: 0, |
|
configurable: false, |
|
writable: true, |
|
enumerable: true |
|
}); |
|
AggregateError.prototype["isOperational"] = true; |
|
var level = 0; |
|
AggregateError.prototype.toString = function() { |
|
var indent = Array(level * 4 + 1).join(" "); |
|
var ret = "\n" + indent + "AggregateError of:" + "\n"; |
|
level++; |
|
indent = Array(level * 4 + 1).join(" "); |
|
for (var i = 0; i < this.length; ++i) { |
|
var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; |
|
var lines = str.split("\n"); |
|
for (var j = 0; j < lines.length; ++j) { |
|
lines[j] = indent + lines[j]; |
|
} |
|
str = lines.join("\n"); |
|
ret += str + "\n"; |
|
} |
|
level--; |
|
return ret; |
|
}; |
|
|
|
function OperationalError(message) { |
|
if (!(this instanceof OperationalError)) |
|
return new OperationalError(message); |
|
notEnumerableProp(this, "name", "OperationalError"); |
|
notEnumerableProp(this, "message", message); |
|
this.cause = message; |
|
this["isOperational"] = true; |
|
|
|
if (message instanceof Error) { |
|
notEnumerableProp(this, "message", message.message); |
|
notEnumerableProp(this, "stack", message.stack); |
|
} else if (Error.captureStackTrace) { |
|
Error.captureStackTrace(this, this.constructor); |
|
} |
|
|
|
} |
|
inherits(OperationalError, Error); |
|
|
|
var errorTypes = Error["__BluebirdErrorTypes__"]; |
|
if (!errorTypes) { |
|
errorTypes = Objectfreeze({ |
|
CancellationError: CancellationError, |
|
TimeoutError: TimeoutError, |
|
OperationalError: OperationalError, |
|
RejectionError: OperationalError, |
|
AggregateError: AggregateError |
|
}); |
|
es5.defineProperty(Error, "__BluebirdErrorTypes__", { |
|
value: errorTypes, |
|
writable: false, |
|
enumerable: false, |
|
configurable: false |
|
}); |
|
} |
|
|
|
module.exports = { |
|
Error: Error, |
|
TypeError: _TypeError, |
|
RangeError: _RangeError, |
|
CancellationError: errorTypes.CancellationError, |
|
OperationalError: errorTypes.OperationalError, |
|
TimeoutError: errorTypes.TimeoutError, |
|
AggregateError: errorTypes.AggregateError, |
|
Warning: Warning |
|
};
|
|
|