dd-trace 6.8.0 → 6.10.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/ci/diagnose.js +27 -25
- package/ci/init.js +6 -6
- package/ci/runbook.md +114 -20
- package/ci/test-optimization-validation/approval-artifacts.js +36 -3
- package/ci/test-optimization-validation/approval.js +78 -22
- package/ci/test-optimization-validation/blocker-category.js +24 -0
- package/ci/test-optimization-validation/ci-discovery.js +23 -17
- package/ci/test-optimization-validation/ci-package-scripts.js +34 -6
- package/ci/test-optimization-validation/ci-remediation.js +1 -1
- package/ci/test-optimization-validation/cli.js +280 -52
- package/ci/test-optimization-validation/command-blocker.js +159 -20
- package/ci/test-optimization-validation/command-output-policy.js +9 -3
- package/ci/test-optimization-validation/command-runner.js +9 -7
- package/ci/test-optimization-validation/environment.js +4 -2
- package/ci/test-optimization-validation/executable.js +15 -13
- package/ci/test-optimization-validation/execution-lock.js +70 -0
- package/ci/test-optimization-validation/framework-adapters/cucumber-validation.json +3 -0
- package/ci/test-optimization-validation/framework-adapters/cucumber.js +657 -5
- package/ci/test-optimization-validation/framework-adapters/vitest.js +517 -0
- package/ci/test-optimization-validation/generated-files.js +38 -28
- package/ci/test-optimization-validation/generated-test-contract.js +8 -4
- package/ci/test-optimization-validation/generated-verifier.js +24 -17
- package/ci/test-optimization-validation/literal-glob.js +52 -0
- package/ci/test-optimization-validation/manifest-loader.js +3 -0
- package/ci/test-optimization-validation/manifest-scaffold.js +300 -50
- package/ci/test-optimization-validation/manifest-schema.js +80 -17
- package/ci/test-optimization-validation/offline-fixtures.js +13 -4
- package/ci/test-optimization-validation/package-check.js +94 -0
- package/ci/test-optimization-validation/plan-writer.js +183 -10
- package/ci/test-optimization-validation/preflight-runner.js +110 -31
- package/ci/test-optimization-validation/project-build-artifact.js +31 -0
- package/ci/test-optimization-validation/redaction.js +18 -27
- package/ci/test-optimization-validation/report-writer.js +182 -48
- package/ci/test-optimization-validation/result-semantics.js +20 -3
- package/ci/test-optimization-validation/runner-command.js +40 -20
- package/ci/test-optimization-validation/runner-contract.js +79 -43
- package/ci/test-optimization-validation/scenarios/basic-reporting.js +59 -5
- package/ci/test-optimization-validation/scenarios/ci-wiring.js +141 -35
- package/ci/test-optimization-validation/scenarios/helpers.js +30 -6
- package/ci/test-optimization-validation/static-diagnosis.js +10 -3
- package/ci/test-optimization-validation/test-output.js +2 -1
- package/ci/test-optimization-validation/validation-blocker.js +21 -0
- package/ci/vitest-no-worker-init-setup.mjs +140 -42
- package/index.d.ts +140 -1
- package/init.js +1 -17
- package/initialize.mjs +11 -0
- package/loader-hook.mjs +6 -4
- package/package.json +8 -5
- package/packages/datadog-core/src/utils/src/parse-tags.js +0 -1
- package/packages/datadog-esbuild/src/utils.js +16 -1
- package/packages/datadog-instrumentations/src/ai.js +61 -34
- package/packages/datadog-instrumentations/src/bluebird.js +6 -6
- package/packages/datadog-instrumentations/src/claude-agent-sdk.js +81 -5
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +111 -6
- package/packages/datadog-instrumentations/src/cucumber.js +124 -47
- package/packages/datadog-instrumentations/src/dns.js +21 -2
- package/packages/datadog-instrumentations/src/electron.js +1 -0
- package/packages/datadog-instrumentations/src/fastify.js +3 -1
- package/packages/datadog-instrumentations/src/grpc/client.js +4 -2
- package/packages/datadog-instrumentations/src/helpers/callback-instrumentor.js +3 -1
- package/packages/datadog-instrumentations/src/helpers/hooks.js +2 -0
- package/packages/datadog-instrumentations/src/helpers/pool-acquire.js +629 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/index.js +34 -9
- package/packages/datadog-instrumentations/src/helpers/rewriter/instrumentations/webdriverio.js +199 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/loader.mjs +20 -2
- package/packages/datadog-instrumentations/src/helpers/rewriter/targets.js +32 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/targets.json +62 -0
- package/packages/datadog-instrumentations/src/helpers/rewriter/transforms.js +83 -1
- package/packages/datadog-instrumentations/src/helpers/router-helper.js +37 -6
- package/packages/datadog-instrumentations/src/jest/coverage-backfill.js +1 -1
- package/packages/datadog-instrumentations/src/jest.js +980 -234
- package/packages/datadog-instrumentations/src/mocha/main.js +108 -10
- package/packages/datadog-instrumentations/src/mocha/utils.js +66 -50
- package/packages/datadog-instrumentations/src/mocha/webdriverio-protocol.js +25 -0
- package/packages/datadog-instrumentations/src/mocha/worker.js +12 -18
- package/packages/datadog-instrumentations/src/mysql.js +46 -16
- package/packages/datadog-instrumentations/src/mysql2.js +119 -18
- package/packages/datadog-instrumentations/src/next.js +155 -23
- package/packages/datadog-instrumentations/src/openai.js +14 -0
- package/packages/datadog-instrumentations/src/path-to-regexp.js +67 -1
- package/packages/datadog-instrumentations/src/pg.js +209 -11
- package/packages/datadog-instrumentations/src/playwright.js +173 -79
- package/packages/datadog-instrumentations/src/promise-js.js +4 -4
- package/packages/datadog-instrumentations/src/promise.js +3 -3
- package/packages/datadog-instrumentations/src/router.js +195 -19
- package/packages/datadog-instrumentations/src/vitest-main-no-worker-init.js +85 -13
- package/packages/datadog-instrumentations/src/vitest-main.js +528 -72
- package/packages/datadog-instrumentations/src/vitest-util.js +106 -12
- package/packages/datadog-instrumentations/src/vitest-worker.js +382 -40
- package/packages/datadog-instrumentations/src/webdriverio.js +212 -22
- package/packages/datadog-instrumentations/src/when.js +3 -3
- package/packages/datadog-instrumentations/src/ws.js +5 -1
- package/packages/datadog-plugin-aws-durable-execution-sdk-js/src/trace-checkpoint.js +12 -6
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +59 -48
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +2 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +1 -5
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +1 -3
- package/packages/datadog-plugin-cucumber/src/index.js +5 -1
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +51 -47
- package/packages/datadog-plugin-cypress/src/support.js +7 -4
- package/packages/datadog-plugin-electron/src/net.js +10 -4
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +31 -17
- package/packages/datadog-plugin-http/src/client.js +1 -1
- package/packages/datadog-plugin-http2/src/client.js +1 -1
- package/packages/datadog-plugin-jest/src/index.js +6 -22
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +2 -3
- package/packages/datadog-plugin-kafkajs/src/consumer.js +2 -3
- package/packages/datadog-plugin-kafkajs/src/producer.js +5 -3
- package/packages/datadog-plugin-kafkajs/src/utils.js +65 -7
- package/packages/datadog-plugin-mocha/src/index.js +832 -4
- package/packages/datadog-plugin-mysql/src/index.js +37 -0
- package/packages/datadog-plugin-next/src/index.js +51 -21
- package/packages/datadog-plugin-openai/src/tracing.js +4 -0
- package/packages/datadog-plugin-openai-agents/src/integration.js +278 -69
- package/packages/datadog-plugin-openai-agents/src/processor.js +16 -4
- package/packages/datadog-plugin-pg/src/index.js +66 -1
- package/packages/datadog-plugin-playwright/src/index.js +1 -1
- package/packages/datadog-plugin-vitest/src/index.js +103 -27
- package/packages/datadog-plugin-ws/src/util.js +2 -1
- package/packages/datadog-shimmer/src/shimmer.js +6 -2
- package/packages/dd-trace/src/aiguard/sdk.js +3 -0
- package/packages/dd-trace/src/appsec/api_security/normalized-route.js +453 -0
- package/packages/dd-trace/src/appsec/{blocking.js → blocking/index.js} +26 -6
- package/packages/dd-trace/src/appsec/handlers/auth.js +62 -0
- package/packages/dd-trace/src/appsec/handlers/http-request.js +228 -0
- package/packages/dd-trace/src/appsec/handlers/http-response.js +78 -0
- package/packages/dd-trace/src/appsec/handlers/http-shared.js +24 -0
- package/packages/dd-trace/src/appsec/handlers/payments.js +104 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +1 -1
- package/packages/dd-trace/src/appsec/index.js +48 -476
- package/packages/dd-trace/src/appsec/sdk/track_event.js +9 -0
- package/packages/dd-trace/src/carrier.js +356 -0
- package/packages/dd-trace/src/ci-visibility/coverage-report-discovery.js +46 -14
- package/packages/dd-trace/src/ci-visibility/efd-retry-policy.js +89 -0
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +27 -13
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +17 -0
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +21 -1
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +22 -7
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +9 -14
- package/packages/dd-trace/src/ci-visibility/requests/upload-coverage-report.js +21 -5
- package/packages/dd-trace/src/ci-visibility/test-optimization-http-cache-schema.js +1 -1
- package/packages/dd-trace/src/ci-visibility/test-optimization-http-cache.js +5 -1
- package/packages/dd-trace/src/config/generated-config-types.d.ts +5 -0
- package/packages/dd-trace/src/config/helper.js +2 -0
- package/packages/dd-trace/src/config/index.js +16 -5
- package/packages/dd-trace/src/config/remote_config.js +1 -1
- package/packages/dd-trace/src/config/supported-configurations.json +18 -0
- package/packages/dd-trace/src/datastreams/context.js +6 -1
- package/packages/dd-trace/src/datastreams/manager.js +5 -1
- package/packages/dd-trace/src/datastreams/pathway.js +23 -22
- package/packages/dd-trace/src/datastreams/processor.js +3 -2
- package/packages/dd-trace/src/debugger/devtools_client/status.js +1 -1
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +0 -1
- package/packages/dd-trace/src/guardrails/apply-pm2-env.js +16 -0
- package/packages/dd-trace/src/guardrails/log.js +1 -10
- package/packages/dd-trace/src/llmobs/constants/tags.js +5 -0
- package/packages/dd-trace/src/llmobs/eval-metric.js +249 -0
- package/packages/dd-trace/src/llmobs/experiments/index.js +33 -25
- package/packages/dd-trace/src/llmobs/experiments/util.js +4 -2
- package/packages/dd-trace/src/llmobs/index.js +34 -2
- package/packages/dd-trace/src/llmobs/noop.js +2 -0
- package/packages/dd-trace/src/llmobs/plugins/ai/ddTelemetry.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/ai/util.js +1 -1
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +5 -5
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +1 -1
- package/packages/dd-trace/src/llmobs/sdk.js +149 -68
- package/packages/dd-trace/src/llmobs/span_processor.js +16 -0
- package/packages/dd-trace/src/llmobs/tagger.js +96 -0
- package/packages/dd-trace/src/llmobs/telemetry.js +18 -0
- package/packages/dd-trace/src/llmobs/util.js +78 -0
- package/packages/dd-trace/src/llmobs/writers/base.js +3 -0
- package/packages/dd-trace/src/llmobs/writers/util.js +2 -0
- package/packages/dd-trace/src/log/channels.js +1 -9
- package/packages/dd-trace/src/log/levels.js +12 -0
- package/packages/dd-trace/src/openfeature/writers/exposures.js +1 -1
- package/packages/dd-trace/src/openfeature/writers/util.js +1 -1
- package/packages/dd-trace/src/opentelemetry/logs/batch_log_processor.js +1 -1
- package/packages/dd-trace/src/opentelemetry/metrics/meter.js +8 -4
- package/packages/dd-trace/src/opentelemetry/metrics/periodic_metric_reader.js +1 -1
- package/packages/dd-trace/src/opentelemetry/span.js +4 -0
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +126 -120
- package/packages/dd-trace/src/opentracing/propagation/text_map_dsm.js +4 -8
- package/packages/dd-trace/src/plugin_manager.js +2 -0
- package/packages/dd-trace/src/plugins/ci_plugin.js +21 -5
- package/packages/dd-trace/src/plugins/index.js +1 -0
- package/packages/dd-trace/src/plugins/util/ci.js +6 -0
- package/packages/dd-trace/src/plugins/util/git.js +6 -4
- package/packages/dd-trace/src/plugins/util/http-otel-semantics.js +2 -2
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/{datadog-plugin-jest/src/util.js → dd-trace/src/plugins/util/jest.js} +3 -62
- package/packages/dd-trace/src/plugins/util/stacktrace.js +3 -0
- package/packages/dd-trace/src/plugins/util/test.js +397 -74
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/web.js +76 -3
- package/packages/dd-trace/src/profiler.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +1 -1
- package/packages/dd-trace/src/profiling/profilers/events.js +2 -2
- package/packages/dd-trace/src/proxy.js +1 -0
- package/packages/dd-trace/src/ritm.js +5 -0
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +4 -2
- package/packages/dd-trace/src/sampling_rule.js +4 -2
- package/packages/dd-trace/src/service-naming/schemas/v0/storage.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v1/storage.js +1 -1
- package/packages/dd-trace/src/telemetry/logs/index.js +3 -0
- package/packages/dd-trace/src/telemetry/telemetry.js +1 -1
- package/vendor/dist/pprof-format/index.js +1 -1
- package/version.js +10 -8
- /package/packages/dd-trace/src/appsec/{blocked_templates.js → blocking/templates.js} +0 -0
|
@@ -14,7 +14,7 @@ const INT_SEGMENT = /^[1-9][0-9]+$/ // Integer of size at least 2 (>=10)
|
|
|
14
14
|
const INT_ID_SEGMENT = /^(?=.*[0-9])[0-9._-]{3,}$/ // Mixed string with digits and delimiters
|
|
15
15
|
const HEX_SEGMENT = /^(?=.*[0-9])[A-Fa-f0-9]{6,}$/ // Hexadecimal digits of size at least 6 with at least one decimal digit
|
|
16
16
|
const HEX_ID_SEGMENT = /^(?=.*[0-9])[A-Fa-f0-9._-]{6,}$/ // Mixed string with hex digits and delimiters
|
|
17
|
-
const STRING_SEGMENT =
|
|
17
|
+
const STRING_SEGMENT = /(?:^.{20,}|[%&'()*+,:=@])/ // Long string or a string containing special characters
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Extract full URL from HTTP request
|
|
@@ -34,6 +34,12 @@ const HTTP_CLIENT_IP = tags.HTTP_CLIENT_IP
|
|
|
34
34
|
const MANUAL_DROP = tags.MANUAL_DROP
|
|
35
35
|
|
|
36
36
|
const contexts = new WeakMap()
|
|
37
|
+
const requests = new WeakMap()
|
|
38
|
+
const statusCodeRangesPattern = /^[1-5]\d{2}(?:-[1-5]\d{2})?(?:,[1-5]\d{2}(?:-[1-5]\d{2})?)*$/
|
|
39
|
+
const whitespacePattern = /\s/g
|
|
40
|
+
const MAX_HTTP_STATUS_CODE = 599
|
|
41
|
+
|
|
42
|
+
/** @typedef {(code: number) => boolean} StatusValidator */
|
|
37
43
|
|
|
38
44
|
// TODO: change this to no longer rely on creating a dummy plugin to be able to access startSpan
|
|
39
45
|
function createWebPlugin (tracer, config = {}) {
|
|
@@ -127,6 +133,7 @@ const web = {
|
|
|
127
133
|
context.tracer = tracer
|
|
128
134
|
context.span = span
|
|
129
135
|
context.res = res
|
|
136
|
+
requests.set(span, req)
|
|
130
137
|
|
|
131
138
|
this.setConfig(req, config)
|
|
132
139
|
addRequestTags(context, this.TYPE)
|
|
@@ -219,7 +226,7 @@ const web = {
|
|
|
219
226
|
const store = legacyStorage.getStore()
|
|
220
227
|
const pubsubSpan = store?.span?._name === 'pubsub.push.receive' ? store.span : null
|
|
221
228
|
|
|
222
|
-
let childOf = pubsubSpan ||
|
|
229
|
+
let childOf = pubsubSpan || this.extractIncomingServerContext(tracer, headers)
|
|
223
230
|
|
|
224
231
|
// we may have headers signaling a router proxy span should be created (such as for AWS API Gateway)
|
|
225
232
|
if (tracer._config?.inferredProxyServicesEnabled) {
|
|
@@ -232,6 +239,10 @@ const web = {
|
|
|
232
239
|
return startSpanHelper(tracer, name, { childOf }, traceCtx, config)
|
|
233
240
|
},
|
|
234
241
|
|
|
242
|
+
extractIncomingServerContext (tracer, headers) {
|
|
243
|
+
return tracer.extract(FORMAT_HTTP_HEADERS, normalizeHeadersCarrier(headers))
|
|
244
|
+
},
|
|
245
|
+
|
|
235
246
|
// Validate a request's status code and then add error tags if necessary
|
|
236
247
|
addStatusError (req, statusCode) {
|
|
237
248
|
const context = contexts.get(req)
|
|
@@ -307,6 +318,7 @@ const web = {
|
|
|
307
318
|
web.finishMiddleware(context)
|
|
308
319
|
|
|
309
320
|
web.finishSpan(context, spanType)
|
|
321
|
+
requests.delete(context.span)
|
|
310
322
|
|
|
311
323
|
finishInferredProxySpan(context)
|
|
312
324
|
},
|
|
@@ -336,6 +348,9 @@ const web = {
|
|
|
336
348
|
getContext (req) {
|
|
337
349
|
return contexts.get(req)
|
|
338
350
|
},
|
|
351
|
+
getRequest (span) {
|
|
352
|
+
return requests.get(span)
|
|
353
|
+
},
|
|
339
354
|
setRouteOrEndpointTag (req) {
|
|
340
355
|
const context = contexts.get(req)
|
|
341
356
|
|
|
@@ -345,6 +360,18 @@ const web = {
|
|
|
345
360
|
},
|
|
346
361
|
}
|
|
347
362
|
|
|
363
|
+
function normalizeHeadersCarrier (headers) {
|
|
364
|
+
if (!headers || typeof headers.get !== 'function' || typeof headers[Symbol.iterator] !== 'function') {
|
|
365
|
+
return headers
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
const carrier = {}
|
|
369
|
+
for (const [key, value] of headers) {
|
|
370
|
+
carrier[String(key).toLowerCase()] = value
|
|
371
|
+
}
|
|
372
|
+
return carrier
|
|
373
|
+
}
|
|
374
|
+
|
|
348
375
|
function addAllowHeaders (req, res, headers) {
|
|
349
376
|
const allowHeaders = splitHeader(headers['access-control-allow-headers'])
|
|
350
377
|
const requestHeaders = splitHeader(req.headers['access-control-request-headers'])
|
|
@@ -537,13 +564,59 @@ function isNot500ErrorCode (code) {
|
|
|
537
564
|
return code < 500
|
|
538
565
|
}
|
|
539
566
|
|
|
567
|
+
/**
|
|
568
|
+
* @param {{ validateStatus?: unknown, DD_TRACE_HTTP_SERVER_ERROR_STATUSES?: unknown }} config
|
|
569
|
+
* @returns {StatusValidator}
|
|
570
|
+
*/
|
|
540
571
|
function getStatusValidator (config) {
|
|
541
572
|
if (typeof config.validateStatus === 'function') {
|
|
542
|
-
return config.validateStatus
|
|
573
|
+
return /** @type {StatusValidator} */ (config.validateStatus)
|
|
543
574
|
} else if (config.hasOwnProperty('validateStatus')) {
|
|
544
575
|
log.error('Expected `validateStatus` to be a function.')
|
|
545
576
|
}
|
|
546
|
-
|
|
577
|
+
|
|
578
|
+
const { DD_TRACE_HTTP_SERVER_ERROR_STATUSES } = config
|
|
579
|
+
if (DD_TRACE_HTTP_SERVER_ERROR_STATUSES === undefined) return isNot500ErrorCode
|
|
580
|
+
if (typeof DD_TRACE_HTTP_SERVER_ERROR_STATUSES !== 'string') {
|
|
581
|
+
log.error('Expected `DD_TRACE_HTTP_SERVER_ERROR_STATUSES` to be a string.')
|
|
582
|
+
return isNot500ErrorCode
|
|
583
|
+
}
|
|
584
|
+
if (DD_TRACE_HTTP_SERVER_ERROR_STATUSES === '500-599') return isNot500ErrorCode
|
|
585
|
+
|
|
586
|
+
const normalized = DD_TRACE_HTTP_SERVER_ERROR_STATUSES.replaceAll(whitespacePattern, '')
|
|
587
|
+
if (normalized === '500-599') return isNot500ErrorCode
|
|
588
|
+
if (!statusCodeRangesPattern.test(normalized)) {
|
|
589
|
+
log.error(
|
|
590
|
+
'`DD_TRACE_HTTP_SERVER_ERROR_STATUSES` must contain comma-separated status codes or ranges from 100 to 599.'
|
|
591
|
+
)
|
|
592
|
+
return isNot500ErrorCode
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
const errorStatusCodes = new Uint8Array(MAX_HTTP_STATUS_CODE + 1)
|
|
596
|
+
const ranges = normalized.split(',')
|
|
597
|
+
for (const range of ranges) {
|
|
598
|
+
const separator = range.indexOf('-')
|
|
599
|
+
if (separator === -1) {
|
|
600
|
+
errorStatusCodes[Number(range)] = 1
|
|
601
|
+
continue
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
const first = Number(range.slice(0, separator))
|
|
605
|
+
const second = Number(range.slice(separator + 1))
|
|
606
|
+
const start = Math.min(first, second)
|
|
607
|
+
const end = Math.max(first, second)
|
|
608
|
+
errorStatusCodes.fill(1, start, end + 1)
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
/**
|
|
612
|
+
* @param {number} code
|
|
613
|
+
* @returns {boolean}
|
|
614
|
+
*/
|
|
615
|
+
function isValidStatusCode (code) {
|
|
616
|
+
return errorStatusCodes[code] !== 1
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
return isValidStatusCode
|
|
547
620
|
}
|
|
548
621
|
|
|
549
622
|
const noop = () => {}
|
|
@@ -43,7 +43,7 @@ class EventSerializer {
|
|
|
43
43
|
|
|
44
44
|
/**
|
|
45
45
|
* Returns the destination URL for the near-OOM export subprocess, or nothing when this exporter
|
|
46
|
-
* does not support OOM export. Overridden by
|
|
46
|
+
* does not support OOM export. Overridden by `AgentExporter` and `FileExporter`.
|
|
47
47
|
*
|
|
48
48
|
* @returns {URL | undefined}
|
|
49
49
|
*/
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const { performance, constants, PerformanceObserver } = require('perf_hooks')
|
|
4
4
|
const {
|
|
5
|
-
Function,
|
|
5
|
+
Function: PprofFunction,
|
|
6
6
|
Label,
|
|
7
7
|
Line,
|
|
8
8
|
Location,
|
|
@@ -256,7 +256,7 @@ class EventSerializer {
|
|
|
256
256
|
// A synthetic single-frame location to serve as the location for timeline
|
|
257
257
|
// samples. We need these as the profiling backend (mimicking official pprof
|
|
258
258
|
// tool's behavior) ignores these.
|
|
259
|
-
const fn = new
|
|
259
|
+
const fn = new PprofFunction({ id: this.functions.length + 1, name: this.stringTable.dedup('') })
|
|
260
260
|
this.functions.push(fn)
|
|
261
261
|
const line = new Line({ functionId: fn.id })
|
|
262
262
|
const location = new Location({ id: this.locations.length + 1, line: [line] })
|
|
@@ -37,6 +37,11 @@ const moduleLoadEndChannel = dc.channel('dd-trace:moduleLoadEnd')
|
|
|
37
37
|
* @param {string[]} modules list of modules to hook into
|
|
38
38
|
* @param {Function} onrequire callback to be executed upon encountering module
|
|
39
39
|
*/
|
|
40
|
+
/**
|
|
41
|
+
* @param {string[]} modules list of modules to hook into
|
|
42
|
+
* @param {object | Function} [options] hook options, or the `onrequire` callback
|
|
43
|
+
* @param {Function} [onrequire] callback to be executed upon encountering module
|
|
44
|
+
*/
|
|
40
45
|
function Hook (modules, options, onrequire) {
|
|
41
46
|
if (!(this instanceof Hook)) return new Hook(modules, options, onrequire)
|
|
42
47
|
if (typeof options === 'function') {
|
|
@@ -11,11 +11,13 @@ const { NODE_MAJOR, NODE_MINOR } = require('../../../../version')
|
|
|
11
11
|
const { createMetricsClient } = require('./client')
|
|
12
12
|
|
|
13
13
|
const eventLoopDelayResolution = 4
|
|
14
|
-
const EVENT_LOOP_SAMPLE_PER_ITERATION_AVAILABLE = NODE_MAJOR > 26 ||
|
|
14
|
+
const EVENT_LOOP_SAMPLE_PER_ITERATION_AVAILABLE = NODE_MAJOR > 26 ||
|
|
15
|
+
(NODE_MAJOR === 26 && NODE_MINOR >= 5) ||
|
|
16
|
+
(NODE_MAJOR === 24 && NODE_MINOR >= 19)
|
|
15
17
|
|
|
16
18
|
// @datadog/native-metrics is only needed on Node versions where
|
|
17
19
|
// monitorEventLoopDelay's samplePerIteration option is unavailable.
|
|
18
|
-
// TODO: remove @datadog/native-metrics and this branch once
|
|
20
|
+
// TODO: remove @datadog/native-metrics and this branch once all supported Node versions provide this option.
|
|
19
21
|
const NATIVE_METRICS_REQUIRED = !EVENT_LOOP_SAMPLE_PER_ITERATION_AVAILABLE
|
|
20
22
|
|
|
21
23
|
let nativeMetrics = null
|
|
@@ -180,8 +180,10 @@ class SamplingRule {
|
|
|
180
180
|
if (resource) {
|
|
181
181
|
this.matchers.push(matcher(resource, resourceLocator))
|
|
182
182
|
}
|
|
183
|
-
|
|
184
|
-
|
|
183
|
+
if (tags) {
|
|
184
|
+
for (const [key, value] of Object.entries(tags)) {
|
|
185
|
+
this.matchers.push(matcher(value, makeTagLocator(key)))
|
|
186
|
+
}
|
|
185
187
|
}
|
|
186
188
|
|
|
187
189
|
this._sampler = new Sampler(sampleRate)
|
|
@@ -150,7 +150,7 @@ const storage = {
|
|
|
150
150
|
},
|
|
151
151
|
},
|
|
152
152
|
pg: {
|
|
153
|
-
opName: () =>
|
|
153
|
+
opName: ({ operation = 'query' }) => `pg.${operation}`,
|
|
154
154
|
serviceName: withSuffixFunction('postgres'),
|
|
155
155
|
serviceSource: ({ tracerService, pluginConfig, connectionName }) => {
|
|
156
156
|
return optionServiceSource({ tracerService, pluginConfig, connectionName, integration: 'pg' })
|
|
@@ -13,6 +13,9 @@ let enabled = false
|
|
|
13
13
|
* Telemetry logs api defines only ERROR, WARN and DEBUG levels:
|
|
14
14
|
* - WARN level is enabled by default
|
|
15
15
|
* - DEBUG level will be possible to activate with an env var or telemetry config property
|
|
16
|
+
*
|
|
17
|
+
* @param {string | undefined} level
|
|
18
|
+
* @returns {boolean}
|
|
16
19
|
*/
|
|
17
20
|
function isLevelEnabled (level) {
|
|
18
21
|
return isValidLevel(level)
|
|
@@ -130,7 +130,7 @@ function updateRetryData (error, retryObj) {
|
|
|
130
130
|
|
|
131
131
|
function getIntegrations () {
|
|
132
132
|
const newIntegrations = /** @type {Integration[]} */ ([])
|
|
133
|
-
for (const pluginName of Object.keys(pluginManager._pluginsByName
|
|
133
|
+
for (const pluginName of Object.keys(pluginManager._pluginsByName)) {
|
|
134
134
|
if (!sentIntegrations.has(pluginName)) {
|
|
135
135
|
newIntegrations.push({
|
|
136
136
|
name: pluginName,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e,t,r={};r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};r.r(i),r.d(i,{Function:()=>Function,Label:()=>Label,Line:()=>Line,Location:()=>Location,Mapping:()=>Mapping,Profile:()=>Profile,Sample:()=>Sample,StringTable:()=>StringTable,ValueType:()=>ValueType,emptyTableToken:()=>c});var __classPrivateFieldGet=function(e,t,r,i){if("a"===r&&!i)throw TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};let n=2n**32n-1n,s=0x100000000-1,a=0x100000000-1+1,o="u"<typeof Buffer?e=>new TextEncoder().encode(e):e=>Buffer.from(e,"utf8");function countNumberBytes(e){if(!e.length)return 0;let t=0;for(;t<e.length&&e[t++]>=128;);return t}function decodeBigNumber(e){if(!e.length)return BigInt(0);let t=BigInt(127&e[0]),r=0;for(;e[r++]>=128;)t|=BigInt(127&e[r])<<BigInt(7*r);return t}function makeValue(e,t=0){return{value:e,offset:t}}function getValue(e,t){switch(e){case u:for(let e=0;e<t.length;e++)if(!(128&t[e]))return makeValue(t.subarray(0,e+1));return makeValue(t);case d:{let e=countNumberBytes(t),r=decodeNumber(t);return makeValue(t.subarray(e,Number(r)+e),e)}default:throw Error(`Unrecognized value type: ${e}`)}}function lowBits(e){return"bigint"!=typeof e?(e>>>0)%a:Number(e&n)}function highBits(e){return"bigint"!=typeof e?e/a>>>0:Number(e>>32n&n)}function long(e){let t=e<0;t&&(e=-e);let r=lowBits(e),i=highBits(e);return t&&(i=~i>>>0,r=~r>>>0,++r>s&&(r=0,++i>s&&(i=0))),[i,r]}let u=0,d=2;function decodeNumber(e){if(countNumberBytes(e)>4)return decodeBigNumber(e);if(!e.length)return 0;let t=127&e[0],r=0;for(;e[r++]>=128;)t|=(127&e[r])<<7*r;return t}function decodeNumbers(e){let t=[],r=0;for(let i=0;i<e.length;i++)(128&e[i])==0&&(t.push(decodeNumber(e.subarray(r,i+1))),r=i+1);return t}function push(e,t){return null==t?[e]:(t.push(e),t)}function pushAll(e,t){if(null==t)return e;for(let r of e)t.push(r);return t}function measureNumber(e){if(0===e||0n===e)return 0;let[t,r]=long(e),i=(r>>>28|t<<4)>>>0,n=t>>>24;return 0!==n?n<128?9:10:0!==i?i<16384?i<128?5:6:i<2097152?7:8:r<16384?r<128?1:2:r<2097152?3:4}function measureValue(e){return void 0===e?0:"number"==typeof e||"bigint"==typeof e?measureNumber(e)||1:e.length}function measureArray(e){let t=0;for(let r of e)t+=measureValue(r);return t}function measureNumberField(e){let t=measureNumber(e);return t?1+t:0}function measureNumberArrayField(e){let t=0;for(let r of e)t+=measureNumber(r)||1;return t?1+measureNumber(t)+t:0}function measureLengthDelimField(e){let t=measureValue(e);return t?1+measureNumber(t)+t:0}function measureLengthDelimArrayField(e){let t=0;for(let r of e)t+=measureLengthDelimField(r);return t}function encodeNumber(e,t,r){if(0===r||0n===r)return e[t++]=0,t;let[i,n]=long(r);for(;i;)e[t++]=127&n|128,n=(n>>>7|i<<25)>>>0,i>>>=7;for(;n>127;)e[t++]=127&n|128,n>>>=7;return e[t++]=n,t}let c=Symbol();let StringTable=class StringTable{constructor(r){this.strings=[],e.set(this,[]),t.set(this,new Map),r!==c&&this.dedup("")}get encodedLength(){let t=0;for(let r of __classPrivateFieldGet(this,e,"f"))t+=r.length;return t}_encodeToBuffer(t,r){for(let i of __classPrivateFieldGet(this,e,"f"))t.set(i,r),r+=i.length;return r}encode(e=new Uint8Array(this.encodedLength)){return this._encodeToBuffer(e,0),e}static _encodeStringFromUtf8(e){let t=new Uint8Array(1+e.length+(measureNumber(e.length)||1)),r=0;return t[r++]=50,r=encodeNumber(t,r,e.length),e.length>0&&t.set(e,r),t}static _encodeString(e){return StringTable._encodeStringFromUtf8(o(e))}dedup(r){if("number"==typeof r)return r;if(!__classPrivateFieldGet(this,t,"f").has(r)){let i=this.strings.push(r)-1;__classPrivateFieldGet(this,t,"f").set(r,i),__classPrivateFieldGet(this,e,"f").push(StringTable._encodeString(r))}return __classPrivateFieldGet(this,t,"f").get(r)}_decodeString(r){let i=new TextDecoder().decode(r);__classPrivateFieldGet(this,t,"f").set(i,this.strings.push(i)-1),__classPrivateFieldGet(this,e,"f").push(StringTable._encodeStringFromUtf8(r))}};function decode(e,t){let r={},i=0;for(;i<e.length;){let n=e[i]>>3,s=7&e[i];i++;let{offset:a,value:o}=getValue(s,e.subarray(i));i+=o.length+a,t(r,n,o)}return r}e=new WeakMap,t=new WeakMap;let ValueType=class ValueType{static create(e){return e instanceof ValueType?e:new ValueType(e)}constructor(e){this.type=e.type||0,this.unit=e.unit||0}get length(){return 0+measureNumberField(this.type)+measureNumberField(this.unit)}_encodeToBuffer(e,t=0){return this.type&&(e[t++]=8,t=encodeNumber(e,t,this.type)),this.unit&&(e[t++]=16,t=encodeNumber(e,t,this.unit)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.type=decodeNumber(r);break;case 2:e.unit=decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Label=class Label{static create(e){return e instanceof Label?e:new Label(e)}constructor(e){this.key=e.key||0,this.str=e.str||0,this.num=e.num||0,this.numUnit=e.numUnit||0}get length(){return 0+measureNumberField(this.key)+measureNumberField(this.str)+measureNumberField(this.num)+measureNumberField(this.numUnit)}_encodeToBuffer(e,t=0){return this.key&&(e[t++]=8,t=encodeNumber(e,t,this.key)),this.str&&(e[t++]=16,t=encodeNumber(e,t,this.str)),this.num&&(e[t++]=24,t=encodeNumber(e,t,this.num)),this.numUnit&&(e[t++]=32,t=encodeNumber(e,t,this.numUnit)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.key=decodeNumber(r);break;case 2:e.str=decodeNumber(r);break;case 3:e.num=decodeNumber(r);break;case 4:e.numUnit=decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Sample=class Sample{static create(e){return e instanceof Sample?e:new Sample(e)}constructor(e){this.locationId=e.locationId||[],this.value=e.value||[],this.label=(e.label||[]).map(Label.create)}get length(){return 0+measureNumberArrayField(this.locationId)+measureNumberArrayField(this.value)+measureLengthDelimArrayField(this.label)}_encodeToBuffer(e,t=0){if(this.locationId.length)for(let r of(e[t++]=10,t=encodeNumber(e,t,measureArray(this.locationId)),this.locationId))t=encodeNumber(e,t,r);if(this.value.length)for(let r of(e[t++]=18,t=encodeNumber(e,t,measureArray(this.value)),this.value))t=encodeNumber(e,t,r);for(let r of this.label)e[t++]=26,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.locationId=pushAll(decodeNumbers(r),e.locationId);break;case 2:e.value=pushAll(decodeNumbers(r),e.value);break;case 3:e.label=push(Label.decode(r),e.label)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Mapping=class Mapping{static create(e){return e instanceof Mapping?e:new Mapping(e)}constructor(e){this.id=e.id||0,this.memoryStart=e.memoryStart||0,this.memoryLimit=e.memoryLimit||0,this.fileOffset=e.fileOffset||0,this.filename=e.filename||0,this.buildId=e.buildId||0,this.hasFunctions=!!e.hasFunctions,this.hasFilenames=!!e.hasFilenames,this.hasLineNumbers=!!e.hasLineNumbers,this.hasInlineFrames=!!e.hasInlineFrames}get length(){return 0+measureNumberField(this.id)+measureNumberField(this.memoryStart)+measureNumberField(this.memoryLimit)+measureNumberField(this.fileOffset)+measureNumberField(this.filename)+measureNumberField(this.buildId)+measureNumberField(+!!this.hasFunctions)+measureNumberField(+!!this.hasFilenames)+measureNumberField(+!!this.hasLineNumbers)+measureNumberField(+!!this.hasInlineFrames)}_encodeToBuffer(e,t=0){return this.id&&(e[t++]=8,t=encodeNumber(e,t,this.id)),this.memoryStart&&(e[t++]=16,t=encodeNumber(e,t,this.memoryStart)),this.memoryLimit&&(e[t++]=24,t=encodeNumber(e,t,this.memoryLimit)),this.fileOffset&&(e[t++]=32,t=encodeNumber(e,t,this.fileOffset)),this.filename&&(e[t++]=40,t=encodeNumber(e,t,this.filename)),this.buildId&&(e[t++]=48,t=encodeNumber(e,t,this.buildId)),this.hasFunctions&&(e[t++]=56,t=encodeNumber(e,t,1)),this.hasFilenames&&(e[t++]=64,t=encodeNumber(e,t,1)),this.hasLineNumbers&&(e[t++]=72,t=encodeNumber(e,t,1)),this.hasInlineFrames&&(e[t++]=80,t=encodeNumber(e,t,1)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.id=decodeNumber(r);break;case 2:e.memoryStart=decodeNumber(r);break;case 3:e.memoryLimit=decodeNumber(r);break;case 4:e.fileOffset=decodeNumber(r);break;case 5:e.filename=decodeNumber(r);break;case 6:e.buildId=decodeNumber(r);break;case 7:e.hasFunctions=!!decodeNumber(r);break;case 8:e.hasFilenames=!!decodeNumber(r);break;case 9:e.hasLineNumbers=!!decodeNumber(r);break;case 10:e.hasInlineFrames=!!decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Line=class Line{static create(e){return e instanceof Line?e:new Line(e)}constructor(e){this.functionId=e.functionId||0,this.line=e.line||0}get length(){return 0+measureNumberField(this.functionId)+measureNumberField(this.line)}_encodeToBuffer(e,t=0){return this.functionId&&(e[t++]=8,t=encodeNumber(e,t,this.functionId)),this.line&&(e[t++]=16,t=encodeNumber(e,t,this.line)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.functionId=decodeNumber(r);break;case 2:e.line=decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Location=class Location{static create(e){return e instanceof Location?e:new Location(e)}constructor(e){this.id=e.id||0,this.mappingId=e.mappingId||0,this.address=e.address||0,this.line=(e.line||[]).map(Line.create),this.isFolded=!!e.isFolded}get length(){return 0+measureNumberField(this.id)+measureNumberField(this.mappingId)+measureNumberField(this.address)+measureLengthDelimArrayField(this.line)+measureNumberField(+!!this.isFolded)}_encodeToBuffer(e,t=0){for(let r of(this.id&&(e[t++]=8,t=encodeNumber(e,t,this.id)),this.mappingId&&(e[t++]=16,t=encodeNumber(e,t,this.mappingId)),this.address&&(e[t++]=24,t=encodeNumber(e,t,this.address)),this.line))e[t++]=34,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return this.isFolded&&(e[t++]=40,t=encodeNumber(e,t,1)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.id=decodeNumber(r);break;case 2:e.mappingId=decodeNumber(r);break;case 3:e.address=decodeNumber(r);break;case 4:e.line=push(Line.decode(r),e.line);break;case 5:e.isFolded=!!decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Function=class Function{static create(e){return e instanceof Function?e:new Function(e)}constructor(e){this.id=e.id||0,this.name=e.name||0,this.systemName=e.systemName||0,this.filename=e.filename||0,this.startLine=e.startLine||0}get length(){return 0+measureNumberField(this.id)+measureNumberField(this.name)+measureNumberField(this.systemName)+measureNumberField(this.filename)+measureNumberField(this.startLine)}_encodeToBuffer(e,t=0){return this.id&&(e[t++]=8,t=encodeNumber(e,t,this.id)),this.name&&(e[t++]=16,t=encodeNumber(e,t,this.name)),this.systemName&&(e[t++]=24,t=encodeNumber(e,t,this.systemName)),this.filename&&(e[t++]=32,t=encodeNumber(e,t,this.filename)),this.startLine&&(e[t++]=40,t=encodeNumber(e,t,this.startLine)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.id=decodeNumber(r);break;case 2:e.name=decodeNumber(r);break;case 3:e.systemName=decodeNumber(r);break;case 4:e.filename=decodeNumber(r);break;case 5:e.startLine=decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Profile=class Profile{constructor(e={}){this.sampleType=(e.sampleType||[]).map(ValueType.create),this.sample=(e.sample||[]).map(Sample.create),this.mapping=(e.mapping||[]).map(Mapping.create),this.location=(e.location||[]).map(Location.create),this.function=(e.function||[]).map(Function.create),this.stringTable=e.stringTable||new StringTable,this.dropFrames=e.dropFrames||0,this.keepFrames=e.keepFrames||0,this.timeNanos=e.timeNanos||0,this.durationNanos=e.durationNanos||0,this.periodType=e.periodType?ValueType.create(e.periodType):void 0,this.period=e.period||0,this.comment=e.comment||[],this.defaultSampleType=e.defaultSampleType||0}get length(){return 0+measureLengthDelimArrayField(this.sampleType)+measureLengthDelimArrayField(this.sample)+measureLengthDelimArrayField(this.mapping)+measureLengthDelimArrayField(this.location)+measureLengthDelimArrayField(this.function)+this.stringTable.encodedLength+measureNumberField(this.dropFrames)+measureNumberField(this.keepFrames)+measureNumberField(this.timeNanos)+measureNumberField(this.durationNanos)+measureLengthDelimField(this.periodType)+measureNumberField(this.period)+measureNumberArrayField(this.comment)+measureNumberField(this.defaultSampleType)}_encodeSampleTypesToBuffer(e,t=0){for(let r of this.sampleType)e[t++]=10,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}_encodeSamplesToBuffer(e,t=0){for(let r of this.sample)e[t++]=18,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}_encodeMappingsToBuffer(e,t=0){for(let r of this.mapping)e[t++]=26,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}_encodeLocationsToBuffer(e,t=0){for(let r of this.location)e[t++]=34,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}_encodeFunctionsToBuffer(e,t=0){for(let r of this.function)e[t++]=42,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}_encodeBasicValuesToBuffer(e,t=0){if(this.dropFrames&&(e[t++]=56,t=encodeNumber(e,t,this.dropFrames)),this.keepFrames&&(e[t++]=64,t=encodeNumber(e,t,this.keepFrames)),this.timeNanos&&(e[t++]=72,t=encodeNumber(e,t,this.timeNanos)),this.durationNanos&&(e[t++]=80,t=encodeNumber(e,t,this.durationNanos)),void 0!==this.periodType&&(e[t++]=90,t=encodeNumber(e,t,this.periodType.length),t=this.periodType._encodeToBuffer(e,t)),this.period&&(e[t++]=96,t=encodeNumber(e,t,this.period)),this.comment.length)for(let r of(e[t++]=106,t=encodeNumber(e,t,measureArray(this.comment)),this.comment))t=encodeNumber(e,t,r);return this.defaultSampleType&&(e[t++]=112,t=encodeNumber(e,t,this.defaultSampleType)),t}_encodeToBuffer(e,t=0){return t=this._encodeSampleTypesToBuffer(e,t),t=this._encodeSamplesToBuffer(e,t),t=this._encodeMappingsToBuffer(e,t),t=this._encodeLocationsToBuffer(e,t),t=this._encodeFunctionsToBuffer(e,t),t=this.stringTable._encodeToBuffer(e,t),t=this._encodeBasicValuesToBuffer(e,t)}async _encodeToBufferAsync(e,t=0){return t=this._encodeSampleTypesToBuffer(e,t),await new Promise(setImmediate),t=this._encodeSamplesToBuffer(e,t),await new Promise(setImmediate),t=this._encodeMappingsToBuffer(e,t),await new Promise(setImmediate),t=this._encodeLocationsToBuffer(e,t),await new Promise(setImmediate),t=this._encodeFunctionsToBuffer(e,t),await new Promise(setImmediate),t=this.stringTable._encodeToBuffer(e,t),await new Promise(setImmediate),t=this._encodeBasicValuesToBuffer(e,t)}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}async encodeAsync(e=new Uint8Array(this.length)){return await this._encodeToBufferAsync(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.sampleType=push(ValueType.decode(r),e.sampleType);break;case 2:e.sample=push(Sample.decode(r),e.sample);break;case 3:e.mapping=push(Mapping.decode(r),e.mapping);break;case 4:e.location=push(Location.decode(r),e.location);break;case 5:e.function=push(Function.decode(r),e.function);break;case 6:void 0===e.stringTable&&(e.stringTable=new StringTable(c)),e.stringTable._decodeString(r);break;case 7:e.dropFrames=decodeNumber(r);break;case 8:e.keepFrames=decodeNumber(r);break;case 9:e.timeNanos=decodeNumber(r);break;case 10:e.durationNanos=decodeNumber(r);break;case 11:e.periodType=ValueType.decode(r);break;case 12:e.period=decodeNumber(r);break;case 13:e.comment=pushAll(decodeNumbers(r),e.comment);break;case 14:e.defaultSampleType=decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};module.exports=i})();
|
|
1
|
+
(()=>{"use strict";var e,t,r={};r.d=(e,t)=>{for(var i in t)r.o(t,i)&&!r.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var i={};r.r(i),r.d(i,{Function:()=>Function,Label:()=>Label,Line:()=>Line,Location:()=>Location,Mapping:()=>Mapping,Profile:()=>Profile,Sample:()=>Sample,StringTable:()=>StringTable,ValueType:()=>ValueType,emptyTableToken:()=>c});var __classPrivateFieldGet=function(e,t,r,i){if("a"===r&&!i)throw TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?i:"a"===r?i.call(e):i?i.value:t.get(e)};let s=2n**32n-1n,n=0x100000000-1,a=0x100000000-1+1,o="u"<typeof Buffer?e=>new TextEncoder().encode(e):e=>Buffer.from(e,"utf8");function countNumberBytes(e){if(!e.length)return 0;let t=0;for(;t<e.length&&e[t++]>=128;);return t}function decodeBigNumber(e){if(!e.length)return BigInt(0);let t=BigInt(127&e[0]),r=0;for(;e[r++]>=128;)t|=BigInt(127&e[r])<<BigInt(7*r);return t}function makeValue(e,t=0){return{value:e,offset:t}}function getValue(e,t){switch(e){case u:for(let e=0;e<t.length;e++)if(!(128&t[e]))return makeValue(t.subarray(0,e+1));return makeValue(t);case d:{let e=countNumberBytes(t),r=decodeNumber(t);return makeValue(t.subarray(e,Number(r)+e),e)}default:throw Error(`Unrecognized value type: ${e}`)}}function lowBits(e){return"bigint"!=typeof e?(e>>>0)%a:Number(e&s)}function highBits(e){return"bigint"!=typeof e?e/a>>>0:Number(e>>32n&s)}function long(e){let t=e<0;t&&(e=-e);let r=lowBits(e),i=highBits(e);return t&&(i=~i>>>0,r=~r>>>0,++r>n&&(r=0,++i>n&&(i=0))),[i,r]}let u=0,d=2;function decodeNumber(e){if(countNumberBytes(e)>4)return decodeBigNumber(e);if(!e.length)return 0;let t=127&e[0],r=0;for(;e[r++]>=128;)t|=(127&e[r])<<7*r;return t}function decodeNumbers(e){let t=[],r=0;for(let i=0;i<e.length;i++)(128&e[i])==0&&(t.push(decodeNumber(e.subarray(r,i+1))),r=i+1);return t}function push(e,t){return null==t?[e]:(t.push(e),t)}function pushAll(e,t){if(null==t)return e;for(let r of e)t.push(r);return t}function measureNumber(e){if(0===e||0n===e)return 0;let[t,r]=long(e),i=(r>>>28|t<<4)>>>0,s=t>>>24;return 0!==s?s<128?9:10:0!==i?i<16384?i<128?5:6:i<2097152?7:8:r<16384?r<128?1:2:r<2097152?3:4}function measureValue(e){return void 0===e?0:"number"==typeof e||"bigint"==typeof e?measureNumber(e)||1:e.length}function measureArray(e){let t=0;for(let r of e)t+=measureValue(r);return t}function measureNumberField(e){let t=measureNumber(e);return t?1+t:0}function measureNumberArrayField(e){let t=0;for(let r of e)t+=measureNumber(r)||1;return t?1+measureNumber(t)+t:0}function measureLengthDelimField(e){let t=measureValue(e);return t?1+measureNumber(t)+t:0}function measureLengthDelimArrayField(e){let t=0;for(let r of e)t+=measureLengthDelimField(r);return t}function encodeNumber(e,t,r){if(0===r||0n===r)return e[t++]=0,t;let[i,s]=long(r);for(;i;)e[t++]=127&s|128,s=(s>>>7|i<<25)>>>0,i>>>=7;for(;s>127;)e[t++]=127&s|128,s>>>=7;return e[t++]=s,t}let c=Symbol();let StringTable=class StringTable{constructor(r){this.strings=[],e.set(this,[]),t.set(this,new Map),r!==c&&this.dedup("")}get encodedLength(){let t=0;for(let r of __classPrivateFieldGet(this,e,"f"))t+=r.length;return t}_encodeToBuffer(t,r){for(let i of __classPrivateFieldGet(this,e,"f"))t.set(i,r),r+=i.length;return r}encode(e=new Uint8Array(this.encodedLength)){return this._encodeToBuffer(e,0),e}static _encodeStringFromUtf8(e){let t=new Uint8Array(1+e.length+(measureNumber(e.length)||1)),r=0;return t[r++]=50,r=encodeNumber(t,r,e.length),e.length>0&&t.set(e,r),t}static _encodeString(e){return StringTable._encodeStringFromUtf8(o(e))}dedup(r){if("number"==typeof r)return r;if(!__classPrivateFieldGet(this,t,"f").has(r)){let i=this.strings.push(r)-1;__classPrivateFieldGet(this,t,"f").set(r,i),__classPrivateFieldGet(this,e,"f").push(StringTable._encodeString(r))}return __classPrivateFieldGet(this,t,"f").get(r)}_decodeString(r){let i=new TextDecoder().decode(r);__classPrivateFieldGet(this,t,"f").set(i,this.strings.push(i)-1),__classPrivateFieldGet(this,e,"f").push(StringTable._encodeStringFromUtf8(r))}};function decode(e,t){let r={},i=0;for(;i<e.length;){let s=e[i]>>3,n=7&e[i];i++;let{offset:a,value:o}=getValue(n,e.subarray(i));i+=o.length+a,t(r,s,o)}return r}e=new WeakMap,t=new WeakMap;let ValueType=class ValueType{static create(e){return e instanceof ValueType?e:new ValueType(e)}constructor(e){this.type=e.type||0,this.unit=e.unit||0}get length(){return 0+measureNumberField(this.type)+measureNumberField(this.unit)}_encodeToBuffer(e,t=0){return this.type&&(e[t++]=8,t=encodeNumber(e,t,this.type)),this.unit&&(e[t++]=16,t=encodeNumber(e,t,this.unit)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.type=decodeNumber(r);break;case 2:e.unit=decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Label=class Label{static create(e){return e instanceof Label?e:new Label(e)}constructor(e){this.key=e.key||0,this.str=e.str||0,this.num=e.num||0,this.numUnit=e.numUnit||0}get length(){return 0+measureNumberField(this.key)+measureNumberField(this.str)+measureNumberField(this.num)+measureNumberField(this.numUnit)}_encodeToBuffer(e,t=0){return this.key&&(e[t++]=8,t=encodeNumber(e,t,this.key)),this.str&&(e[t++]=16,t=encodeNumber(e,t,this.str)),this.num&&(e[t++]=24,t=encodeNumber(e,t,this.num)),this.numUnit&&(e[t++]=32,t=encodeNumber(e,t,this.numUnit)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.key=decodeNumber(r);break;case 2:e.str=decodeNumber(r);break;case 3:e.num=decodeNumber(r);break;case 4:e.numUnit=decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Sample=class Sample{static create(e){return e instanceof Sample?e:new Sample(e)}constructor(e){this.locationId=e.locationId||[],this.value=e.value||[],this.label=(e.label||[]).map(Label.create)}get length(){return 0+measureNumberArrayField(this.locationId)+measureNumberArrayField(this.value)+measureLengthDelimArrayField(this.label)}_encodeToBuffer(e,t=0){if(this.locationId.length)for(let r of(e[t++]=10,t=encodeNumber(e,t,measureArray(this.locationId)),this.locationId))t=encodeNumber(e,t,r);if(this.value.length)for(let r of(e[t++]=18,t=encodeNumber(e,t,measureArray(this.value)),this.value))t=encodeNumber(e,t,r);for(let r of this.label)e[t++]=26,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.locationId=pushAll(decodeNumbers(r),e.locationId);break;case 2:e.value=pushAll(decodeNumbers(r),e.value);break;case 3:e.label=push(Label.decode(r),e.label)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Mapping=class Mapping{static create(e){return e instanceof Mapping?e:new Mapping(e)}constructor(e){this.id=e.id||0,this.memoryStart=e.memoryStart||0,this.memoryLimit=e.memoryLimit||0,this.fileOffset=e.fileOffset||0,this.filename=e.filename||0,this.buildId=e.buildId||0,this.hasFunctions=!!e.hasFunctions,this.hasFilenames=!!e.hasFilenames,this.hasLineNumbers=!!e.hasLineNumbers,this.hasInlineFrames=!!e.hasInlineFrames}get length(){return 0+measureNumberField(this.id)+measureNumberField(this.memoryStart)+measureNumberField(this.memoryLimit)+measureNumberField(this.fileOffset)+measureNumberField(this.filename)+measureNumberField(this.buildId)+measureNumberField(+!!this.hasFunctions)+measureNumberField(+!!this.hasFilenames)+measureNumberField(+!!this.hasLineNumbers)+measureNumberField(+!!this.hasInlineFrames)}_encodeToBuffer(e,t=0){return this.id&&(e[t++]=8,t=encodeNumber(e,t,this.id)),this.memoryStart&&(e[t++]=16,t=encodeNumber(e,t,this.memoryStart)),this.memoryLimit&&(e[t++]=24,t=encodeNumber(e,t,this.memoryLimit)),this.fileOffset&&(e[t++]=32,t=encodeNumber(e,t,this.fileOffset)),this.filename&&(e[t++]=40,t=encodeNumber(e,t,this.filename)),this.buildId&&(e[t++]=48,t=encodeNumber(e,t,this.buildId)),this.hasFunctions&&(e[t++]=56,t=encodeNumber(e,t,1)),this.hasFilenames&&(e[t++]=64,t=encodeNumber(e,t,1)),this.hasLineNumbers&&(e[t++]=72,t=encodeNumber(e,t,1)),this.hasInlineFrames&&(e[t++]=80,t=encodeNumber(e,t,1)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.id=decodeNumber(r);break;case 2:e.memoryStart=decodeNumber(r);break;case 3:e.memoryLimit=decodeNumber(r);break;case 4:e.fileOffset=decodeNumber(r);break;case 5:e.filename=decodeNumber(r);break;case 6:e.buildId=decodeNumber(r);break;case 7:e.hasFunctions=!!decodeNumber(r);break;case 8:e.hasFilenames=!!decodeNumber(r);break;case 9:e.hasLineNumbers=!!decodeNumber(r);break;case 10:e.hasInlineFrames=!!decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Line=class Line{static create(e){return e instanceof Line?e:new Line(e)}constructor(e){this.functionId=e.functionId||0,this.line=e.line||0,this.column=e.column||0}get length(){return 0+measureNumberField(this.functionId)+measureNumberField(this.line)+measureNumberField(this.column)}_encodeToBuffer(e,t=0){return this.functionId&&(e[t++]=8,t=encodeNumber(e,t,this.functionId)),this.line&&(e[t++]=16,t=encodeNumber(e,t,this.line)),this.column&&(e[t++]=24,t=encodeNumber(e,t,this.column)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.functionId=decodeNumber(r);break;case 2:e.line=decodeNumber(r);break;case 3:e.column=decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Location=class Location{static create(e){return e instanceof Location?e:new Location(e)}constructor(e){this.id=e.id||0,this.mappingId=e.mappingId||0,this.address=e.address||0,this.line=(e.line||[]).map(Line.create),this.isFolded=!!e.isFolded}get length(){return 0+measureNumberField(this.id)+measureNumberField(this.mappingId)+measureNumberField(this.address)+measureLengthDelimArrayField(this.line)+measureNumberField(+!!this.isFolded)}_encodeToBuffer(e,t=0){for(let r of(this.id&&(e[t++]=8,t=encodeNumber(e,t,this.id)),this.mappingId&&(e[t++]=16,t=encodeNumber(e,t,this.mappingId)),this.address&&(e[t++]=24,t=encodeNumber(e,t,this.address)),this.line))e[t++]=34,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return this.isFolded&&(e[t++]=40,t=encodeNumber(e,t,1)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.id=decodeNumber(r);break;case 2:e.mappingId=decodeNumber(r);break;case 3:e.address=decodeNumber(r);break;case 4:e.line=push(Line.decode(r),e.line);break;case 5:e.isFolded=!!decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Function=class Function{static create(e){return e instanceof Function?e:new Function(e)}constructor(e){this.id=e.id||0,this.name=e.name||0,this.systemName=e.systemName||0,this.filename=e.filename||0,this.startLine=e.startLine||0}get length(){return 0+measureNumberField(this.id)+measureNumberField(this.name)+measureNumberField(this.systemName)+measureNumberField(this.filename)+measureNumberField(this.startLine)}_encodeToBuffer(e,t=0){return this.id&&(e[t++]=8,t=encodeNumber(e,t,this.id)),this.name&&(e[t++]=16,t=encodeNumber(e,t,this.name)),this.systemName&&(e[t++]=24,t=encodeNumber(e,t,this.systemName)),this.filename&&(e[t++]=32,t=encodeNumber(e,t,this.filename)),this.startLine&&(e[t++]=40,t=encodeNumber(e,t,this.startLine)),t}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.id=decodeNumber(r);break;case 2:e.name=decodeNumber(r);break;case 3:e.systemName=decodeNumber(r);break;case 4:e.filename=decodeNumber(r);break;case 5:e.startLine=decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};let Profile=class Profile{constructor(e={}){this.sampleType=(e.sampleType||[]).map(ValueType.create),this.sample=(e.sample||[]).map(Sample.create),this.mapping=(e.mapping||[]).map(Mapping.create),this.location=(e.location||[]).map(Location.create),this.function=(e.function||[]).map(Function.create),this.stringTable=e.stringTable||new StringTable,this.dropFrames=e.dropFrames||0,this.keepFrames=e.keepFrames||0,this.timeNanos=e.timeNanos||0,this.durationNanos=e.durationNanos||0,this.periodType=e.periodType?ValueType.create(e.periodType):void 0,this.period=e.period||0,this.comment=e.comment||[],this.defaultSampleType=e.defaultSampleType||0,this.docUrl=e.docUrl||0}get length(){return 0+measureLengthDelimArrayField(this.sampleType)+measureLengthDelimArrayField(this.sample)+measureLengthDelimArrayField(this.mapping)+measureLengthDelimArrayField(this.location)+measureLengthDelimArrayField(this.function)+this.stringTable.encodedLength+measureNumberField(this.dropFrames)+measureNumberField(this.keepFrames)+measureNumberField(this.timeNanos)+measureNumberField(this.durationNanos)+measureLengthDelimField(this.periodType)+measureNumberField(this.period)+measureNumberArrayField(this.comment)+measureNumberField(this.defaultSampleType)+measureNumberField(this.docUrl)}_encodeSampleTypesToBuffer(e,t=0){for(let r of this.sampleType)e[t++]=10,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}_encodeSamplesToBuffer(e,t=0){for(let r of this.sample)e[t++]=18,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}_encodeMappingsToBuffer(e,t=0){for(let r of this.mapping)e[t++]=26,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}_encodeLocationsToBuffer(e,t=0){for(let r of this.location)e[t++]=34,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}_encodeFunctionsToBuffer(e,t=0){for(let r of this.function)e[t++]=42,t=encodeNumber(e,t,r.length),t=r._encodeToBuffer(e,t);return t}_encodeBasicValuesToBuffer(e,t=0){if(this.dropFrames&&(e[t++]=56,t=encodeNumber(e,t,this.dropFrames)),this.keepFrames&&(e[t++]=64,t=encodeNumber(e,t,this.keepFrames)),this.timeNanos&&(e[t++]=72,t=encodeNumber(e,t,this.timeNanos)),this.durationNanos&&(e[t++]=80,t=encodeNumber(e,t,this.durationNanos)),void 0!==this.periodType&&(e[t++]=90,t=encodeNumber(e,t,this.periodType.length),t=this.periodType._encodeToBuffer(e,t)),this.period&&(e[t++]=96,t=encodeNumber(e,t,this.period)),this.comment.length)for(let r of(e[t++]=106,t=encodeNumber(e,t,measureArray(this.comment)),this.comment))t=encodeNumber(e,t,r);return this.defaultSampleType&&(e[t++]=112,t=encodeNumber(e,t,this.defaultSampleType)),this.docUrl&&(e[t++]=120,t=encodeNumber(e,t,this.docUrl)),t}_encodeToBuffer(e,t=0){return t=this._encodeSampleTypesToBuffer(e,t),t=this._encodeSamplesToBuffer(e,t),t=this._encodeMappingsToBuffer(e,t),t=this._encodeLocationsToBuffer(e,t),t=this._encodeFunctionsToBuffer(e,t),t=this.stringTable._encodeToBuffer(e,t),t=this._encodeBasicValuesToBuffer(e,t)}async _encodeToBufferAsync(e,t=0){return t=this._encodeSampleTypesToBuffer(e,t),await new Promise(setImmediate),t=this._encodeSamplesToBuffer(e,t),await new Promise(setImmediate),t=this._encodeMappingsToBuffer(e,t),await new Promise(setImmediate),t=this._encodeLocationsToBuffer(e,t),await new Promise(setImmediate),t=this._encodeFunctionsToBuffer(e,t),await new Promise(setImmediate),t=this.stringTable._encodeToBuffer(e,t),await new Promise(setImmediate),t=this._encodeBasicValuesToBuffer(e,t)}encode(e=new Uint8Array(this.length)){return this._encodeToBuffer(e,0),e}async encodeAsync(e=new Uint8Array(this.length)){return await this._encodeToBufferAsync(e,0),e}static decodeValue(e,t,r){switch(t){case 1:e.sampleType=push(ValueType.decode(r),e.sampleType);break;case 2:e.sample=push(Sample.decode(r),e.sample);break;case 3:e.mapping=push(Mapping.decode(r),e.mapping);break;case 4:e.location=push(Location.decode(r),e.location);break;case 5:e.function=push(Function.decode(r),e.function);break;case 6:void 0===e.stringTable&&(e.stringTable=new StringTable(c)),e.stringTable._decodeString(r);break;case 7:e.dropFrames=decodeNumber(r);break;case 8:e.keepFrames=decodeNumber(r);break;case 9:e.timeNanos=decodeNumber(r);break;case 10:e.durationNanos=decodeNumber(r);break;case 11:e.periodType=ValueType.decode(r);break;case 12:e.period=decodeNumber(r);break;case 13:e.comment=pushAll(decodeNumbers(r),e.comment);break;case 14:e.defaultSampleType=decodeNumber(r);break;case 15:e.docUrl=decodeNumber(r)}}static decode(e){return new this(decode(e,this.decodeValue))}};module.exports=i})();
|
package/version.js
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
'use strict'
|
|
2
2
|
|
|
3
|
+
/** @typedef {NonNullable<ReturnType<string['match']>>} RegExpMatch */
|
|
4
|
+
|
|
3
5
|
var version = require('./package.json').version
|
|
4
6
|
// @ts-expect-error
|
|
5
|
-
var /** @type {
|
|
7
|
+
var /** @type {RegExpMatch} */ ddMatches = version.match(/^(\d+)\.(\d+)\.(\d+)/)
|
|
6
8
|
// @ts-expect-error
|
|
7
|
-
var /** @type {
|
|
9
|
+
var /** @type {RegExpMatch} */ nodeMatches = process.versions.node.match(/^(\d+)\.(\d+)\.(\d+)/)
|
|
8
10
|
|
|
9
11
|
module.exports = {
|
|
10
12
|
VERSION: version,
|
|
11
|
-
DD_MAJOR: parseInt(ddMatches[1]),
|
|
12
|
-
DD_MINOR: parseInt(ddMatches[2]),
|
|
13
|
-
DD_PATCH: parseInt(ddMatches[3]),
|
|
14
|
-
NODE_MAJOR: parseInt(nodeMatches[1]),
|
|
15
|
-
NODE_MINOR: parseInt(nodeMatches[2]),
|
|
16
|
-
NODE_PATCH: parseInt(nodeMatches[3]),
|
|
13
|
+
DD_MAJOR: parseInt(ddMatches[1], 10),
|
|
14
|
+
DD_MINOR: parseInt(ddMatches[2], 10),
|
|
15
|
+
DD_PATCH: parseInt(ddMatches[3], 10),
|
|
16
|
+
NODE_MAJOR: parseInt(nodeMatches[1], 10),
|
|
17
|
+
NODE_MINOR: parseInt(nodeMatches[2], 10),
|
|
18
|
+
NODE_PATCH: parseInt(nodeMatches[3], 10),
|
|
17
19
|
NODE_VERSION: nodeMatches[0]
|
|
18
20
|
}
|
|
File without changes
|