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
			| 
								 
											4 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;
							 | 
						||
| 
								 | 
							
								};
							 |