dd-trace 5.104.0 → 5.105.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-3rdparty.csv +90 -102
- package/index.d.ts +82 -3
- package/package.json +15 -15
- package/packages/datadog-core/src/storage.js +1 -1
- package/packages/datadog-instrumentations/src/aerospike.js +1 -1
- package/packages/datadog-instrumentations/src/ai.js +8 -7
- package/packages/datadog-instrumentations/src/aws-sdk.js +13 -0
- package/packages/datadog-instrumentations/src/azure-cosmos.js +7 -0
- package/packages/datadog-instrumentations/src/azure-functions.js +3 -0
- package/packages/datadog-instrumentations/src/cucumber.js +78 -5
- package/packages/datadog-instrumentations/src/dns.js +54 -18
- package/packages/datadog-instrumentations/src/fastify.js +142 -82
- package/packages/datadog-instrumentations/src/graphql.js +188 -62
- package/packages/datadog-instrumentations/src/helpers/ai-messages.js +322 -14
- package/packages/datadog-instrumentations/src/helpers/hooks.js +4 -0
- package/packages/datadog-instrumentations/src/helpers/instrument.js +2 -1
- package/packages/datadog-instrumentations/src/helpers/openai-ai-guard.js +269 -0
- package/packages/datadog-instrumentations/src/helpers/promise-instrumentor.js +42 -0
- package/packages/datadog-instrumentations/src/helpers/register.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +2 -3
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/azure-cosmos.js +50 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/index.js +2 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/langgraph.js +4 -2
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/playwright.js +85 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +37 -236
- package/packages/datadog-instrumentations/src/hono.js +54 -3
- package/packages/datadog-instrumentations/src/http/server.js +9 -4
- package/packages/datadog-instrumentations/src/jest/coverage-backfill.js +163 -0
- package/packages/datadog-instrumentations/src/jest.js +360 -150
- package/packages/datadog-instrumentations/src/kafkajs.js +120 -16
- package/packages/datadog-instrumentations/src/mocha/main.js +128 -17
- package/packages/datadog-instrumentations/src/nats.js +182 -0
- package/packages/datadog-instrumentations/src/nyc.js +38 -1
- package/packages/datadog-instrumentations/src/openai.js +33 -18
- package/packages/datadog-instrumentations/src/oracledb.js +6 -1
- package/packages/datadog-instrumentations/src/pino.js +17 -5
- package/packages/datadog-instrumentations/src/playwright.js +515 -292
- package/packages/datadog-instrumentations/src/router.js +76 -32
- package/packages/datadog-instrumentations/src/stripe.js +1 -1
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +1 -1
- package/packages/datadog-plugin-azure-cosmos/src/index.js +144 -0
- package/packages/datadog-plugin-azure-event-hubs/src/producer.js +1 -1
- package/packages/datadog-plugin-azure-functions/src/index.js +5 -2
- package/packages/datadog-plugin-azure-service-bus/src/producer.js +1 -1
- package/packages/datadog-plugin-bunyan/src/index.js +28 -0
- package/packages/datadog-plugin-cucumber/src/index.js +17 -3
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +199 -28
- package/packages/datadog-plugin-cypress/src/support.js +69 -1
- package/packages/datadog-plugin-dns/src/lookup.js +8 -6
- package/packages/datadog-plugin-google-cloud-pubsub/src/pubsub-push-subscription.js +1 -1
- package/packages/datadog-plugin-graphql/src/execute.js +2 -0
- package/packages/datadog-plugin-graphql/src/resolve.js +64 -67
- package/packages/datadog-plugin-http/src/server.js +40 -15
- package/packages/datadog-plugin-jest/src/index.js +11 -3
- package/packages/datadog-plugin-jest/src/util.js +15 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +1 -1
- package/packages/datadog-plugin-kafkajs/src/producer.js +3 -0
- package/packages/datadog-plugin-langgraph/src/stream.js +1 -1
- package/packages/datadog-plugin-mocha/src/index.js +19 -4
- package/packages/datadog-plugin-mongodb-core/src/index.js +281 -40
- package/packages/datadog-plugin-nats/src/consumer.js +43 -0
- package/packages/datadog-plugin-nats/src/index.js +20 -0
- package/packages/datadog-plugin-nats/src/producer.js +62 -0
- package/packages/datadog-plugin-nats/src/util.js +33 -0
- package/packages/datadog-plugin-next/src/index.js +5 -3
- package/packages/datadog-plugin-openai/src/tracing.js +15 -2
- package/packages/datadog-plugin-oracledb/src/index.js +13 -2
- package/packages/datadog-plugin-pino/src/index.js +42 -0
- package/packages/datadog-plugin-playwright/src/index.js +4 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +1 -1
- package/packages/datadog-plugin-rhea/src/producer.js +1 -1
- package/packages/datadog-plugin-router/src/index.js +33 -44
- package/packages/datadog-plugin-selenium/src/index.js +1 -1
- package/packages/datadog-plugin-vitest/src/index.js +5 -13
- package/packages/datadog-plugin-winston/src/index.js +30 -0
- package/packages/datadog-shimmer/src/shimmer.js +33 -40
- package/packages/dd-trace/src/aiguard/index.js +1 -1
- package/packages/dd-trace/src/aiguard/sdk.js +1 -1
- package/packages/dd-trace/src/appsec/api_security_sampler.js +1 -1
- package/packages/dd-trace/src/appsec/index.js +1 -1
- package/packages/dd-trace/src/appsec/reporter.js +5 -6
- package/packages/dd-trace/src/appsec/sdk/user_blocking.js +1 -1
- package/packages/dd-trace/src/appsec/sdk/utils.js +1 -1
- package/packages/dd-trace/src/appsec/user_tracking.js +5 -4
- package/packages/dd-trace/src/baggage.js +7 -1
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +0 -1
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +25 -13
- package/packages/dd-trace/src/ci-visibility/test-optimization-cache.js +70 -6
- package/packages/dd-trace/src/config/generated-config-types.d.ts +6 -2
- package/packages/dd-trace/src/config/supported-configurations.json +27 -8
- package/packages/dd-trace/src/datastreams/writer.js +2 -4
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +5 -8
- package/packages/dd-trace/src/encode/0.4.js +124 -108
- package/packages/dd-trace/src/encode/0.5.js +114 -26
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +31 -23
- package/packages/dd-trace/src/encode/agentless-json.js +4 -2
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +32 -13
- package/packages/dd-trace/src/encode/span-stats.js +16 -16
- package/packages/dd-trace/src/encode/tags-processors.js +16 -0
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/genai/index.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +9 -7
- package/packages/dd-trace/src/llmobs/plugins/langgraph/index.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/openai/index.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +0 -16
- package/packages/dd-trace/src/llmobs/span_processor.js +3 -3
- package/packages/dd-trace/src/llmobs/tagger.js +9 -1
- package/packages/dd-trace/src/llmobs/telemetry.js +1 -1
- package/packages/dd-trace/src/llmobs/util.js +66 -3
- package/packages/dd-trace/src/log/index.js +1 -1
- package/packages/dd-trace/src/msgpack/chunk.js +394 -10
- package/packages/dd-trace/src/msgpack/index.js +96 -2
- package/packages/dd-trace/src/openfeature/encoding.js +70 -0
- package/packages/dd-trace/src/openfeature/flagging_provider.js +20 -0
- package/packages/dd-trace/src/openfeature/span-enrichment-hook.js +143 -0
- package/packages/dd-trace/src/openfeature/span-enrichment.js +149 -0
- package/packages/dd-trace/src/opentelemetry/span-helpers.js +4 -3
- package/packages/dd-trace/src/opentelemetry/span.js +1 -1
- package/packages/dd-trace/src/opentracing/propagation/log.js +18 -7
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +62 -67
- package/packages/dd-trace/src/opentracing/span.js +59 -19
- package/packages/dd-trace/src/opentracing/span_context.js +49 -0
- package/packages/dd-trace/src/plugins/ci_plugin.js +20 -20
- package/packages/dd-trace/src/plugins/database.js +7 -6
- package/packages/dd-trace/src/plugins/index.js +4 -0
- package/packages/dd-trace/src/plugins/log_injection.js +56 -0
- package/packages/dd-trace/src/plugins/log_plugin.js +3 -48
- package/packages/dd-trace/src/plugins/outbound.js +1 -1
- package/packages/dd-trace/src/plugins/plugin.js +15 -17
- package/packages/dd-trace/src/plugins/tracing.js +43 -5
- package/packages/dd-trace/src/plugins/util/test.js +236 -13
- package/packages/dd-trace/src/plugins/util/web.js +79 -65
- package/packages/dd-trace/src/priority_sampler.js +2 -2
- package/packages/dd-trace/src/profiling/profiler.js +2 -2
- package/packages/dd-trace/src/profiling/profilers/wall.js +10 -4
- package/packages/dd-trace/src/sampling_rule.js +7 -7
- package/packages/dd-trace/src/service-naming/schemas/v0/messaging.js +10 -0
- package/packages/dd-trace/src/service-naming/schemas/v1/messaging.js +8 -0
- package/packages/dd-trace/src/service-naming/source-resolver.js +46 -0
- package/packages/dd-trace/src/span_format.js +190 -58
- package/packages/dd-trace/src/spanleak.js +1 -1
- package/packages/dd-trace/src/standalone/index.js +3 -3
- package/packages/dd-trace/src/tagger.js +0 -2
- package/vendor/dist/@apm-js-collab/code-transformer/index.js +70 -39
- package/vendor/dist/@datadog/sketches-js/LICENSE +10 -36
- package/vendor/dist/@datadog/sketches-js/index.js +1 -1
- package/vendor/dist/protobufjs/index.js +1 -1
- package/vendor/dist/protobufjs/minimal/index.js +1 -1
- package/packages/dd-trace/src/msgpack/encoder.js +0 -308
- package/packages/dd-trace/src/plugins/structured_log_plugin.js +0 -9
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const { readFileSync } = require('node:fs')
|
|
4
|
+
const path = require('node:path')
|
|
5
|
+
|
|
6
|
+
const COVERAGE_BACKFILL_CACHE_DIRECTORY = 'dd-trace-coverage-backfill'
|
|
7
|
+
const TRANSFORM_OPTIONS = {
|
|
8
|
+
instrument: true,
|
|
9
|
+
supportsDynamicImport: true,
|
|
10
|
+
supportsExportNamespaceFrom: true,
|
|
11
|
+
supportsStaticESM: true,
|
|
12
|
+
supportsTopLevelAwait: true,
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function getCoverageBackfillFiles (skippableSuitesCoverage, rootDir, getTestSuitePath) {
|
|
16
|
+
const files = []
|
|
17
|
+
for (const filename of Object.keys(skippableSuitesCoverage || {})) {
|
|
18
|
+
const relativeFilename = path.isAbsolute(filename)
|
|
19
|
+
? getTestSuitePath(filename, rootDir)
|
|
20
|
+
: filename
|
|
21
|
+
files.push(relativeFilename)
|
|
22
|
+
}
|
|
23
|
+
return files
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Use a separate Jest cache namespace for synthetic backfill transforms so they cannot reuse or overwrite normal
|
|
27
|
+
// Jest transform cache entries produced during the user's test run.
|
|
28
|
+
function getCoverageBackfillConfig (config) {
|
|
29
|
+
if (!config?.cacheDirectory) return config
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
...config,
|
|
33
|
+
cacheDirectory: path.join(config.cacheDirectory, COVERAGE_BACKFILL_CACHE_DIRECTORY),
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function getCoverageBackfillDependencies (CoverageReporter, getCoverageBackfillRequire) {
|
|
38
|
+
const coverageWorkerRequire = getCoverageBackfillRequire(CoverageReporter)
|
|
39
|
+
|
|
40
|
+
return {
|
|
41
|
+
createFileCoverage: coverageWorkerRequire('istanbul-lib-coverage').createFileCoverage,
|
|
42
|
+
createScriptTransformer: coverageWorkerRequire('@jest/transform').createScriptTransformer,
|
|
43
|
+
readInitialCoverage: coverageWorkerRequire('istanbul-lib-instrument').readInitialCoverage,
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Some transformers expose Istanbul coverage as a literal that readInitialCoverage does not parse.
|
|
48
|
+
function extractCoverageDataObject (code) {
|
|
49
|
+
const marker = 'var coverageData = '
|
|
50
|
+
const start = code.indexOf(marker)
|
|
51
|
+
if (start === -1) return
|
|
52
|
+
|
|
53
|
+
let depth = 0
|
|
54
|
+
let quote
|
|
55
|
+
let escaped = false
|
|
56
|
+
let index = start + marker.length
|
|
57
|
+
for (; index < code.length; index++) {
|
|
58
|
+
const char = code[index]
|
|
59
|
+
if (quote) {
|
|
60
|
+
if (escaped) {
|
|
61
|
+
escaped = false
|
|
62
|
+
} else if (char === '\\') {
|
|
63
|
+
escaped = true
|
|
64
|
+
} else if (char === quote) {
|
|
65
|
+
quote = undefined
|
|
66
|
+
}
|
|
67
|
+
continue
|
|
68
|
+
}
|
|
69
|
+
if (char === '"' || char === "'" || char === '`') {
|
|
70
|
+
quote = char
|
|
71
|
+
} else if (char === '{') {
|
|
72
|
+
depth++
|
|
73
|
+
} else if (char === '}') {
|
|
74
|
+
depth--
|
|
75
|
+
if (depth === 0) {
|
|
76
|
+
index++
|
|
77
|
+
break
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (depth !== 0) return
|
|
82
|
+
|
|
83
|
+
try {
|
|
84
|
+
// eslint-disable-next-line no-new-func
|
|
85
|
+
return new Function(`return (${code.slice(start + marker.length, index)})`)()
|
|
86
|
+
} catch {
|
|
87
|
+
// Ignore transformer output that does not contain parseable Istanbul metadata.
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Read the Istanbul file metadata emitted by Jest's transformer.
|
|
92
|
+
function getCoverageDataFromCode (code, readInitialCoverage) {
|
|
93
|
+
return readInitialCoverage(code)?.coverageData || extractCoverageDataObject(code)
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function transformFileWithTransformers (absoluteFile, sourceText, transformers, readInitialCoverage) {
|
|
97
|
+
return Promise.all(transformers.map(transformer => {
|
|
98
|
+
return transformer.transformSourceAsync(absoluteFile, sourceText, TRANSFORM_OPTIONS)
|
|
99
|
+
.then(({ code }) => getCoverageDataFromCode(code, readInitialCoverage))
|
|
100
|
+
.catch(() => {})
|
|
101
|
+
})).then(coverageDataByContext => coverageDataByContext.find(Boolean))
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function getBackfillCoverageDataForFile (file, rootDir, transformers, coverageMap, readInitialCoverage) {
|
|
105
|
+
const absoluteFile = path.isAbsolute(file) ? file : path.join(rootDir, file)
|
|
106
|
+
if (coverageMap.data[absoluteFile]) return Promise.resolve()
|
|
107
|
+
|
|
108
|
+
let sourceText
|
|
109
|
+
try {
|
|
110
|
+
sourceText = readFileSync(absoluteFile, 'utf8')
|
|
111
|
+
} catch {
|
|
112
|
+
return Promise.resolve()
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
return transformFileWithTransformers(absoluteFile, sourceText, transformers, readInitialCoverage)
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Seed Jest's coverage map with files that did not run locally but are covered by backend meta.coverage.
|
|
119
|
+
function addCoverageBackfillUntestedFiles ({
|
|
120
|
+
coverageMap,
|
|
121
|
+
testContexts,
|
|
122
|
+
rootDir,
|
|
123
|
+
CoverageReporter,
|
|
124
|
+
coverageBackfillFiles,
|
|
125
|
+
getCoverageBackfillRequire,
|
|
126
|
+
}) {
|
|
127
|
+
if (!coverageBackfillFiles?.length || !coverageMap || !rootDir) return Promise.resolve()
|
|
128
|
+
|
|
129
|
+
let createFileCoverage, createScriptTransformer, readInitialCoverage
|
|
130
|
+
try {
|
|
131
|
+
({
|
|
132
|
+
createFileCoverage,
|
|
133
|
+
createScriptTransformer,
|
|
134
|
+
readInitialCoverage,
|
|
135
|
+
} = getCoverageBackfillDependencies(CoverageReporter, getCoverageBackfillRequire))
|
|
136
|
+
} catch {
|
|
137
|
+
return Promise.resolve()
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const contexts = [...(testContexts || [])]
|
|
141
|
+
return Promise.all(contexts.map(context => {
|
|
142
|
+
return createScriptTransformer(getCoverageBackfillConfig(context.config)).catch(() => {})
|
|
143
|
+
}))
|
|
144
|
+
.then(transformers => transformers.filter(Boolean))
|
|
145
|
+
.then(transformers => {
|
|
146
|
+
if (!transformers.length) return []
|
|
147
|
+
return Promise.all(coverageBackfillFiles.map(file => {
|
|
148
|
+
return getBackfillCoverageDataForFile(file, rootDir, transformers, coverageMap, readInitialCoverage)
|
|
149
|
+
}))
|
|
150
|
+
})
|
|
151
|
+
.then(coverageDataByFile => {
|
|
152
|
+
for (const coverageData of coverageDataByFile) {
|
|
153
|
+
if (coverageData && !coverageMap.data[coverageData.path]) {
|
|
154
|
+
coverageMap.addFileCoverage(createFileCoverage(coverageData))
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
})
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
module.exports = {
|
|
161
|
+
addCoverageBackfillUntestedFiles,
|
|
162
|
+
getCoverageBackfillFiles,
|
|
163
|
+
}
|