| /** |
| * Copyright (c) 2014 Petka Antonov |
| * |
| * Permission is hereby granted, free of charge, to any person obtaining a copy |
| * of this software and associated documentation files (the "Software"), to deal |
| * in the Software without restriction, including without limitation the rights |
| * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| * copies of the Software, and to permit persons to whom the Software is |
| * furnished to do so, subject to the following conditions:</p> |
| * |
| * The above copyright notice and this permission notice shall be included in |
| * all copies or substantial portions of the Software. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
| * THE SOFTWARE. |
| * |
| */ |
| "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 |
| }; |