dd-trace
Version:
Datadog APM tracing client for JavaScript
54 lines (45 loc) • 1.33 kB
JavaScript
const dc = require('dc-polyfill')
const {
filename,
loadChannel,
matchVersion
} = require('./register.js')
const hooks = require('./hooks')
const instrumentations = require('./instrumentations')
const log = require('../../../dd-trace/src/log')
const CHANNEL = 'dd-trace:bundler:load'
if (!dc.subscribe) {
dc.subscribe = (channel, cb) => {
dc.channel(channel).subscribe(cb)
}
}
if (!dc.unsubscribe) {
dc.unsubscribe = (channel, cb) => {
if (dc.channel(channel).hasSubscribers) {
dc.channel(channel).unsubscribe(cb)
}
}
}
dc.subscribe(CHANNEL, (payload) => {
try {
hooks[payload.package]()
} catch (err) {
log.error('esbuild-wrapped %s missing in list of hooks', payload.package)
throw err
}
if (!instrumentations[payload.package]) {
log.error('esbuild-wrapped %s missing in list of instrumentations', payload.package)
return
}
for (const { name, file, versions, hook } of instrumentations[payload.package]) {
if (payload.path !== filename(name, file)) continue
if (!matchVersion(payload.version, versions)) continue
try {
loadChannel.publish({ name, version: payload.version, file })
payload.module = hook(payload.module, payload.version)
} catch (e) {
log.error('Error executing bundler hook', e)
}
}
})