dd-trace 5.53.0 → 5.55.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 +2 -1
- package/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/index.d.ts +33 -16
- package/initialize.mjs +5 -6
- package/package.json +40 -38
- package/packages/datadog-code-origin/index.js +22 -4
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +52 -35
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +6 -9
- package/packages/datadog-instrumentations/src/cucumber.js +108 -68
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +5 -5
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
- package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +201 -143
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +49 -65
- package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
- package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +30 -37
- package/packages/datadog-instrumentations/src/mysql2.js +53 -47
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -0
- package/packages/datadog-instrumentations/src/nyc.js +3 -2
- package/packages/datadog-instrumentations/src/openai.js +22 -24
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +3 -5
- package/packages/datadog-instrumentations/src/playwright.js +123 -83
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +4 -4
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +30 -32
- package/packages/datadog-instrumentations/src/tedious.js +2 -3
- package/packages/datadog-instrumentations/src/vitest.js +87 -52
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +60 -4
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- package/packages/datadog-plugin-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +10 -8
- package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +23 -13
- package/packages/datadog-plugin-http2/src/client.js +24 -25
- package/packages/datadog-plugin-jest/src/index.js +26 -23
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +39 -14
- package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
- package/packages/datadog-plugin-mysql/src/index.js +22 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +7 -6
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +12 -18
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +25 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +2 -4
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +52 -35
- package/packages/datadog-shimmer/src/shimmer.js +4 -8
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +5 -5
- package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/reporter.js +232 -41
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
- package/packages/dd-trace/src/azure_metadata.js +9 -9
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +159 -129
- package/packages/dd-trace/src/config_stable.js +10 -7
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +2 -2
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
- package/packages/dd-trace/src/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +7 -6
- package/packages/dd-trace/src/encode/0.4.js +14 -11
- package/packages/dd-trace/src/encode/0.5.js +4 -6
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +7 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +4 -3
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +5 -2
- package/packages/dd-trace/src/exporters/common/util.js +4 -2
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +15 -9
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +7 -6
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
- package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
- package/packages/dd-trace/src/llmobs/index.js +21 -5
- package/packages/dd-trace/src/llmobs/noop.js +18 -20
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
- package/packages/dd-trace/src/llmobs/sdk.js +4 -3
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +129 -102
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +9 -8
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +3 -4
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +31 -31
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +4 -6
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
- package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +16 -20
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +0 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +28 -20
- package/packages/dd-trace/src/plugins/util/git.js +166 -12
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
- package/packages/dd-trace/src/plugins/util/test.js +315 -51
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
- package/packages/dd-trace/src/plugins/util/web.js +8 -8
- package/packages/dd-trace/src/priority_sampler.js +64 -53
- package/packages/dd-trace/src/profiling/config.js +51 -35
- package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
- package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +44 -6
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +21 -13
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +9 -10
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +8 -8
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
- package/packages/dd-trace/src/sampler.js +41 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +11 -4
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/span_processor.js +5 -4
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +2 -3
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +6 -18
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +8 -7
- package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +1 -6
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
-
const { addHook, channel
|
|
3
|
+
const { addHook, channel } = require('./helpers/instrument')
|
|
4
4
|
const shimmer = require('../../datadog-shimmer')
|
|
5
5
|
const log = require('../../dd-trace/src/log')
|
|
6
6
|
const {
|
|
@@ -15,7 +15,9 @@ const {
|
|
|
15
15
|
getIsFaultyEarlyFlakeDetection,
|
|
16
16
|
JEST_WORKER_LOGS_PAYLOAD_CODE,
|
|
17
17
|
addAttemptToFixStringToTestName,
|
|
18
|
-
removeAttemptToFixStringFromTestName
|
|
18
|
+
removeAttemptToFixStringFromTestName,
|
|
19
|
+
getTestEndLine,
|
|
20
|
+
isModifiedTest
|
|
19
21
|
} = require('../../dd-trace/src/plugins/util/test')
|
|
20
22
|
const {
|
|
21
23
|
getFormattedJestTestParameters,
|
|
@@ -47,6 +49,7 @@ const skippableSuitesCh = channel('ci:jest:test-suite:skippable')
|
|
|
47
49
|
const libraryConfigurationCh = channel('ci:jest:library-configuration')
|
|
48
50
|
const knownTestsCh = channel('ci:jest:known-tests')
|
|
49
51
|
const testManagementTestsCh = channel('ci:jest:test-management-tests')
|
|
52
|
+
const impactedTestsCh = channel('ci:jest:modified-tests')
|
|
50
53
|
|
|
51
54
|
const itrSkippedSuitesCh = channel('ci:jest:itr:skipped-suites')
|
|
52
55
|
|
|
@@ -54,8 +57,8 @@ const itrSkippedSuitesCh = channel('ci:jest:itr:skipped-suites')
|
|
|
54
57
|
// https://github.com/jestjs/jest/blob/1d682f21c7a35da4d3ab3a1436a357b980ebd0fa/packages/jest-worker/src/types.ts#L37
|
|
55
58
|
const CHILD_MESSAGE_CALL = 1
|
|
56
59
|
// Maximum time we'll wait for the tracer to flush
|
|
57
|
-
const FLUSH_TIMEOUT =
|
|
58
|
-
|
|
60
|
+
const FLUSH_TIMEOUT = 10_000
|
|
61
|
+
|
|
59
62
|
// https://github.com/jestjs/jest/blob/41f842a46bb2691f828c3a5f27fc1d6290495b82/packages/jest-circus/src/types.ts#L9C8-L9C54
|
|
60
63
|
const RETRY_TIMES = Symbol.for('RETRY_TIMES')
|
|
61
64
|
|
|
@@ -77,8 +80,8 @@ let isKnownTestsEnabled = false
|
|
|
77
80
|
let isTestManagementTestsEnabled = false
|
|
78
81
|
let testManagementTests = {}
|
|
79
82
|
let testManagementAttemptToFixRetries = 0
|
|
80
|
-
|
|
81
|
-
|
|
83
|
+
let isImpactedTestsEnabled = false
|
|
84
|
+
let modifiedTests = {}
|
|
82
85
|
|
|
83
86
|
const testContexts = new WeakMap()
|
|
84
87
|
const originalTestFns = new WeakMap()
|
|
@@ -150,6 +153,7 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
150
153
|
this.isDiEnabled = this.testEnvironmentOptions._ddIsDiEnabled
|
|
151
154
|
this.isKnownTestsEnabled = this.testEnvironmentOptions._ddIsKnownTestsEnabled
|
|
152
155
|
this.isTestManagementTestsEnabled = this.testEnvironmentOptions._ddIsTestManagementTestsEnabled
|
|
156
|
+
this.isImpactedTestsEnabled = this.testEnvironmentOptions._ddIsImpactedTestsEnabled
|
|
153
157
|
|
|
154
158
|
if (this.isKnownTestsEnabled) {
|
|
155
159
|
try {
|
|
@@ -158,7 +162,7 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
158
162
|
this.knownTestsForThisSuite = hasKnownTests
|
|
159
163
|
? (knownTests?.jest?.[this.testSuite] || [])
|
|
160
164
|
: this.getKnownTestsForSuite(this.testEnvironmentOptions._ddKnownTests)
|
|
161
|
-
} catch
|
|
165
|
+
} catch {
|
|
162
166
|
// If there has been an error parsing the tests, we'll disable Early Flake Deteciton
|
|
163
167
|
this.isEarlyFlakeDetectionEnabled = false
|
|
164
168
|
this.isKnownTestsEnabled = false
|
|
@@ -184,6 +188,18 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
184
188
|
this.isTestManagementTestsEnabled = false
|
|
185
189
|
}
|
|
186
190
|
}
|
|
191
|
+
|
|
192
|
+
if (this.isImpactedTestsEnabled) {
|
|
193
|
+
try {
|
|
194
|
+
const hasImpactedTests = Object.keys(modifiedTests).length > 0
|
|
195
|
+
this.modifiedTestsForThisSuite = hasImpactedTests
|
|
196
|
+
? this.getModifiedTestForThisSuite(modifiedTests)
|
|
197
|
+
: this.getModifiedTestForThisSuite(this.testEnvironmentOptions._ddModifiedTests)
|
|
198
|
+
} catch (e) {
|
|
199
|
+
log.error('Error parsing impacted tests', e)
|
|
200
|
+
this.isImpactedTestsEnabled = false
|
|
201
|
+
}
|
|
202
|
+
}
|
|
187
203
|
}
|
|
188
204
|
|
|
189
205
|
getHasSnapshotTests () {
|
|
@@ -194,7 +210,7 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
194
210
|
try {
|
|
195
211
|
const { _snapshotData } = this.getVmContext().expect.getState().snapshotState
|
|
196
212
|
hasSnapshotTests = Object.keys(_snapshotData).length > 0
|
|
197
|
-
} catch
|
|
213
|
+
} catch {
|
|
198
214
|
// if we can't be sure, we'll err on the side of caution and assume it has snapshots
|
|
199
215
|
}
|
|
200
216
|
this.hasSnapshotTests = hasSnapshotTests
|
|
@@ -255,6 +271,19 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
255
271
|
return result
|
|
256
272
|
}
|
|
257
273
|
|
|
274
|
+
getModifiedTestForThisSuite (modifiedTests) {
|
|
275
|
+
if (this.modifiedTestsForThisSuite) {
|
|
276
|
+
return this.modifiedTestsForThisSuite
|
|
277
|
+
}
|
|
278
|
+
let modifiedTestsForThisSuite = modifiedTests
|
|
279
|
+
// If jest is using workers, modified tests are serialized to json.
|
|
280
|
+
// If jest runs in band, they are not.
|
|
281
|
+
if (typeof modifiedTestsForThisSuite === 'string') {
|
|
282
|
+
modifiedTestsForThisSuite = JSON.parse(modifiedTestsForThisSuite)
|
|
283
|
+
}
|
|
284
|
+
return modifiedTestsForThisSuite
|
|
285
|
+
}
|
|
286
|
+
|
|
258
287
|
// Generic function to handle test retries
|
|
259
288
|
retryTest (testName, retryCount, addRetryStringToTestName, retryType, event) {
|
|
260
289
|
// Retrying snapshots has proven to be problematic, so we'll skip them for now
|
|
@@ -288,18 +317,16 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
288
317
|
|
|
289
318
|
const setNameToParams = (name, params) => { this.nameToParams[name] = [...params] }
|
|
290
319
|
|
|
291
|
-
if (event.name === 'setup') {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
})
|
|
302
|
-
}
|
|
320
|
+
if (event.name === 'setup' && this.global.test) {
|
|
321
|
+
shimmer.wrap(this.global.test, 'each', each => function () {
|
|
322
|
+
const testParameters = getFormattedJestTestParameters(arguments)
|
|
323
|
+
const eachBind = each.apply(this, arguments)
|
|
324
|
+
return function () {
|
|
325
|
+
const [testName] = arguments
|
|
326
|
+
setNameToParams(testName, testParameters)
|
|
327
|
+
return eachBind.apply(this, arguments)
|
|
328
|
+
}
|
|
329
|
+
})
|
|
303
330
|
}
|
|
304
331
|
if (event.name === 'test_start') {
|
|
305
332
|
let isNewTest = false
|
|
@@ -326,12 +353,26 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
326
353
|
}
|
|
327
354
|
}
|
|
328
355
|
|
|
356
|
+
let isModified = false
|
|
357
|
+
if (this.isImpactedTestsEnabled) {
|
|
358
|
+
const testStartLine = getTestLineStart(event.test.asyncError, this.testSuite)
|
|
359
|
+
const testEndLine = getTestEndLine(event.test.fn, testStartLine)
|
|
360
|
+
isModified = isModifiedTest(
|
|
361
|
+
this.testSourceFile,
|
|
362
|
+
testStartLine,
|
|
363
|
+
testEndLine,
|
|
364
|
+
this.modifiedTestsForThisSuite,
|
|
365
|
+
'jest'
|
|
366
|
+
)
|
|
367
|
+
}
|
|
368
|
+
|
|
329
369
|
if (this.isKnownTestsEnabled) {
|
|
330
370
|
isNewTest = retriedTestsToNumAttempts.has(originalTestName)
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
if (this.isEarlyFlakeDetectionEnabled && (isNewTest || isModified)) {
|
|
374
|
+
numEfdRetry = retriedTestsToNumAttempts.get(originalTestName)
|
|
375
|
+
retriedTestsToNumAttempts.set(originalTestName, numEfdRetry + 1)
|
|
335
376
|
}
|
|
336
377
|
|
|
337
378
|
const isJestRetry = event.test?.invocations > 1
|
|
@@ -348,22 +389,25 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
348
389
|
isAttemptToFixRetry: numOfAttemptsToFixRetries > 0,
|
|
349
390
|
isJestRetry,
|
|
350
391
|
isDisabled,
|
|
351
|
-
isQuarantined
|
|
392
|
+
isQuarantined,
|
|
393
|
+
isModified
|
|
352
394
|
}
|
|
353
395
|
testContexts.set(event.test, ctx)
|
|
354
396
|
|
|
355
397
|
testStartCh.runStores(ctx, () => {
|
|
356
398
|
for (const hook of event.test.parent.hooks) {
|
|
357
399
|
let hookFn = hook.fn
|
|
358
|
-
if (
|
|
359
|
-
originalHookFns.set(hook, hookFn)
|
|
360
|
-
} else {
|
|
400
|
+
if (originalHookFns.has(hook)) {
|
|
361
401
|
hookFn = originalHookFns.get(hook)
|
|
402
|
+
} else {
|
|
403
|
+
originalHookFns.set(hook, hookFn)
|
|
362
404
|
}
|
|
405
|
+
// The rule has a bug, see https://github.com/sindresorhus/eslint-plugin-unicorn/issues/2164
|
|
406
|
+
// eslint-disable-next-line unicorn/consistent-function-scoping
|
|
363
407
|
const wrapperHook = function () {
|
|
364
408
|
return testFnCh.runStores(ctx, () => hookFn.apply(this, arguments))
|
|
365
409
|
}
|
|
366
|
-
// If we don't do this, the timeout will
|
|
410
|
+
// If we don't do this, the timeout will not be triggered
|
|
367
411
|
Object.defineProperty(wrapperHook, 'length', { value: hookFn.length })
|
|
368
412
|
hook.fn = wrapperHook
|
|
369
413
|
}
|
|
@@ -395,6 +439,27 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
395
439
|
)
|
|
396
440
|
}
|
|
397
441
|
}
|
|
442
|
+
if (this.isImpactedTestsEnabled) {
|
|
443
|
+
const testStartLine = getTestLineStart(event.asyncError, this.testSuite)
|
|
444
|
+
const testEndLine = getTestEndLine(event.fn, testStartLine)
|
|
445
|
+
const isModified = isModifiedTest(
|
|
446
|
+
this.testSourceFile,
|
|
447
|
+
testStartLine,
|
|
448
|
+
testEndLine,
|
|
449
|
+
this.modifiedTestsForThisSuite,
|
|
450
|
+
'jest'
|
|
451
|
+
)
|
|
452
|
+
if (isModified && !retriedTestsToNumAttempts.has(originalTestName) && this.isEarlyFlakeDetectionEnabled) {
|
|
453
|
+
retriedTestsToNumAttempts.set(originalTestName, 0)
|
|
454
|
+
this.retryTest(
|
|
455
|
+
event.testName,
|
|
456
|
+
earlyFlakeDetectionNumRetries,
|
|
457
|
+
addEfdStringToTestName,
|
|
458
|
+
'Early flake detection',
|
|
459
|
+
event
|
|
460
|
+
)
|
|
461
|
+
}
|
|
462
|
+
}
|
|
398
463
|
if (this.isKnownTestsEnabled) {
|
|
399
464
|
const isNew = !this.knownTestsForThisSuite?.includes(originalTestName)
|
|
400
465
|
if (isNew && !isSkipped && !retriedTestsToNumAttempts.has(originalTestName)) {
|
|
@@ -438,7 +503,7 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
438
503
|
// If it is, we'll set the failedAllTests flag to true if all the tests failed
|
|
439
504
|
// If all tests passed, we'll set the attemptToFixPassed flag to true
|
|
440
505
|
if (testStatuses.length === testManagementAttemptToFixRetries + 1) {
|
|
441
|
-
if (testStatuses.
|
|
506
|
+
if (testStatuses.includes('fail')) {
|
|
442
507
|
attemptToFixFailed = true
|
|
443
508
|
}
|
|
444
509
|
if (testStatuses.every(status => status === 'fail')) {
|
|
@@ -514,19 +579,16 @@ function getWrappedEnvironment (BaseEnvironment, jestVersion) {
|
|
|
514
579
|
}
|
|
515
580
|
}
|
|
516
581
|
if (event.name === 'test_skip' || event.name === 'test_todo') {
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
},
|
|
528
|
-
isDisabled: this.testManagementTestsForThisSuite?.disabled?.includes(getJestTestName(event.test))
|
|
529
|
-
})
|
|
582
|
+
testSkippedCh.publish({
|
|
583
|
+
test: {
|
|
584
|
+
name: getJestTestName(event.test),
|
|
585
|
+
suite: this.testSuite,
|
|
586
|
+
testSourceFile: this.testSourceFile,
|
|
587
|
+
displayName: this.displayName,
|
|
588
|
+
frameworkVersion: jestVersion,
|
|
589
|
+
testStartLine: getTestLineStart(event.test.asyncError, this.testSuite)
|
|
590
|
+
},
|
|
591
|
+
isDisabled: this.testManagementTestsForThisSuite?.disabled?.includes(getJestTestName(event.test))
|
|
530
592
|
})
|
|
531
593
|
}
|
|
532
594
|
}
|
|
@@ -644,9 +706,7 @@ function cliWrapper (cli, jestVersion) {
|
|
|
644
706
|
return runCLI.apply(this, arguments)
|
|
645
707
|
}
|
|
646
708
|
|
|
647
|
-
|
|
648
|
-
libraryConfigurationCh.publish({ onDone })
|
|
649
|
-
})
|
|
709
|
+
libraryConfigurationCh.publish({ onDone })
|
|
650
710
|
|
|
651
711
|
try {
|
|
652
712
|
const { err, libraryConfig } = await configurationPromise
|
|
@@ -659,6 +719,7 @@ function cliWrapper (cli, jestVersion) {
|
|
|
659
719
|
isKnownTestsEnabled = libraryConfig.isKnownTestsEnabled
|
|
660
720
|
isTestManagementTestsEnabled = libraryConfig.isTestManagementEnabled
|
|
661
721
|
testManagementAttemptToFixRetries = libraryConfig.testManagementAttemptToFixRetries
|
|
722
|
+
isImpactedTestsEnabled = libraryConfig.isImpactedTestsEnabled
|
|
662
723
|
}
|
|
663
724
|
} catch (err) {
|
|
664
725
|
log.error('Jest library configuration error', err)
|
|
@@ -669,18 +730,16 @@ function cliWrapper (cli, jestVersion) {
|
|
|
669
730
|
onDone = resolve
|
|
670
731
|
})
|
|
671
732
|
|
|
672
|
-
|
|
673
|
-
knownTestsCh.publish({ onDone })
|
|
674
|
-
})
|
|
733
|
+
knownTestsCh.publish({ onDone })
|
|
675
734
|
|
|
676
735
|
try {
|
|
677
736
|
const { err, knownTests: receivedKnownTests } = await knownTestsPromise
|
|
678
|
-
if (
|
|
679
|
-
knownTests = receivedKnownTests
|
|
680
|
-
} else {
|
|
737
|
+
if (err) {
|
|
681
738
|
// We disable EFD if there has been an error in the known tests request
|
|
682
739
|
isEarlyFlakeDetectionEnabled = false
|
|
683
740
|
isKnownTestsEnabled = false
|
|
741
|
+
} else {
|
|
742
|
+
knownTests = receivedKnownTests
|
|
684
743
|
}
|
|
685
744
|
} catch (err) {
|
|
686
745
|
log.error('Jest known tests error', err)
|
|
@@ -692,9 +751,7 @@ function cliWrapper (cli, jestVersion) {
|
|
|
692
751
|
onDone = resolve
|
|
693
752
|
})
|
|
694
753
|
|
|
695
|
-
|
|
696
|
-
skippableSuitesCh.publish({ onDone })
|
|
697
|
-
})
|
|
754
|
+
skippableSuitesCh.publish({ onDone })
|
|
698
755
|
|
|
699
756
|
try {
|
|
700
757
|
const { err, skippableSuites: receivedSkippableSuites } = await skippableSuitesPromise
|
|
@@ -711,9 +768,7 @@ function cliWrapper (cli, jestVersion) {
|
|
|
711
768
|
onDone = resolve
|
|
712
769
|
})
|
|
713
770
|
|
|
714
|
-
|
|
715
|
-
testManagementTestsCh.publish({ onDone })
|
|
716
|
-
})
|
|
771
|
+
testManagementTestsCh.publish({ onDone })
|
|
717
772
|
|
|
718
773
|
try {
|
|
719
774
|
const { err, testManagementTests: receivedTestManagementTests } = await testManagementTestsPromise
|
|
@@ -725,10 +780,25 @@ function cliWrapper (cli, jestVersion) {
|
|
|
725
780
|
}
|
|
726
781
|
}
|
|
727
782
|
|
|
783
|
+
if (isImpactedTestsEnabled) {
|
|
784
|
+
const impactedTestsPromise = new Promise((resolve) => {
|
|
785
|
+
onDone = resolve
|
|
786
|
+
})
|
|
787
|
+
|
|
788
|
+
impactedTestsCh.publish({ onDone })
|
|
789
|
+
|
|
790
|
+
try {
|
|
791
|
+
const { err, modifiedTests: receivedModifiedTests } = await impactedTestsPromise
|
|
792
|
+
if (!err) {
|
|
793
|
+
modifiedTests = receivedModifiedTests
|
|
794
|
+
}
|
|
795
|
+
} catch (err) {
|
|
796
|
+
log.error('Jest impacted tests error', err)
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
|
|
728
800
|
const processArgv = process.argv.slice(2).join(' ')
|
|
729
|
-
|
|
730
|
-
testSessionStartCh.publish({ command: `jest ${processArgv}`, frameworkVersion: jestVersion })
|
|
731
|
-
})
|
|
801
|
+
testSessionStartCh.publish({ command: `jest ${processArgv}`, frameworkVersion: jestVersion })
|
|
732
802
|
|
|
733
803
|
const result = await runCLI.apply(this, arguments)
|
|
734
804
|
|
|
@@ -748,19 +818,15 @@ function cliWrapper (cli, jestVersion) {
|
|
|
748
818
|
if (isUserCodeCoverageEnabled) {
|
|
749
819
|
try {
|
|
750
820
|
const { pct, total } = coverageMap.getCoverageSummary().lines
|
|
751
|
-
testCodeCoverageLinesTotal = total
|
|
752
|
-
} catch
|
|
821
|
+
testCodeCoverageLinesTotal = total === 0 ? 0 : pct
|
|
822
|
+
} catch {
|
|
753
823
|
// ignore errors
|
|
754
824
|
}
|
|
755
825
|
}
|
|
756
826
|
let status, error
|
|
757
827
|
|
|
758
828
|
if (success) {
|
|
759
|
-
|
|
760
|
-
status = 'skip'
|
|
761
|
-
} else {
|
|
762
|
-
status = 'pass'
|
|
763
|
-
}
|
|
829
|
+
status = numTotalTests === 0 && numTotalTestSuites === 0 ? 'skip' : 'pass'
|
|
764
830
|
} else {
|
|
765
831
|
status = 'fail'
|
|
766
832
|
error = new Error(`Failed test suites: ${numFailedTestSuites}. Failed tests: ${numFailedTests}`)
|
|
@@ -781,23 +847,22 @@ function cliWrapper (cli, jestVersion) {
|
|
|
781
847
|
}, FLUSH_TIMEOUT).unref()
|
|
782
848
|
})
|
|
783
849
|
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
onDone
|
|
799
|
-
})
|
|
850
|
+
testSessionFinishCh.publish({
|
|
851
|
+
status,
|
|
852
|
+
isSuitesSkipped,
|
|
853
|
+
isSuitesSkippingEnabled,
|
|
854
|
+
isCodeCoverageEnabled,
|
|
855
|
+
testCodeCoverageLinesTotal,
|
|
856
|
+
numSkippedSuites,
|
|
857
|
+
hasUnskippableSuites,
|
|
858
|
+
hasForcedToRunSuites,
|
|
859
|
+
error,
|
|
860
|
+
isEarlyFlakeDetectionEnabled,
|
|
861
|
+
isEarlyFlakeDetectionFaulty,
|
|
862
|
+
isTestManagementTestsEnabled,
|
|
863
|
+
onDone
|
|
800
864
|
})
|
|
865
|
+
|
|
801
866
|
const waitingResult = await Promise.race([flushPromise, timeoutPromise])
|
|
802
867
|
|
|
803
868
|
if (waitingResult === 'timeout') {
|
|
@@ -878,7 +943,7 @@ function cliWrapper (cli, jestVersion) {
|
|
|
878
943
|
}
|
|
879
944
|
|
|
880
945
|
function coverageReporterWrapper (coverageReporter) {
|
|
881
|
-
const CoverageReporter = coverageReporter.default
|
|
946
|
+
const CoverageReporter = coverageReporter.default ?? coverageReporter
|
|
882
947
|
|
|
883
948
|
/**
|
|
884
949
|
* If ITR is active, we're running fewer tests, so of course the total code coverage is reduced.
|
|
@@ -917,51 +982,46 @@ addHook({
|
|
|
917
982
|
}, cliWrapper)
|
|
918
983
|
|
|
919
984
|
function jestAdapterWrapper (jestAdapter, jestVersion) {
|
|
920
|
-
const adapter = jestAdapter.default
|
|
985
|
+
const adapter = jestAdapter.default ?? jestAdapter
|
|
921
986
|
const newAdapter = shimmer.wrapFunction(adapter, adapter => function () {
|
|
922
987
|
const environment = arguments[2]
|
|
923
988
|
if (!environment) {
|
|
924
989
|
return adapter.apply(this, arguments)
|
|
925
990
|
}
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
}
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
status = 'fail'
|
|
942
|
-
}
|
|
991
|
+
testSuiteStartCh.publish({
|
|
992
|
+
testSuite: environment.testSuite,
|
|
993
|
+
testEnvironmentOptions: environment.testEnvironmentOptions,
|
|
994
|
+
testSourceFile: environment.testSourceFile,
|
|
995
|
+
displayName: environment.displayName,
|
|
996
|
+
frameworkVersion: jestVersion
|
|
997
|
+
})
|
|
998
|
+
return adapter.apply(this, arguments).then(suiteResults => {
|
|
999
|
+
const { numFailingTests, skipped, failureMessage: errorMessage } = suiteResults
|
|
1000
|
+
let status = 'pass'
|
|
1001
|
+
if (skipped) {
|
|
1002
|
+
status = 'skipped'
|
|
1003
|
+
} else if (numFailingTests !== 0) {
|
|
1004
|
+
status = 'fail'
|
|
1005
|
+
}
|
|
943
1006
|
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
1007
|
+
/**
|
|
1008
|
+
* Child processes do not each request ITR configuration, so the jest's parent process
|
|
1009
|
+
* needs to pass them the configuration. This is done via _ddTestCodeCoverageEnabled, which
|
|
1010
|
+
* controls whether coverage is reported.
|
|
1011
|
+
*/
|
|
1012
|
+
if (environment.testEnvironmentOptions?._ddTestCodeCoverageEnabled) {
|
|
1013
|
+
const root = environment.repositoryRoot || environment.rootDir
|
|
951
1014
|
|
|
952
|
-
|
|
953
|
-
|
|
1015
|
+
const coverageFiles = getCoveredFilenamesFromCoverage(environment.global.__coverage__)
|
|
1016
|
+
.map(filename => getTestSuitePath(filename, root))
|
|
954
1017
|
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
testSuiteFinishCh.publish({ status: 'fail', error })
|
|
963
|
-
throw error
|
|
964
|
-
})
|
|
1018
|
+
testSuiteCodeCoverageCh.publish({ coverageFiles, testSuite: environment.testSourceFile })
|
|
1019
|
+
}
|
|
1020
|
+
testSuiteFinishCh.publish({ status, errorMessage })
|
|
1021
|
+
return suiteResults
|
|
1022
|
+
}).catch(error => {
|
|
1023
|
+
testSuiteFinishCh.publish({ status: 'fail', error })
|
|
1024
|
+
throw error
|
|
965
1025
|
})
|
|
966
1026
|
})
|
|
967
1027
|
if (jestAdapter.default) {
|
|
@@ -981,9 +1041,7 @@ addHook({
|
|
|
981
1041
|
|
|
982
1042
|
function configureTestEnvironment (readConfigsResult) {
|
|
983
1043
|
const { configs } = readConfigsResult
|
|
984
|
-
|
|
985
|
-
testSessionConfigurationCh.publish(configs.map(config => config.testEnvironmentOptions))
|
|
986
|
-
})
|
|
1044
|
+
testSessionConfigurationCh.publish(configs.map(config => config.testEnvironmentOptions))
|
|
987
1045
|
// We can't directly use isCodeCoverageEnabled when reporting coverage in `jestAdapterWrapper`
|
|
988
1046
|
// because `jestAdapterWrapper` runs in a different process. We have to go through `testEnvironmentOptions`
|
|
989
1047
|
configs.forEach(config => {
|
|
@@ -1065,6 +1123,7 @@ addHook({
|
|
|
1065
1123
|
_ddIsTestManagementTestsEnabled,
|
|
1066
1124
|
_ddTestManagementTests,
|
|
1067
1125
|
_ddTestManagementAttemptToFixRetries,
|
|
1126
|
+
_ddModifiedTests,
|
|
1068
1127
|
...restOfTestEnvironmentOptions
|
|
1069
1128
|
} = testEnvironmentOptions
|
|
1070
1129
|
|
|
@@ -1086,7 +1145,7 @@ addHook({
|
|
|
1086
1145
|
versions: ['>=24.8.0'],
|
|
1087
1146
|
file: 'build/SearchSource.js'
|
|
1088
1147
|
}, (searchSourcePackage, frameworkVersion) => {
|
|
1089
|
-
const SearchSource = searchSourcePackage.default
|
|
1148
|
+
const SearchSource = searchSourcePackage.default ?? searchSourcePackage
|
|
1090
1149
|
|
|
1091
1150
|
shimmer.wrap(SearchSource.prototype, 'getTestPaths', getTestPaths => async function () {
|
|
1092
1151
|
const testPaths = await getTestPaths.apply(this, arguments)
|
|
@@ -1140,7 +1199,7 @@ addHook({
|
|
|
1140
1199
|
versions: ['24.8.0 - 24.9.0']
|
|
1141
1200
|
}, jestConfigSyncWrapper)
|
|
1142
1201
|
|
|
1143
|
-
const LIBRARIES_BYPASSING_JEST_REQUIRE_ENGINE = [
|
|
1202
|
+
const LIBRARIES_BYPASSING_JEST_REQUIRE_ENGINE = new Set([
|
|
1144
1203
|
'selenium-webdriver',
|
|
1145
1204
|
'selenium-webdriver/chrome',
|
|
1146
1205
|
'selenium-webdriver/edge',
|
|
@@ -1149,11 +1208,11 @@ const LIBRARIES_BYPASSING_JEST_REQUIRE_ENGINE = [
|
|
|
1149
1208
|
'selenium-webdriver/ie',
|
|
1150
1209
|
'selenium-webdriver/chromium',
|
|
1151
1210
|
'winston'
|
|
1152
|
-
]
|
|
1211
|
+
])
|
|
1153
1212
|
|
|
1154
1213
|
function shouldBypassJestRequireEngine (moduleName) {
|
|
1155
1214
|
return (
|
|
1156
|
-
LIBRARIES_BYPASSING_JEST_REQUIRE_ENGINE.
|
|
1215
|
+
LIBRARIES_BYPASSING_JEST_REQUIRE_ENGINE.has(moduleName)
|
|
1157
1216
|
)
|
|
1158
1217
|
}
|
|
1159
1218
|
|
|
@@ -1161,7 +1220,7 @@ addHook({
|
|
|
1161
1220
|
name: 'jest-runtime',
|
|
1162
1221
|
versions: ['>=24.8.0']
|
|
1163
1222
|
}, (runtimePackage) => {
|
|
1164
|
-
const Runtime = runtimePackage.default
|
|
1223
|
+
const Runtime = runtimePackage.default ?? runtimePackage
|
|
1165
1224
|
|
|
1166
1225
|
shimmer.wrap(Runtime.prototype, 'requireModuleOrMock', requireModuleOrMock => function (from, moduleName) {
|
|
1167
1226
|
// TODO: do this for every library that we instrument
|
|
@@ -1188,17 +1247,17 @@ addHook({
|
|
|
1188
1247
|
}, (childProcessWorker) => {
|
|
1189
1248
|
const ChildProcessWorker = childProcessWorker.default
|
|
1190
1249
|
shimmer.wrap(ChildProcessWorker.prototype, 'send', send => function (request) {
|
|
1191
|
-
if (!isKnownTestsEnabled && !isTestManagementTestsEnabled) {
|
|
1250
|
+
if (!isKnownTestsEnabled && !isTestManagementTestsEnabled && !isImpactedTestsEnabled) {
|
|
1192
1251
|
return send.apply(this, arguments)
|
|
1193
1252
|
}
|
|
1194
1253
|
const [type] = request
|
|
1195
|
-
|
|
1254
|
+
|
|
1196
1255
|
// https://github.com/jestjs/jest/blob/1d682f21c7a35da4d3ab3a1436a357b980ebd0fa/packages/jest-worker/src/workers/ChildProcessWorker.ts#L424
|
|
1197
1256
|
if (type === CHILD_MESSAGE_CALL) {
|
|
1198
1257
|
// This is the message that the main process sends to the worker to run a test suite (=test file).
|
|
1199
1258
|
// In here we modify the config.testEnvironmentOptions to include the known tests for the suite.
|
|
1200
1259
|
// This way the suite only knows about the tests that are part of it.
|
|
1201
|
-
const args = request
|
|
1260
|
+
const args = request.at(-1)
|
|
1202
1261
|
if (args.length > 1) {
|
|
1203
1262
|
return send.apply(this, arguments)
|
|
1204
1263
|
}
|
|
@@ -1211,12 +1270,17 @@ addHook({
|
|
|
1211
1270
|
|
|
1212
1271
|
const suiteTestManagementTests = testManagementTests?.jest?.suites?.[testSuite]?.tests || {}
|
|
1213
1272
|
|
|
1273
|
+
const suiteModifiedTests = Object.keys(modifiedTests).length > 0
|
|
1274
|
+
? modifiedTests
|
|
1275
|
+
: {}
|
|
1276
|
+
|
|
1214
1277
|
args[0].config = {
|
|
1215
1278
|
...config,
|
|
1216
1279
|
testEnvironmentOptions: {
|
|
1217
1280
|
...config.testEnvironmentOptions,
|
|
1218
1281
|
_ddKnownTests: suiteKnownTests,
|
|
1219
|
-
_ddTestManagementTests: suiteTestManagementTests
|
|
1282
|
+
_ddTestManagementTests: suiteTestManagementTests,
|
|
1283
|
+
_ddModifiedTests: suiteModifiedTests
|
|
1220
1284
|
}
|
|
1221
1285
|
}
|
|
1222
1286
|
}
|
|
@@ -1226,21 +1290,15 @@ addHook({
|
|
|
1226
1290
|
shimmer.wrap(ChildProcessWorker.prototype, '_onMessage', _onMessage => function () {
|
|
1227
1291
|
const [code, data] = arguments[0]
|
|
1228
1292
|
if (code === JEST_WORKER_TRACE_PAYLOAD_CODE) { // datadog trace payload
|
|
1229
|
-
|
|
1230
|
-
workerReportTraceCh.publish(data)
|
|
1231
|
-
})
|
|
1293
|
+
workerReportTraceCh.publish(data)
|
|
1232
1294
|
return
|
|
1233
1295
|
}
|
|
1234
1296
|
if (code === JEST_WORKER_COVERAGE_PAYLOAD_CODE) { // datadog coverage payload
|
|
1235
|
-
|
|
1236
|
-
workerReportCoverageCh.publish(data)
|
|
1237
|
-
})
|
|
1297
|
+
workerReportCoverageCh.publish(data)
|
|
1238
1298
|
return
|
|
1239
1299
|
}
|
|
1240
1300
|
if (code === JEST_WORKER_LOGS_PAYLOAD_CODE) { // datadog logs payload
|
|
1241
|
-
|
|
1242
|
-
workerReportLogsCh.publish(data)
|
|
1243
|
-
})
|
|
1301
|
+
workerReportLogsCh.publish(data)
|
|
1244
1302
|
return
|
|
1245
1303
|
}
|
|
1246
1304
|
return _onMessage.apply(this, arguments)
|