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.
		
		
		
		
		
			
		
			
				
					
					
						
							69 lines
						
					
					
						
							2.3 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							69 lines
						
					
					
						
							2.3 KiB
						
					
					
				
								"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;
							 | 
						|
								};
							 | 
						|
								
							 |