| "use strict"; |
| module.exports = function(Promise) { |
| var longStackTraces = false; |
| var contextStack = []; |
| |
| Promise.prototype._promiseCreated = function() {}; |
| Promise.prototype._pushContext = function() {}; |
| Promise.prototype._popContext = function() {return null;}; |
| Promise._peekContext = Promise.prototype._peekContext = function() {}; |
| |
| function Context() { |
| this._trace = new Context.CapturedTrace(peekContext()); |
| } |
| Context.prototype._pushContext = function () { |
| if (this._trace !== undefined) { |
| this._trace._promiseCreated = null; |
| contextStack.push(this._trace); |
| } |
| }; |
| |
| Context.prototype._popContext = function () { |
| if (this._trace !== undefined) { |
| var trace = contextStack.pop(); |
| var ret = trace._promiseCreated; |
| trace._promiseCreated = null; |
| return ret; |
| } |
| return null; |
| }; |
| |
| function createContext() { |
| if (longStackTraces) return new Context(); |
| } |
| |
| function peekContext() { |
| var lastIndex = contextStack.length - 1; |
| if (lastIndex >= 0) { |
| return contextStack[lastIndex]; |
| } |
| return undefined; |
| } |
| Context.CapturedTrace = null; |
| Context.create = createContext; |
| Context.deactivateLongStackTraces = function() {}; |
| Context.activateLongStackTraces = function() { |
| var Promise_pushContext = Promise.prototype._pushContext; |
| var Promise_popContext = Promise.prototype._popContext; |
| var Promise_PeekContext = Promise._peekContext; |
| var Promise_peekContext = Promise.prototype._peekContext; |
| var Promise_promiseCreated = Promise.prototype._promiseCreated; |
| Context.deactivateLongStackTraces = function() { |
| Promise.prototype._pushContext = Promise_pushContext; |
| Promise.prototype._popContext = Promise_popContext; |
| Promise._peekContext = Promise_PeekContext; |
| Promise.prototype._peekContext = Promise_peekContext; |
| Promise.prototype._promiseCreated = Promise_promiseCreated; |
| longStackTraces = false; |
| }; |
| longStackTraces = true; |
| Promise.prototype._pushContext = Context.prototype._pushContext; |
| Promise.prototype._popContext = Context.prototype._popContext; |
| Promise._peekContext = Promise.prototype._peekContext = peekContext; |
| Promise.prototype._promiseCreated = function() { |
| var ctx = this._peekContext(); |
| if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; |
| }; |
| }; |
| return Context; |
| }; |