Comparing version 0.8.0-beta.5 to 0.8.0-beta.6
@@ -1,1 +0,1 @@ | ||
module.exports = '0.8.0-beta.5' | ||
module.exports = '0.8.0-beta.6' |
{ | ||
"name": "dd-trace", | ||
"version": "0.8.0-beta.5", | ||
"version": "0.8.0-beta.6", | ||
"description": "Datadog APM tracing client for JavaScript", | ||
@@ -41,3 +41,2 @@ "main": "index.js", | ||
"async-hook-jl": "^1.7.6", | ||
"emitter-listener": "^1.1.2", | ||
"int64-buffer": "^0.1.9", | ||
@@ -44,0 +43,0 @@ "koalas": "^1.0.2", |
'use strict' | ||
const shimmer = require('shimmer') | ||
const wrapEmitter = require('emitter-listener') | ||
const SCOPE_SYMBOL = 'dd-trace@scope' | ||
/** | ||
@@ -75,22 +72,25 @@ * The Datadog Scope Manager. This is used for context propagation. | ||
_bindEmitter (emitter, span) { | ||
const scope = this | ||
if (this._datadog_events) return emitter | ||
function mark (listener) { | ||
if (!listener) { return } | ||
Object.defineProperty(emitter, '_datadog_events', { | ||
configurable: true, | ||
writable: true, | ||
value: {} | ||
}) | ||
listener[SCOPE_SYMBOL] = listener[SCOPE_SYMBOL] || [] | ||
listener[SCOPE_SYMBOL].push(scope._spanOrActive(span)) | ||
} | ||
this._tryWrap(emitter, [ | ||
'addListener', | ||
'prependListener', | ||
'on' | ||
], createWrapAddListener(this, span)) | ||
function prepare (listener) { | ||
if (!listener || !listener[SCOPE_SYMBOL]) { return listener } | ||
this._tryWrap(emitter, [ | ||
'removeListener', | ||
'off' | ||
], wrapRemoveListener) | ||
return listener[SCOPE_SYMBOL] | ||
.reduce((prev, next) => { | ||
return scope.bind(prev, next) | ||
}, listener) | ||
} | ||
this._tryWrap(emitter, [ | ||
'removeAllListeners' | ||
], wrapRemoveAllListeners) | ||
wrapEmitter(emitter, mark, prepare) | ||
return emitter | ||
@@ -129,4 +129,66 @@ } | ||
} | ||
_tryWrap (obj, methods, wrapper) { | ||
for (let i = 0, l = methods.length; i < l; i++) { | ||
if (obj[methods[i]]) { | ||
shimmer.wrap(obj, methods[i], wrapper) | ||
} | ||
} | ||
} | ||
} | ||
function createWrapAddListener (scope, span) { | ||
return function wrapAddListener (addListener) { | ||
return function addListenerWithTrace (eventName, listener) { | ||
if (!listener || listener._datadog_bound) return addListener.apply(this, arguments) | ||
const bound = scope.bind(listener, scope._spanOrActive(span)) | ||
bound._datadog_bound = true | ||
if (!this._datadog_events[eventName]) { | ||
this._datadog_events[eventName] = new Map() | ||
} | ||
if (!this._datadog_events[eventName][listener]) { | ||
this._datadog_events[eventName][listener] = [] | ||
} | ||
this._datadog_events[eventName][listener].push(bound) | ||
return addListener.call(this, eventName, bound) | ||
} | ||
} | ||
} | ||
function wrapRemoveListener (removeListener) { | ||
return function removeListenerWithTrace (eventName, listener) { | ||
const listeners = this._datadog_events[eventName] | ||
if (!listener || !listeners || !listeners[listener]) { | ||
return removeListener.apply(this, arguments) | ||
} | ||
let bound | ||
while ((bound = listeners.pop())) { | ||
this.removeListener(eventName, bound) | ||
} | ||
return removeListener.call(this, eventName, listener) | ||
} | ||
} | ||
function wrapRemoveAllListeners (removeAllListeners) { | ||
return function removeAllListenersWithTrace (eventName) { | ||
if (eventName) { | ||
this._datadog_events[eventName] = new Map() | ||
} else { | ||
this._datadog_events = {} | ||
} | ||
return removeAllListeners.call(this, eventName) | ||
} | ||
} | ||
module.exports = Scope |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
145992
20
4181
- Removedemitter-listener@^1.1.2
- Removedemitter-listener@1.1.2(transitive)