dd-trace
Version:
Datadog APM tracing client for JavaScript
99 lines (87 loc) • 3.47 kB
JavaScript
/**
* @typedef {import('./helper').SupportedConfigurationsJson['supportedConfigurations']} SupportedConfigurations
*/
const EXPERIMENTAL_APPSEC_PREFIX = 'experimental.appsec'
const EXPERIMENTAL_IAST_PREFIX = 'experimental.iast'
const INGESTION_PREFIX = 'ingestion.'
/**
* @param {SupportedConfigurations} supportedConfigurations Mutated in place.
* @param {number} majorVersion
*/
function applyMajorOverrides (supportedConfigurations, majorVersion) {
if (majorVersion < 6) {
applyV5Overrides(supportedConfigurations)
return
}
for (const entries of Object.values(supportedConfigurations)) {
for (const entry of entries) {
if (Array.isArray(entry.configurationNames)) {
entry.configurationNames = entry.configurationNames.filter(
(name) =>
name !== EXPERIMENTAL_APPSEC_PREFIX &&
name !== EXPERIMENTAL_IAST_PREFIX &&
!name.startsWith(`${EXPERIMENTAL_APPSEC_PREFIX}.`) &&
!name.startsWith(`${EXPERIMENTAL_IAST_PREFIX}.`) &&
!name.startsWith(INGESTION_PREFIX)
)
if (entry.configurationNames.length === 0) delete entry.configurationNames
}
}
}
delete supportedConfigurations.DD_EXPERIMENTAL_APPSEC_STANDALONE_ENABLED
delete supportedConfigurations.DD_TRACE_EXPERIMENTAL_B3_ENABLED
/* eslint-disable eslint-rules/eslint-env-aliases */
for (const name of [
'DD_PROFILING_EXPERIMENTAL_CODEHOTSPOTS_ENABLED',
'DD_PROFILING_EXPERIMENTAL_CPU_ENABLED',
'DD_PROFILING_EXPERIMENTAL_ENDPOINT_COLLECTION_ENABLED',
'DD_PROFILING_EXPERIMENTAL_TIMELINE_ENABLED',
]) {
delete supportedConfigurations[name]
}
/* eslint-enable eslint-rules/eslint-env-aliases */
for (const canonical of [
'DD_PROFILING_CODEHOTSPOTS_ENABLED',
'DD_PROFILING_CPU_ENABLED',
'DD_PROFILING_ENDPOINT_COLLECTION_ENABLED',
'DD_PROFILING_TIMELINE_ENABLED',
]) {
dropAlias(supportedConfigurations[canonical], (alias) => alias.startsWith('DD_PROFILING_EXPERIMENTAL_'))
}
delete supportedConfigurations.DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED
// eslint-disable-next-line eslint-rules/eslint-env-aliases
dropAlias(supportedConfigurations.DD_RUNTIME_METRICS_RUNTIME_ID_ENABLED, 'DD_TRACE_EXPERIMENTAL_RUNTIME_ID_ENABLED')
}
/**
* @param {SupportedConfigurations} supportedConfigurations Mutated in place.
*/
function applyV5Overrides (supportedConfigurations) {
const startupLogsEntry = supportedConfigurations.DD_TRACE_STARTUP_LOGS?.[0]
if (startupLogsEntry) {
startupLogsEntry.default = 'false'
}
const iastEntry = supportedConfigurations.DD_IAST_SECURITY_CONTROLS_CONFIGURATION?.[0]
if (!iastEntry) return
iastEntry.configurationNames = [
iastEntry.internalPropertyName || iastEntry.configurationNames?.[0],
`${EXPERIMENTAL_IAST_PREFIX}.securityControlsConfiguration`,
]
delete iastEntry.internalPropertyName
}
/**
* @param {import('./helper').SupportedConfigurationEntry[] | undefined} entries
* @param {string | ((alias: string) => boolean)} dropPredicate
*/
function dropAlias (entries, dropPredicate) {
const entry = entries?.[0]
if (entry?.aliases === undefined) return
const matches = typeof dropPredicate === 'string'
? (alias) => alias === dropPredicate
: dropPredicate
entry.aliases = entry.aliases.filter((alias) => !matches(alias))
if (entry.aliases.length === 0) {
delete entry.aliases
}
}
module.exports = applyMajorOverrides