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.
		
		
		
		
		
			
		
			
				
					70 lines
				
				2.3 KiB
			
		
		
			
		
	
	
					70 lines
				
				2.3 KiB
			| 
											3 years ago
										 | "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; | ||
|  | }; |