|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"use strict"; |
|
var global = require("./global.js"); |
|
var Objectfreeze = require("./es5.js").freeze; |
|
var util = require("./util.js"); |
|
var inherits = util.inherits; |
|
var notEnumerableProp = util.notEnumerableProp; |
|
var Error = global.Error; |
|
|
|
function markAsOriginatingFromRejection(e) { |
|
try { |
|
notEnumerableProp(e, "isAsync", true); |
|
} |
|
catch(ignore) {} |
|
} |
|
|
|
function originatesFromRejection(e) { |
|
if (e == null) return false; |
|
return ((e instanceof RejectionError) || |
|
e["isAsync"] === true); |
|
} |
|
|
|
function isError(obj) { |
|
return obj instanceof Error; |
|
} |
|
|
|
function canAttach(obj) { |
|
return isError(obj); |
|
} |
|
|
|
function subError(nameProperty, defaultMessage) { |
|
function SubError(message) { |
|
if (!(this instanceof SubError)) return new SubError(message); |
|
this.message = typeof message === "string" ? message : defaultMessage; |
|
this.name = nameProperty; |
|
if (Error.captureStackTrace) { |
|
Error.captureStackTrace(this, this.constructor); |
|
} |
|
} |
|
inherits(SubError, Error); |
|
return SubError; |
|
} |
|
|
|
var TypeError = global.TypeError; |
|
if (typeof TypeError !== "function") { |
|
TypeError = subError("TypeError", "type error"); |
|
} |
|
var RangeError = global.RangeError; |
|
if (typeof RangeError !== "function") { |
|
RangeError = subError("RangeError", "range error"); |
|
} |
|
var CancellationError = subError("CancellationError", "cancellation error"); |
|
var TimeoutError = subError("TimeoutError", "timeout error"); |
|
|
|
function RejectionError(message) { |
|
this.name = "RejectionError"; |
|
this.message = message; |
|
this.cause = message; |
|
this.isAsync = true; |
|
|
|
if (message instanceof Error) { |
|
this.message = message.message; |
|
this.stack = message.stack; |
|
} |
|
else if (Error.captureStackTrace) { |
|
Error.captureStackTrace(this, this.constructor); |
|
} |
|
|
|
} |
|
inherits(RejectionError, Error); |
|
|
|
var key = "__BluebirdErrorTypes__"; |
|
var errorTypes = global[key]; |
|
if (!errorTypes) { |
|
errorTypes = Objectfreeze({ |
|
CancellationError: CancellationError, |
|
TimeoutError: TimeoutError, |
|
RejectionError: RejectionError |
|
}); |
|
notEnumerableProp(global, key, errorTypes); |
|
} |
|
|
|
module.exports = { |
|
Error: Error, |
|
TypeError: TypeError, |
|
RangeError: RangeError, |
|
CancellationError: errorTypes.CancellationError, |
|
RejectionError: errorTypes.RejectionError, |
|
TimeoutError: errorTypes.TimeoutError, |
|
originatesFromRejection: originatesFromRejection, |
|
markAsOriginatingFromRejection: markAsOriginatingFromRejection, |
|
canAttach: canAttach |
|
}; |
|
|