dd-trace
Version:
Datadog APM tracing client for JavaScript
57 lines (48 loc) • 1.33 kB
JavaScript
const log = require('./log')
function addNonEmpty (carrier, key, value) {
if (key !== '') {
carrier[key] = value
}
}
function add (carrier, keyValuePairs) {
if (!carrier) return
try {
if (typeof keyValuePairs === 'string') {
let valueStart = 0
let keyStart = 0
for (let i = 0; i < keyValuePairs.length; i++) {
const char = keyValuePairs[i]
if (char === ':') {
if (valueStart === 0) {
valueStart = i
}
} else if (char === ',') {
valueStart ||= i
addNonEmpty(
carrier,
keyValuePairs.slice(keyStart, valueStart).trim(),
keyValuePairs.slice(valueStart + 1, i).trim()
)
keyStart = i + 1
valueStart = 0
}
}
if (keyValuePairs.at(-1) !== ',') {
valueStart ||= keyValuePairs.length
addNonEmpty(
carrier,
keyValuePairs.slice(keyStart, valueStart).trim(),
keyValuePairs.slice(valueStart + 1).trim()
)
}
} else if (Array.isArray(keyValuePairs)) {
return keyValuePairs.forEach(tags => add(carrier, tags))
} else {
Object.assign(carrier, keyValuePairs)
}
} catch (error) {
log.error('Error adding tags', error)
}
}
module.exports = { add }