diff --git a/auto-merge/contrib/.github/component_owners.yml b/auto-merge/contrib/.github/component_owners.yml index ddbde76e1..a3ad46b40 100644 --- a/auto-merge/contrib/.github/component_owners.yml +++ b/auto-merge/contrib/.github/component_owners.yml @@ -38,6 +38,8 @@ components: - blumamir plugins/node/instrumentation-amqplib: - blumamir + plugins/node/instrumentation-cucumber: + - Ugzuzg plugins/node/instrumentation-dataloader: - henrinormak plugins/node/instrumentation-fs: @@ -109,7 +111,8 @@ components: plugins/node/opentelemetry-instrumentation-winston: - seemk plugins/web/opentelemetry-instrumentation-document-load: - - obecny + - pkanal + - martinkuba plugins/web/opentelemetry-instrumentation-long-task: - mhennoch - t2t2 diff --git a/auto-merge/contrib/.github/workflows/peer-api.yaml b/auto-merge/contrib/.github/workflows/peer-api.yaml index 6067d2fd5..44a1a9f34 100644 --- a/auto-merge/contrib/.github/workflows/peer-api.yaml +++ b/auto-merge/contrib/.github/workflows/peer-api.yaml @@ -15,11 +15,8 @@ jobs: - name: Checkout uses: actions/checkout@v3 - - name: Install lerna - run: npm install -g lerna@5.5.2 - - name: Install script dependencies run: npm install - name: Check API dependency semantics - run: lerna exec "node \$LERNA_ROOT_PATH/scripts/peer-api-check.js" + run: npx lerna exec "node \$LERNA_ROOT_PATH/scripts/peer-api-check.js" diff --git a/auto-merge/contrib/.github/workflows/test-all-versions.yml b/auto-merge/contrib/.github/workflows/test-all-versions.yml index ddc3f6679..9fefec314 100644 --- a/auto-merge/contrib/.github/workflows/test-all-versions.yml +++ b/auto-merge/contrib/.github/workflows/test-all-versions.yml @@ -19,12 +19,6 @@ jobs: fail-fast: false matrix: node: ["14", "16", "18"] - include: - - node: "18" - lerna-extra-args: >- - --ignore @opentelemetry/instrumentation-fastify - --ignore @opentelemetry/instrumentation-restify - --ignore @opentelemetry/resource-detector-alibaba-cloud runs-on: ubuntu-latest services: mongo: @@ -93,8 +87,9 @@ jobs: MONGODB_PORT: 27017 MSSQL_PASSWORD: mssql_passw0rd MYSQL_DATABASE: otel_mysql_database - MYSQL_HOST: localhost + MYSQL_HOST: 127.0.0.1 MYSQL_PASSWORD: secret + MYSQL_ROOT_PASSWORD: rootpw MYSQL_PORT: 3306 MYSQL_USER: otel OPENTELEMETRY_REDIS_HOST: localhost @@ -118,6 +113,8 @@ jobs: - uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} + - name: Set MySQL variables + run: mysql --user=root --password=${MYSQL_ROOT_PASSWORD} --host=${MYSQL_HOST} --port=${MYSQL_PORT} -e "SET GLOBAL log_output='TABLE'; SET GLOBAL general_log = 1;" mysql - name: Cache Dependencies uses: actions/cache@v3 with: @@ -143,6 +140,6 @@ jobs: - name: Install Root Dependencies run: npm install --ignore-scripts - name: Bootstrap Dependencies - run: lerna bootstrap --no-ci --hoist --nohoist='zone.js' --nohoist='mocha' --nohoist='ts-mocha' + run: npx lerna bootstrap --no-ci --hoist --nohoist='zone.js' --nohoist='mocha' --nohoist='ts-mocha' - name: Run test-all-versions - run: lerna run test-all-versions ${{ inputs.lerna-args }} ${{ matrix.lerna-extra-args }} --stream --concurrency 1 + run: npx lerna run test-all-versions ${{ inputs.lerna-args }} ${{ matrix.lerna-extra-args }} --stream --concurrency 1 diff --git a/auto-merge/contrib/.github/workflows/unit-test.yml b/auto-merge/contrib/.github/workflows/unit-test.yml index 50179edd3..654d7a95f 100644 --- a/auto-merge/contrib/.github/workflows/unit-test.yml +++ b/auto-merge/contrib/.github/workflows/unit-test.yml @@ -11,15 +11,12 @@ jobs: matrix: node: ["14", "16", "18"] include: - - node: "18" - lerna-extra-args: >- - --ignore @opentelemetry/resource-detector-alibaba-cloud - --ignore @opentelemetry/instrumentation-fastify - --ignore @opentelemetry/instrumentation-restify + - node: 14 + code-coverage: true runs-on: ubuntu-latest services: memcached: - image: memcached:1.6.9-alpine + image: memcached:1.6.21-alpine ports: - 11211:11211 mongo: @@ -101,8 +98,9 @@ jobs: MONGODB_PORT: 27017 MSSQL_PASSWORD: mssql_passw0rd MYSQL_DATABASE: otel_mysql_database - MYSQL_HOST: localhost + MYSQL_HOST: 127.0.0.1 MYSQL_PASSWORD: secret + MYSQL_ROOT_PASSWORD: rootpw MYSQL_PORT: 3306 MYSQL_USER: otel OPENTELEMETRY_MEMCACHED_HOST: localhost @@ -123,6 +121,8 @@ jobs: - uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} + - name: Set MySQL variables + run: mysql --user=root --password=${MYSQL_ROOT_PASSWORD} --host=${MYSQL_HOST} --port=${MYSQL_PORT} -e "SET GLOBAL log_output='TABLE'; SET GLOBAL general_log = 1;" mysql - name: Cache Dependencies uses: actions/cache@v3 with: @@ -149,12 +149,16 @@ jobs: run: npm install --ignore-scripts - name: Bootstrap Dependencies run: npx lerna bootstrap --no-ci --hoist --nohoist='zone.js' --nohoist='mocha' --nohoist='ts-mocha' - - name: Unit tests + - name: Unit tests (Full) + if: matrix.code-coverage + run: npm run test -- ${{ matrix.lerna-extra-args }} + - name: Unit tests (Delta) + if: ${{ !matrix.code-coverage }} run: npm run test:ci:changed -- ${{ matrix.lerna-extra-args }} - name: Build examples run: npm run compile:examples - name: Report Coverage - if: matrix.node == '14' + if: ${{ matrix.code-coverage && !cancelled()}} uses: codecov/codecov-action@v3 with: verbose: true diff --git a/auto-merge/contrib/.release-please-manifest.json b/auto-merge/contrib/.release-please-manifest.json index 0d35de43a..b56847c2f 100644 --- a/auto-merge/contrib/.release-please-manifest.json +++ b/auto-merge/contrib/.release-please-manifest.json @@ -1 +1 @@ -{"detectors/node/opentelemetry-resource-detector-alibaba-cloud":"0.27.7","detectors/node/opentelemetry-resource-detector-aws":"1.2.5","detectors/node/opentelemetry-resource-detector-container":"0.2.5","detectors/node/opentelemetry-resource-detector-gcp":"0.28.3","detectors/node/opentelemetry-resource-detector-github":"0.27.1","detectors/node/opentelemetry-resource-detector-instana":"0.4.4","metapackages/auto-instrumentations-node":"0.37.1","metapackages/auto-instrumentations-web":"0.32.3","packages/opentelemetry-host-metrics":"0.32.2","packages/opentelemetry-id-generator-aws-xray":"1.1.2","packages/opentelemetry-propagation-utils":"0.29.5","packages/opentelemetry-redis-common":"0.35.1","packages/opentelemetry-test-utils":"0.33.4","plugins/node/instrumentation-amqplib":"0.32.5","plugins/node/instrumentation-dataloader":"0.4.3","plugins/node/instrumentation-fs":"0.7.4","plugins/node/instrumentation-lru-memoizer":"0.32.4","plugins/node/instrumentation-mongoose":"0.32.4","plugins/node/instrumentation-socket.io":"0.33.4","plugins/node/instrumentation-tedious":"0.5.4","plugins/node/opentelemetry-instrumentation-aws-lambda":"0.35.3","plugins/node/opentelemetry-instrumentation-aws-sdk":"0.34.3","plugins/node/opentelemetry-instrumentation-bunyan":"0.31.4","plugins/node/opentelemetry-instrumentation-cassandra":"0.32.4","plugins/node/opentelemetry-instrumentation-connect":"0.31.4","plugins/node/opentelemetry-instrumentation-dns":"0.31.5","plugins/node/opentelemetry-instrumentation-express":"0.32.4","plugins/node/opentelemetry-instrumentation-fastify":"0.31.4","plugins/node/opentelemetry-instrumentation-generic-pool":"0.31.4","plugins/node/opentelemetry-instrumentation-graphql":"0.34.3","plugins/node/opentelemetry-instrumentation-hapi":"0.31.4","plugins/node/opentelemetry-instrumentation-ioredis":"0.34.3","plugins/node/opentelemetry-instrumentation-knex":"0.31.4","plugins/node/opentelemetry-instrumentation-koa":"0.34.6","plugins/node/opentelemetry-instrumentation-memcached":"0.31.4","plugins/node/opentelemetry-instrumentation-mongodb":"0.35.0","plugins/node/opentelemetry-instrumentation-mysql":"0.33.3","plugins/node/opentelemetry-instrumentation-mysql2":"0.33.4","plugins/node/opentelemetry-instrumentation-nestjs-core":"0.32.5","plugins/node/opentelemetry-instrumentation-net":"0.31.4","plugins/node/opentelemetry-instrumentation-pg":"0.35.3","plugins/node/opentelemetry-instrumentation-pino":"0.33.4","plugins/node/opentelemetry-instrumentation-redis":"0.34.7","plugins/node/opentelemetry-instrumentation-redis-4":"0.34.6","plugins/node/opentelemetry-instrumentation-restify":"0.32.4","plugins/node/opentelemetry-instrumentation-router":"0.32.4","plugins/node/opentelemetry-instrumentation-winston":"0.31.4","plugins/web/opentelemetry-instrumentation-document-load":"0.32.3","plugins/web/opentelemetry-instrumentation-long-task":"0.32.5","plugins/web/opentelemetry-instrumentation-user-interaction":"0.32.4","plugins/web/opentelemetry-plugin-react-load":"0.28.2","propagators/opentelemetry-propagator-aws-xray":"1.2.1","propagators/opentelemetry-propagator-grpc-census-binary":"0.26.1","propagators/opentelemetry-propagator-instana":"0.2.2","propagators/opentelemetry-propagator-ot-trace":"0.26.3"} +{"detectors/node/opentelemetry-resource-detector-alibaba-cloud":"0.28.0","detectors/node/opentelemetry-resource-detector-aws":"1.3.0","detectors/node/opentelemetry-resource-detector-container":"0.3.0","detectors/node/opentelemetry-resource-detector-gcp":"0.29.0","detectors/node/opentelemetry-resource-detector-github":"0.28.0","detectors/node/opentelemetry-resource-detector-instana":"0.5.0","metapackages/auto-instrumentations-node":"0.38.0","metapackages/auto-instrumentations-web":"0.33.0","packages/opentelemetry-host-metrics":"0.33.0","packages/opentelemetry-id-generator-aws-xray":"1.2.0","packages/opentelemetry-propagation-utils":"0.30.0","packages/opentelemetry-redis-common":"0.36.0","packages/opentelemetry-sql-common":"0.40.0","packages/opentelemetry-test-utils":"0.34.0","plugins/node/instrumentation-amqplib":"0.33.0","plugins/node/instrumentation-cucumber":"0.0.1","plugins/node/instrumentation-dataloader":"0.5.0","plugins/node/instrumentation-fs":"0.8.0","plugins/node/instrumentation-lru-memoizer":"0.33.0","plugins/node/instrumentation-mongoose":"0.33.0","plugins/node/instrumentation-socket.io":"0.34.0","plugins/node/instrumentation-tedious":"0.6.0","plugins/node/opentelemetry-instrumentation-aws-lambda":"0.36.0","plugins/node/opentelemetry-instrumentation-aws-sdk":"0.35.0","plugins/node/opentelemetry-instrumentation-bunyan":"0.32.0","plugins/node/opentelemetry-instrumentation-cassandra":"0.33.0","plugins/node/opentelemetry-instrumentation-connect":"0.32.0","plugins/node/opentelemetry-instrumentation-dns":"0.32.0","plugins/node/opentelemetry-instrumentation-express":"0.33.0","plugins/node/opentelemetry-instrumentation-fastify":"0.32.0","plugins/node/opentelemetry-instrumentation-generic-pool":"0.32.0","plugins/node/opentelemetry-instrumentation-graphql":"0.35.0","plugins/node/opentelemetry-instrumentation-hapi":"0.32.0","plugins/node/opentelemetry-instrumentation-ioredis":"0.35.0","plugins/node/opentelemetry-instrumentation-knex":"0.32.0","plugins/node/opentelemetry-instrumentation-koa":"0.35.0","plugins/node/opentelemetry-instrumentation-memcached":"0.32.0","plugins/node/opentelemetry-instrumentation-mongodb":"0.36.0","plugins/node/opentelemetry-instrumentation-mysql":"0.34.0","plugins/node/opentelemetry-instrumentation-mysql2":"0.34.0","plugins/node/opentelemetry-instrumentation-nestjs-core":"0.33.0","plugins/node/opentelemetry-instrumentation-net":"0.32.0","plugins/node/opentelemetry-instrumentation-pg":"0.36.0","plugins/node/opentelemetry-instrumentation-pino":"0.34.0","plugins/node/opentelemetry-instrumentation-redis":"0.35.0","plugins/node/opentelemetry-instrumentation-redis-4":"0.35.0","plugins/node/opentelemetry-instrumentation-restify":"0.33.0","plugins/node/opentelemetry-instrumentation-router":"0.33.0","plugins/node/opentelemetry-instrumentation-winston":"0.32.0","plugins/web/opentelemetry-instrumentation-document-load":"0.33.0","plugins/web/opentelemetry-instrumentation-long-task":"0.33.0","plugins/web/opentelemetry-instrumentation-user-interaction":"0.33.0","plugins/web/opentelemetry-plugin-react-load":"0.29.0","propagators/opentelemetry-propagator-aws-xray":"1.3.0","propagators/opentelemetry-propagator-grpc-census-binary":"0.27.0","propagators/opentelemetry-propagator-instana":"0.3.0","propagators/opentelemetry-propagator-ot-trace":"0.27.0"} diff --git a/auto-merge/contrib/CONTRIBUTING.md b/auto-merge/contrib/CONTRIBUTING.md index 3c2b7513b..9a9164724 100644 --- a/auto-merge/contrib/CONTRIBUTING.md +++ b/auto-merge/contrib/CONTRIBUTING.md @@ -87,10 +87,6 @@ The `opentelemetry-js-contrib` project is written in TypeScript. - `npm test` tests code the same way that our CI will test it. - `npm run lint:fix` lint (and maybe fix) any changes. -### Generating API documentation - -- `npm run docs` to generate API documentation. Generates the documentation in `packages/opentelemetry-api/docs/out` - ### Generating CHANGELOG documentation - `npm run changelog` to generate CHANGELOG documentation in your terminal (see [RELEASING.md](RELEASING.md) for more details). @@ -117,6 +113,9 @@ A component may be **unreleased**, **experimental**, **beta**, **stable**, **unm With the exception of the stable status, it is up to each individual [component owner](#component-ownership) to determine the status of a component. A component may only be marked stable with the approval of a member of @open-telemetry/javascript-maintainers; see the definition of stable below for more details. +A Pull Request modifying components in any stage of the lifecycle is subject to the +[Pull Request Merge Requirements](#pull-request-merge-requirements). + ### Unreleased Unreleased components are in active development and have not yet been released to NPM. @@ -162,6 +161,33 @@ They may not work and there are no guarantees for fixes or new features. Their source files may be deleted from the repository. Any packages released from their source will be marked as deprecated in NPM. +## Pull Request Merge Requirements + +Pull requests MAY be merged by an approver OR a maintainer provided they meet all the following requirements: + +- Approved by + - at least one component owner if one is defined in [.github/component_owners.yml](.github/component_owners.yml) + - OR one maintainer + - OR at least one approver who is not the approver merging the pull request + - A pull request for small (simple typo, URL, update docs, or grammatical fix) changes may be approved and merged by the same approver +- No “changes requested” reviews or unresolved conversations by + - approvers + - maintainers + - technical committee members + - component owners + - subject-matter experts +- New or changed functionality is tested by unit tests +- New or changed functionality is documented if appropriate +- Substantial changes should not be merged within 24 hours of opening in order to allow reviewers from all time zones to have a chance to review + +All requirements are at the discretion of the maintainers. +Maintainers MAY merge pull requests which have not strictly met these requirements. +Maintainers MAY close, block, or put on hold pull requests even if they have strictly met these requirements. + +If a PR has not been interacted with by a reviewer within one week, please ping the component +owners as listed in [.github/component_owners.yml](.github/component_owners.yml), if component owners are unresponsive +please ping ([@open-telemetry/javascript-approvers](https://github.com/orgs/open-telemetry/teams/javascript-approvers)). + ## Contributing Vendor Components This repo is generally meant for hosting components that work with popular open-source frameworks and tools. However, it is also possible to contribute components specific to a 3rd party vendor in this repo. diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-alibaba-cloud/CHANGELOG.md b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-alibaba-cloud/CHANGELOG.md index cd09bf78a..f12bdd2de 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-alibaba-cloud/CHANGELOG.md +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-alibaba-cloud/CHANGELOG.md @@ -36,6 +36,20 @@ * devDependencies * @opentelemetry/contrib-test-utils bumped from ^0.33.3 to ^0.33.4 +## [0.28.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-alibaba-cloud-v0.27.7...resource-detector-alibaba-cloud-v0.28.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.27.6](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-alibaba-cloud-v0.27.5...resource-detector-alibaba-cloud-v0.27.6) (2023-05-16) diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-alibaba-cloud/package.json b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-alibaba-cloud/package.json index ff5acc6b0..e6bd34924 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-alibaba-cloud/package.json +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-alibaba-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resource-detector-alibaba-cloud", - "version": "0.27.7", + "version": "0.28.0", "description": "OpenTelemetry resource detector for Alibaba Cloud", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -43,14 +43,14 @@ }, "devDependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", - "@types/sinon": "10.0.2", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "mocha": "7.2.0", - "nock": "12.0.3", + "nock": "13.3.2", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/CHANGELOG.md b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/CHANGELOG.md index 5fa8c4d82..62193c329 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/CHANGELOG.md +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/CHANGELOG.md @@ -36,6 +36,21 @@ * devDependencies * @opentelemetry/contrib-test-utils bumped from ^0.33.3 to ^0.33.4 +## [1.3.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-aws-v1.2.5...resource-detector-aws-v1.3.0) (2023-07-12) + + +### Features + +* **aws-ecs:** add cloud resource attributes for fargate ([#1543](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1543)) ([de17f77](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/de17f77bd7f75fc2fc8a92d35dfcfbf749b50f71)) +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [1.2.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-aws-v1.2.3...resource-detector-aws-v1.2.4) (2023-05-16) diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/package.json b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/package.json index d4d833de9..c1e52afb9 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/package.json +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resource-detector-aws", - "version": "1.2.5", + "version": "1.3.0", "description": "OpenTelemetry SDK resource detector for AWS", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,14 +42,14 @@ }, "devDependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", - "@types/sinon": "10.0.2", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "mocha": "7.2.0", - "nock": "12.0.3", + "nock": "13.3.2", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/src/detectors/AwsEcsDetector.ts b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/src/detectors/AwsEcsDetector.ts index dc295f532..700d41057 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/src/detectors/AwsEcsDetector.ts +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/src/detectors/AwsEcsDetector.ts @@ -15,7 +15,11 @@ */ import { diag } from '@opentelemetry/api'; -import { Detector, Resource } from '@opentelemetry/resources'; +import { + Detector, + Resource, + ResourceAttributes, +} from '@opentelemetry/resources'; import { CloudProviderValues, CloudPlatformValues, @@ -128,14 +132,19 @@ export class AwsEcsDetector implements Detector { const baseArn: string = taskArn.substring(0, taskArn.lastIndexOf(':')); const cluster: string = taskMetadata['Cluster']; + const accountId: string = AwsEcsDetector._getAccountFromArn(taskArn); + const region: string = AwsEcsDetector._getRegionFromArn(taskArn); + const availabilityZone: string | undefined = + taskMetadata?.['AvailabilityZone']; + const clusterArn = cluster.startsWith('arn:') ? cluster : `${baseArn}:cluster/${cluster}`; const containerArn: string = containerMetadata['ContainerARN']; - // https://github.com/open-telemetry/opentelemetry-specification/blob/main/semantic_conventions/resource/cloud_provider/aws/ecs.yaml - return new Resource({ + // https://github.com/open-telemetry/semantic-conventions/blob/main/semantic_conventions/resource/cloud_provider/aws/ecs.yaml + const attributes: ResourceAttributes = { [SemanticResourceAttributes.AWS_ECS_CONTAINER_ARN]: containerArn, [SemanticResourceAttributes.AWS_ECS_CLUSTER_ARN]: clusterArn, [SemanticResourceAttributes.AWS_ECS_LAUNCHTYPE]: @@ -144,7 +153,18 @@ export class AwsEcsDetector implements Detector { [SemanticResourceAttributes.AWS_ECS_TASK_FAMILY]: taskMetadata['Family'], [SemanticResourceAttributes.AWS_ECS_TASK_REVISION]: taskMetadata['Revision'], - }); + + [SemanticResourceAttributes.CLOUD_ACCOUNT_ID]: accountId, + [SemanticResourceAttributes.CLOUD_REGION]: region, + }; + + // The availability zone is not available in all Fargate runtimes + if (availabilityZone) { + attributes[SemanticResourceAttributes.CLOUD_AVAILABILITY_ZONE] = + availabilityZone; + } + + return new Resource(attributes); } private static async _getLogResource( diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/test/detectors/AwsEcsDetector.test.ts b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/test/detectors/AwsEcsDetector.test.ts index b1f7b58a1..4a869a987 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/test/detectors/AwsEcsDetector.test.ts +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-aws/test/detectors/AwsEcsDetector.test.ts @@ -37,6 +37,9 @@ import * as os from 'os'; import { join } from 'path'; interface EcsResourceAttributes { + readonly accountId?: string; + readonly region?: string; + readonly zone?: string; readonly clusterArn?: string; readonly containerArn?: string; readonly launchType?: 'ec2' | 'fargate'; @@ -55,6 +58,9 @@ const assertEcsResource = ( ) => { assertCloudResource(resource, { provider: CloudProviderValues.AWS, + accountId: validations.accountId, + region: validations.region, + zone: validations.zone, }); assert.strictEqual( resource.attributes[SemanticResourceAttributes.CLOUD_PLATFORM], @@ -336,6 +342,9 @@ describe('AwsEcsResourceDetector', () => { describe('on Fargate', () => { describe('with AWS CloudWatch as log driver', () => { generateLaunchTypeTests({ + accountId: '111122223333', + region: 'us-west-2', + zone: 'us-west-2a', clusterArn: 'arn:aws:ecs:us-west-2:111122223333:cluster/default', containerArn: 'arn:aws:ecs:us-west-2:111122223333:container/05966557-f16c-49cb-9352-24b3a0dcd0e1', diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-container/CHANGELOG.md b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-container/CHANGELOG.md index bfa945b7e..25171400d 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-container/CHANGELOG.md +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-container/CHANGELOG.md @@ -30,6 +30,20 @@ * devDependencies * @opentelemetry/contrib-test-utils bumped from ^0.33.3 to ^0.33.4 +## [0.3.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-container-v0.2.5...resource-detector-container-v0.3.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.2.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-container-v0.2.3...resource-detector-container-v0.2.4) (2023-05-16) diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-container/package.json b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-container/package.json index 04e3b41a4..19c95d285 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-container/package.json +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-container/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resource-detector-container", - "version": "0.2.5", + "version": "0.3.0", "description": "Opentelemetry resource detector to get container resource attributes", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -36,15 +36,15 @@ }, "devDependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@types/mocha": "8.2.3", "@types/node": "^18.0.0", - "@types/sinon": "10.0.2", + "@types/sinon": "10.0.16", "eslint-plugin-header": "^3.1.1", "mocha": "7.2.0", - "nock": "12.0.3", + "nock": "13.3.2", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-gcp/CHANGELOG.md b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-gcp/CHANGELOG.md index c965354fd..d626ba109 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-gcp/CHANGELOG.md +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-gcp/CHANGELOG.md @@ -36,6 +36,20 @@ * devDependencies * @opentelemetry/contrib-test-utils bumped from ^0.33.3 to ^0.33.4 +## [0.29.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-gcp-v0.28.3...resource-detector-gcp-v0.29.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.28.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-gcp-v0.28.1...resource-detector-gcp-v0.28.2) (2023-05-16) diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-gcp/package.json b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-gcp/package.json index d18c69580..7d53bacca 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-gcp/package.json +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-gcp/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resource-detector-gcp", - "version": "0.28.3", + "version": "0.29.0", "description": "OpenTelemetry SDK resource detector for GCP", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,14 +42,14 @@ }, "devDependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", - "@types/semver": "7.3.8", + "@types/node": "18.16.19", + "@types/semver": "7.5.0", "mocha": "7.2.0", - "nock": "12.0.3", + "nock": "13.3.2", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-github/CHANGELOG.md b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-github/CHANGELOG.md index cc96bf973..1a0003bf0 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-github/CHANGELOG.md +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-github/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.28.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-github-v0.27.1...resource-detector-github-v0.28.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + ## [0.27.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-github-v0.27.0...resource-detector-github-v0.27.1) (2023-05-16) diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-github/package.json b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-github/package.json index 9977b32bd..36af2ffce 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-github/package.json +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-github/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resource-detector-github", - "version": "0.27.1", + "version": "0.28.0", "description": "OpenTelemetry SDK resource detector for GitHub", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -47,11 +47,11 @@ "devDependencies": { "@opentelemetry/api": "^1.0.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", - "@types/sinon": "10.0.2", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/CHANGELOG.md b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/CHANGELOG.md index 782d7dfb2..1b4df2536 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/CHANGELOG.md +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [0.5.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-instana-v0.4.4...resource-detector-instana-v0.5.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.4.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/resource-detector-instana-v0.4.3...resource-detector-instana-v0.4.4) (2023-06-12) diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/package.json b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/package.json index 3cc026045..35fb4e0cd 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/package.json +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/resource-detector-instana", - "version": "0.4.4", + "version": "0.5.0", "description": "OpenTelemetry SDK resource detector for Instana", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -40,15 +40,15 @@ }, "devDependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", - "@opentelemetry/sdk-node": "^0.40.0", + "@opentelemetry/contrib-test-utils": "^0.34.0", + "@opentelemetry/sdk-node": "^0.41.2", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", - "@types/semver": "7.3.8", + "@types/node": "18.16.19", + "@types/semver": "7.5.0", "mocha": "7.2.0", - "nock": "12.0.3", + "nock": "13.3.2", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, diff --git a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/test/InstanaAgentDetectorUnitTest.test.ts b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/test/InstanaAgentDetectorUnitTest.test.ts index 6799d9601..abe4ef5a5 100644 --- a/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/test/InstanaAgentDetectorUnitTest.test.ts +++ b/auto-merge/contrib/detectors/node/opentelemetry-resource-detector-instana/test/InstanaAgentDetectorUnitTest.test.ts @@ -65,7 +65,7 @@ describe('[UNIT] instanaAgentDetector', () => { }); it('should return agent resource with env variables', async () => { - process.env.INSTANA_AGENT_PORT = '88866'; + process.env.INSTANA_AGENT_PORT = '56001'; process.env.INSTANA_AGENT_HOST = 'instanaagent'; const mockedReply = { @@ -108,12 +108,14 @@ describe('[UNIT] instanaAgentDetector', () => { }); it('agent timeout', async () => { - process.env.INSTANA_AGENT_PORT = '878787'; + process.env.INSTANA_AGENT_PORT = '56002'; process.env.INSTANA_AGENT_HOST = 'instanaagent'; process.env.INSTANA_AGENT_TIMEOUT_MS = '200'; const expectedError = new Error('Instana Agent request timed out.'); - nock('http://instanaagent:878787') + nock( + `http://${process.env.INSTANA_AGENT_HOST}:${process.env.INSTANA_AGENT_PORT}` + ) .persist() .put('/com.instana.plugin.nodejs.discovery') .delay(500) diff --git a/auto-merge/contrib/metapackages/auto-instrumentations-node/CHANGELOG.md b/auto-merge/contrib/metapackages/auto-instrumentations-node/CHANGELOG.md index cd943918b..030e8cd31 100644 --- a/auto-merge/contrib/metapackages/auto-instrumentations-node/CHANGELOG.md +++ b/auto-merge/contrib/metapackages/auto-instrumentations-node/CHANGELOG.md @@ -87,6 +87,62 @@ * @opentelemetry/instrumentation-koa bumped from ^0.34.2 to ^0.34.3 * @opentelemetry/instrumentation-redis bumped from ^0.34.3 to ^0.34.4 +## [0.38.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/auto-instrumentations-node-v0.37.1...auto-instrumentations-node-v0.38.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @opentelemetry/instrumentation-amqplib bumped from ^0.32.5 to ^0.33.0 + * @opentelemetry/instrumentation-aws-lambda bumped from ^0.35.3 to ^0.36.0 + * @opentelemetry/instrumentation-aws-sdk bumped from ^0.34.3 to ^0.35.0 + * @opentelemetry/instrumentation-bunyan bumped from ^0.31.4 to ^0.32.0 + * @opentelemetry/instrumentation-cassandra-driver bumped from ^0.32.4 to ^0.33.0 + * @opentelemetry/instrumentation-connect bumped from ^0.31.4 to ^0.32.0 + * @opentelemetry/instrumentation-dataloader bumped from ^0.4.3 to ^0.5.0 + * @opentelemetry/instrumentation-dns bumped from ^0.31.5 to ^0.32.0 + * @opentelemetry/instrumentation-express bumped from ^0.32.4 to ^0.33.0 + * @opentelemetry/instrumentation-fs bumped from ^0.7.4 to ^0.8.0 + * @opentelemetry/instrumentation-fastify bumped from ^0.31.4 to ^0.32.0 + * @opentelemetry/instrumentation-generic-pool bumped from ^0.31.4 to ^0.32.0 + * @opentelemetry/instrumentation-graphql bumped from ^0.34.3 to ^0.35.0 + * @opentelemetry/instrumentation-hapi bumped from ^0.31.4 to ^0.32.0 + * @opentelemetry/instrumentation-ioredis bumped from ^0.34.3 to ^0.35.0 + * @opentelemetry/instrumentation-knex bumped from ^0.31.4 to ^0.32.0 + * @opentelemetry/instrumentation-koa bumped from ^0.34.6 to ^0.35.0 + * @opentelemetry/instrumentation-lru-memoizer bumped from ^0.32.4 to ^0.33.0 + * @opentelemetry/instrumentation-memcached bumped from ^0.31.4 to ^0.32.0 + * @opentelemetry/instrumentation-mongodb bumped from ^0.35.0 to ^0.36.0 + * @opentelemetry/instrumentation-mongoose bumped from ^0.32.4 to ^0.33.0 + * @opentelemetry/instrumentation-mysql bumped from ^0.33.3 to ^0.34.0 + * @opentelemetry/instrumentation-mysql2 bumped from ^0.33.4 to ^0.34.0 + * @opentelemetry/instrumentation-nestjs-core bumped from ^0.32.5 to ^0.33.0 + * @opentelemetry/instrumentation-net bumped from ^0.31.4 to ^0.32.0 + * @opentelemetry/instrumentation-pg bumped from ^0.35.3 to ^0.36.0 + * @opentelemetry/instrumentation-pino bumped from ^0.33.4 to ^0.34.0 + * @opentelemetry/instrumentation-redis bumped from ^0.34.7 to ^0.35.0 + * @opentelemetry/instrumentation-redis-4 bumped from ^0.34.6 to ^0.35.0 + * @opentelemetry/instrumentation-restify bumped from ^0.32.4 to ^0.33.0 + * @opentelemetry/instrumentation-router bumped from ^0.32.4 to ^0.33.0 + * @opentelemetry/instrumentation-socket.io bumped from ^0.33.4 to ^0.34.0 + * @opentelemetry/instrumentation-tedious bumped from ^0.5.4 to ^0.6.0 + * @opentelemetry/instrumentation-winston bumped from ^0.31.4 to ^0.32.0 + * @opentelemetry/resource-detector-alibaba-cloud bumped from ^0.27.7 to ^0.28.0 + * @opentelemetry/resource-detector-aws bumped from ^1.2.5 to ^1.3.0 + * @opentelemetry/resource-detector-container bumped from ^0.2.5 to ^0.3.0 + * @opentelemetry/resource-detector-gcp bumped from ^0.28.3 to ^0.29.0 + ## [0.37.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/auto-instrumentations-node-v0.37.0...auto-instrumentations-node-v0.37.1) (2023-06-12) diff --git a/auto-merge/contrib/metapackages/auto-instrumentations-node/README.md b/auto-merge/contrib/metapackages/auto-instrumentations-node/README.md index 0795f15b7..cc45a14db 100644 --- a/auto-merge/contrib/metapackages/auto-instrumentations-node/README.md +++ b/auto-merge/contrib/metapackages/auto-instrumentations-node/README.md @@ -140,6 +140,7 @@ registerInstrumentations({ - [@opentelemetry/instrumentation-bunyan](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-bunyan) - [@opentelemetry/instrumentation-cassandra-driver](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-cassandra) - [@opentelemetry/instrumentation-connect](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-connect) +- [@opentelemetry/instrumentation-cucumber](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-cucumber) - [@opentelemetry/instrumentation-dataloader](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-dataloader) - [@opentelemetry/instrumentation-dns](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-dns) - [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express) diff --git a/auto-merge/contrib/metapackages/auto-instrumentations-node/package.json b/auto-merge/contrib/metapackages/auto-instrumentations-node/package.json index 0110a6e24..4b82be75b 100644 --- a/auto-merge/contrib/metapackages/auto-instrumentations-node/package.json +++ b/auto-merge/contrib/metapackages/auto-instrumentations-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/auto-instrumentations-node", - "version": "0.37.1", + "version": "0.38.0", "description": "Metapackage which bundles opentelemetry node core and contrib instrumentations", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/metapackages/auto-instrumentations-node#readme", @@ -39,58 +39,59 @@ "devDependencies": { "@opentelemetry/api": "^1.4.1", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/sinon": "10.0.2", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", - "@opentelemetry/instrumentation-amqplib": "^0.32.5", - "@opentelemetry/instrumentation-aws-lambda": "^0.35.3", - "@opentelemetry/instrumentation-aws-sdk": "^0.34.3", - "@opentelemetry/instrumentation-bunyan": "^0.31.4", - "@opentelemetry/instrumentation-cassandra-driver": "^0.32.4", - "@opentelemetry/instrumentation-connect": "^0.31.4", - "@opentelemetry/instrumentation-dataloader": "^0.4.3", - "@opentelemetry/instrumentation-dns": "^0.31.5", - "@opentelemetry/instrumentation-express": "^0.32.4", - "@opentelemetry/instrumentation-fs": "^0.7.4", - "@opentelemetry/instrumentation-fastify": "^0.31.4", - "@opentelemetry/instrumentation-generic-pool": "^0.31.4", - "@opentelemetry/instrumentation-graphql": "^0.34.3", - "@opentelemetry/instrumentation-grpc": "^0.40.0", - "@opentelemetry/instrumentation-hapi": "^0.31.4", - "@opentelemetry/instrumentation-http": "^0.40.0", - "@opentelemetry/instrumentation-ioredis": "^0.34.3", - "@opentelemetry/instrumentation-knex": "^0.31.4", - "@opentelemetry/instrumentation-koa": "^0.34.6", - "@opentelemetry/instrumentation-lru-memoizer": "^0.32.4", - "@opentelemetry/instrumentation-memcached": "^0.31.4", - "@opentelemetry/instrumentation-mongodb": "^0.35.0", - "@opentelemetry/instrumentation-mongoose": "^0.32.4", - "@opentelemetry/instrumentation-mysql": "^0.33.3", - "@opentelemetry/instrumentation-mysql2": "^0.33.4", - "@opentelemetry/instrumentation-nestjs-core": "^0.32.5", - "@opentelemetry/instrumentation-net": "^0.31.4", - "@opentelemetry/instrumentation-pg": "^0.35.3", - "@opentelemetry/instrumentation-pino": "^0.33.4", - "@opentelemetry/instrumentation-redis": "^0.34.7", - "@opentelemetry/instrumentation-redis-4": "^0.34.6", - "@opentelemetry/instrumentation-restify": "^0.32.4", - "@opentelemetry/instrumentation-router": "^0.32.4", - "@opentelemetry/instrumentation-socket.io": "^0.33.4", - "@opentelemetry/instrumentation-tedious": "^0.5.4", - "@opentelemetry/instrumentation-winston": "^0.31.4", - "@opentelemetry/resource-detector-alibaba-cloud": "^0.27.7", - "@opentelemetry/resource-detector-aws": "^1.2.5", - "@opentelemetry/resource-detector-container": "^0.2.5", - "@opentelemetry/resource-detector-gcp": "^0.28.3", + "@opentelemetry/instrumentation": "^0.41.2", + "@opentelemetry/instrumentation-amqplib": "^0.33.0", + "@opentelemetry/instrumentation-aws-lambda": "^0.36.0", + "@opentelemetry/instrumentation-aws-sdk": "^0.35.0", + "@opentelemetry/instrumentation-bunyan": "^0.32.0", + "@opentelemetry/instrumentation-cassandra-driver": "^0.33.0", + "@opentelemetry/instrumentation-connect": "^0.32.0", + "@opentelemetry/instrumentation-cucumber": "^0.0.1", + "@opentelemetry/instrumentation-dataloader": "^0.5.0", + "@opentelemetry/instrumentation-dns": "^0.32.0", + "@opentelemetry/instrumentation-express": "^0.33.0", + "@opentelemetry/instrumentation-fs": "^0.8.0", + "@opentelemetry/instrumentation-fastify": "^0.32.0", + "@opentelemetry/instrumentation-generic-pool": "^0.32.0", + "@opentelemetry/instrumentation-graphql": "^0.35.0", + "@opentelemetry/instrumentation-grpc": "^0.41.2", + "@opentelemetry/instrumentation-hapi": "^0.32.0", + "@opentelemetry/instrumentation-http": "^0.41.2", + "@opentelemetry/instrumentation-ioredis": "^0.35.0", + "@opentelemetry/instrumentation-knex": "^0.32.0", + "@opentelemetry/instrumentation-koa": "^0.35.0", + "@opentelemetry/instrumentation-lru-memoizer": "^0.33.0", + "@opentelemetry/instrumentation-memcached": "^0.32.0", + "@opentelemetry/instrumentation-mongodb": "^0.36.0", + "@opentelemetry/instrumentation-mongoose": "^0.33.0", + "@opentelemetry/instrumentation-mysql": "^0.34.0", + "@opentelemetry/instrumentation-mysql2": "^0.34.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.33.0", + "@opentelemetry/instrumentation-net": "^0.32.0", + "@opentelemetry/instrumentation-pg": "^0.36.0", + "@opentelemetry/instrumentation-pino": "^0.34.0", + "@opentelemetry/instrumentation-redis": "^0.35.0", + "@opentelemetry/instrumentation-redis-4": "^0.35.0", + "@opentelemetry/instrumentation-restify": "^0.33.0", + "@opentelemetry/instrumentation-router": "^0.33.0", + "@opentelemetry/instrumentation-socket.io": "^0.34.0", + "@opentelemetry/instrumentation-tedious": "^0.6.0", + "@opentelemetry/instrumentation-winston": "^0.32.0", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.28.0", + "@opentelemetry/resource-detector-aws": "^1.3.0", + "@opentelemetry/resource-detector-container": "^0.3.0", + "@opentelemetry/resource-detector-gcp": "^0.29.0", "@opentelemetry/resources": "^1.12.0", - "@opentelemetry/sdk-node": "^0.40.0" + "@opentelemetry/sdk-node": "^0.41.2" } } diff --git a/auto-merge/contrib/metapackages/auto-instrumentations-node/src/utils.ts b/auto-merge/contrib/metapackages/auto-instrumentations-node/src/utils.ts index 0c194f7a3..ce9f6c896 100644 --- a/auto-merge/contrib/metapackages/auto-instrumentations-node/src/utils.ts +++ b/auto-merge/contrib/metapackages/auto-instrumentations-node/src/utils.ts @@ -23,6 +23,7 @@ import { AwsInstrumentation } from '@opentelemetry/instrumentation-aws-sdk'; import { BunyanInstrumentation } from '@opentelemetry/instrumentation-bunyan'; import { CassandraDriverInstrumentation } from '@opentelemetry/instrumentation-cassandra-driver'; import { ConnectInstrumentation } from '@opentelemetry/instrumentation-connect'; +import { CucumberInstrumentation } from '@opentelemetry/instrumentation-cucumber'; import { DataloaderInstrumentation } from '@opentelemetry/instrumentation-dataloader'; import { DnsInstrumentation } from '@opentelemetry/instrumentation-dns'; import { ExpressInstrumentation } from '@opentelemetry/instrumentation-express'; @@ -90,6 +91,7 @@ const InstrumentationMap = { '@opentelemetry/instrumentation-cassandra-driver': CassandraDriverInstrumentation, '@opentelemetry/instrumentation-connect': ConnectInstrumentation, + '@opentelemetry/instrumentation-cucumber': CucumberInstrumentation, '@opentelemetry/instrumentation-dataloader': DataloaderInstrumentation, '@opentelemetry/instrumentation-dns': DnsInstrumentation, '@opentelemetry/instrumentation-express': ExpressInstrumentation, diff --git a/auto-merge/contrib/package.json b/auto-merge/contrib/package.json index 24049e1ff..ad0e87338 100644 --- a/auto-merge/contrib/package.json +++ b/auto-merge/contrib/package.json @@ -58,7 +58,7 @@ "husky": "7.0.4", "lerna": "5.5.2", "lerna-changelog": "2.2.0", - "prettier": "2.8.7", + "prettier": "2.8.8", "typescript": "4.4.4" }, "changelog": { diff --git a/auto-merge/contrib/packages/opentelemetry-host-metrics/CHANGELOG.md b/auto-merge/contrib/packages/opentelemetry-host-metrics/CHANGELOG.md index 4de1a4d20..24fef2d60 100644 --- a/auto-merge/contrib/packages/opentelemetry-host-metrics/CHANGELOG.md +++ b/auto-merge/contrib/packages/opentelemetry-host-metrics/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/host-metrics-v0.32.2...host-metrics-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + ## [0.32.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/host-metrics-v0.32.1...host-metrics-v0.32.2) (2023-05-16) diff --git a/auto-merge/contrib/packages/opentelemetry-host-metrics/package.json b/auto-merge/contrib/packages/opentelemetry-host-metrics/package.json index 9f13f4b66..cbfaaf787 100644 --- a/auto-merge/contrib/packages/opentelemetry-host-metrics/package.json +++ b/auto-merge/contrib/packages/opentelemetry-host-metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/host-metrics", - "version": "0.32.2", + "version": "0.33.0", "description": "OpenTelemetry Host Metrics for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -48,11 +48,11 @@ "devDependencies": { "@opentelemetry/api": "^1.3.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", - "@types/sinon": "10.0.2", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/auto-merge/contrib/packages/opentelemetry-id-generator-aws-xray/CHANGELOG.md b/auto-merge/contrib/packages/opentelemetry-id-generator-aws-xray/CHANGELOG.md index 1449444b8..55ef243c5 100644 --- a/auto-merge/contrib/packages/opentelemetry-id-generator-aws-xray/CHANGELOG.md +++ b/auto-merge/contrib/packages/opentelemetry-id-generator-aws-xray/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.2.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/id-generator-aws-xray-v1.1.2...id-generator-aws-xray-v1.2.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + ## [1.1.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/id-generator-aws-xray-v1.1.1...id-generator-aws-xray-v1.1.2) (2023-05-16) diff --git a/auto-merge/contrib/packages/opentelemetry-id-generator-aws-xray/package.json b/auto-merge/contrib/packages/opentelemetry-id-generator-aws-xray/package.json index eb92b38a1..71cd335ae 100644 --- a/auto-merge/contrib/packages/opentelemetry-id-generator-aws-xray/package.json +++ b/auto-merge/contrib/packages/opentelemetry-id-generator-aws-xray/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/id-generator-aws-xray", - "version": "1.1.2", + "version": "1.2.0", "description": "AWS X-Ray ID generator for OpenTelemetry", "main": "build/src/index.js", "publishConfig": { @@ -56,19 +56,19 @@ "devDependencies": { "@opentelemetry/api": "^1.0.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", - "@types/sinon": "10.0.2", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.2", "@jsdevtools/coverage-istanbul-loader": "3.0.5", "karma": "6.3.16", "karma-chrome-launcher": "^3.1.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-loader": "8.3.0", "ts-mocha": "10.0.0", diff --git a/auto-merge/contrib/packages/opentelemetry-propagation-utils/CHANGELOG.md b/auto-merge/contrib/packages/opentelemetry-propagation-utils/CHANGELOG.md index 14dc247aa..5b0feb6c7 100644 --- a/auto-merge/contrib/packages/opentelemetry-propagation-utils/CHANGELOG.md +++ b/auto-merge/contrib/packages/opentelemetry-propagation-utils/CHANGELOG.md @@ -24,6 +24,20 @@ * devDependencies * @opentelemetry/contrib-test-utils bumped from ^0.33.3 to ^0.33.4 +## [0.30.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/propagation-utils-v0.29.5...propagation-utils-v0.30.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.29.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/propagation-utils-v0.29.3...propagation-utils-v0.29.4) (2023-05-16) diff --git a/auto-merge/contrib/packages/opentelemetry-propagation-utils/package.json b/auto-merge/contrib/packages/opentelemetry-propagation-utils/package.json index 3fbc9b994..435f11f84 100644 --- a/auto-merge/contrib/packages/opentelemetry-propagation-utils/package.json +++ b/auto-merge/contrib/packages/opentelemetry-propagation-utils/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagation-utils", - "version": "0.29.5", + "version": "0.30.0", "description": "Propagation utilities for opentelemetry instrumentations", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,9 +45,9 @@ }, "devDependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@types/mocha": "^9.1.1", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "@types/sinon": "^10.0.11", "expect": "29.2.0", "mocha": "7.2.0", diff --git a/auto-merge/contrib/packages/opentelemetry-redis-common/CHANGELOG.md b/auto-merge/contrib/packages/opentelemetry-redis-common/CHANGELOG.md index beb728a3b..a8856d1aa 100644 --- a/auto-merge/contrib/packages/opentelemetry-redis-common/CHANGELOG.md +++ b/auto-merge/contrib/packages/opentelemetry-redis-common/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.36.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/redis-common-v0.35.1...redis-common-v0.36.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + ## [0.35.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/redis-common-v0.35.0...redis-common-v0.35.1) (2023-05-16) diff --git a/auto-merge/contrib/packages/opentelemetry-redis-common/package.json b/auto-merge/contrib/packages/opentelemetry-redis-common/package.json index 62bde4fd0..a90cc8aa6 100644 --- a/auto-merge/contrib/packages/opentelemetry-redis-common/package.json +++ b/auto-merge/contrib/packages/opentelemetry-redis-common/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/redis-common", - "version": "0.35.1", + "version": "0.36.0", "description": "Redis utilities for redis instrumentations", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -40,7 +40,7 @@ "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/redis-common#readme", "devDependencies": { "@types/mocha": "^9.1.1", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "mocha": "7.2.0", "nyc": "15.1.0", "ts-mocha": "10.0.0", diff --git a/auto-merge/contrib/packages/opentelemetry-sampler-aws-xray/package.json b/auto-merge/contrib/packages/opentelemetry-sampler-aws-xray/package.json index f28f1e333..afb90e170 100644 --- a/auto-merge/contrib/packages/opentelemetry-sampler-aws-xray/package.json +++ b/auto-merge/contrib/packages/opentelemetry-sampler-aws-xray/package.json @@ -51,19 +51,19 @@ }, "devDependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/contrib-test-utils": "^0.33.1", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", - "@types/sinon": "10.0.6", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "eslint": "8.7.0", "expect": "29.2.0", "mocha": "7.2.0", - "nock": "13.2.1", + "nock": "13.3.2", "sinon": "15.0.1", "ts-mocha": "10.0.0", "nyc": "15.1.0", "typescript": "4.4.4", - "gts": "3.1.0", + "gts": "3.1.1", "@typescript-eslint/eslint-plugin": "5.8.1", "@typescript-eslint/parser": "5.8.1" }, diff --git a/auto-merge/contrib/packages/opentelemetry-sql-common/.eslintignore b/auto-merge/contrib/packages/opentelemetry-sql-common/.eslintignore new file mode 100644 index 000000000..378eac25d --- /dev/null +++ b/auto-merge/contrib/packages/opentelemetry-sql-common/.eslintignore @@ -0,0 +1 @@ +build diff --git a/auto-merge/contrib/packages/opentelemetry-sql-common/.eslintrc.js b/auto-merge/contrib/packages/opentelemetry-sql-common/.eslintrc.js new file mode 100644 index 000000000..15096b665 --- /dev/null +++ b/auto-merge/contrib/packages/opentelemetry-sql-common/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + env: { + mocha: true, + node: true, + }, + ...require('../../eslint.config.js'), +}; diff --git a/auto-merge/contrib/packages/opentelemetry-sql-common/CHANGELOG.md b/auto-merge/contrib/packages/opentelemetry-sql-common/CHANGELOG.md new file mode 100644 index 000000000..ee7f4757e --- /dev/null +++ b/auto-merge/contrib/packages/opentelemetry-sql-common/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +## [0.40.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/sql-common-v0.39.0...sql-common-v0.40.0) (2023-07-12) + + +### Features + +* add sqlcommenter comment to mysql2 queries ([#1523](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1523)) ([856c252](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/856c25211567104ced8b2a2b56d0818a3c48e671)) +* upstream mocha instrumentation testing plugin from ext-js [#621](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/621) ([#669](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/669)) ([a5170c4](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/a5170c494706a2bec3ba51e59966d0ca8a41d00e)) diff --git a/auto-merge/contrib/packages/opentelemetry-sql-common/LICENSE b/auto-merge/contrib/packages/opentelemetry-sql-common/LICENSE new file mode 100644 index 000000000..e50e8c80f --- /dev/null +++ b/auto-merge/contrib/packages/opentelemetry-sql-common/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [2022] OpenTelemetry Authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/auto-merge/contrib/packages/opentelemetry-sql-common/README.md b/auto-merge/contrib/packages/opentelemetry-sql-common/README.md new file mode 100644 index 000000000..8a7ba446d --- /dev/null +++ b/auto-merge/contrib/packages/opentelemetry-sql-common/README.md @@ -0,0 +1,6 @@ +# Common Utils for OpenTelemetry SQL packages + +This is an internal utils package used for the different SQL instrumentations: + +1. mysql2 +2. pg diff --git a/auto-merge/contrib/packages/opentelemetry-sql-common/package.json b/auto-merge/contrib/packages/opentelemetry-sql-common/package.json new file mode 100644 index 000000000..666efaf3b --- /dev/null +++ b/auto-merge/contrib/packages/opentelemetry-sql-common/package.json @@ -0,0 +1,57 @@ +{ + "name": "@opentelemetry/sql-common", + "version": "0.40.0", + "description": "Utilities for SQL instrumentations", + "main": "build/src/index.js", + "types": "build/src/index.d.ts", + "publishConfig": { + "access": "public" + }, + "scripts": { + "lint": "eslint . --ext .ts", + "lint:fix": "eslint . --ext .ts --fix", + "compile": "tsc --build tsconfig.json", + "precompile": "tsc --version && lerna run version:update --scope @opentelemetry/sql-common --include-dependencies", + "prewatch": "npm run precompile", + "prepare": "npm run compile", + "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", + "watch": "tsc -w" + }, + "repository": "open-telemetry/opentelemetry-js-contrib", + "keywords": [ + "opentelemetry", + "contrib", + "sql" + ], + "files": [ + "build/**/*.js", + "build/**/*.js.map", + "build/**/*.d.ts", + "LICENSE", + "README.md" + ], + "author": "OpenTelemetry Authors", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "bugs": { + "url": "https://github.com/open-telemetry/opentelemetry-js-contrib/issues" + }, + "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/sql-common#readme", + "peerDependencies": { + "@opentelemetry/api": "^1.1.0" + }, + "dependencies": { + "@opentelemetry/core": "^1.1.0" + }, + "devDependencies": { + "@opentelemetry/api": "^1.1.0", + "@types/mocha": "^7.0.2", + "@types/node": "18.16.19", + "mocha": "7.2.0", + "nyc": "15.1.0", + "ts-mocha": "10.0.0", + "typescript": "4.4.4" + } +} diff --git a/auto-merge/contrib/packages/opentelemetry-sql-common/src/index.ts b/auto-merge/contrib/packages/opentelemetry-sql-common/src/index.ts new file mode 100644 index 000000000..b5d2e5fa4 --- /dev/null +++ b/auto-merge/contrib/packages/opentelemetry-sql-common/src/index.ts @@ -0,0 +1,89 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + trace, + Span, + ROOT_CONTEXT, + defaultTextMapSetter, +} from '@opentelemetry/api'; +import { W3CTraceContextPropagator } from '@opentelemetry/core'; + +// NOTE: This function currently is returning false-positives +// in cases where comment characters appear in string literals +// ("SELECT '-- not a comment';" would return true, although has no comment) +function hasValidSqlComment(query: string): boolean { + const indexOpeningDashDashComment = query.indexOf('--'); + if (indexOpeningDashDashComment >= 0) { + return true; + } + + const indexOpeningSlashComment = query.indexOf('/*'); + if (indexOpeningSlashComment < 0) { + return false; + } + + const indexClosingSlashComment = query.indexOf('*/'); + return indexOpeningDashDashComment < indexClosingSlashComment; +} + +// sqlcommenter specification (https://google.github.io/sqlcommenter/spec/#value-serialization) +// expects us to URL encode based on the RFC 3986 spec (https://en.wikipedia.org/wiki/Percent-encoding), +// but encodeURIComponent does not handle some characters correctly (! ' ( ) *), +// which means we need special handling for this +// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent +function fixedEncodeURIComponent(str: string) { + return encodeURIComponent(str).replace( + /[!'()*]/g, + c => `%${c.charCodeAt(0).toString(16).toUpperCase()}` + ); +} + +export function addSqlCommenterComment(span: Span, query: string): string { + if (typeof query !== 'string' || query.length === 0) { + return query; + } + + // As per sqlcommenter spec we shall not add a comment if there already is a comment + // in the query + if (hasValidSqlComment(query)) { + return query; + } + + const propagator = new W3CTraceContextPropagator(); + const headers: { [key: string]: string } = {}; + propagator.inject( + trace.setSpan(ROOT_CONTEXT, span), + headers, + defaultTextMapSetter + ); + + // sqlcommenter spec requires keys in the comment to be sorted lexicographically + const sortedKeys = Object.keys(headers).sort(); + + if (sortedKeys.length === 0) { + return query; + } + + const commentString = sortedKeys + .map(key => { + const encodedValue = fixedEncodeURIComponent(headers[key]); + return `${key}='${encodedValue}'`; + }) + .join(','); + + return `${query} /*${commentString}*/`; +} diff --git a/auto-merge/contrib/packages/opentelemetry-sql-common/test/sql-common.test.ts b/auto-merge/contrib/packages/opentelemetry-sql-common/test/sql-common.test.ts new file mode 100644 index 000000000..16bc2d228 --- /dev/null +++ b/auto-merge/contrib/packages/opentelemetry-sql-common/test/sql-common.test.ts @@ -0,0 +1,115 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as assert from 'assert'; +import { + trace, + SpanContext, + TraceFlags, + INVALID_SPAN_CONTEXT, + createTraceState, +} from '@opentelemetry/api'; +import { addSqlCommenterComment } from '../src/index'; + +describe('addSqlCommenterComment', () => { + it('adds comment to a simple query', () => { + const spanContext: SpanContext = { + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.SAMPLED, + }; + + const query = 'SELECT * from FOO;'; + assert.strictEqual( + addSqlCommenterComment(trace.wrapSpanContext(spanContext), query), + "SELECT * from FOO; /*traceparent='00-d4cda95b652f4a1592b449d5929fda1b-6e0c63257de34c92-01'*/" + ); + }); + + it('does not add a comment if query already has a comment', () => { + const span = trace.wrapSpanContext({ + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.SAMPLED, + }); + + const blockComment = 'SELECT * from FOO; /* Test comment */'; + assert.strictEqual( + addSqlCommenterComment(span, blockComment), + blockComment + ); + + const dashedComment = 'SELECT * from FOO; -- Test comment'; + assert.strictEqual( + addSqlCommenterComment(span, dashedComment), + dashedComment + ); + }); + + it('does not add a comment to an empty query', () => { + const spanContext: SpanContext = { + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.SAMPLED, + }; + + assert.strictEqual( + addSqlCommenterComment(trace.wrapSpanContext(spanContext), ''), + '' + ); + }); + + it('does not add a comment if span context is invalid', () => { + const query = 'SELECT * from FOO;'; + assert.strictEqual( + addSqlCommenterComment( + trace.wrapSpanContext(INVALID_SPAN_CONTEXT), + query + ), + query + ); + }); + + it('correctly also sets trace state', () => { + const spanContext: SpanContext = { + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.SAMPLED, + traceState: createTraceState('foo=bar,baz=qux'), + }; + + const query = 'SELECT * from FOO;'; + assert.strictEqual( + addSqlCommenterComment(trace.wrapSpanContext(spanContext), query), + "SELECT * from FOO; /*traceparent='00-d4cda95b652f4a1592b449d5929fda1b-6e0c63257de34c92-01',tracestate='foo%3Dbar%2Cbaz%3Dqux'*/" + ); + }); + + it('escapes special characters in values', () => { + const spanContext: SpanContext = { + traceId: 'd4cda95b652f4a1592b449d5929fda1b', + spanId: '6e0c63257de34c92', + traceFlags: TraceFlags.SAMPLED, + traceState: createTraceState("foo='bar,baz='qux!()*',hack='DROP TABLE"), + }; + + const query = 'SELECT * from FOO;'; + assert.strictEqual( + addSqlCommenterComment(trace.wrapSpanContext(spanContext), query), + "SELECT * from FOO; /*traceparent='00-d4cda95b652f4a1592b449d5929fda1b-6e0c63257de34c92-01',tracestate='foo%3D%27bar%2Cbaz%3D%27qux%21%28%29%2A%27%2Chack%3D%27DROP%20TABLE'*/" + ); + }); +}); diff --git a/auto-merge/contrib/packages/opentelemetry-sql-common/tsconfig.json b/auto-merge/contrib/packages/opentelemetry-sql-common/tsconfig.json new file mode 100644 index 000000000..8f29202a9 --- /dev/null +++ b/auto-merge/contrib/packages/opentelemetry-sql-common/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base", + "compilerOptions": { + "rootDir": ".", + "outDir": "build" + }, + "include": ["src/**/*.ts", "test/**/*.ts"] +} diff --git a/auto-merge/contrib/packages/opentelemetry-test-utils/CHANGELOG.md b/auto-merge/contrib/packages/opentelemetry-test-utils/CHANGELOG.md index d524135de..bb81d76fd 100644 --- a/auto-merge/contrib/packages/opentelemetry-test-utils/CHANGELOG.md +++ b/auto-merge/contrib/packages/opentelemetry-test-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [0.34.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/contrib-test-utils-v0.33.4...contrib-test-utils-v0.34.0) (2023-07-12) + + +### Features + +* add sqlcommenter comment to mysql2 queries ([#1523](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1523)) ([856c252](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/856c25211567104ced8b2a2b56d0818a3c48e671)) +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.33.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/contrib-test-utils-v0.33.3...contrib-test-utils-v0.33.4) (2023-06-12) diff --git a/auto-merge/contrib/packages/opentelemetry-test-utils/package.json b/auto-merge/contrib/packages/opentelemetry-test-utils/package.json index 8df382fa2..3995735c5 100644 --- a/auto-merge/contrib/packages/opentelemetry-test-utils/package.json +++ b/auto-merge/contrib/packages/opentelemetry-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/contrib-test-utils", - "version": "0.33.4", + "version": "0.34.0", "description": "Test utilities for opentelemetry components", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -42,13 +42,13 @@ }, "devDependencies": { "@opentelemetry/api": "^1.3.0", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "typescript": "4.4.4" }, "dependencies": { "@opentelemetry/core": "^1.0.0", "@opentelemetry/exporter-jaeger": "^1.3.1", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/sdk-trace-node": "^1.8.0", "@opentelemetry/resources": "^1.8.0", "@opentelemetry/sdk-trace-base": "^1.8.0", diff --git a/auto-merge/contrib/packages/opentelemetry-test-utils/src/test-utils.ts b/auto-merge/contrib/packages/opentelemetry-test-utils/src/test-utils.ts index 4e2dfbb6a..d9d7f3e2e 100644 --- a/auto-merge/contrib/packages/opentelemetry-test-utils/src/test-utils.ts +++ b/auto-merge/contrib/packages/opentelemetry-test-utils/src/test-utils.ts @@ -38,7 +38,7 @@ const dockerRunCmds = { mssql: 'docker run --rm -d --name otel-mssql -p 1433:1433 -e SA_PASSWORD=mssql_passw0rd -e ACCEPT_EULA=Y mcr.microsoft.com/mssql/server:2017-latest', mysql: - 'docker run --rm -d --name otel-mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=rootpw -e MYSQL_DATABASE=test_db -e MYSQL_USER=otel -e MYSQL_PASSWORD=secret mysql:5.7', + 'docker run --rm -d --name otel-mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=rootpw -e MYSQL_DATABASE=test_db -e MYSQL_USER=otel -e MYSQL_PASSWORD=secret mysql:5.7 --log_output=TABLE --general_log=ON', postgres: 'docker run --rm -d --name otel-postgres -p 54320:5432 -e POSTGRES_PASSWORD=postgres postgres:15-alpine', redis: 'docker run --rm -d --name otel-redis -p 63790:6379 redis:alpine', diff --git a/auto-merge/contrib/plugins/node/instrumentation-amqplib/CHANGELOG.md b/auto-merge/contrib/plugins/node/instrumentation-amqplib/CHANGELOG.md index 54ce4a93a..7dd0b6fe3 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-amqplib/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/instrumentation-amqplib/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-amqplib-v0.32.5...instrumentation-amqplib-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.32.5](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-amqplib-v0.32.4...instrumentation-amqplib-v0.32.5) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/instrumentation-amqplib/package.json b/auto-merge/contrib/plugins/node/instrumentation-amqplib/package.json index 3b41fd075..3505cbb61 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-amqplib/package.json +++ b/auto-merge/contrib/plugins/node/instrumentation-amqplib/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-amqplib", - "version": "0.32.5", + "version": "0.33.0", "description": "OpenTelemetry automatic instrumentation for the `amqplib` package", "keywords": [ "amqplib", @@ -47,17 +47,17 @@ }, "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "devDependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@types/amqplib": "^0.5.17", - "@types/lodash": "4.14.178", + "@types/lodash": "4.14.197", "@types/mocha": "8.2.3", - "@types/sinon": "10.0.2", - "@types/node": "18.11.7", + "@types/sinon": "10.0.16", + "@types/node": "18.16.19", "amqplib": "0.8.0", "expect": "29.2.0", "lodash": "4.17.21", diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/.eslintignore b/auto-merge/contrib/plugins/node/instrumentation-cucumber/.eslintignore new file mode 100644 index 000000000..378eac25d --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/.eslintignore @@ -0,0 +1 @@ +build diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/.eslintrc.js b/auto-merge/contrib/plugins/node/instrumentation-cucumber/.eslintrc.js new file mode 100644 index 000000000..f756f4488 --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + "env": { + "mocha": true, + "node": true + }, + ...require('../../../eslint.config.js') +} diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/.npmignore b/auto-merge/contrib/plugins/node/instrumentation-cucumber/.npmignore new file mode 100644 index 000000000..9505ba945 --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/.npmignore @@ -0,0 +1,4 @@ +/bin +/coverage +/doc +/test diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/.tav.yml b/auto-merge/contrib/plugins/node/instrumentation-cucumber/.tav.yml new file mode 100644 index 000000000..c1930c8cb --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/.tav.yml @@ -0,0 +1,3 @@ +'@cucumber/cucumber': + versions: '^8.0.0 || ^9.0.0' + commands: npm test diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/LICENSE b/auto-merge/contrib/plugins/node/instrumentation-cucumber/LICENSE new file mode 100644 index 000000000..e50e8c80f --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [2022] OpenTelemetry Authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/README.md b/auto-merge/contrib/plugins/node/instrumentation-cucumber/README.md new file mode 100644 index 000000000..c3fd43435 --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/README.md @@ -0,0 +1,60 @@ +# OpenTelemetry Cucumber Instrumentation for Node.js + +[![NPM Published Version][npm-img]][npm-url] +[![Apache License][license-image]][license-image] + +This module provides automatic instrumentation for the [`@cucumber/cucumber`](https://www.npmjs.com/package/@cucumber/cucumber) module, which may be loaded using the [`@opentelemetry/sdk-trace-node`](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node) package and is included in the [`@opentelemetry/auto-instrumentations-node`](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node) bundle. + +If total installation size is not constrained, it is recommended to use the [`@opentelemetry/auto-instrumentations-node`](https://www.npmjs.com/package/@opentelemetry/auto-instrumentations-node) bundle with [@opentelemetry/sdk-node](`https://www.npmjs.com/package/@opentelemetry/sdk-node`) for the most seamless instrumentation experience. + +Compatible with OpenTelemetry JS API and SDK `1.0+`. + +## Installation + +```bash +npm install --save @opentelemetry/instrumentation-cucumber +``` + +## Usage + +```js +const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node'); +const { + CucumberInstrumentation, +} = require('@opentelemetry/instrumentation-cucumber'); +const { registerInstrumentations } = require('@opentelemetry/instrumentation'); + +const provider = new NodeTracerProvider(); +provider.register(); + +registerInstrumentations({ + instrumentations: [ + new CucucmberInstrumentation({ + // see below for available configuration + }), + ], +}); +``` + +### Cucumber Instrumentation Options + +Cucumber instrumentation has currently no options. + +| Options | Type | Description | +| ------- | ---- | ----------- | + +## Useful links + +- For more information on OpenTelemetry, visit: +- For more about OpenTelemetry JavaScript: +- For help or feedback on this project, join us in [GitHub Discussions][discussions-url] + +## License + +Apache 2.0 - See [LICENSE][license-url] for more information. + +[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions +[license-url]: https://github.com/open-telemetry/opentelemetry-js-contrib/blob/main/LICENSE +[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat +[npm-url]: https://www.npmjs.com/package/@opentelemetry/instrumentation-cucumber +[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Finstrumentation-cucumber.svg diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/package.json b/auto-merge/contrib/plugins/node/instrumentation-cucumber/package.json new file mode 100644 index 000000000..d23c06e90 --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/package.json @@ -0,0 +1,73 @@ +{ + "name": "@opentelemetry/instrumentation-cucumber", + "version": "0.0.1", + "description": "OpenTelemetry cucumber automatic instrumentation package.", + "main": "build/src/index.js", + "types": "build/src/index.d.ts", + "repository": "open-telemetry/opentelemetry-js-contrib", + "scripts": { + "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts'", + "test-all-versions": "tav", + "tdd": "npm run test -- --watch-extensions ts --watch", + "clean": "rimraf build/*", + "lint": "eslint . --ext .ts", + "lint:fix": "eslint . --ext .ts --fix", + "precompile": "tsc --version && lerna run version:update --scope @opentelemetry/instrumentation-cucumber --include-dependencies", + "prewatch": "npm run precompile", + "prepare": "npm run compile", + "version:update": "node ../../../scripts/version-update.js", + "compile": "tsc -p ." + }, + "keywords": [ + "cucumber", + "instrumentation", + "nodejs", + "opentelemetry", + "profiling", + "tracing" + ], + "author": "OpenTelemetry Authors", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + }, + "files": [ + "build/src/**/*.js", + "build/src/**/*.js.map", + "build/src/**/*.d.ts", + "doc", + "LICENSE", + "README.md" + ], + "publishConfig": { + "access": "public" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "devDependencies": { + "@cucumber/cucumber": "^8.8.0", + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/core": "^1.3.1", + "@opentelemetry/sdk-trace-base": "^1.3.1", + "@opentelemetry/sdk-trace-node": "^1.3.1", + "@types/mocha": "7.0.2", + "@types/semver": "7.5.0", + "@types/shimmer": "1.0.2", + "@types/sinon": "10.0.16", + "gts": "3.1.1", + "mocha": "7.2.0", + "nyc": "15.1.0", + "rimraf": "5.0.1", + "semver": "^7.3.2", + "sinon": "14.0.2", + "test-all-versions": "5.0.1", + "ts-mocha": "10.0.0", + "typescript": "4.4.4" + }, + "dependencies": { + "@opentelemetry/instrumentation": "^0.41.2", + "@opentelemetry/semantic-conventions": "^1.0.0" + }, + "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-cucumber#readme" +} diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/src/index.ts b/auto-merge/contrib/plugins/node/instrumentation-cucumber/src/index.ts new file mode 100644 index 000000000..c26f998cf --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/src/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './instrumentation'; +export * from './types'; diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/src/instrumentation.ts b/auto-merge/contrib/plugins/node/instrumentation-cucumber/src/instrumentation.ts new file mode 100644 index 000000000..cf759ddaa --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/src/instrumentation.ts @@ -0,0 +1,400 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Span, SpanKind, SpanStatusCode } from '@opentelemetry/api'; +import { + InstrumentationBase, + InstrumentationNodeModuleDefinition, + InstrumentationNodeModuleFile, + isWrapped, +} from '@opentelemetry/instrumentation'; +import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; + +import type * as cucumber from '@cucumber/cucumber'; +import type * as messages from '@cucumber/messages'; +import type TestCaseRunner from '@cucumber/cucumber/lib/runtime/test_case_runner'; +import type { + DefineStepPattern, + IDefineStepOptions, + IDefineTestRunHookOptions, +} from '@cucumber/cucumber/lib/support_code_library_builder/types'; + +import { AttributeNames, CucumberInstrumentationConfig } from './types'; +import { VERSION } from './version'; + +const hooks = ['Before', 'BeforeStep', 'AfterStep', 'After'] as const; +const steps = ['Given', 'When', 'Then'] as const; +type Cucumber = typeof cucumber; +type Hook = (typeof hooks)[number]; +type Step = (typeof steps)[number]; + +export class CucumberInstrumentation extends InstrumentationBase { + private module: Cucumber | undefined; + + constructor(config: CucumberInstrumentationConfig = {}) { + super('@opentelemetry/instrumentation-cucumber', VERSION, config); + } + + init(): InstrumentationNodeModuleDefinition[] { + return [ + new InstrumentationNodeModuleDefinition( + '@cucumber/cucumber', + ['^8.0.0', '^9.0.0'], + (moduleExports, moduleVersion) => { + this._diag.debug( + `Applying patch for @cucumber/cucumber@${moduleVersion}` + ); + this.module = moduleExports; + steps.forEach(step => { + if (isWrapped(moduleExports[step])) { + this._unwrap(moduleExports, step); + } + this._wrap(moduleExports, step, this._getStepPatch(step)); + }); + hooks.forEach(hook => { + if (isWrapped(moduleExports[hook])) { + this._unwrap(moduleExports, hook); + } + this._wrap(moduleExports, hook, this._getHookPatch(hook)); + }); + return moduleExports; + }, + (moduleExports, moduleVersion) => { + if (moduleExports === undefined) return; + this._diag.debug( + `Removing patch for @cucumber/cucumber@${moduleVersion}` + ); + [...hooks, ...steps].forEach(method => { + this._unwrap(moduleExports, method); + }); + }, + [ + new InstrumentationNodeModuleFile<{ + default: { new (): TestCaseRunner; prototype: TestCaseRunner }; + }>( + '@cucumber/cucumber/lib/runtime/test_case_runner.js', + ['^8.0.0', '^9.0.0'], + (moduleExports, moduleVersion) => { + this._diag.debug( + `Applying patch for @cucumber/cucumber/lib/runtime/test_case_runner.js@${moduleVersion}` + ); + if (isWrapped(moduleExports.default.prototype.run)) { + this._unwrap(moduleExports.default.prototype, 'run'); + this._unwrap(moduleExports.default.prototype, 'runStep'); + if ('runAttempt' in moduleExports.default.prototype) { + this._unwrap(moduleExports.default.prototype, 'runAttempt'); + } + } + this._wrap( + moduleExports.default.prototype, + 'run', + this._getTestCaseRunPatch() + ); + this._wrap( + moduleExports.default.prototype, + 'runStep', + this._getTestCaseRunStepPatch() + ); + if ('runAttempt' in moduleExports.default.prototype) { + this._wrap( + moduleExports.default.prototype, + 'runAttempt', + this._getTestCaseRunAttemptPatch() + ); + } + return moduleExports; + }, + (moduleExports, moduleVersion) => { + if (moduleExports === undefined) return; + this._diag.debug( + `Removing patch for @cucumber/cucumber/lib/runtime/test_case_runner.js@${moduleVersion}` + ); + this._unwrap(moduleExports.default.prototype, 'run'); + this._unwrap(moduleExports.default.prototype, 'runStep'); + if ('runAttempt' in moduleExports.default.prototype) { + this._unwrap(moduleExports.default.prototype, 'runAttempt'); + } + } + ), + ] + ), + ]; + } + + private static mapTags(tags: readonly messages.Tag[]): string[] { + return tags.map(tag => tag.name); + } + + private static setSpanToError(span: Span, error: any) { + span.recordException(error); + span.setStatus({ + code: SpanStatusCode.ERROR, + message: error?.message ?? error, + }); + } + + private setSpanToStepStatus( + span: Span, + status: messages.TestStepResultStatus, + context?: string + ) { + // if the telemetry is enabled, the module should be defined + if (!this.module) return; + + span.setAttribute(AttributeNames.STEP_STATUS, status); + if ( + [ + this.module.Status.UNDEFINED, + this.module.Status.AMBIGUOUS, + this.module.Status.FAILED, + ].includes(status) + ) { + span.recordException(status); + span.setStatus({ + code: SpanStatusCode.ERROR, + message: context || status, + }); + } + } + + private _getTestCaseRunPatch() { + const instrumentation = this; + return function (original: TestCaseRunner['run']): TestCaseRunner['run'] { + return async function (this: TestCaseRunner, ...args) { + const gherkinDocument = this[ + 'gherkinDocument' + ] as Required; + const { feature } = gherkinDocument; + const pickle = this['pickle'] as messages.Pickle; + const scenario = feature.children.find( + node => node?.scenario?.id === pickle.astNodeIds[0] + )?.scenario as messages.Scenario; + + return instrumentation.tracer.startActiveSpan( + `Feature: ${feature.name}. Scenario: ${pickle.name}`, + { + kind: SpanKind.CLIENT, + attributes: { + [SemanticAttributes.CODE_FILEPATH]: gherkinDocument.uri, + [SemanticAttributes.CODE_LINENO]: scenario.location.line, + [SemanticAttributes.CODE_FUNCTION]: scenario.name, + [SemanticAttributes.CODE_NAMESPACE]: feature.name, + [AttributeNames.FEATURE_TAGS]: CucumberInstrumentation.mapTags( + feature.tags + ), + [AttributeNames.FEATURE_LANGUAGE]: feature.language, + [AttributeNames.FEATURE_DESCRIPTION]: feature.description, + [AttributeNames.SCENARIO_TAGS]: CucumberInstrumentation.mapTags( + scenario.tags + ), + [AttributeNames.SCENARIO_DESCRIPTION]: scenario.description, + }, + }, + async span => { + try { + const status = await original.apply(this, args); + instrumentation.setSpanToStepStatus(span, status); + return status; + } catch (error: any) { + CucumberInstrumentation.setSpanToError(span, error); + throw error; + } finally { + span.end(); + } + } + ); + }; + }; + } + + private _getTestCaseRunStepPatch() { + const instrumentation = this; + return function ( + original: TestCaseRunner['runStep'] + ): TestCaseRunner['runStep'] { + return async function ( + this: TestCaseRunner, + ...args + ): Promise { + const [pickleStep] = args; + return instrumentation.tracer.startActiveSpan( + pickleStep.text, + { + kind: SpanKind.CLIENT, + attributes: { + [AttributeNames.STEP_TYPE]: pickleStep.type, + }, + }, + async span => { + try { + const result = await original.apply(this, args); + instrumentation.setSpanToStepStatus( + span, + result.status, + result.message + ); + return result; + } catch (error) { + CucumberInstrumentation.setSpanToError(span, error); + throw error; + } finally { + span.end(); + } + } + ); + }; + }; + } + + private _getTestCaseRunAttemptPatch() { + const instrumentation = this; + return function ( + original: TestCaseRunner['runAttempt'] + ): TestCaseRunner['runAttempt'] { + return async function (this: TestCaseRunner, ...args): Promise { + const [attempt] = args; + return instrumentation.tracer.startActiveSpan( + `Attempt #${attempt}`, + { + kind: SpanKind.CLIENT, + attributes: {}, + }, + async span => { + try { + const result = await original.apply(this, args); + const worstResult = this.getWorstStepResult(); + instrumentation.setSpanToStepStatus( + span, + worstResult.status, + worstResult.message + ); + return result; + } catch (error) { + CucumberInstrumentation.setSpanToError(span, error); + throw error; + } finally { + span.end(); + } + } + ); + }; + }; + } + + private _getHookPatch(name: H) { + const instrumentation = this; + return function (original: Cucumber[H]): Cucumber[H] { + return function ( + this: {}, + tagsOrOptions: string | IDefineTestRunHookOptions | Function, + code?: Function + ) { + if (typeof tagsOrOptions === 'function') { + code = tagsOrOptions; + tagsOrOptions = {}; + } + + function traceableCode( + this: cucumber.IWorld, + arg: cucumber.ITestCaseHookParameter + ) { + // because we're wrapping the function that was passed to the hook, + // it will stay wrapped in cucumber's internal state + // even if we disable the instrumentation + if (!instrumentation.isEnabled()) return code?.call(this, arg); + + return instrumentation.tracer.startActiveSpan( + name, + { + kind: SpanKind.CLIENT, + }, + async span => { + try { + return await code?.call(this, arg); + } catch (error: any) { + this.attach?.(JSON.stringify(span.spanContext())); + CucumberInstrumentation.setSpanToError(span, error); + throw error; + } finally { + span.end(); + } + } + ); + } + return original.call(this, tagsOrOptions as any, traceableCode as any); + }; + }; + } + + private _getStepPatch(name: S) { + const instrumentation = this; + return function (original: Cucumber[S]): Cucumber[S] { + return function ( + this: {}, + pattern: DefineStepPattern, + options: IDefineStepOptions | Function, + code?: Function + ): void { + if (typeof options === 'function') { + code = options; + options = {}; + } + + function traceableCode(this: cucumber.IWorld, ...args: any[]) { + // because we're wrapping the function that was passed to the hook, + // it will stay wrapped in cucumber's internal state + // even if we disable the instrumentation + if (!instrumentation.isEnabled()) return code?.apply(this, args); + + return instrumentation.tracer.startActiveSpan( + `${name}(${pattern.toString()})`, + { + kind: SpanKind.CLIENT, + // ignore the last argument because it's a callback + attributes: args.slice(0, -1).reduce( + (attrs, arg, index) => ({ + ...attrs, + [`${AttributeNames.STEP_ARGS}[${index}]`]: + arg?.raw instanceof Function + ? JSON.stringify(arg.raw()) + : arg, + }), + {} + ), + }, + async span => { + try { + return await code?.apply(this, args); + } catch (error: any) { + this.attach?.(JSON.stringify(span.spanContext())); + CucumberInstrumentation.setSpanToError(span, error); + throw error; + } finally { + span.end(); + } + } + ); + } + // cucumber asks for the number of arguments to match the specified pattern + // copy the value from the original function + Object.defineProperty(traceableCode, 'length', { + value: code?.length, + }); + return original.call(this, pattern, options, traceableCode as any); + }; + }; + } +} diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/src/types.ts b/auto-merge/contrib/plugins/node/instrumentation-cucumber/src/types.ts new file mode 100644 index 000000000..3cd7e5674 --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/src/types.ts @@ -0,0 +1,30 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { InstrumentationConfig } from '@opentelemetry/instrumentation'; + +export type CucumberInstrumentationConfig = InstrumentationConfig; + +export enum AttributeNames { + FEATURE_TAGS = 'cucumber.feature.tags', + FEATURE_LANGUAGE = 'cucumber.feature.language', + FEATURE_DESCRIPTION = 'cucumber.feature.description', + SCENARIO_TAGS = 'cucumber.scenario.tags', + SCENARIO_DESCRIPTION = 'cucumber.scenario.description', + STEP_TYPE = 'cucumber.step.type', + STEP_STATUS = 'cucumber.step.status', + STEP_ARGS = 'cucumber.step.args', +} diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/.gitignore b/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/.gitignore new file mode 100644 index 000000000..f9e3307dd --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/.gitignore @@ -0,0 +1 @@ +*.feature diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/cucumber.test.ts b/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/cucumber.test.ts new file mode 100644 index 000000000..182038085 --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/cucumber.test.ts @@ -0,0 +1,559 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { context, SpanStatusCode } from '@opentelemetry/api'; +import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'; +import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks'; +import { + InMemorySpanExporter, + SimpleSpanProcessor, +} from '@opentelemetry/sdk-trace-base'; +import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; +import { Resource } from '@opentelemetry/resources'; +import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions'; + +import * as path from 'path'; +import * as assert from 'assert'; +import * as fs from 'fs'; +import * as semver from 'semver'; + +import { CucumberInstrumentation, AttributeNames } from '../src'; + +const LIB_VERSION = require('@cucumber/cucumber/package.json').version; +const hasRunAttempt = semver.gte(LIB_VERSION, '8.8.0'); + +const instrumentation = new CucumberInstrumentation(); +instrumentation.enable(); +instrumentation.disable(); + +import { + IConfiguration, + loadConfiguration, + loadSupport, + runCucumber, +} from '@cucumber/cucumber/api'; +import { PassThrough } from 'stream'; + +describe('CucumberInstrumentation', () => { + const provider = new NodeTracerProvider({ + resource: new Resource({ + [SemanticResourceAttributes.SERVICE_NAME]: 'CucumberInstrumentation', + }), + }); + const memoryExporter = new InMemorySpanExporter(); + const spanProcessor = new SimpleSpanProcessor(memoryExporter); + provider.addSpanProcessor(spanProcessor); + const contextManager = new AsyncHooksContextManager().enable(); + + before(() => { + instrumentation.setTracerProvider(provider); + context.setGlobalContextManager(contextManager); + instrumentation.enable(); + }); + + afterEach(() => { + contextManager.disable(); + contextManager.enable(); + memoryExporter.reset(); + }); + + after(async () => { + await provider.shutdown(); + }); + + const init = async ( + feature: string, + providedConfiguration?: Partial + ) => { + // clean-up require cache to re-register cucumber hooks for a new run + ['features/support/world', 'features/step_definitions/steps'].forEach( + search => { + const key = Object.keys(require.cache).find(key => + key.includes(search) + ); + if (key == null) return; + delete require.cache[key]; + } + ); + const featurePath = path.join(__dirname, 'current.feature'); + await fs.promises.writeFile(featurePath, feature, 'utf-8'); + const { runConfiguration } = await loadConfiguration({ + provided: { + ...providedConfiguration, + paths: [featurePath], + require: [ + path.join(__dirname, 'features/support/world.ts'), + path.join(__dirname, 'features/step_definitions/steps.ts'), + ], + }, + }); + const support = await loadSupport(runConfiguration); + const merged = { ...runConfiguration, support }; + await runCucumber(merged, { + // mute cucumber's output + stderr: new PassThrough(), + stdout: new PassThrough(), + }); + }; + + describe('enabled instrumentation', () => { + describe('basic.feature', () => { + beforeEach(async () => { + await init(` + @feature-tag + Feature: Basic + A very basic feature file with a single scenario + + @scenario-tag @tag + Scenario: Button pushing + Mostly pushing buttons + but also tables + When I push the button + Then it is pushed to "limit" + And does something with the table + | Cucumber | Cucumis sativus | + | Burr Gherkin | Cucumis anguria | + `); + }); + + it('generates spans for cucumber execution', () => { + const spans = memoryExporter.getFinishedSpans(); + // should have Feature span + const parent = spans.find(span => span.name.startsWith('Feature')); + assert(parent, 'Expected a parent span'); + + assert.deepEqual( + spans.map(span => span.name), + [ + 'Before', + 'BeforeStep', + 'When(/I push the button/)', + 'AfterStep', + 'I push the button', + 'BeforeStep', + 'Then(it is pushed to {string})', + 'AfterStep', + 'it is pushed to "limit"', + 'BeforeStep', + 'Then(does something with the table)', + 'AfterStep', + 'does something with the table', + 'After', + hasRunAttempt && 'Attempt #0', + 'Feature: Basic. Scenario: Button pushing', + ].filter(Boolean), + 'Expected all hooks to be patched' + ); + }); + + it('adds scenario attributes to parent span', () => { + const spans = memoryExporter.getFinishedSpans(); + const parent = spans.find(span => span.name.startsWith('Feature')); + assert(parent, 'Expected a parent span'); + + assert.deepEqual(parent.attributes, { + [SemanticAttributes.CODE_FILEPATH]: 'test/current.feature', + [SemanticAttributes.CODE_LINENO]: 7, + [SemanticAttributes.CODE_FUNCTION]: 'Button pushing', + [SemanticAttributes.CODE_NAMESPACE]: 'Basic', + [AttributeNames.FEATURE_DESCRIPTION]: + ' A very basic feature file with a single scenario', + [AttributeNames.FEATURE_LANGUAGE]: 'en', + [AttributeNames.FEATURE_TAGS]: ['@feature-tag'], + [AttributeNames.SCENARIO_DESCRIPTION]: + ' Mostly pushing buttons\n but also tables', + [AttributeNames.SCENARIO_TAGS]: ['@scenario-tag', '@tag'], + [AttributeNames.STEP_STATUS]: 'PASSED', + }); + }); + + it('adds step args to span attributes', () => { + const spans = memoryExporter.getFinishedSpans(); + const parametrisedSpan = spans.find(span => + span.name.startsWith('Then(it is pushed') + ); + assert(parametrisedSpan); + + assert.deepEqual(parametrisedSpan.attributes, { + [`${AttributeNames.STEP_ARGS}[0]`]: 'limit', + }); + }); + + it('adds step table to span attributes', () => { + const spans = memoryExporter.getFinishedSpans(); + const tableSpan = spans.find(span => + span.name.startsWith('Then(does something') + ); + assert(tableSpan); + + assert.deepEqual(tableSpan.attributes, { + [`${AttributeNames.STEP_ARGS}[0]`]: JSON.stringify([ + ['Cucumber', 'Cucumis sativus'], + ['Burr Gherkin', 'Cucumis anguria'], + ]), + }); + }); + }); + + describe('examples.feature', () => { + beforeEach(async () => { + await init(` + Feature: Examples + + Scenario: button pushing + Given a step + When I push the button + Then it is pushed to "limit" + And does something with the table + | Cucumber | Cucumis sativus | + | Burr Gherkin | Cucumis anguria | + + Examples: + | type | + | passing | + | failing | + `); + }); + + it('has a scenario for every example', () => { + const spans = memoryExporter.getFinishedSpans(); + const scenarios = spans.filter(span => span.name.startsWith('Feature')); + assert.equal(scenarios.length, 2); + + assert.deepEqual( + scenarios.map(span => span.name), + [ + 'Feature: Examples. Scenario: passing button pushing', + 'Feature: Examples. Scenario: failing button pushing', + ] + ); + }); + + it('sets a span of a failing step to error', () => { + const spans = memoryExporter.getFinishedSpans(); + const span = spans.find(span => span.name === 'Given(a failing step)'); + assert(span); + + assert.equal(span.status.code, SpanStatusCode.ERROR); + }); + }); + + if (hasRunAttempt) { + describe('attempts.feature', () => { + beforeEach(async () => { + await init( + ` + Feature: Attempts + + Scenario: fail button pushing + Given a failing step + When I push the button + `, + { retry: 2 } + ); + }); + + it('generates spans for each attempt', () => { + const spans = memoryExporter.getFinishedSpans(); + const parent = spans.find(span => span.name.includes('Feature')); + assert(parent); + + const attemptSpans = spans.filter(span => + span.name.startsWith('Attempt') + ); + assert.equal(attemptSpans.length, 3); + + assert.deepEqual( + attemptSpans.map(span => span.parentSpanId), + Array(3).fill(parent.spanContext().spanId) + ); + }); + + it('creates scanario spans as children of attempts', () => { + const spans = memoryExporter.getFinishedSpans(); + const attemptSpans = spans.filter(span => + span.name.startsWith('Attempt') + ); + assert.equal(attemptSpans.length, 3); + + attemptSpans.forEach(attempt => { + assert.equal( + spans.filter( + span => span.parentSpanId === attempt.spanContext().spanId + ).length, + 4 + ); + }); + }); + }); + } + + describe('doc-string.feature', () => { + beforeEach(async () => { + await init(` + Feature: a feature + Scenario: a scenario + Given a doc string step + """ + The cucumber (Cucumis sativus) is a widely cultivated plant in the gourd family Cucurbitaceae. + """ + When I push the button + `); + }); + + it('adds doc strings as arg to span attributes', () => { + const spans = memoryExporter.getFinishedSpans(); + const parent = spans.find(span => span.name.includes('Feature')); + assert(parent); + + const span = spans.find(span => span.name.startsWith('Given(a doc')); + assert(span); + assert.deepEqual(span.attributes, { + [`${AttributeNames.STEP_ARGS}[0]`]: + 'The cucumber (Cucumis sativus) is a widely cultivated plant in the gourd family Cucurbitaceae.', + }); + }); + }); + + describe('background.feature', () => { + beforeEach(async () => { + await init(` + Feature: a feature + Background: + Given a doc string step + """ + This is a background + """ + + Scenario: a scenario + When I push the button + `); + }); + + it('adds spans for background steps', () => { + const spans = memoryExporter.getFinishedSpans(); + const parent = spans.find(span => span.name.includes('Feature')); + assert(parent); + + const span = spans.find(span => span.name.startsWith('Given(a doc')); + assert(span); + assert.deepEqual(span.attributes, { + [`${AttributeNames.STEP_ARGS}[0]`]: 'This is a background', + }); + }); + }); + + describe('hook-failures.feature', () => { + ['Before', 'BeforeStep', 'After', 'AfterStep'].forEach(hook => { + it(`sets ${hook} hook to error`, async () => { + await init(` + Feature: Hook failure spans + + Scenario: Fails ${hook} Hook + When I push the button + `); + const spans = memoryExporter.getFinishedSpans(); + const parent = spans.find(span => + span.name.includes(`Fails ${hook}`) + ); + assert(parent); + assert.equal(parent.status.code, SpanStatusCode.ERROR); + assert.equal(parent.status.message, 'FAILED'); + assert.equal(parent.attributes[AttributeNames.STEP_STATUS], 'FAILED'); + + const span = spans.find( + span => + span.spanContext().traceId === parent.spanContext().traceId && + span.name === hook + ); + assert(span); + + assert.equal(span.status.code, SpanStatusCode.ERROR); + }); + }); + }); + + describe('undefined.feature', () => { + beforeEach(async () => { + await init(` + Feature: Undefined steps + + Scenario: + When an undefined step is encountered + Then does nothing + `); + }); + + it('sets undefined steps to error', () => { + const spans = memoryExporter.getFinishedSpans(); + const parent = spans.find(span => span.name.includes('Feature')); + assert(parent); + assert.equal(parent.status.code, SpanStatusCode.ERROR); + assert.equal(parent.status.message, 'UNDEFINED'); + assert.equal( + parent.attributes[AttributeNames.STEP_STATUS], + 'UNDEFINED' + ); + + const span = spans.find(span => span.name.startsWith('an undefined')); + assert(span); + assert.equal(span.status.code, SpanStatusCode.ERROR); + assert.equal(span.status.message, 'UNDEFINED'); + assert.equal(span.attributes[AttributeNames.STEP_STATUS], 'UNDEFINED'); + + const skippedSpan = spans.find(span => span.name === 'does nothing'); + assert(skippedSpan); + assert.equal( + skippedSpan.attributes[AttributeNames.STEP_STATUS], + 'SKIPPED' + ); + }); + }); + + describe('ambiguous.feature', () => { + beforeEach(async () => { + await init(` + Feature: Ambiguous step + + Scenario: + When an ambiguous step is encountered + `); + }); + + it('sets ambiguous steps to error', () => { + const spans = memoryExporter.getFinishedSpans(); + const parent = spans.find(span => span.name.includes('Feature')); + assert(parent); + assert.equal(parent.status.code, SpanStatusCode.ERROR); + assert.equal(parent.status.message, 'AMBIGUOUS'); + assert.equal( + parent.attributes[AttributeNames.STEP_STATUS], + 'AMBIGUOUS' + ); + + const span = spans.find(span => span.name.startsWith('an ambiguous')); + assert(span); + + assert.equal(span.status.code, SpanStatusCode.ERROR); + assert.equal( + span.status.message?.split('\n')[0], + 'Multiple step definitions match:' + ); + }); + }); + + describe('skipped.feature', () => { + it('adds skipped event to skipped steps', async () => { + await init(` + Feature: Skipping a step + + Scenario: + Given a skipped step + Then it is pushed to "limit" + `); + const spans = memoryExporter.getFinishedSpans(); + const parent = spans.find(span => span.name.includes('Feature')); + assert(parent); + assert.equal(parent.attributes[AttributeNames.STEP_STATUS], 'SKIPPED'); + + const span = spans.find(span => span.name.startsWith('a skipped step')); + assert(span); + assert.equal(span.attributes[AttributeNames.STEP_STATUS], 'SKIPPED'); + }); + + it('adds skipped event to skipped steps in before hook', async () => { + await init(` + Feature: Skipping a step + + @skip + Scenario: + When I push the button + `); + const spans = memoryExporter.getFinishedSpans(); + const parent = spans.find( + span => + span.name.includes('Feature') && + ( + span.attributes[AttributeNames.SCENARIO_TAGS] as string[] + )?.includes?.('@skip') + ); + assert(parent); + assert.equal(parent.attributes[AttributeNames.STEP_STATUS], 'SKIPPED'); + }); + }); + + describe('pending.feature', () => { + it('adds pending event to pending steps', async () => { + await init(` + Feature: pending + + Scenario: pending scenario + Given a pending step + When I push the button + `); + const spans = memoryExporter.getFinishedSpans(); + const parent = spans.find(span => span.name.includes('Feature')); + assert(parent); + assert.equal(parent.attributes[AttributeNames.STEP_STATUS], 'PENDING'); + + const span = spans.find(span => span.name.startsWith('a pending step')); + assert(span); + assert.equal(span.attributes[AttributeNames.STEP_STATUS], 'PENDING'); + }); + + it('adds pending event to pending steps in before hook', async () => { + await init(` + Feature: pending + + @pending + Scenario: pending scenario + When I push the button + `); + const spans = memoryExporter.getFinishedSpans(); + const parent = spans.find(span => span.name.includes('Feature')); + assert(parent); + assert.equal(parent.attributes[AttributeNames.STEP_STATUS], 'PENDING'); + + const span = spans.find(span => + span.name.startsWith('I push the button') + ); + assert(span); + assert.equal(span.attributes[AttributeNames.STEP_STATUS], 'SKIPPED'); + }); + }); + }); + + describe('disabled instrumentation', () => { + before(() => { + instrumentation.disable(); + }); + + after(() => { + instrumentation.enable(); + }); + + it('does not create spans', async () => { + await init(` + Feature: a feature + Scenario: a scenario + When I do anything at all + Then no spans are recorded + `); + const spans = memoryExporter.getFinishedSpans(); + assert.equal(spans.length, 0); + }); + }); +}); diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/features/step_definitions/steps.ts b/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/features/step_definitions/steps.ts new file mode 100644 index 000000000..82978a2d7 --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/features/step_definitions/steps.ts @@ -0,0 +1,31 @@ +/* eslint-disable */ +import { When, Then, Given } from '@cucumber/cucumber'; + +Given('a failing step', async function () { + throw new Error('failing'); +}); + +Given('a passing step', function () {}); + +When(/I push the button/, async function () { + await new Promise(resolve => setTimeout(resolve, 10)); +}); + +Then('it is pushed to {string}', function (to) {}); + +Then('does nothing', function () {}); + +Then('does something with the table', function (table) {}); + +When('an ambiguous step is encountered', function () {}); +When(/an ambig(.*) step is encountered/, function () {}); + +Given('a skipped step', function () { + return 'skipped'; +}); + +Given('a pending step', function () { + return 'pending'; +}); + +Given('a doc string step', function (docString) {}); diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/features/support/world.ts b/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/features/support/world.ts new file mode 100644 index 000000000..29bab018b --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/test/features/support/world.ts @@ -0,0 +1,34 @@ +/* eslint-disable */ +import { BeforeStep, AfterStep, After, Before } from '@cucumber/cucumber'; + +Before('@skip', function () { + return 'skipped'; +}); + +Before('@pending', function () { + return 'pending'; +}); + +Before(async gherkinDocument => { + if (gherkinDocument.pickle.name === 'Fails Before Hook') { + throw new Error('error'); + } +}); + +BeforeStep(async gherkinDocument => { + if (gherkinDocument.pickle.name === 'Fails BeforeStep Hook') { + throw new Error('error'); + } +}); + +AfterStep(async gherkinDocument => { + if (gherkinDocument.pickle.name === 'Fails AfterStep Hook') { + throw new Error('error'); + } +}); + +After(async gherkinDocument => { + if (gherkinDocument.pickle.name === 'Fails After Hook') { + throw new Error('error'); + } +}); diff --git a/auto-merge/contrib/plugins/node/instrumentation-cucumber/tsconfig.json b/auto-merge/contrib/plugins/node/instrumentation-cucumber/tsconfig.json new file mode 100644 index 000000000..568e7bb7c --- /dev/null +++ b/auto-merge/contrib/plugins/node/instrumentation-cucumber/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../../tsconfig.base", + "compilerOptions": { + "rootDir": ".", + "outDir": "build", + "skipLibCheck": true + }, + "include": ["src/**/*.ts", "test/**/*.ts"] +} diff --git a/auto-merge/contrib/plugins/node/instrumentation-dataloader/CHANGELOG.md b/auto-merge/contrib/plugins/node/instrumentation-dataloader/CHANGELOG.md index 2e6bf45b1..02cb54984 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-dataloader/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/instrumentation-dataloader/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.5.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-dataloader-v0.4.3...instrumentation-dataloader-v0.5.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.4.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-dataloader-v0.4.2...instrumentation-dataloader-v0.4.3) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/instrumentation-dataloader/package.json b/auto-merge/contrib/plugins/node/instrumentation-dataloader/package.json index 8d543e2af..590b3886f 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-dataloader/package.json +++ b/auto-merge/contrib/plugins/node/instrumentation-dataloader/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-dataloader", - "version": "0.4.3", + "version": "0.5.0", "description": "OpenTelemetry instrumentation for dataloader", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -51,17 +51,17 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "dataloader": "2.2.1", + "@types/node": "18.16.19", + "dataloader": "2.2.2", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0" + "@opentelemetry/instrumentation": "^0.41.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-dataloader#readme" } diff --git a/auto-merge/contrib/plugins/node/instrumentation-fs/CHANGELOG.md b/auto-merge/contrib/plugins/node/instrumentation-fs/CHANGELOG.md index 43780cac4..5d889a9bf 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-fs/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/instrumentation-fs/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.8.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fs-v0.7.4...instrumentation-fs-v0.8.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.7.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fs-v0.7.3...instrumentation-fs-v0.7.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/instrumentation-fs/package.json b/auto-merge/contrib/plugins/node/instrumentation-fs/package.json index a30c9732a..4361e87fe 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-fs/package.json +++ b/auto-merge/contrib/plugins/node/instrumentation-fs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-fs", - "version": "0.7.4", + "version": "0.8.0", "description": "OpenTelemetry automatic instrumentation package for fs", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -48,18 +48,18 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "@types/sinon": "^10.0.11", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-fs#readme" diff --git a/auto-merge/contrib/plugins/node/instrumentation-lru-memoizer/CHANGELOG.md b/auto-merge/contrib/plugins/node/instrumentation-lru-memoizer/CHANGELOG.md index 684096a54..207bb3bc2 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-lru-memoizer/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/instrumentation-lru-memoizer/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-lru-memoizer-v0.32.4...instrumentation-lru-memoizer-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.32.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-lru-memoizer-v0.32.3...instrumentation-lru-memoizer-v0.32.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/instrumentation-lru-memoizer/package.json b/auto-merge/contrib/plugins/node/instrumentation-lru-memoizer/package.json index 893affaa3..ceccfb35e 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-lru-memoizer/package.json +++ b/auto-merge/contrib/plugins/node/instrumentation-lru-memoizer/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-lru-memoizer", - "version": "0.32.4", + "version": "0.33.0", "description": "OpenTelemetry automatic instrumentation package for lru-memoizer", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -43,21 +43,21 @@ }, "devDependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@types/lru-cache": "7.10.9", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "expect": "29.2.0", "lru-memoizer": "2.1.4", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0" + "@opentelemetry/instrumentation": "^0.41.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-lru-memoizer#readme" } diff --git a/auto-merge/contrib/plugins/node/instrumentation-mongoose/CHANGELOG.md b/auto-merge/contrib/plugins/node/instrumentation-mongoose/CHANGELOG.md index e2d4c1951..214b8e526 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-mongoose/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/instrumentation-mongoose/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-mongoose-v0.32.4...instrumentation-mongoose-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.32.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-mongoose-v0.32.3...instrumentation-mongoose-v0.32.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/instrumentation-mongoose/package.json b/auto-merge/contrib/plugins/node/instrumentation-mongoose/package.json index 21d64646f..5f320f246 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-mongoose/package.json +++ b/auto-merge/contrib/plugins/node/instrumentation-mongoose/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-mongoose", - "version": "0.32.4", + "version": "0.33.0", "description": "OpenTelemetry automatic instrumentation package for mongoose", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -46,22 +46,22 @@ }, "devDependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "expect": "29.2.0", "mocha": "7.2.0", - "mongoose": "6.5.2", + "mongoose": "6.11.5", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-mongoose#readme" diff --git a/auto-merge/contrib/plugins/node/instrumentation-socket.io/CHANGELOG.md b/auto-merge/contrib/plugins/node/instrumentation-socket.io/CHANGELOG.md index ec1ef7147..afa984966 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-socket.io/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/instrumentation-socket.io/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [0.34.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-socket.io-v0.33.4...instrumentation-socket.io-v0.34.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.33.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-socket.io-v0.33.3...instrumentation-socket.io-v0.33.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/instrumentation-socket.io/package.json b/auto-merge/contrib/plugins/node/instrumentation-socket.io/package.json index fca039149..1e64ffb84 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-socket.io/package.json +++ b/auto-merge/contrib/plugins/node/instrumentation-socket.io/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-socket.io", - "version": "0.33.4", + "version": "0.34.0", "description": "OpenTelemetry automatic instrumentation package for socket.io", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -43,14 +43,14 @@ }, "devDependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "expect": "27.4.2", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "socket.io": "^4.1.3", "socket.io-client": "^4.1.3", "test-all-versions": "5.0.1", @@ -58,7 +58,7 @@ "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/instrumentation-socket.io#readme" diff --git a/auto-merge/contrib/plugins/node/instrumentation-tedious/CHANGELOG.md b/auto-merge/contrib/plugins/node/instrumentation-tedious/CHANGELOG.md index 564b8827e..b9cdd5afb 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-tedious/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/instrumentation-tedious/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [0.6.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-tedious-v0.5.4...instrumentation-tedious-v0.6.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.5.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-tedious-v0.5.3...instrumentation-tedious-v0.5.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/instrumentation-tedious/package.json b/auto-merge/contrib/plugins/node/instrumentation-tedious/package.json index dd3677ddc..b9c4219a8 100644 --- a/auto-merge/contrib/plugins/node/instrumentation-tedious/package.json +++ b/auto-merge/contrib/plugins/node/instrumentation-tedious/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-tedious", - "version": "0.5.4", + "version": "0.6.0", "description": "OpenTelemetry instrumentation for `tedious`", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,20 +49,20 @@ "devDependencies": { "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "tedious": "14.1.0", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0", "@types/tedious": "^4.0.6" }, diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/CHANGELOG.md index 7bf27f4be..8459346a3 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/CHANGELOG.md @@ -1,5 +1,25 @@ # Changelog +## [0.36.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-aws-lambda-v0.35.3...instrumentation-aws-lambda-v0.36.0) (2023-07-12) + + +### Features + +* **lambda:** add OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION environment variable ([#1227](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1227)) ([8777cbd](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/8777cbd3178bb970686488c7e8383d5fa0aaa187)) +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @opentelemetry/propagator-aws-xray bumped from ^1.2.1 to ^1.3.0 + ## [0.35.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-aws-lambda-v0.35.2...instrumentation-aws-lambda-v0.35.3) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/README.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/README.md index 22a609592..d4e090b46 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/README.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/README.md @@ -50,7 +50,7 @@ In your Lambda function configuration, add or update the `NODE_OPTIONS` environm | --- | --- | --- | | `requestHook` | `RequestHook` (function) | Hook for adding custom attributes before lambda starts handling the request. Receives params: `span, { event, context }` | | `responseHook` | `ResponseHook` (function) | Hook for adding custom attributes before lambda returns the response. Receives params: `span, { err?, res? }` | -| `disableAwsContextPropagation` | `boolean` | By default, this instrumentation will try to read the context from the `_X_AMZN_TRACE_ID` environment variable set by Lambda, set this to `true` to disable this behavior | +| `disableAwsContextPropagation` | `boolean` | By default, this instrumentation will try to read the context from the `_X_AMZN_TRACE_ID` environment variable set by Lambda, set this to `true` or set the environment variable `OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION=true` to disable this behavior | | `eventContextExtractor` | `EventContextExtractor` (function) | Function for providing custom context extractor in order to support different event types that are handled by AWS Lambda (e.g., SQS, CloudWatch, Kinesis, API Gateway). Applied only when `disableAwsContextPropagation` is set to `true`. Receives params: `event, context` | ### Hooks Usage Example diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/package.json index adfcd5393..415d231a3 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-aws-lambda", - "version": "0.35.3", + "version": "0.36.0", "description": "OpenTelemetry AWS Lambda automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -51,19 +51,19 @@ "@opentelemetry/sdk-trace-node": "^1.8.0", "@opentelemetry/sdk-metrics": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", - "@opentelemetry/propagator-aws-xray": "^1.2.1", + "@opentelemetry/instrumentation": "^0.41.2", + "@opentelemetry/propagator-aws-xray": "^1.3.0", "@opentelemetry/resources": "^1.8.0", "@opentelemetry/semantic-conventions": "^1.0.0", - "@types/aws-lambda": "8.10.81" + "@types/aws-lambda": "8.10.119" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-aws-lambda#readme" } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/src/instrumentation.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/src/instrumentation.ts index 20d4717a0..75adb7e33 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/src/instrumentation.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/src/instrumentation.ts @@ -57,6 +57,7 @@ import { import { AwsLambdaInstrumentationConfig, EventContextExtractor } from './types'; import { VERSION } from './version'; +import { env } from 'process'; import { LambdaModule } from './internal-types'; const awsPropagator = new AWSXRayPropagator(); @@ -77,6 +78,17 @@ export class AwsLambdaInstrumentation extends InstrumentationBase { constructor(protected override _config: AwsLambdaInstrumentationConfig = {}) { super('@opentelemetry/instrumentation-aws-lambda', VERSION, _config); + if (this._config.disableAwsContextPropagation == null) { + if ( + typeof env['OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION'] === + 'string' && + env[ + 'OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION' + ].toLocaleLowerCase() === 'true' + ) { + this._config.disableAwsContextPropagation = true; + } + } } override setConfig(config: AwsLambdaInstrumentationConfig = {}) { diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/test/integrations/lambda-handler.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/test/integrations/lambda-handler.test.ts index 681922fbe..573cab814 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/test/integrations/lambda-handler.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-lambda/test/integrations/lambda-handler.test.ts @@ -544,6 +544,92 @@ describe('lambda handler', () => { assert.strictEqual(spans.length, 0); }); + it('ignores sampled lambda context if env OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION is set to "true"', async () => { + process.env['OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION'] = 'true'; + process.env[traceContextEnvironmentKey] = sampledAwsHeader; + initializeHandler('lambda-test/async.handler', {}); + + const result = await lambdaRequire('lambda-test/async').handler( + 'arg', + ctx + ); + assert.strictEqual(result, 'ok'); + const spans = memoryExporter.getFinishedSpans(); + const [span] = spans; + assert.strictEqual(spans.length, 1); + assertSpanSuccess(span); + assert.notDeepStrictEqual( + span.spanContext().traceId, + sampledAwsSpanContext.traceId + ); + assert.strictEqual(span.parentSpanId, undefined); + }); + + it('ignores sampled lambda context if env OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION is set to "TRUE"', async () => { + process.env['OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION'] = 'TRUE'; + process.env[traceContextEnvironmentKey] = sampledAwsHeader; + initializeHandler('lambda-test/async.handler', {}); + + const result = await lambdaRequire('lambda-test/async').handler( + 'arg', + ctx + ); + assert.strictEqual(result, 'ok'); + const spans = memoryExporter.getFinishedSpans(); + const [span] = spans; + assert.strictEqual(spans.length, 1); + assertSpanSuccess(span); + assert.notDeepStrictEqual( + span.spanContext().traceId, + sampledAwsSpanContext.traceId + ); + assert.strictEqual(span.parentSpanId, undefined); + }); + + it('ignores sampled lambda context if env OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION is set to "True"', async () => { + process.env['OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION'] = 'True'; + process.env[traceContextEnvironmentKey] = sampledAwsHeader; + initializeHandler('lambda-test/async.handler', {}); + + const result = await lambdaRequire('lambda-test/async').handler( + 'arg', + ctx + ); + assert.strictEqual(result, 'ok'); + const spans = memoryExporter.getFinishedSpans(); + const [span] = spans; + assert.strictEqual(spans.length, 1); + assertSpanSuccess(span); + assert.notDeepStrictEqual( + span.spanContext().traceId, + sampledAwsSpanContext.traceId + ); + assert.strictEqual(span.parentSpanId, undefined); + }); + + it('ignores OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION if `config.disableAwsContextPropagation` is set', async () => { + process.env['OTEL_LAMBDA_DISABLE_AWS_CONTEXT_PROPAGATION'] = 'true'; + process.env[traceContextEnvironmentKey] = sampledAwsHeader; + initializeHandler('lambda-test/async.handler', { + disableAwsContextPropagation: false, + }); + + const result = await lambdaRequire('lambda-test/async').handler( + 'arg', + ctx + ); + assert.strictEqual(result, 'ok'); + const spans = memoryExporter.getFinishedSpans(); + const [span] = spans; + assert.strictEqual(spans.length, 1); + assertSpanSuccess(span); + assert.strictEqual( + span.spanContext().traceId, + sampledAwsSpanContext.traceId + ); + assert.strictEqual(span.parentSpanId, sampledAwsSpanContext.spanId); + }); + it('ignores sampled lambda context if "disableAwsContextPropagation" config option is true', async () => { process.env[traceContextEnvironmentKey] = sampledAwsHeader; initializeHandler('lambda-test/async.handler', { diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/CHANGELOG.md index 192c705e2..04ee79009 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/CHANGELOG.md @@ -1,5 +1,27 @@ # Changelog +## [0.35.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-aws-sdk-v0.34.3...instrumentation-aws-sdk-v0.35.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) +* **opentelemetry-instrumentation-aws-sdk:** add missing spec-defined DynamoDB attributes ([#1524](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1524)) ([f7c4324](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/f7c432495dc04b02f7279c543bb4565f4f111134)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @opentelemetry/propagation-utils bumped from ^0.29.5 to ^0.30.0 + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.34.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-aws-sdk-v0.34.2...instrumentation-aws-sdk-v0.34.3) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/package.json index 1696b7211..7a382575e 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-aws-sdk", - "version": "0.34.3", + "version": "0.35.0", "description": "OpenTelemetry automatic instrumentation for the `aws-sdk` package", "keywords": [ "aws", @@ -47,9 +47,9 @@ }, "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0", - "@opentelemetry/propagation-utils": "^0.29.5" + "@opentelemetry/propagation-utils": "^0.30.0" }, "devDependencies": { "@aws-sdk/client-dynamodb": "3.85.0", @@ -59,22 +59,22 @@ "@aws-sdk/client-sns": "3.85.0", "@aws-sdk/types": "3.78.0", "@opentelemetry/api": "^1.3.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", - "@types/sinon": "10.0.6", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "aws-sdk": "2.1008.0", "eslint": "8.7.0", "expect": "29.2.0", "mocha": "7.2.0", - "nock": "13.2.1", + "nock": "13.3.2", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", - "typescript": "4.3.4" + "typescript": "4.4.4" }, "engines": { "node": ">=14" diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/src/aws-sdk.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/src/aws-sdk.ts index c74f0433c..b82192ce8 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/src/aws-sdk.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/src/aws-sdk.ts @@ -112,6 +112,21 @@ export class AwsInstrumentation extends InstrumentationBase { v3MiddlewareStackFileNewVersions, ]); + // patch for @smithy/middleware-stack for aws-sdk packages v3.363.0+ + const v3SmithyMiddlewareStackFile = new InstrumentationNodeModuleFile( + '@smithy/middleware-stack/dist-cjs/MiddlewareStack.js', + ['>=1.0.1'], + this.patchV3ConstructStack.bind(this), + this.unpatchV3ConstructStack.bind(this) + ); + const v3SmithyMiddlewareStack = new InstrumentationNodeModuleDefinition( + '@smithy/middleware-stack', + ['>=2.0.0'], + undefined, + undefined, + [v3SmithyMiddlewareStackFile] + ); + const v3SmithyClient = new InstrumentationNodeModuleDefinition( '@aws-sdk/smithy-client', ['^3.1.0'], @@ -119,6 +134,14 @@ export class AwsInstrumentation extends InstrumentationBase { this.unpatchV3SmithyClient.bind(this) ); + // patch for new @smithy/smithy-client for aws-sdk packages v3.363.0+ + const v3NewSmithyClient = new InstrumentationNodeModuleDefinition( + '@smithy/smithy-client', + ['>=1.0.3'], + this.patchV3SmithyClient.bind(this), + this.unpatchV3SmithyClient.bind(this) + ); + const v2Request = new InstrumentationNodeModuleFile( 'aws-sdk/lib/core.js', ['^2.308.0'], @@ -134,7 +157,13 @@ export class AwsInstrumentation extends InstrumentationBase { [v2Request] ); - return [v2Module, v3MiddlewareStack, v3SmithyClient]; + return [ + v2Module, + v3MiddlewareStack, + v3SmithyMiddlewareStack, + v3SmithyClient, + v3NewSmithyClient, + ]; } protected patchV3ConstructStack(moduleExports: any, moduleVersion?: string) { diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/src/services/dynamodb.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/src/services/dynamodb.ts index dd797b5af..424cab5fa 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/src/services/dynamodb.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/src/services/dynamodb.ts @@ -26,6 +26,10 @@ import { } from '../types'; export class DynamodbServiceExtension implements ServiceExtension { + toArray(values: T | T[]): T[] { + return Array.isArray(values) ? values : [values]; + } + requestPreSpanHook(normalizedRequest: NormalizedRequest): RequestMetadata { const spanKind: SpanKind = SpanKind.CLIENT; let spanName: string | undefined; @@ -41,12 +45,144 @@ export class DynamodbServiceExtension implements ServiceExtension { ), }; - if (operation === 'BatchGetItem') { + // normalizedRequest.commandInput.RequestItems) is undefined when no table names are returned + // keys in this object are the table names + if (normalizedRequest.commandInput?.TableName) { + // Necessary for commands with only 1 table name (example: CreateTable). Attribute is TableName not keys of RequestItems + // single table name returned for operations like CreateTable + spanAttributes[SemanticAttributes.AWS_DYNAMODB_TABLE_NAMES] = [ + normalizedRequest.commandInput.TableName, + ]; + } else if (normalizedRequest.commandInput?.RequestItems) { spanAttributes[SemanticAttributes.AWS_DYNAMODB_TABLE_NAMES] = Object.keys( normalizedRequest.commandInput.RequestItems ); } + if (operation === 'CreateTable' || operation === 'UpdateTable') { + // only check for ProvisionedThroughput since ReadCapacityUnits and WriteCapacity units are required attributes + if (normalizedRequest.commandInput?.ProvisionedThroughput) { + spanAttributes[ + SemanticAttributes.AWS_DYNAMODB_PROVISIONED_READ_CAPACITY + ] = + normalizedRequest.commandInput.ProvisionedThroughput.ReadCapacityUnits; + spanAttributes[ + SemanticAttributes.AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY + ] = + normalizedRequest.commandInput.ProvisionedThroughput.WriteCapacityUnits; + } + } + + if ( + operation === 'GetItem' || + operation === 'Scan' || + operation === 'Query' + ) { + if (normalizedRequest.commandInput?.ConsistentRead) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_CONSISTENT_READ] = + normalizedRequest.commandInput.ConsistentRead; + } + } + + if (operation === 'Query' || operation === 'Scan') { + if (normalizedRequest.commandInput?.ProjectionExpression) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_PROJECTION] = + normalizedRequest.commandInput.ProjectionExpression; + } + } + + if (operation === 'CreateTable') { + if (normalizedRequest.commandInput?.GlobalSecondaryIndexes) { + spanAttributes[ + SemanticAttributes.AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES + ] = this.toArray( + normalizedRequest.commandInput.GlobalSecondaryIndexes + ).map((x: { [DictionaryKey: string]: any }) => JSON.stringify(x)); + } + + if (normalizedRequest.commandInput?.LocalSecondaryIndexes) { + spanAttributes[ + SemanticAttributes.AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES + ] = this.toArray( + normalizedRequest.commandInput.LocalSecondaryIndexes + ).map((x: { [DictionaryKey: string]: any }) => JSON.stringify(x)); + } + } + + if ( + operation === 'ListTables' || + operation === 'Query' || + operation === 'Scan' + ) { + if (normalizedRequest.commandInput?.Limit) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_LIMIT] = + normalizedRequest.commandInput.Limit; + } + } + + if (operation === 'ListTables') { + if (normalizedRequest.commandInput?.ExclusiveStartTableName) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_EXCLUSIVE_START_TABLE] = + normalizedRequest.commandInput.ExclusiveStartTableName; + } + } + + if (operation === 'Query') { + if (normalizedRequest.commandInput?.ScanIndexForward) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_SCAN_FORWARD] = + normalizedRequest.commandInput.ScanIndexForward; + } + + if (normalizedRequest.commandInput?.IndexName) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_INDEX_NAME] = + normalizedRequest.commandInput.IndexName; + } + + if (normalizedRequest.commandInput?.Select) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_SELECT] = + normalizedRequest.commandInput.Select; + } + } + + if (operation === 'Scan') { + if (normalizedRequest.commandInput?.Segment) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_SEGMENT] = + normalizedRequest.commandInput?.Segment; + } + + if (normalizedRequest.commandInput?.TotalSegments) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_TOTAL_SEGMENTS] = + normalizedRequest.commandInput?.TotalSegments; + } + + if (normalizedRequest.commandInput?.IndexName) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_INDEX_NAME] = + normalizedRequest.commandInput.IndexName; + } + + if (normalizedRequest.commandInput?.Select) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_SELECT] = + normalizedRequest.commandInput.Select; + } + } + + if (operation === 'UpdateTable') { + if (normalizedRequest.commandInput?.AttributeDefinitions) { + spanAttributes[SemanticAttributes.AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS] = + this.toArray(normalizedRequest.commandInput.AttributeDefinitions).map( + (x: { [DictionaryKey: string]: any }) => JSON.stringify(x) + ); + } + + if (normalizedRequest.commandInput?.GlobalSecondaryIndexUpdates) { + spanAttributes[ + SemanticAttributes.AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES + ] = this.toArray( + normalizedRequest.commandInput.GlobalSecondaryIndexUpdates + ).map((x: { [DictionaryKey: string]: any }) => JSON.stringify(x)); + } + } + return { isIncoming, spanAttributes, @@ -73,5 +209,35 @@ export class DynamodbServiceExtension implements ServiceExtension { ); } } + + if (response.data?.ItemCollectionMetrics) { + span.setAttribute( + SemanticAttributes.AWS_DYNAMODB_ITEM_COLLECTION_METRICS, + this.toArray(response.data.ItemCollectionMetrics).map( + (x: { [DictionaryKey: string]: any }) => JSON.stringify(x) + ) + ); + } + + if (response.data?.TableNames) { + span.setAttribute( + SemanticAttributes.AWS_DYNAMODB_TABLE_COUNT, + response.data?.TableNames.length + ); + } + + if (response.data?.Count) { + span.setAttribute( + SemanticAttributes.AWS_DYNAMODB_COUNT, + response.data?.Count + ); + } + + if (response.data?.ScannedCount) { + span.setAttribute( + SemanticAttributes.AWS_DYNAMODB_SCANNED_COUNT, + response.data?.ScannedCount + ); + } } } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/test/dynamodb.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/test/dynamodb.test.ts index 5ff0c2b0a..b8504d401 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/test/dynamodb.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-aws-sdk/test/dynamodb.test.ts @@ -69,7 +69,14 @@ describe('DynamoDB', () => { ExpressionAttributeValues: { ':v': 'val1', }, + ProjectionExpression: 'id', + ScanIndexForward: true, + ConsistentRead: true, + IndexName: 'name_to_group', + Limit: 10, + Select: 'ALL_ATTRIBUTES', }; + dynamodb.query( params, (err: AWSError, data: AWS.DynamoDB.DocumentClient.QueryOutput) => { @@ -81,6 +88,390 @@ describe('DynamoDB', () => { ); expect(attrs[SemanticAttributes.DB_NAME]).toStrictEqual('test-table'); expect(attrs[SemanticAttributes.DB_OPERATION]).toStrictEqual('Query'); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_SCAN_FORWARD] + ).toStrictEqual(true); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_CONSISTENT_READ] + ).toStrictEqual(true); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_INDEX_NAME] + ).toStrictEqual('name_to_group'); + expect(attrs[SemanticAttributes.AWS_DYNAMODB_SELECT]).toStrictEqual( + 'ALL_ATTRIBUTES' + ); + expect(attrs[SemanticAttributes.AWS_DYNAMODB_LIMIT]).toStrictEqual( + 10 + ); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_TABLE_NAMES] + ).toStrictEqual(['test-table']); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_PROJECTION] + ).toStrictEqual('id'); + expect( + JSON.parse(attrs[SemanticAttributes.DB_STATEMENT] as string) + ).toEqual(params); + expect(err).toBeFalsy(); + done(); + } + ); + }); + }); + + describe('Scan', () => { + beforeEach(() => + mockV2AwsSend(responseMockSuccess, { + ConsumedCapacity: { + TableName: 'test-table', + CapacityUnits: 0.5, + Table: { CapacityUnits: 0.5 }, + }, + Count: 10, + ScannedCount: 50, + } as AWS.DynamoDB.Types.ScanOutput) + ); + + it('should populate specific Scan attributes', done => { + const dynamodb = new AWS.DynamoDB.DocumentClient(); + const params = { + TableName: 'test-table', + Item: { key1: 'val1' }, + ProjectionExpression: 'id', + ConsistentRead: true, + Segment: 10, + TotalSegments: 100, + IndexName: 'index_name', + Limit: 10, + Select: 'ALL_ATTRIBUTES', + }; + + dynamodb.scan( + params, + (err: AWSError, data: AWS.DynamoDB.DocumentClient.ScanOutput) => { + const spans = getTestSpans(); + expect(spans.length).toStrictEqual(1); + const attrs = spans[0].attributes; + expect(attrs[SemanticAttributes.DB_SYSTEM]).toStrictEqual( + DbSystemValues.DYNAMODB + ); + expect(attrs[SemanticAttributes.DB_NAME]).toStrictEqual('test-table'); + expect(attrs[SemanticAttributes.DB_OPERATION]).toStrictEqual('Scan'); + expect(attrs[SemanticAttributes.AWS_DYNAMODB_SEGMENT]).toStrictEqual( + 10 + ); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_TOTAL_SEGMENTS] + ).toStrictEqual(100); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_INDEX_NAME] + ).toStrictEqual('index_name'); + expect(attrs[SemanticAttributes.AWS_DYNAMODB_SELECT]).toStrictEqual( + 'ALL_ATTRIBUTES' + ); + expect(attrs[SemanticAttributes.AWS_DYNAMODB_COUNT]).toStrictEqual( + 10 + ); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_SCANNED_COUNT] + ).toStrictEqual(50); + expect(attrs[SemanticAttributes.AWS_DYNAMODB_LIMIT]).toStrictEqual( + 10 + ); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_TABLE_NAMES] + ).toStrictEqual(['test-table']); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_PROJECTION] + ).toStrictEqual('id'); + expect( + JSON.parse(attrs[SemanticAttributes.DB_STATEMENT] as string) + ).toEqual(params); + expect(err).toBeFalsy(); + done(); + } + ); + }); + }); + + describe('BatchWriteItem', () => { + beforeEach(() => + mockV2AwsSend(responseMockSuccess, { + UnprocessedItems: {}, + ItemCollectionMetrics: { + ItemCollectionKey: [], + SizeEstimateRangeGB: [0], + }, + ConsumedCapacity: undefined, + } as AWS.DynamoDB.Types.BatchWriteItemOutput) + ); + + it('should populate specific BatchWriteItem attributes', done => { + const dynamodb = new AWS.DynamoDB.DocumentClient(); + const params = { + RequestItems: {}, + ReturnConsumedCapacity: 'INDEXES', + ReturnItemCollectionMetrics: 'SIZE', + }; + + dynamodb.batchWrite( + params, + ( + err: AWSError, + data: AWS.DynamoDB.DocumentClient.BatchWriteItemOutput + ) => { + const spans = getTestSpans(); + expect(spans.length).toStrictEqual(1); + const attrs = spans[0].attributes; + expect(attrs[SemanticAttributes.DB_SYSTEM]).toStrictEqual( + DbSystemValues.DYNAMODB + ); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_ITEM_COLLECTION_METRICS] + ).toStrictEqual([ + JSON.stringify({ ItemCollectionKey: [], SizeEstimateRangeGB: [0] }), + ]); + + expect( + JSON.parse(attrs[SemanticAttributes.DB_STATEMENT] as string) + ).toEqual(params); + expect(err).toBeFalsy(); + done(); + } + ); + }); + }); + + describe('CreateTable', () => { + beforeEach(() => + mockV2AwsSend(responseMockSuccess, { + TableName: 'test_table', + ItemCollectionMetrics: { + ItemCollectionKey: [], + SizeEstimateRangeGB: [0], + }, + ConsumedCapacity: undefined, + } as AWS.DynamoDB.Types.CreateTableOutput) + ); + + it('should populate specific CreateTable attributes', done => { + const globalSecondaryIndexMockData = { + IndexName: 'test_index', + KeySchema: [ + { + AttributeName: 'attribute1', + KeyType: 'HASH', + }, + ], + Projection: { + ProjectionType: 'ALL', + NonKeyAttributes: ['non_key_attr'], + }, + ProvisionedThroughput: { + ReadCapacityUnits: 5, + WriteCapacityUnits: 10, + }, + }; + + const localSecondaryIndexMockData = { + IndexName: 'test_index', + KeySchema: [ + { + AttributeName: 'test_attribute', + KeyType: 'HASH', + }, + ], + Projection: { + ProjectionType: 'ALL', + NonKeyAttributes: ['STRING_VALUE'], + }, + }; + + const dynamodb = new AWS.DynamoDB(); + const params = { + AttributeDefinitions: [ + { + AttributeName: 'test_attribute', + AttributeType: 'S', + }, + ], + TableName: 'test_table', + KeySchema: [ + { + AttributeName: 'test_attribute', + KeyType: 'HASH', + }, + ], + LocalSecondaryIndexes: [localSecondaryIndexMockData], + GlobalSecondaryIndexes: [globalSecondaryIndexMockData], + BillingMode: 'PROVISIONED', + ProvisionedThroughput: { + ReadCapacityUnits: 20, + WriteCapacityUnits: 30, + }, + }; + + dynamodb.createTable( + params, + ( + err: AWSError, + data: AWS.DynamoDB.DocumentClient.CreateTableOutput + ) => { + const spans = getTestSpans(); + expect(spans.length).toStrictEqual(1); + const attrs = spans[0].attributes; + expect(attrs[SemanticAttributes.DB_SYSTEM]).toStrictEqual( + DbSystemValues.DYNAMODB + ); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_ITEM_COLLECTION_METRICS] + ).toStrictEqual([ + JSON.stringify({ ItemCollectionKey: [], SizeEstimateRangeGB: [0] }), + ]); + + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_GLOBAL_SECONDARY_INDEXES] + ).toStrictEqual([JSON.stringify(globalSecondaryIndexMockData)]); + + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_LOCAL_SECONDARY_INDEXES] + ).toStrictEqual([JSON.stringify(localSecondaryIndexMockData)]); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_PROVISIONED_READ_CAPACITY] + ).toStrictEqual(20); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY] + ).toStrictEqual(30); + expect( + JSON.parse(attrs[SemanticAttributes.DB_STATEMENT] as string) + ).toEqual(params); + expect(err).toBeFalsy(); + done(); + } + ); + }); + }); + + describe('UpdateTable', () => { + beforeEach(() => + mockV2AwsSend(responseMockSuccess, { + TableName: 'test_table', + } as AWS.DynamoDB.Types.UpdateTableOutput) + ); + + it('should populate specific CreateTable attributes', done => { + const dynamodb = new AWS.DynamoDB(); + const params = { + AttributeDefinitions: [ + { + AttributeName: 'test_attr', + AttributeType: 'S', + }, + ], + TableName: 'test_table', + ProvisionedThroughput: { + ReadCapacityUnits: 10, + WriteCapacityUnits: 15, + }, + GlobalSecondaryIndexUpdates: [ + { + Update: { + IndexName: 'test_index', + ProvisionedThroughput: { + ReadCapacityUnits: 1, + WriteCapacityUnits: 5, + }, + }, + }, + ], + }; + + dynamodb.updateTable( + params, + ( + err: AWSError, + data: AWS.DynamoDB.DocumentClient.UpdateTableOutput + ) => { + const spans = getTestSpans(); + expect(spans.length).toStrictEqual(1); + const attrs = spans[0].attributes; + expect(attrs[SemanticAttributes.DB_SYSTEM]).toStrictEqual( + DbSystemValues.DYNAMODB + ); + + expect( + attrs[ + SemanticAttributes.AWS_DYNAMODB_GLOBAL_SECONDARY_INDEX_UPDATES + ] + ).toStrictEqual([ + JSON.stringify({ + Update: { + IndexName: 'test_index', + ProvisionedThroughput: { + ReadCapacityUnits: 1, + WriteCapacityUnits: 5, + }, + }, + }), + ]); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_ATTRIBUTE_DEFINITIONS] + ).toStrictEqual([ + JSON.stringify({ + AttributeName: 'test_attr', + AttributeType: 'S', + }), + ]); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_PROVISIONED_READ_CAPACITY] + ).toStrictEqual(10); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_PROVISIONED_WRITE_CAPACITY] + ).toStrictEqual(15); + expect( + JSON.parse(attrs[SemanticAttributes.DB_STATEMENT] as string) + ).toEqual(params); + expect(err).toBeFalsy(); + done(); + } + ); + }); + }); + + describe('ListTables', () => { + beforeEach(() => + mockV2AwsSend(responseMockSuccess, { + TableNames: ['test_table', 'test_table_2', 'start_table'], + } as AWS.DynamoDB.Types.ListTablesOutput) + ); + + it('should populate specific ListTables attributes', done => { + const dynamodb = new AWS.DynamoDB(); + const params = { + ExclusiveStartTableName: 'start_table', + Limit: 10, + }; + + dynamodb.listTables( + params, + (err: AWSError, data: AWS.DynamoDB.DocumentClient.ListTablesOutput) => { + const spans = getTestSpans(); + expect(spans.length).toStrictEqual(1); + const attrs = spans[0].attributes; + expect(attrs[SemanticAttributes.DB_SYSTEM]).toStrictEqual( + DbSystemValues.DYNAMODB + ); + + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_EXCLUSIVE_START_TABLE] + ).toStrictEqual('start_table'); + expect(attrs[SemanticAttributes.AWS_DYNAMODB_LIMIT]).toStrictEqual( + 10 + ); + expect( + attrs[SemanticAttributes.AWS_DYNAMODB_TABLE_COUNT] + ).toStrictEqual(3); + expect( JSON.parse(attrs[SemanticAttributes.DB_STATEMENT] as string) ).toEqual(params); diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-bunyan/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-bunyan/CHANGELOG.md index f058c4da8..164f7231a 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-bunyan/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-bunyan/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-bunyan-v0.31.4...instrumentation-bunyan-v0.32.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.31.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-bunyan-v0.31.3...instrumentation-bunyan-v0.31.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-bunyan/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-bunyan/package.json index aea1d84ed..70f8d8e6a 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-bunyan/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-bunyan/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-bunyan", - "version": "0.31.4", + "version": "0.32.0", "description": "OpenTelemetry instrumentation for bunyan", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -52,20 +52,20 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/sinon": "10.0.2", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "bunyan": "1.8.15", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", - "@types/bunyan": "1.8.7" + "@opentelemetry/instrumentation": "^0.41.2", + "@types/bunyan": "1.8.8" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-bunyan#readme" } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-cassandra/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-cassandra/CHANGELOG.md index 1e3cac7ce..fbec3a968 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-cassandra/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-cassandra/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-cassandra-driver-v0.32.4...instrumentation-cassandra-driver-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.32.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-cassandra-driver-v0.32.3...instrumentation-cassandra-driver-v0.32.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-cassandra/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-cassandra/package.json index ee19e6504..82b5e743b 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-cassandra/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-cassandra/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-cassandra-driver", - "version": "0.32.4", + "version": "0.33.0", "description": "OpenTelemetry instrumentation for cassandra-driver", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -48,23 +48,23 @@ "devDependencies": { "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/semver": "7.3.8", - "@types/sinon": "10.0.2", - "cassandra-driver": "4.6.3", + "@types/node": "18.16.19", + "@types/semver": "7.5.0", + "@types/sinon": "10.0.16", + "cassandra-driver": "4.6.4", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-cassandra#readme" diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/CHANGELOG.md index a074cc3fa..fd62f6fe4 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-connect-v0.31.4...instrumentation-connect-v0.32.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **connect:** Skip update HTTP's span name and update RpcMetadata's route instead ([#1534](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1534)) ([8499b16](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/8499b16b720db19b8982ad7745fc79b68c6555a3)) +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.31.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-connect-v0.31.3...instrumentation-connect-v0.31.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/package.json index af01931c1..81adf97d4 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-connect", - "version": "0.31.4", + "version": "0.32.0", "description": "OpenTelemetry connect automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,17 +49,17 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "connect": "3.7.0", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0", "@types/connect": "3.4.35" }, diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/src/instrumentation.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/src/instrumentation.ts index 5e2d28584..a2fce4cd4 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/src/instrumentation.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/src/instrumentation.ts @@ -17,7 +17,7 @@ import { context, diag, Span, SpanOptions } from '@opentelemetry/api'; import { getRPCMetadata, RPCType } from '@opentelemetry/core'; import type { HandleFunction, NextFunction, Server } from 'connect'; -import type { IncomingMessage, ServerResponse } from 'http'; +import type { ServerResponse } from 'http'; import { AttributeNames, ConnectNames, @@ -120,16 +120,13 @@ export class ConnectInstrumentation extends InstrumentationBase { if (!instrumentation.isEnabled()) { return (middleWare as any).apply(this, arguments); } - const [reqArgIdx, resArgIdx, nextArgIdx] = isErrorMiddleware - ? [1, 2, 3] - : [0, 1, 2]; - const req = arguments[reqArgIdx] as IncomingMessage; + const [resArgIdx, nextArgIdx] = isErrorMiddleware ? [2, 3] : [1, 2]; const res = arguments[resArgIdx] as ServerResponse; const next = arguments[nextArgIdx] as NextFunction; const rpcMetadata = getRPCMetadata(context.active()); if (routeName && rpcMetadata?.type === RPCType.HTTP) { - rpcMetadata.span.updateName(`${req.method} ${routeName || '/'}`); + rpcMetadata.route = routeName; } let spanName = ''; if (routeName) { diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/test/instrumentation.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/test/instrumentation.test.ts index c7ef32fb9..e871885e2 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/test/instrumentation.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-connect/test/instrumentation.test.ts @@ -16,7 +16,7 @@ import * as assert from 'assert'; import { context, trace } from '@opentelemetry/api'; -import { RPCType, setRPCMetadata } from '@opentelemetry/core'; +import { RPCType, setRPCMetadata, RPCMetadata } from '@opentelemetry/core'; import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks'; import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node'; @@ -186,7 +186,7 @@ describe('connect', () => { assert.strictEqual(span.name, 'request handler - /foo'); }); - it('should change name for parent http route', async () => { + it('should not change name for parent http route ', async () => { const rootSpan = tracer.startSpan('root span'); app.use((req, res, next) => { const rpcMetadata = { type: RPCType.HTTP, span: rootSpan }; @@ -206,11 +206,37 @@ describe('connect', () => { await httpRequest.get(`http://localhost:${PORT}/foo`); rootSpan.end(); + const spans = memoryExporter.getFinishedSpans(); + assert.strictEqual(spans.length, 3); + const changedRootSpan = spans[2]; + assert.strictEqual(changedRootSpan.name, 'root span'); + }); + + it('should mutate route value of RpcMetadata', async () => { + const rootSpan = tracer.startSpan('root span'); + const rpcMetadata: RPCMetadata = { type: RPCType.HTTP, span: rootSpan }; + app.use((req, res, next) => { + return context.with( + setRPCMetadata( + trace.setSpan(context.active(), rootSpan), + rpcMetadata + ), + next + ); + }); + + app.use('/foo', (req, res, next) => { + next(); + }); + + await httpRequest.get(`http://localhost:${PORT}/foo`); + rootSpan.end(); + const spans = memoryExporter.getFinishedSpans(); assert.strictEqual(spans.length, 3); const changedRootSpan = spans[2]; const span = spans[0]; - assert.strictEqual(changedRootSpan.name, 'GET /foo'); + assert.strictEqual(rpcMetadata.route, '/foo'); assert.strictEqual(span.name, 'request handler - /foo'); assert.strictEqual( span.parentSpanId, diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-dns/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-dns/CHANGELOG.md index 5cb59bc9b..04e95eb85 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-dns/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-dns/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-dns-v0.31.5...instrumentation-dns-v0.32.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.31.5](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-dns-v0.31.4...instrumentation-dns-v0.31.5) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-dns/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-dns/package.json index b608f7a4b..0f6f62751 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-dns/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-dns/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-dns", - "version": "0.31.5", + "version": "0.32.0", "description": "OpenTelemetry dns automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,19 +50,19 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/semver": "7.3.8", + "@types/node": "18.16.19", + "@types/semver": "7.5.0", "@types/shimmer": "1.0.2", - "@types/sinon": "10.0.2", + "@types/sinon": "10.0.16", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0", "semver": "^7.3.2" }, diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/CHANGELOG.md index e25096c91..f19c0050e 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-express-v0.32.4...instrumentation-express-v0.33.0) (2023-07-12) + + +### Features + +* **express:** Skip update HTTP's span name and update RpcMetadata's route instead ([#1557](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1557)) ([8e2f518](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/8e2f518d668bb5e0382e1e071bac0213b57142a0)) +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.32.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-express-v0.32.3...instrumentation-express-v0.32.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/README.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/README.md index 7c937e8e9..6eba2b6c6 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/README.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/README.md @@ -76,7 +76,7 @@ Express instrumentation has few options available to choose from. You can set th `spanNameHook` is invoked with 2 arguments: -- `info: ExpressRequestInfo` containing the incoming Express.js request, the current route handler creating a span and `ExpressLayerType` - the type of the handling layer or undefined when renaming the root HTTP instrumentation span. +- `info: ExpressRequestInfo` containing the incoming Express.js request, the current route handler creating a span and `ExpressLayerType` - the type of the handling layer. - `defaultName: string` - original name proposed by the instrumentation. #### Ignore a whole Express route diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/examples/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/examples/package.json index 4e76fbb29..c829a5ac7 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/examples/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/examples/package.json @@ -32,9 +32,9 @@ "@opentelemetry/api": "^1.0.0", "@opentelemetry/exporter-jaeger": "^1.0.0", "@opentelemetry/exporter-zipkin": "^1.0.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/instrumentation-express": "0.28.0", - "@opentelemetry/instrumentation-http": "^0.40.0", + "@opentelemetry/instrumentation-http": "^0.41.2", "@opentelemetry/resources": "^1.0.0", "@opentelemetry/sdk-trace-base": "^1.0.0", "@opentelemetry/sdk-trace-node": "^1.0.0", diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/package.json index d93ea321b..77de1e313 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-express", - "version": "0.32.4", + "version": "0.33.0", "description": "OpenTelemetry express automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -53,12 +53,12 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/sinon": "10.0.9", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "express": "4.17.3", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", @@ -66,9 +66,9 @@ }, "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0", - "@types/express": "4.17.13" + "@types/express": "4.17.17" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express#readme" } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/src/instrumentation.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/src/instrumentation.ts index 2fda3891f..0c27a8a88 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/src/instrumentation.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/src/instrumentation.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { setRPCMetadata, getRPCMetadata, RPCType } from '@opentelemetry/core'; +import { getRPCMetadata, RPCType } from '@opentelemetry/core'; import { trace, context, diag, SpanAttributes } from '@opentelemetry/api'; import type * as express from 'express'; import { ExpressInstrumentationConfig, ExpressRequestInfo } from './types'; @@ -198,18 +198,10 @@ export class ExpressInstrumentation extends InstrumentationBase< // once we reach the request handler const rpcMetadata = getRPCMetadata(context.active()); if ( - metadata.attributes[AttributeNames.EXPRESS_TYPE] === - ExpressLayerType.REQUEST_HANDLER && + type === ExpressLayerType.REQUEST_HANDLER && rpcMetadata?.type === RPCType.HTTP ) { - const name = instrumentation._getSpanName( - { - request: req, - route, - }, - `${req.method} ${route.length > 0 ? route : '/'}` - ); - rpcMetadata.span.updateName(name); + rpcMetadata.route = route || '/'; } // verify against the config if the layer should be ignored @@ -270,13 +262,6 @@ export class ExpressInstrumentation extends InstrumentationBase< // verify we have a callback const args = Array.from(arguments); const callbackIdx = args.findIndex(arg => typeof arg === 'function'); - const newContext = - rpcMetadata?.type === RPCType.HTTP - ? setRPCMetadata( - context.active(), - Object.assign(rpcMetadata, { route: route }) - ) - : context.active(); if (callbackIdx >= 0) { arguments[callbackIdx] = function () { if (spanHasEnded === false) { @@ -288,7 +273,7 @@ export class ExpressInstrumentation extends InstrumentationBase< (req[_LAYERS_STORE_PROPERTY] as string[]).pop(); } const callback = args[callbackIdx] as Function; - return context.bind(newContext, callback).apply(this, arguments); + return callback.apply(this, arguments); }; } const result = original.apply(this, arguments); diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/src/types.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/src/types.ts index d8498e3b9..a6d376fac 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/src/types.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/src/types.ts @@ -24,10 +24,7 @@ export type IgnoreMatcher = string | RegExp | ((name: string) => boolean); export type ExpressRequestInfo = { request: Request; route: string; - /** - * If layerType is undefined, SpanNameHook is being invoked to rename the original root HTTP span. - */ - layerType?: ExpressLayerType; + layerType: ExpressLayerType; }; export type SpanNameHook = ( diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/custom-config.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/custom-config.test.ts index 7cff1c117..d6b418c60 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/custom-config.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/custom-config.test.ts @@ -23,7 +23,7 @@ import { } from '@opentelemetry/sdk-trace-base'; import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; import * as assert from 'assert'; -import { RPCType, setRPCMetadata } from '@opentelemetry/core'; +import { RPCMetadata, RPCType, setRPCMetadata } from '@opentelemetry/core'; import { ExpressLayerType } from '../src/enums/ExpressLayerType'; import { AttributeNames } from '../src/enums/AttributeNames'; import { ExpressInstrumentation, ExpressInstrumentationConfig } from '../src'; @@ -110,8 +110,9 @@ describe('ExpressInstrumentation', () => { }); it('should not repeat middleware paths in the span name', async () => { + let rpcMetadata: RPCMetadata; app.use((req, res, next) => { - const rpcMetadata = { type: RPCType.HTTP, span: rootSpan }; + rpcMetadata = { type: RPCType.HTTP, span: rootSpan }; return context.with( setRPCMetadata( trace.setSpan(context.active(), rootSpan), @@ -139,8 +140,6 @@ describe('ExpressInstrumentation', () => { assert.strictEqual(response, 'ok'); rootSpan.end(); - const spans = memoryExporter.getFinishedSpans(); - const requestHandlerSpan = memoryExporter .getFinishedSpans() .find(span => span.name.includes('request handler')); @@ -154,8 +153,7 @@ describe('ExpressInstrumentation', () => { requestHandlerSpan?.attributes[AttributeNames.EXPRESS_TYPE], 'request_handler' ); - const exportedRootSpan = spans.find(span => span.name === 'GET /mw'); - assert.notStrictEqual(exportedRootSpan, undefined); + assert.strictEqual(rpcMetadata.route, '/mw'); } ); }); @@ -167,8 +165,9 @@ describe('ExpressInstrumentation', () => { ExpressLayerType.REQUEST_HANDLER, ], } as ExpressInstrumentationConfig); + let rpcMetadata: RPCMetadata; app.use((req, res, next) => { - const rpcMetadata = { type: RPCType.HTTP, span: rootSpan }; + rpcMetadata = { type: RPCType.HTTP, span: rootSpan }; return context.with( setRPCMetadata( trace.setSpan(context.active(), rootSpan), @@ -192,8 +191,6 @@ describe('ExpressInstrumentation', () => { assert.strictEqual(response, 'ok'); rootSpan.end(); - const spans = memoryExporter.getFinishedSpans(); - const requestHandlerSpan = memoryExporter .getFinishedSpans() .find(span => span.name.includes('request handler')); @@ -207,8 +204,7 @@ describe('ExpressInstrumentation', () => { requestHandlerSpan?.attributes[AttributeNames.EXPRESS_TYPE], 'request_handler' ); - const exportedRootSpan = spans.find(span => span.name === 'GET /'); - assert.notStrictEqual(exportedRootSpan, undefined); + assert.strictEqual(rpcMetadata?.route, '/'); } ); }); diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/express.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/express.test.ts index 04f2826f6..79b5f2948 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/express.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/express.test.ts @@ -32,6 +32,8 @@ instrumentation.enable(); instrumentation.disable(); import * as express from 'express'; +import { RPCMetadata, getRPCMetadata } from '@opentelemetry/core'; +import { Server } from 'http'; describe('ExpressInstrumentation', () => { const provider = new NodeTracerProvider(); @@ -54,6 +56,11 @@ describe('ExpressInstrumentation', () => { }); describe('Instrumenting normal get operations', () => { + let server: Server, port: number; + afterEach(() => { + server?.close(); + }); + it('should create a child span for middlewares', async () => { const rootSpan = tracer.startSpan('rootSpan'); const customMiddleware: express.RequestHandler = (req, res, next) => { @@ -63,22 +70,22 @@ describe('ExpressInstrumentation', () => { return next(); }; let finishListenerCount: number | undefined; - const { server, port } = await serverWithMiddleware( - tracer, - rootSpan, - app => { - app.use(express.json()); - app.use((req, res, next) => { - res.on('finish', () => { - finishListenerCount = res.listenerCount('finish'); - }); - next(); + let rpcMetadata: RPCMetadata | undefined; + const httpServer = await serverWithMiddleware(tracer, rootSpan, app => { + app.use(express.json()); + app.use((req, res, next) => { + rpcMetadata = getRPCMetadata(context.active()); + res.on('finish', () => { + finishListenerCount = res.listenerCount('finish'); }); - for (let index = 0; index < 15; index++) { - app.use(customMiddleware); - } + next(); + }); + for (let index = 0; index < 15; index++) { + app.use(customMiddleware); } - ); + }); + server = httpServer.server; + port = httpServer.port; assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); await context.with( trace.setSpan(context.active(), rootSpan), @@ -113,39 +120,34 @@ describe('ExpressInstrumentation', () => { requestHandlerSpan?.attributes[AttributeNames.EXPRESS_TYPE], 'request_handler' ); - const exportedRootSpan = memoryExporter - .getFinishedSpans() - .find(span => span.name === 'GET /toto/:id'); - assert.notStrictEqual(exportedRootSpan, undefined); + assert.strictEqual(rpcMetadata?.route, '/toto/:id'); } ); - server.close(); }); it('supports sync middlewares directly responding', async () => { const rootSpan = tracer.startSpan('rootSpan'); let finishListenerCount: number | undefined; - const { server, port } = await serverWithMiddleware( - tracer, - rootSpan, - app => { - app.use((req, res, next) => { - res.on('finish', () => { - finishListenerCount = res.listenerCount('finish'); - }); - next(); + const httpServer = await serverWithMiddleware(tracer, rootSpan, app => { + app.use((req, res, next) => { + res.on('finish', () => { + finishListenerCount = res.listenerCount('finish'); }); - const syncMiddleware: express.RequestHandler = (req, res, next) => { - for (let i = 0; i < 1000000; i++) { - continue; - } - res.status(200).end('middleware'); - }; - for (let index = 0; index < 15; index++) { - app.use(syncMiddleware); + next(); + }); + const syncMiddleware: express.RequestHandler = (req, res, next) => { + for (let i = 0; i < 1000000; i++) { + continue; } + res.status(200).end('middleware'); + }; + for (let index = 0; index < 15; index++) { + app.use(syncMiddleware); } - ); + }); + server = httpServer.server; + port = httpServer.port; + assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); await context.with( trace.setSpan(context.active(), rootSpan), @@ -165,32 +167,30 @@ describe('ExpressInstrumentation', () => { ); } ); - server.close(); }); it('supports async middlewares', async () => { const rootSpan = tracer.startSpan('rootSpan'); let finishListenerCount: number | undefined; - const { server, port } = await serverWithMiddleware( - tracer, - rootSpan, - app => { - app.use((req, res, next) => { - res.on('finish', () => { - finishListenerCount = res.listenerCount('finish'); - }); - next(); + const httpServer = await serverWithMiddleware(tracer, rootSpan, app => { + app.use((req, res, next) => { + res.on('finish', () => { + finishListenerCount = res.listenerCount('finish'); }); - const asyncMiddleware: express.RequestHandler = (req, res, next) => { - setTimeout(() => { - next(); - }, 50); - }; - for (let index = 0; index < 15; index++) { - app.use(asyncMiddleware); - } + next(); + }); + const asyncMiddleware: express.RequestHandler = (req, res, next) => { + setTimeout(() => { + next(); + }, 50); + }; + for (let index = 0; index < 15; index++) { + app.use(asyncMiddleware); } - ); + }); + server = httpServer.server; + port = httpServer.port; + assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); await context.with( trace.setSpan(context.active(), rootSpan), @@ -210,32 +210,30 @@ describe('ExpressInstrumentation', () => { ); } ); - server.close(); }); it('supports async middlewares directly responding', async () => { const rootSpan = tracer.startSpan('rootSpan'); let finishListenerCount: number | undefined; - const { server, port } = await serverWithMiddleware( - tracer, - rootSpan, - app => { - app.use((req, res, next) => { - res.on('finish', () => { - finishListenerCount = res.listenerCount('finish'); - }); - next(); + const httpServer = await serverWithMiddleware(tracer, rootSpan, app => { + app.use((req, res, next) => { + res.on('finish', () => { + finishListenerCount = res.listenerCount('finish'); }); - const asyncMiddleware: express.RequestHandler = (req, res, next) => { - setTimeout(() => { - res.status(200).end('middleware'); - }, 50); - }; - for (let index = 0; index < 15; index++) { - app.use(asyncMiddleware); - } + next(); + }); + const asyncMiddleware: express.RequestHandler = (req, res, next) => { + setTimeout(() => { + res.status(200).end('middleware'); + }, 50); + }; + for (let index = 0; index < 15; index++) { + app.use(asyncMiddleware); } - ); + }); + server = httpServer.server; + port = httpServer.port; + assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); await context.with( trace.setSpan(context.active(), rootSpan), @@ -255,7 +253,6 @@ describe('ExpressInstrumentation', () => { ); } ); - server.close(); }); it('should not create span because there are no parent', async () => { @@ -270,33 +267,36 @@ describe('ExpressInstrumentation', () => { router.get('/:id', (req, res, next) => { return res.status(200).end('test'); }); - const { server, port } = await createServer(app); + const httpServer = await createServer(app); + server = httpServer.server; + port = httpServer.port; assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); const res = await httpRequest.get(`http://localhost:${port}/toto/tata`); assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); assert.strictEqual(res, 'test'); - server.close(); }); }); describe('Disabling plugin', () => { + let server: Server, port: number; + afterEach(() => { + server?.close(); + }); it('should not create new spans', async () => { instrumentation.disable(); const rootSpan = tracer.startSpan('rootSpan'); - const { server, port } = await serverWithMiddleware( - tracer, - rootSpan, - app => { - app.use(express.json()); - const customMiddleware: express.RequestHandler = (req, res, next) => { - for (let i = 0; i < 1000; i++) { - continue; - } - return next(); - }; - app.use(customMiddleware); - } - ); + const httpServer = await serverWithMiddleware(tracer, rootSpan, app => { + app.use(express.json()); + const customMiddleware: express.RequestHandler = (req, res, next) => { + for (let i = 0; i < 1000; i++) { + continue; + } + return next(); + }; + app.use(customMiddleware); + }); + server = httpServer.server; + port = httpServer.port; assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); await context.with( trace.setSpan(context.active(), rootSpan), @@ -312,7 +312,6 @@ describe('ExpressInstrumentation', () => { ); } ); - server.close(); }); }); }); diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/hooks.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/hooks.test.ts index f15a49650..90d98a356 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/hooks.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/hooks.test.ts @@ -34,6 +34,7 @@ instrumentation.enable(); instrumentation.disable(); import { httpRequest, serverWithMiddleware } from './utils'; +import { RPCMetadata, getRPCMetadata } from '@opentelemetry/core'; describe('ExpressInstrumentation hooks', () => { const provider = new NodeTracerProvider(); @@ -59,12 +60,14 @@ describe('ExpressInstrumentation hooks', () => { let server: http.Server; let port: number; let rootSpan: Span; + let rpcMetadata: RPCMetadata | undefined; beforeEach(async () => { rootSpan = tracer.startSpan('rootSpan'); const httpServer = await serverWithMiddleware(tracer, rootSpan, app => { app.get('*', (req, res) => { + rpcMetadata = getRPCMetadata(context.active()); res.send('ok'); }); }); @@ -78,16 +81,8 @@ describe('ExpressInstrumentation hooks', () => { it('should rename spans', async () => { instrumentation.setConfig({ - spanNameHook: ({ request, route, layerType }, defaultName) => { - if (layerType) { - return `hook - ${route}`; - } - - if (route === '*') { - return `parent - ${request.method} ${request.url}`; - } - - return defaultName; + spanNameHook: ({ route, layerType }) => { + return `custom: ${layerType} - ${route}`; }, }); @@ -101,12 +96,7 @@ describe('ExpressInstrumentation hooks', () => { assert.strictEqual(spans.length, 2); assert.notStrictEqual( - spans.find(span => span.name === 'parent - GET /foo/3'), - undefined - ); - - assert.notStrictEqual( - spans.find(span => span.name === 'hook - *'), + spans.find(span => span.name === 'custom: request_handler - *'), undefined ); } @@ -129,11 +119,7 @@ describe('ExpressInstrumentation hooks', () => { const spans = memoryExporter.getFinishedSpans(); assert.strictEqual(spans.length, 2); - assert.notStrictEqual( - spans.find(span => span.name === 'GET *'), - undefined - ); - + assert.strictEqual(rpcMetadata?.route, '*'); assert.notStrictEqual( spans.find(span => span.name === 'request handler - *'), undefined @@ -159,11 +145,7 @@ describe('ExpressInstrumentation hooks', () => { const spans = memoryExporter.getFinishedSpans(); assert.strictEqual(spans.length, 2); - assert.notStrictEqual( - spans.find(span => span.name === 'GET *'), - undefined - ); - + assert.strictEqual(rpcMetadata?.route, '*'); assert.notStrictEqual( spans.find(span => span.name === 'request handler - *'), undefined diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/ignore-all.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/ignore-all.test.ts index ae07b1efc..92c7c7046 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/ignore-all.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-express/test/ignore-all.test.ts @@ -22,7 +22,7 @@ import { SimpleSpanProcessor, } from '@opentelemetry/sdk-trace-base'; import * as assert from 'assert'; -import { RPCType, setRPCMetadata } from '@opentelemetry/core'; +import { RPCMetadata, RPCType, setRPCMetadata } from '@opentelemetry/core'; import { AttributeNames } from '../src/enums/AttributeNames'; import { ExpressInstrumentation, ExpressLayerType } from '../src'; import { createServer, httpRequest } from './utils'; @@ -64,13 +64,14 @@ describe('ExpressInstrumentation', () => { let server: http.Server; let port: number; let rootSpan: Span; + let rpcMetadata: RPCMetadata; beforeEach(async () => { rootSpan = tracer.startSpan('rootSpan'); const app = express(); app.use((req, res, next) => { - const rpcMetadata = { type: RPCType.HTTP, span: rootSpan }; + rpcMetadata = { type: RPCType.HTTP, span: rootSpan }; return context.with( setRPCMetadata( trace.setSpan(context.active(), rootSpan), @@ -126,17 +127,14 @@ describe('ExpressInstrumentation', () => { ); }); - it('root span name should be modified to GET /todo/:id', async () => { + it('rpcMetadata.route should be modified to /todo/:id', async () => { assert.strictEqual(memoryExporter.getFinishedSpans().length, 0); await context.with( trace.setSpan(context.active(), rootSpan), async () => { await httpRequest.get(`http://localhost:${port}/toto/tata`); rootSpan.end(); - const exportedRootSpan = memoryExporter - .getFinishedSpans() - .find(span => span.name === 'GET /toto/:id'); - assert.notStrictEqual(exportedRootSpan, undefined); + assert.strictEqual(rpcMetadata.route, '/toto/:id'); } ); }); diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/CHANGELOG.md index 6b69f92b2..2f928199f 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.4...instrumentation-fastify-v0.32.0) (2023-07-12) + + +### Features + +* **fastify:** Skip update HTTP's span name and update RpcMetadata's route instead ([#1569](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1569)) ([8d9687d](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/8d9687d89e4a80dbf2a5e8be6fb027ff20824593)) +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) +* **instrumentation-fastify:** fix fastify typescript compilation issue ([#1556](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1556)) ([784a422](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/784a4225182037b4233aefb43c7a104eab1ac818)) + ## [0.31.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-fastify-v0.31.3...instrumentation-fastify-v0.31.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/README.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/README.md index 3e74f96b8..a4a30e62c 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/README.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/README.md @@ -47,8 +47,9 @@ See [examples/fastify](https://github.com/open-telemetry/opentelemetry-js-contri ## Fastify Instrumentation Options -| Options | Type | Example | Description | -| `requestHook` | `FastifyCustomAttributeFunction` | `(span, requestInfo) => {}` | Function for adding custom attributes to Fastify requests. Receives params: `Span, FastifyRequestInfo`. | +| Options | Type | Example | Description | +| -------------- | ---------------------------- | -------------------------------- | ------------------------------------------------------------------------------ | +| `requestHook` | `FastifyCustomAttributeFunction` | `(span, requestInfo) => {}` | Function for adding custom attributes to Fastify requests. Receives parameters: `Span, FastifyRequestInfo`. | ### Using `requestHook` diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/package.json index f7830fa14..65c8c2cc8 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-fastify", - "version": "0.31.4", + "version": "0.32.0", "description": "OpenTelemetry fastify automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -48,22 +48,22 @@ "@fastify/express": "^2.0.2", "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", - "@opentelemetry/instrumentation-http": "0.40.0", + "@opentelemetry/instrumentation-http": "0.41.2", "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", - "@types/express": "4.17.13", + "@types/express": "4.17.17", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "fastify": "^4.5.3", + "@types/node": "18.16.19", + "fastify": "4.18.0", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-fastify#readme" diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/src/instrumentation.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/src/instrumentation.ts index d3ac0a74a..fcaf3114e 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/src/instrumentation.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-fastify/src/instrumentation.ts @@ -96,8 +96,7 @@ export class FastifyInstrumentation extends InstrumentationBase { const rpcMetadata = getRPCMetadata(context.active()); const routeName = request.routerPath; if (routeName && rpcMetadata?.type === RPCType.HTTP) { - rpcMetadata.span.setAttribute(SemanticAttributes.HTTP_ROUTE, routeName); - rpcMetadata.span.updateName(`${request.method} ${routeName}`); + rpcMetadata.route = routeName; } done(); }; diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-generic-pool/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-generic-pool/CHANGELOG.md index 9a1799ca4..03ba9f770 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-generic-pool/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-generic-pool/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-generic-pool-v0.31.4...instrumentation-generic-pool-v0.32.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.31.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-generic-pool-v0.31.3...instrumentation-generic-pool-v0.31.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-generic-pool/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-generic-pool/package.json index 445b9009a..f89256489 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-generic-pool/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-generic-pool/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-generic-pool", - "version": "0.31.4", + "version": "0.32.0", "description": "OpenTelemetry Generic Pool automatic instrumentation package", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,18 +50,18 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/semver": "7.3.8", + "@types/node": "18.16.19", + "@types/semver": "7.5.0", "generic-pool": "3.8.2", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", - "semver": "7.3.5", + "rimraf": "5.0.1", + "semver": "7.5.4", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0", "@types/generic-pool": "^3.1.9" }, diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-graphql/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-graphql/CHANGELOG.md index 280a5ff1e..583a16253 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-graphql/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-graphql/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.35.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-graphql-v0.34.3...instrumentation-graphql-v0.35.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.34.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-graphql-v0.34.2...instrumentation-graphql-v0.34.3) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-graphql/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-graphql/package.json index 48cf05a97..7f7613997 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-graphql/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-graphql/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-graphql", - "version": "0.34.3", + "version": "0.35.0", "description": "OpenTelemetry @opentelemetry/instrumentation-graphql automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -51,17 +51,17 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/semantic-conventions": "^1.3.1", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "graphql": "^16.5.0", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0" + "@opentelemetry/instrumentation": "^0.41.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-graphql#readme" } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/CHANGELOG.md index ddcb6d162..06bc9b2c2 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-hapi-v0.31.4...instrumentation-hapi-v0.32.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.31.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-hapi-v0.31.3...instrumentation-hapi-v0.31.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/package.json index d43147d65..464fca850 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-hapi", - "version": "0.31.4", + "version": "0.32.0", "description": "OpenTelemetry Hapi automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -51,18 +51,18 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0", - "@types/hapi__hapi": "20.0.9" + "@types/hapi__hapi": "20.0.13" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-hapi#readme" } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/src/instrumentation.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/src/instrumentation.ts index e671041b5..af3fa98a1 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/src/instrumentation.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/src/instrumentation.ts @@ -276,6 +276,7 @@ export class HapiInstrumentation extends InstrumentationBase { const oldHandler = plugin.register; const self = this; const newRegisterHandler = function (server: Hapi.Server, options: T) { + server.route; self._wrap(server, 'route', original => { return instrumentation._getServerRoutePatch.bind(instrumentation)( original, @@ -332,7 +333,7 @@ export class HapiInstrumentation extends InstrumentationBase { ...params: Parameters ) { if (api.trace.getSpan(api.context.active()) === undefined) { - return await method(...params); + return await method.apply(this, params); } const metadata = getExtMetadata(extPoint, pluginName); const span = instrumentation.tracer.startSpan(metadata.name, { diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/src/internal-types.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/src/internal-types.ts index 4e4b86483..8586d272d 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/src/internal-types.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-hapi/src/internal-types.ts @@ -33,7 +33,7 @@ export type HapiServerRouteInput = | PatchableServerRoute | PatchableServerRoute[]; -export type PatchableServerRoute = Hapi.ServerRoute & { +export type PatchableServerRoute = Hapi.ServerRoute & { [handlerPatched]?: boolean; options?: { handler?: Hapi.Lifecycle.Method; diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-ioredis/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-ioredis/CHANGELOG.md index f953d9bcc..e46622780 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-ioredis/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-ioredis/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## [0.35.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-ioredis-v0.34.3...instrumentation-ioredis-v0.35.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @opentelemetry/redis-common bumped from ^0.35.1 to ^0.36.0 + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.34.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-ioredis-v0.34.2...instrumentation-ioredis-v0.34.3) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-ioredis/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-ioredis/package.json index 23ef158ee..d5232bd68 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-ioredis/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-ioredis/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-ioredis", - "version": "0.34.3", + "version": "0.35.0", "description": "OpenTelemetry ioredis automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -52,25 +52,25 @@ "devDependencies": { "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/sinon": "10.0.9", - "@types/node": "18.11.7", + "@types/sinon": "10.0.16", + "@types/node": "18.16.19", "cross-env": "7.0.3", "ioredis": "5.2.2", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", - "@opentelemetry/redis-common": "^0.35.1", + "@opentelemetry/instrumentation": "^0.41.2", + "@opentelemetry/redis-common": "^0.36.0", "@opentelemetry/semantic-conventions": "^1.0.0", "@types/ioredis4": "npm:@types/ioredis@^4.28.10" }, diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/CHANGELOG.md index 8fb0cbd30..3487a3f6c 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-knex-v0.31.4...instrumentation-knex-v0.32.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.31.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-knex-v0.31.3...instrumentation-knex-v0.31.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/package.json index 8321c7a5b..687e6f4ef 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-knex", - "version": "0.31.4", + "version": "0.32.0", "description": "OpenTelemetry Knex automatic instrumentation package", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,17 +50,17 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "knex": "0.95.9", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", - "sqlite3": "5.1.5", + "rimraf": "5.0.1", + "sqlite3": "5.1.6", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-knex#readme" diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/src/instrumentation.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/src/instrumentation.ts index 91de6e767..257232f27 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/src/instrumentation.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/src/instrumentation.ts @@ -132,7 +132,7 @@ export class KnexInstrumentation extends InstrumentationBase { return function wrapped_logging_method(this: any, query: any) { const config = this.client.config; - const table = this.builder?._single?.table; + const table = utils.extractTableName(this.builder); // `method` actually refers to the knex API method - Not exactly "operation" // in the spec sense, but matches most of the time. const operation = query?.method; diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/src/utils.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/src/utils.ts index 6a54e7c87..6c7e6fbdb 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/src/utils.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/src/utils.ts @@ -80,3 +80,11 @@ export const limitLength = (str: string, maxLength: number) => { } return str; }; + +export const extractTableName = (builder: any): string => { + const table = builder?._single?.table; + if (typeof table === 'object') { + return extractTableName(table); + } + return table; +}; diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/test/index.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/test/index.test.ts index f939160b0..1f660cf27 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/test/index.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-knex/test/index.test.ts @@ -190,6 +190,247 @@ describe('Knex instrumentation', () => { } ); }); + + describe('nested queries', () => { + it('should correctly identify the table in nested queries', async () => { + const parentSpan = tracer.startSpan('parentSpan'); + await context.with( + trace.setSpan(context.active(), parentSpan), + async () => { + await client.schema.createTable('testTable1', (table: any) => { + table.string('title'); + }); + await client.insert({ title: 'test1' }).into('testTable1'); + + const builder = client('testTable1').select('*'); + const clone = builder.clone().clear('order'); + + const nestedQueryBuilder = builder.client + .queryBuilder() + .count('* AS count') + .from(clone.as('inner')) + .first(); + + const total = await nestedQueryBuilder; + assert.deepEqual(total, { count: 1 }); + + parentSpan.end(); + + const instrumentationSpans = memoryExporter.getFinishedSpans(); + assertSpans(instrumentationSpans, [ + { + statement: 'create table `testTable1` (`title` varchar(255))', + parentSpan, + }, + { + op: 'insert', + table: 'testTable1', + statement: 'insert into `testTable1` (`title`) values (?)', + parentSpan, + }, + { + op: 'first', + table: 'testTable1', + statement: + 'select count(*) as `count` from (select * from `te..', + parentSpan, + }, + null, + ]); + } + ); + }); + + it('should correctly identify the table in double nested queries', async () => { + const parentSpan = tracer.startSpan('parentSpan'); + await context.with( + trace.setSpan(context.active(), parentSpan), + async () => { + await client.schema.createTable('testTable1', (table: any) => { + table.string('title'); + }); + await client.insert({ title: 'test1' }).into('testTable1'); + + const builder = client('testTable1').select('*'); + const clone = builder.clone().clear('order'); + + const nestedQueryBuilder = builder.client + .queryBuilder() + .count('* AS count') + .from(clone.as('inner')) + .first(); + + const nestedClone = nestedQueryBuilder.clone().clear('order'); + const totalDoubleNested = await nestedQueryBuilder.client + .queryBuilder() + .count('* AS count2') + .from(nestedClone.as('inner2')) + .first(); + assert.deepEqual(totalDoubleNested, { count2: 1 }); + + parentSpan.end(); + + const instrumentationSpans = memoryExporter.getFinishedSpans(); + assertSpans(instrumentationSpans, [ + { + statement: 'create table `testTable1` (`title` varchar(255))', + parentSpan, + }, + { + op: 'insert', + table: 'testTable1', + statement: 'insert into `testTable1` (`title`) values (?)', + parentSpan, + }, + { + op: 'first', + table: 'testTable1', + statement: + 'select count(*) as `count2` from (select count(*) ..', + parentSpan, + }, + null, + ]); + } + ); + }); + + it('should correctly identify the table in join with nested table', async () => { + const parentSpan = tracer.startSpan('parentSpan'); + await context.with( + trace.setSpan(context.active(), parentSpan), + async () => { + await client.schema.createTable('testTable1', (table: any) => { + table.string('title'); + }); + await client.insert({ title: 'test1' }).into('testTable1'); + + await client.schema.createTable('testTable2', (table: any) => { + table.string('title'); + }); + await client.insert({ title: 'test2' }).into('testTable2'); + + const builder = client('testTable1').select('*'); + const clone = builder.clone().clear('order'); + + const nestedQueryBuilder = builder.client + .queryBuilder() + .count('* AS count') + .from(clone.as('inner')) + .first(); + + const totalDoubleNested = await nestedQueryBuilder.client + .queryBuilder() + .from('testTable2') + .leftJoin(nestedQueryBuilder.as('nested_query')) + .first(); + assert.deepEqual(totalDoubleNested, { title: 'test2', count: 1 }); + + parentSpan.end(); + + const instrumentationSpans = memoryExporter.getFinishedSpans(); + assertSpans(instrumentationSpans, [ + { + statement: 'create table `testTable1` (`title` varchar(255))', + parentSpan, + }, + { + op: 'insert', + table: 'testTable1', + statement: 'insert into `testTable1` (`title`) values (?)', + parentSpan, + }, + { + statement: 'create table `testTable2` (`title` varchar(255))', + parentSpan, + }, + { + op: 'insert', + table: 'testTable2', + statement: 'insert into `testTable2` (`title`) values (?)', + parentSpan, + }, + { + op: 'first', + table: 'testTable2', + statement: + 'select * from `testTable2` left join (select count..', + parentSpan, + }, + null, + ]); + } + ); + }); + + it('should correctly identify the table in join nested table with table', async () => { + const parentSpan = tracer.startSpan('parentSpan'); + await context.with( + trace.setSpan(context.active(), parentSpan), + async () => { + await client.schema.createTable('testTable1', (table: any) => { + table.string('title'); + }); + await client.insert({ title: 'test1' }).into('testTable1'); + + await client.schema.createTable('testTable2', (table: any) => { + table.string('title'); + }); + await client.insert({ title: 'test2' }).into('testTable2'); + + const builder = client('testTable1').select('*'); + const clone = builder.clone().clear('order'); + + const nestedQueryBuilder = builder.client + .queryBuilder() + .count('* AS count') + .from(clone.as('inner')) + .first(); + + const totalDoubleNested = await nestedQueryBuilder.client + .queryBuilder() + .from(nestedQueryBuilder.as('nested_query')) + .leftJoin('testTable2') + .first(); + assert.deepEqual(totalDoubleNested, { title: 'test2', count: 1 }); + + parentSpan.end(); + + const instrumentationSpans = memoryExporter.getFinishedSpans(); + assertSpans(instrumentationSpans, [ + { + statement: 'create table `testTable1` (`title` varchar(255))', + parentSpan, + }, + { + op: 'insert', + table: 'testTable1', + statement: 'insert into `testTable1` (`title`) values (?)', + parentSpan, + }, + { + statement: 'create table `testTable2` (`title` varchar(255))', + parentSpan, + }, + { + op: 'insert', + table: 'testTable2', + statement: 'insert into `testTable2` (`title`) values (?)', + parentSpan, + }, + { + op: 'first', + table: 'testTable1', + statement: + 'select * from (select count(*) as `count` from (se..', + parentSpan, + }, + null, + ]); + } + ); + }); + }); }); describe('Disabling instrumentation', () => { diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/CHANGELOG.md index 424b456f0..3633e25a6 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.35.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-koa-v0.34.6...instrumentation-koa-v0.35.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.34.6](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-koa-v0.34.5...instrumentation-koa-v0.34.6) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/examples/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/examples/package.json index 1b47f72fa..4c21e2689 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/examples/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/examples/package.json @@ -34,8 +34,8 @@ "@opentelemetry/api": "^1.0.0", "@opentelemetry/exporter-jaeger": "^1.0.0", "@opentelemetry/exporter-zipkin": "^1.0.0", - "@opentelemetry/instrumentation": "^0.40.0", - "@opentelemetry/instrumentation-http": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", + "@opentelemetry/instrumentation-http": "^0.41.2", "@opentelemetry/instrumentation-koa": "^0.31.0", "@opentelemetry/sdk-trace-node": "^1.0.0", "@opentelemetry/sdk-trace-base": "^1.0.0", diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/package.json index 9ed0a2feb..7332fa4c2 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-koa/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-koa", - "version": "0.34.6", + "version": "0.35.0", "description": "OpenTelemetry Koa automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -55,12 +55,12 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/sinon": "10.0.9", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "koa": "2.13.1", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", @@ -68,10 +68,10 @@ }, "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0", - "@types/koa": "2.13.6", - "@types/koa__router": "8.0.7" + "@types/koa": "2.13.8", + "@types/koa__router": "8.0.11" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-koa#readme" } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-memcached/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-memcached/CHANGELOG.md index f990c8f96..44aa792ba 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-memcached/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-memcached/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-memcached-v0.31.4...instrumentation-memcached-v0.32.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.31.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-memcached-v0.31.3...instrumentation-memcached-v0.31.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-memcached/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-memcached/package.json index 352a62163..2454c18ce 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-memcached/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-memcached/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-memcached", - "version": "0.31.4", + "version": "0.32.0", "description": "OpenTelemetry memcached automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,21 +49,21 @@ "devDependencies": { "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "cross-env": "7.0.3", "memcached": "2.2.2", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0", "@types/memcached": "^2.2.6" }, diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/.tav.yml b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/.tav.yml index c369d133f..86a2bf927 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/.tav.yml +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/.tav.yml @@ -1,9 +1,11 @@ mongodb: jobs: - versions: ">=3.3 <4" - commands: npm run test + commands: npm run test-v3 - versions: ">=4 <5" - commands: npm run test-new-versions + commands: npm run test-v4 + - versions: ">=5 <6" + commands: npm run test-v5 # Fix missing `contrib-test-utils` package pretest: npm run --prefix ../../../ lerna:link diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/CHANGELOG.md index 338e48979..298848c9e 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/CHANGELOG.md @@ -1,5 +1,25 @@ # Changelog +## [0.36.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-mongodb-v0.35.0...instrumentation-mongodb-v0.36.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) +* **mongodb:** support v5 ([#1451](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1451)) ([05c4e9e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/05c4e9ee3e740b3bfba609b3e8a4c02ca7119a1c)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.35.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-mongodb-v0.34.3...instrumentation-mongodb-v0.35.0) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/examples/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/examples/package.json index 850e3edd1..3b4f67004 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/examples/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/examples/package.json @@ -33,8 +33,8 @@ "@opentelemetry/api": "^1.0.0", "@opentelemetry/exporter-jaeger": "^1.0.0", "@opentelemetry/exporter-zipkin": "^1.0.0", - "@opentelemetry/instrumentation": "^0.40.0", - "@opentelemetry/instrumentation-http": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", + "@opentelemetry/instrumentation-http": "^0.41.2", "@opentelemetry/instrumentation-mongodb": "^0.32.0", "@opentelemetry/sdk-trace-node": "^1.0.0", "@opentelemetry/sdk-trace-base": "^1.0.0", diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/package.json index 11f2c32d4..241426f8f 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/package.json @@ -1,14 +1,16 @@ { "name": "@opentelemetry/instrumentation-mongodb", - "version": "0.35.0", + "version": "0.36.0", "description": "OpenTelemetry mongodb automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js-contrib", "scripts": { "docker:start": "docker run -e MONGODB_DB=opentelemetry-tests -e MONGODB_PORT=27017 -e MONGODB_HOST=127.0.0.1 -p 27017:27017 --rm mongo", - "test": "nyc ts-mocha -p tsconfig.json --require '@opentelemetry/contrib-test-utils' 'test/**/mongodb-v3.test.ts'", - "test-new-versions": "nyc ts-mocha -p tsconfig.json --require '@opentelemetry/contrib-test-utils' 'test/mongodb-v4**.test.ts'", + "test": "npm run test-v3", + "test-v3": "nyc ts-mocha -p tsconfig.json --require '@opentelemetry/contrib-test-utils' 'test/**/mongodb-v3.test.ts'", + "test-v4": "nyc ts-mocha -p tsconfig.json --require '@opentelemetry/contrib-test-utils' 'test/mongodb-v4-v5.metrics.test.ts' 'test/**/mongodb-v4.test.ts'", + "test-v5": "nyc ts-mocha -p tsconfig.json --require '@opentelemetry/contrib-test-utils' 'test/mongodb-v4-v5.metrics.test.ts' 'test/**/mongodb-v5.test.ts'", "test-all-versions": "tav", "tdd": "npm run test -- --watch-extensions ts --watch", "clean": "rimraf build/*", @@ -51,25 +53,25 @@ }, "devDependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/context-async-hooks": "^1.8.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", + "@types/bson": "4.0.5", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/mongodb": "3.6.20", + "@types/node": "18.16.19", "mocha": "7.2.0", "mongodb": "3.6.11", - "@types/mongodb": "3.6.20", - "@types/bson": "4.0.5", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { "@opentelemetry/sdk-metrics": "^1.9.1", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-mongodb#readme" diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/src/instrumentation.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/src/instrumentation.ts index f1f66f8f4..587c0fe18 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/src/instrumentation.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/src/instrumentation.ts @@ -95,25 +95,25 @@ export class MongoDBInstrumentation extends InstrumentationBase { ), new InstrumentationNodeModuleDefinition( 'mongodb', - ['4.*'], + ['4.*', '5.*'], undefined, undefined, [ new InstrumentationNodeModuleFile( 'mongodb/lib/cmap/connection.js', - ['4.*'], + ['4.*', '5.*'], v4PatchConnection, v4UnpatchConnection ), new InstrumentationNodeModuleFile( 'mongodb/lib/cmap/connect.js', - ['4.*'], + ['4.*', '5.*'], v4PatchConnect, v4UnpatchConnect ), new InstrumentationNodeModuleFile( 'mongodb/lib/sessions.js', - ['4.*'], + ['4.*', '5.*'], v4PatchSessions, v4UnpatchSessions ), diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v3.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v3.test.ts index f3368d75f..a8f044483 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v3.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v3.test.ts @@ -35,7 +35,7 @@ import * as mongodb from 'mongodb'; import { assertSpans, accessCollection, DEFAULT_MONGO_HOST } from './utils'; import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; -describe('MongoDBInstrumentation', () => { +describe('MongoDBInstrumentation-Tracing-v3', () => { function create(config: MongoDBInstrumentationConfig = {}) { instrumentation.setConfig(config); } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v4.metrics.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v4-v5.metrics.test.ts similarity index 76% rename from auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v4.metrics.test.ts rename to auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v4-v5.metrics.test.ts index b6fb8c36d..189ff458d 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v4.metrics.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v4-v5.metrics.test.ts @@ -28,8 +28,6 @@ import { ResourceMetrics, } from '@opentelemetry/sdk-metrics'; -import * as mongodb from 'mongodb'; - const otelTestingMeterProvider = new MeterProvider(); const inMemoryMetricsExporter = new InMemoryMetricExporter( AggregationTemporality.CUMULATIVE @@ -40,17 +38,13 @@ const metricReader = new PeriodicExportingMetricReader({ exportTimeoutMillis: 100, }); -otelTestingMeterProvider.addMetricReader(metricReader); - import { registerInstrumentationTesting } from '@opentelemetry/contrib-test-utils'; const instrumentation = registerInstrumentationTesting( new MongoDBInstrumentation() ); -instrumentation.setMeterProvider(otelTestingMeterProvider); - import { accessCollection, DEFAULT_MONGO_HOST } from './utils'; - +import * as mongodb from 'mongodb'; import * as assert from 'assert'; async function waitForNumberOfExports( @@ -86,9 +80,13 @@ describe('MongoDBInstrumentation-Metrics', () => { const DB_NAME = process.env.MONGODB_DB || 'opentelemetry-tests-metrics'; const COLLECTION_NAME = 'test-metrics'; const URL = `mongodb://${HOST}:${PORT}/${DB_NAME}`; - let client: mongodb.MongoClient; - let collection: mongodb.Collection; + + before(() => { + otelTestingMeterProvider.addMetricReader(metricReader); + instrumentation?.setMeterProvider(otelTestingMeterProvider); + }); + beforeEach(function mongoBeforeEach(done) { // Skipping all tests in beforeEach() is a workaround. Mocha does not work // properly when skipping tests in before() on nested describe() calls. @@ -96,6 +94,7 @@ describe('MongoDBInstrumentation-Metrics', () => { if (!shouldTest) { this.skip(); } + inMemoryMetricsExporter.reset(); done(); }); @@ -103,17 +102,17 @@ describe('MongoDBInstrumentation-Metrics', () => { it('Should add connection usage metrics', async () => { const result = await accessCollection(URL, DB_NAME, COLLECTION_NAME); client = result.client; - collection = result.collection; + const collection = result.collection; const insertData = [{ a: 1 }, { a: 2 }, { a: 3 }]; await collection.insertMany(insertData); await collection.deleteMany({}); - let exportedMetrics = await waitForNumberOfExports( + const exportedMetrics = await waitForNumberOfExports( inMemoryMetricsExporter, 1 ); assert.strictEqual(exportedMetrics.length, 1); - let metrics = exportedMetrics[0].scopeMetrics[0].metrics; + const metrics = exportedMetrics[0].scopeMetrics[0].metrics; assert.strictEqual(metrics.length, 1); assert.strictEqual(metrics[0].dataPointType, DataPointType.SUM); @@ -126,25 +125,34 @@ describe('MongoDBInstrumentation-Metrics', () => { metrics[0].descriptor.name, 'db.client.connections.usage' ); - assert.strictEqual(metrics[0].dataPoints.length, 2); - assert.strictEqual(metrics[0].dataPoints[0].value, 0); - assert.strictEqual(metrics[0].dataPoints[0].attributes['state'], 'used'); + + // Checking dataPoints + const dataPoints = metrics[0].dataPoints; + assert.strictEqual(dataPoints.length, 2); + assert.strictEqual(dataPoints[0].value, 0); + assert.strictEqual(dataPoints[0].attributes['state'], 'used'); assert.strictEqual( - metrics[0].dataPoints[0].attributes['pool.name'], + dataPoints[0].attributes['pool.name'], `mongodb://${HOST}:${PORT}/${DB_NAME}` ); - assert.strictEqual(metrics[0].dataPoints[1].value, 1); - assert.strictEqual(metrics[0].dataPoints[1].attributes['state'], 'idle'); + assert.strictEqual(dataPoints[1].value, 1); + assert.strictEqual(dataPoints[1].attributes['state'], 'idle'); assert.strictEqual( - metrics[0].dataPoints[1].attributes['pool.name'], + dataPoints[1].attributes['pool.name'], `mongodb://${HOST}:${PORT}/${DB_NAME}` ); + }); + + it('Should add disconnection usage metrics', async () => { await client.close(); - exportedMetrics = await waitForNumberOfExports(inMemoryMetricsExporter, 2); + const exportedMetrics = await waitForNumberOfExports( + inMemoryMetricsExporter, + 2 + ); assert.strictEqual(exportedMetrics.length, 2); - metrics = exportedMetrics[1].scopeMetrics[0].metrics; + const metrics = exportedMetrics[1].scopeMetrics[0].metrics; assert.strictEqual(metrics.length, 1); assert.strictEqual(metrics[0].dataPointType, DataPointType.SUM); @@ -152,17 +160,20 @@ describe('MongoDBInstrumentation-Metrics', () => { metrics[0].descriptor.description, 'The number of connections that are currently in state described by the state attribute.' ); - assert.strictEqual(metrics[0].dataPoints.length, 2); - assert.strictEqual(metrics[0].dataPoints[0].value, 0); - assert.strictEqual(metrics[0].dataPoints[0].attributes['state'], 'used'); + + // Checking dataPoints + const dataPoints = metrics[0].dataPoints; + assert.strictEqual(dataPoints.length, 2); + assert.strictEqual(dataPoints[0].value, 0); + assert.strictEqual(dataPoints[0].attributes['state'], 'used'); assert.strictEqual( - metrics[0].dataPoints[0].attributes['pool.name'], + dataPoints[0].attributes['pool.name'], `mongodb://${HOST}:${PORT}/${DB_NAME}` ); - assert.strictEqual(metrics[0].dataPoints[1].value, 0); - assert.strictEqual(metrics[0].dataPoints[1].attributes['state'], 'idle'); + assert.strictEqual(dataPoints[1].value, 0); + assert.strictEqual(dataPoints[1].attributes['state'], 'idle'); assert.strictEqual( - metrics[0].dataPoints[1].attributes['pool.name'], + dataPoints[1].attributes['pool.name'], `mongodb://${HOST}:${PORT}/${DB_NAME}` ); }); diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v4.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v4.test.ts index 10025b8a7..18ba6bc9e 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v4.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v4.test.ts @@ -18,8 +18,11 @@ import { context, trace, SpanKind, Span } from '@opentelemetry/api'; import * as assert from 'assert'; -import { MongoDBInstrumentation, MongoDBInstrumentationConfig } from '../src'; -import { MongoResponseHookInformation } from '../src'; +import { + MongoDBInstrumentation, + MongoDBInstrumentationConfig, + MongoResponseHookInformation, +} from '../src'; import { registerInstrumentationTesting, getTestSpans, @@ -34,7 +37,7 @@ import * as mongodb from 'mongodb'; import { assertSpans, accessCollection, DEFAULT_MONGO_HOST } from './utils'; import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; -describe('MongoDBInstrumentation-Tracing', () => { +describe('MongoDBInstrumentation-Tracing-v4', () => { function create(config: MongoDBInstrumentationConfig = {}) { instrumentation.setConfig(config); } @@ -47,12 +50,11 @@ describe('MongoDBInstrumentation-Tracing', () => { shouldTest = false; } - const URL = `mongodb://${process.env.MONGODB_HOST || DEFAULT_MONGO_HOST}:${ - process.env.MONGODB_PORT || '27017' - }`; + const HOST = process.env.MONGODB_HOST || DEFAULT_MONGO_HOST; + const PORT = process.env.MONGODB_PORT || '27017'; const DB_NAME = process.env.MONGODB_DB || 'opentelemetry-tests-traces'; const COLLECTION_NAME = 'test-traces'; - const conn_string = `${URL}/${DB_NAME}`; + const URL = `mongodb://${HOST}:${PORT}/${DB_NAME}`; let client: mongodb.MongoClient; let collection: mongodb.Collection; @@ -95,9 +97,9 @@ describe('MongoDBInstrumentation-Tracing', () => { done(); }); - after(() => { + after(async () => { if (client) { - client.close(); + await client.close(); } }); @@ -116,7 +118,7 @@ describe('MongoDBInstrumentation-Tracing', () => { 'mongodb.insert', SpanKind.CLIENT, 'insert', - conn_string + URL ); done(); }) @@ -138,7 +140,7 @@ describe('MongoDBInstrumentation-Tracing', () => { 'mongodb.update', SpanKind.CLIENT, 'update', - conn_string + URL ); done(); }) @@ -160,7 +162,7 @@ describe('MongoDBInstrumentation-Tracing', () => { 'mongodb.delete', SpanKind.CLIENT, 'delete', - conn_string + URL ); done(); }) @@ -186,7 +188,7 @@ describe('MongoDBInstrumentation-Tracing', () => { 'mongodb.find', SpanKind.CLIENT, 'find', - conn_string + URL ); done(); }) @@ -215,7 +217,7 @@ describe('MongoDBInstrumentation-Tracing', () => { 'mongodb.find', SpanKind.CLIENT, 'find', - conn_string + URL ); // assert that we correctly got the first as a find assertSpans( @@ -225,7 +227,7 @@ describe('MongoDBInstrumentation-Tracing', () => { 'mongodb.getMore', SpanKind.CLIENT, 'getMore', - conn_string + URL ); done(); }) @@ -251,7 +253,7 @@ describe('MongoDBInstrumentation-Tracing', () => { 'mongodb.createIndexes', SpanKind.CLIENT, 'createIndexes', - conn_string + URL ); done(); }) @@ -287,7 +289,7 @@ describe('MongoDBInstrumentation-Tracing', () => { operationName, SpanKind.CLIENT, 'insert', - conn_string, + URL, false, false ); @@ -333,7 +335,7 @@ describe('MongoDBInstrumentation-Tracing', () => { operationName, SpanKind.CLIENT, 'insert', - conn_string, + URL, false, true ); @@ -374,7 +376,7 @@ describe('MongoDBInstrumentation-Tracing', () => { 'mongodb.insert', SpanKind.CLIENT, 'insert', - conn_string + URL ); done(); }) @@ -469,13 +471,7 @@ describe('MongoDBInstrumentation-Tracing', () => { .then(() => { span.end(); const spans = getTestSpans(); - assertSpans( - spans, - 'mongodb.find', - SpanKind.CLIENT, - 'find', - conn_string - ); + assertSpans(spans, 'mongodb.find', SpanKind.CLIENT, 'find', URL); done(); }) .catch(err => { @@ -502,7 +498,7 @@ describe('MongoDBInstrumentation-Tracing', () => { 'mongodb.insert', SpanKind.CLIENT, 'insert', - conn_string + URL ); resetMemoryExporter(); @@ -517,7 +513,7 @@ describe('MongoDBInstrumentation-Tracing', () => { 'mongodb.find', SpanKind.CLIENT, 'find', - conn_string + URL ); assert.strictEqual( mainSpan.spanContext().spanId, diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v5.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v5.test.ts new file mode 100644 index 000000000..bd8271cb8 --- /dev/null +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mongodb/test/mongodb-v5.test.ts @@ -0,0 +1,594 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// for testing locally "npm run docker:start" + +import { context, trace, SpanKind, Span } from '@opentelemetry/api'; +import * as assert from 'assert'; +import { + MongoDBInstrumentation, + MongoDBInstrumentationConfig, + MongoResponseHookInformation, +} from '../src'; +import { + getInstrumentation, + registerInstrumentationTesting, + getTestSpans, + resetMemoryExporter, +} from '@opentelemetry/contrib-test-utils'; + +// Get instrumentation (singleton) +let instrumentation: MongoDBInstrumentation; +{ + const instance: MongoDBInstrumentation | undefined = getInstrumentation(); + if (!instance) { + instrumentation = new MongoDBInstrumentation(); + registerInstrumentationTesting(instrumentation); + } else { + instrumentation = instance; + } +} + +import * as mongodb from 'mongodb'; +import { assertSpans, accessCollection, DEFAULT_MONGO_HOST } from './utils'; +import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; + +describe('MongoDBInstrumentation-Tracing-v5', () => { + function create(config: MongoDBInstrumentationConfig = {}) { + instrumentation.setConfig(config); + } + // For these tests, mongo must be running. Add RUN_MONGODB_TESTS to run + // these tests. + const RUN_MONGODB_TESTS = process.env.RUN_MONGODB_TESTS as string; + let shouldTest = true; + if (!RUN_MONGODB_TESTS) { + console.log('Skipping test-mongodb. Run MongoDB to test'); + shouldTest = false; + } + + const HOST = process.env.MONGODB_HOST || DEFAULT_MONGO_HOST; + const PORT = process.env.MONGODB_PORT || '27017'; + const DB_NAME = process.env.MONGODB_DB || 'opentelemetry-tests-traces'; + const COLLECTION_NAME = 'test-traces'; + const URL = `mongodb://${HOST}:${PORT}/${DB_NAME}`; + + let client: mongodb.MongoClient; + let collection: mongodb.Collection; + + before(done => { + accessCollection(URL, DB_NAME, COLLECTION_NAME) + .then(result => { + client = result.client; + collection = result.collection; + done(); + }) + .catch((err: Error) => { + console.log( + 'Skipping test-mongodb. Could not connect. Run MongoDB to test' + ); + shouldTest = false; + done(); + }); + }); + + beforeEach(async function mongoBeforeEach() { + // Skipping all tests in beforeEach() is a workaround. Mocha does not work + // properly when skipping tests in before() on nested describe() calls. + // https://github.com/mochajs/mocha/issues/2819 + if (!shouldTest) { + this.skip(); + } + // Non traced insertion of basic data to perform tests + const insertData = [{ a: 1 }, { a: 2 }, { a: 3 }]; + await collection.insertMany(insertData); + resetMemoryExporter(); + }); + + afterEach(async () => { + if (shouldTest) { + await collection.deleteMany({}); + } + }); + + after(async () => { + if (client) { + await client.close(); + } + }); + + /** Should intercept query */ + describe('Instrumenting query operations', () => { + it('should create a child span for insert', done => { + const insertData = [{ a: 1 }, { a: 2 }, { a: 3 }]; + const span = trace.getTracer('default').startSpan('insertRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .insertMany(insertData) + .then(() => { + span.end(); + assertSpans( + getTestSpans(), + 'mongodb.insert', + SpanKind.CLIENT, + 'insert', + URL + ); + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + + it('should create a child span for update', done => { + const span = trace.getTracer('default').startSpan('updateRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .updateOne({ a: 2 }, { $set: { b: 1 } }) + .then(() => { + span.end(); + assertSpans( + getTestSpans(), + 'mongodb.update', + SpanKind.CLIENT, + 'update', + URL + ); + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + + it('should create a child span for remove', done => { + const span = trace.getTracer('default').startSpan('removeRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .deleteOne({ a: 3 }) + .then(() => { + span.end(); + assertSpans( + getTestSpans(), + 'mongodb.delete', + SpanKind.CLIENT, + 'delete', + URL + ); + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + }); + + /** Should intercept cursor */ + describe('Instrumenting cursor operations', () => { + it('should create a child span for find', done => { + const span = trace.getTracer('default').startSpan('findRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .find({ a: 1 }) + .toArray() + .then(() => { + span.end(); + assertSpans( + getTestSpans(), + 'mongodb.find', + SpanKind.CLIENT, + 'find', + URL + ); + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + + it('should create a child span for cursor operations', done => { + const span = trace.getTracer('default').startSpan('findRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + const cursor = collection.find().batchSize(1); + cursor.next().then(firstElement => { + assert(firstElement !== null); + cursor + .next() + .then(secondElement => { + span.end(); + assert(secondElement !== null); + // assert that we correctly got the first as a find + assertSpans( + getTestSpans().filter( + span => !span.name.includes('mongodb.getMore') + ), + 'mongodb.find', + SpanKind.CLIENT, + 'find', + URL + ); + // assert that we correctly got the first as a find + assertSpans( + getTestSpans().filter( + span => !span.name.includes('mongodb.find') + ), + 'mongodb.getMore', + SpanKind.CLIENT, + 'getMore', + URL + ); + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + }); + }); + + /** Should intercept command */ + describe('Instrumenting command operations', () => { + it('should create a child span for create index', done => { + const span = trace.getTracer('default').startSpan('indexRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .createIndex({ a: 1 }) + .then(() => { + span.end(); + assertSpans( + getTestSpans(), + 'mongodb.createIndexes', + SpanKind.CLIENT, + 'createIndexes', + URL + ); + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + }); + + describe('when using enhanced database reporting without db statementSerializer', () => { + const key = 'key'; + const value = 'value'; + const object = { [key]: value }; + + beforeEach(() => { + create({ + enhancedDatabaseReporting: false, + }); + }); + + it('should properly collect db statement (hide attribute values)', done => { + const span = trace.getTracer('default').startSpan('insertRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .insertOne(object) + .then(() => { + span.end(); + const spans = getTestSpans(); + const operationName = 'mongodb.insert'; + assertSpans( + spans, + operationName, + SpanKind.CLIENT, + 'insert', + URL, + false, + false + ); + const mongoSpan = spans.find(s => s.name === operationName); + const dbStatement = JSON.parse( + mongoSpan!.attributes[SemanticAttributes.DB_STATEMENT] as string + ); + assert.strictEqual(dbStatement[key], '?'); + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + }); + + describe('when specifying a dbStatementSerializer configuration', () => { + const key = 'key'; + const value = 'value'; + const object = { [key]: value }; + + describe('with a valid function', () => { + beforeEach(() => { + create({ + dbStatementSerializer: (commandObj: Record) => { + return JSON.stringify(commandObj); + }, + }); + }); + + it('should properly collect db statement', done => { + const span = trace.getTracer('default').startSpan('insertRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .insertOne(object) + .then(() => { + span.end(); + const spans = getTestSpans(); + const operationName = 'mongodb.insert'; + assertSpans( + spans, + operationName, + SpanKind.CLIENT, + 'insert', + URL, + false, + true + ); + const mongoSpan = spans.find(s => s.name === operationName); + const dbStatement = JSON.parse( + mongoSpan!.attributes[SemanticAttributes.DB_STATEMENT] as string + ); + assert.strictEqual(dbStatement[key], value); + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + }); + + describe('with an invalid function', () => { + beforeEach(() => { + create({ + enhancedDatabaseReporting: true, + dbStatementSerializer: (_commandObj: Record) => { + throw new Error('something went wrong!'); + }, + }); + }); + + it('should not do any harm when throwing an exception', done => { + const span = trace.getTracer('default').startSpan('insertRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .insertOne(object) + .then(() => { + span.end(); + const spans = getTestSpans(); + assertSpans( + spans, + 'mongodb.insert', + SpanKind.CLIENT, + 'insert', + URL + ); + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + }); + }); + + describe('when specifying a responseHook configuration', () => { + const dataAttributeName = 'mongodb_data'; + describe('with a valid function', () => { + beforeEach(() => { + create({ + responseHook: (span: Span, result: MongoResponseHookInformation) => { + span.setAttribute(dataAttributeName, JSON.stringify(result.data)); + }, + }); + }); + + it('should attach response hook data to the resulting span for insert function', done => { + const insertData = [{ a: 1 }, { a: 2 }, { a: 3 }]; + const span = trace.getTracer('default').startSpan('insertRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .insertMany(insertData) + .then(results => { + span.end(); + const spans = getTestSpans(); + const insertSpan = spans[0]; + assert.deepStrictEqual( + JSON.parse(insertSpan.attributes[dataAttributeName] as string) + .n, + results?.insertedCount + ); + + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + + it('should attach response hook data to the resulting span for find function', done => { + const span = trace.getTracer('default').startSpan('findRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .find({ a: 1 }) + .toArray() + .then(results => { + span.end(); + const spans = getTestSpans(); + const findSpan = spans[0]; + const hookAttributeValue = JSON.parse( + findSpan.attributes[dataAttributeName] as string + ); + + if (results) { + assert.strictEqual( + hookAttributeValue?.cursor?.firstBatch[0]._id, + results[0]._id.toString() + ); + } else { + throw new Error('Got an unexpected Results: ' + results); + } + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + }); + + describe('with an invalid function', () => { + beforeEach(() => { + create({ + responseHook: (span: Span, result: MongoResponseHookInformation) => { + throw 'some error'; + }, + }); + }); + it('should not do any harm when throwing an exception', done => { + const span = trace.getTracer('default').startSpan('findRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .find({ a: 1 }) + .toArray() + .then(() => { + span.end(); + const spans = getTestSpans(); + assertSpans(spans, 'mongodb.find', SpanKind.CLIENT, 'find', URL); + done(); + }) + .catch(err => { + done(err); + }); + }); + }); + }); + }); + + describe('Mixed operations with callback', () => { + it('should create a span for find after callback insert', done => { + const insertData = [{ a: 1 }, { a: 2 }, { a: 3 }]; + const span = trace.getTracer('default').startSpan('insertRootSpan'); + context.with(trace.setSpan(context.active(), span), () => { + collection + .insertMany(insertData) + .then(() => { + span.end(); + const spans = getTestSpans(); + const mainSpan = spans[spans.length - 1]; + assertSpans( + spans, + 'mongodb.insert', + SpanKind.CLIENT, + 'insert', + URL + ); + resetMemoryExporter(); + + collection + .find({ a: 1 }) + .toArray() + .then(() => { + const spans2 = getTestSpans(); + spans2.push(mainSpan); + assertSpans( + spans2, + 'mongodb.find', + SpanKind.CLIENT, + 'find', + URL + ); + assert.strictEqual( + mainSpan.spanContext().spanId, + spans2[0].parentSpanId + ); + done(); + }) + .catch(err => { + done(err); + }); + }) + .catch(err => { + done(err); + }); + }); + }); + }); + + /** Should intercept command */ + describe('Removing Instrumentation', () => { + it('should unpatch plugin', () => { + assert.doesNotThrow(() => { + instrumentation.disable(); + }); + }); + + it('should not create a child span for query', done => { + const insertData = [{ a: 1 }, { a: 2 }, { a: 3 }]; + const span = trace.getTracer('default').startSpan('insertRootSpan'); + collection + .insertMany(insertData) + .then(() => { + span.end(); + assert.strictEqual(getTestSpans().length, 1); + done(); + }) + .catch(err => { + done(err); + }); + }); + + it('should not create a child span for cursor', done => { + const span = trace.getTracer('default').startSpan('findRootSpan'); + collection + .find({}) + .toArray() + .then(() => { + span.end(); + assert.strictEqual(getTestSpans().length, 1); + done(); + }) + .catch(err => { + assert.ifError(err); + done(err); + }); + }); + + it('should not create a child span for command', done => { + const span = trace.getTracer('default').startSpan('indexRootSpan'); + collection + .createIndex({ a: 1 }) + .then(() => { + span.end(); + assert.strictEqual(getTestSpans().length, 1); + done(); + }) + .catch(err => { + done(err); + }); + }); + }); +}); diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/CHANGELOG.md index bb177e54e..fad5b536e 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [0.34.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-mysql-v0.33.3...instrumentation-mysql-v0.34.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.33.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-mysql-v0.33.2...instrumentation-mysql-v0.33.3) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/examples/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/examples/package.json index 14a68faa8..698bd86aa 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/examples/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/examples/package.json @@ -34,12 +34,12 @@ "@opentelemetry/api": "^1.0.0", "@opentelemetry/exporter-jaeger": "^1.0.0", "@opentelemetry/exporter-zipkin": "^1.0.0", - "@opentelemetry/instrumentation": "^0.40.0", - "@opentelemetry/instrumentation-http": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", + "@opentelemetry/instrumentation-http": "^0.41.2", "@opentelemetry/instrumentation-mysql": "^0.31.0", "@opentelemetry/sdk-trace-base": "^1.0.0", "@opentelemetry/sdk-trace-node": "^1.0.0", - "@opentelemetry/exporter-metrics-otlp-grpc": "0.33.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.41.2", "mysql": "^2.18.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js#readme", diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/package.json index 3c4e0b192..d9a09e3f2 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-mysql", - "version": "0.33.3", + "version": "0.34.0", "description": "OpenTelemetry mysql automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,23 +49,23 @@ "@opentelemetry/api": "^1.3.0", "@opentelemetry/sdk-metrics": "^1.8.0", "@opentelemetry/context-async-hooks": "^1.8.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/sinon": "10.0.13", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "mocha": "7.2.0", "mysql": "2.18.1", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0", - "@types/mysql": "2.15.19" + "@types/mysql": "2.15.21" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-mysql#readme" } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/CHANGELOG.md index 267e7e012..25b5b5f5b 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## [0.34.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-mysql2-v0.33.4...instrumentation-mysql2-v0.34.0) (2023-07-12) + + +### Features + +* add sqlcommenter comment to mysql2 queries ([#1523](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1523)) ([856c252](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/856c25211567104ced8b2a2b56d0818a3c48e671)) +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + * @opentelemetry/sql-common bumped from ^0.39.0 to ^0.40.0 + ## [0.33.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-mysql2-v0.33.3...instrumentation-mysql2-v0.33.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/README.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/README.md index d0940894b..04f15355e 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/README.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/README.md @@ -47,6 +47,7 @@ You can set the following instrumentation options: | Options | Type | Description | | ------- | ---- | ----------- | | `responseHook` | `MySQL2InstrumentationExecutionResponseHook` (function) | Function for adding custom attributes from db response | +| `addSqlCommenterCommentToQueries` | `boolean` | If true, adds [sqlcommenter](https://github.com/open-telemetry/opentelemetry-sqlcommenter) specification compliant comment to queries with tracing context (default false). _NOTE: A comment will not be added to queries that already contain `--` or `/* ... */` in them, even if these are not actually part of comments_ | ## Useful links diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/package.json index 21014d84f..423274ead 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-mysql2", - "version": "0.33.4", + "version": "0.34.0", "description": "OpenTelemetry mysql2 automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -49,24 +49,25 @@ "devDependencies": { "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@types/mocha": "7.0.2", "@types/mysql2": "github:types/mysql2", - "@types/node": "18.11.7", - "@types/semver": "7.3.8", + "@types/node": "18.16.19", + "@types/semver": "7.5.0", "mocha": "7.2.0", - "mysql2": "2.3.0", + "mysql2": "2.3.3", "nyc": "15.1.0", - "rimraf": "5.0.0", - "semver": "7.3.5", + "rimraf": "5.0.1", + "semver": "7.5.4", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", - "@opentelemetry/semantic-conventions": "^1.0.0" + "@opentelemetry/instrumentation": "^0.41.2", + "@opentelemetry/semantic-conventions": "^1.0.0", + "@opentelemetry/sql-common": "^0.40.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-mysql2#readme" } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/src/instrumentation.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/src/instrumentation.ts index 682ebe0b0..ea792f802 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/src/instrumentation.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/src/instrumentation.ts @@ -25,6 +25,7 @@ import { DbSystemValues, SemanticAttributes, } from '@opentelemetry/semantic-conventions'; +import { addSqlCommenterComment } from '@opentelemetry/sql-common'; import type * as mysqlTypes from 'mysql2'; import { MySQL2InstrumentationConfig } from './types'; import { @@ -52,7 +53,7 @@ export class MySQL2Instrumentation extends InstrumentationBase { 'mysql2', ['>= 1.4.2 < 4.0'], (moduleExports: any, moduleVersion) => { - api.diag.debug(`Patching mysql@${moduleVersion}`); + api.diag.debug(`Patching mysql2@${moduleVersion}`); const ConnectionPrototype: mysqlTypes.Connection = moduleExports.Connection.prototype; @@ -63,7 +64,7 @@ export class MySQL2Instrumentation extends InstrumentationBase { this._wrap( ConnectionPrototype, 'query', - this._patchQuery(moduleExports.format) as any + this._patchQuery(moduleExports.format, false) as any ); if (isWrapped(ConnectionPrototype.execute)) { @@ -72,7 +73,7 @@ export class MySQL2Instrumentation extends InstrumentationBase { this._wrap( ConnectionPrototype, 'execute', - this._patchQuery(moduleExports.format) as any + this._patchQuery(moduleExports.format, true) as any ); return moduleExports; @@ -88,7 +89,7 @@ export class MySQL2Instrumentation extends InstrumentationBase { ]; } - private _patchQuery(format: formatType) { + private _patchQuery(format: formatType, isPrepared: boolean) { return (originalQuery: Function): Function => { const thisPlugin = this; api.diag.debug('MySQL2Instrumentation: patched mysql query/execute'); @@ -99,6 +100,9 @@ export class MySQL2Instrumentation extends InstrumentationBase { _valuesOrCallback?: unknown[] | Function, _callback?: Function ) { + const thisPluginConfig: MySQL2InstrumentationConfig = + thisPlugin._config; + let values; if (Array.isArray(_valuesOrCallback)) { values = _valuesOrCallback; @@ -118,6 +122,16 @@ export class MySQL2Instrumentation extends InstrumentationBase { ), }, }); + + if (!isPrepared && thisPluginConfig.addSqlCommenterCommentToQueries) { + arguments[0] = query = + typeof query === 'string' + ? addSqlCommenterComment(span, query) + : Object.assign(query, { + sql: addSqlCommenterComment(span, query.sql), + }); + } + const endSpan = once((err?: any, results?: any) => { if (err) { span.setStatus({ @@ -125,11 +139,12 @@ export class MySQL2Instrumentation extends InstrumentationBase { message: err.message, }); } else { - const config: MySQL2InstrumentationConfig = thisPlugin._config; - if (typeof config.responseHook === 'function') { + if (typeof thisPluginConfig.responseHook === 'function') { safeExecuteInTheMiddle( () => { - config.responseHook!(span, { queryResults: results }); + thisPluginConfig.responseHook!(span, { + queryResults: results, + }); }, err => { if (err) { diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/src/types.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/src/types.ts index c14743495..01e9f8a43 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/src/types.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/src/types.ts @@ -33,4 +33,10 @@ export interface MySQL2InstrumentationConfig extends InstrumentationConfig { * @default undefined */ responseHook?: MySQL2InstrumentationExecutionResponseHook; + + /** + * If true, queries are modified to also include a comment with + * the tracing context, following the {@link https://github.com/open-telemetry/opentelemetry-sqlcommenter sqlcommenter} format + */ + addSqlCommenterCommentToQueries?: boolean; } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/test/mysql.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/test/mysql.test.ts index 3874ccf17..0e81e55a6 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/test/mysql.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-mysql2/test/mysql.test.ts @@ -37,6 +37,7 @@ const database = process.env.MYSQL_DATABASE || 'test_db'; const host = process.env.MYSQL_HOST || '127.0.0.1'; const user = process.env.MYSQL_USER || 'otel'; const password = process.env.MYSQL_PASSWORD || 'secret'; +const rootPassword = process.env.MYSQL_ROOT_PASSWORD || 'rootpw'; const instrumentation = new MySQL2Instrumentation(); instrumentation.enable(); @@ -48,9 +49,10 @@ interface Result extends mysqlTypes.RowDataPacket { solution: number; } -describe('mysql@2.x', () => { +describe('mysql2@2.x', () => { let contextManager: AsyncHooksContextManager; let connection: mysqlTypes.Connection; + let rootConnection: mysqlTypes.Connection; let pool: mysqlTypes.Pool; let poolCluster: mysqlTypes.PoolCluster; const provider = new BasicTracerProvider(); @@ -59,6 +61,24 @@ describe('mysql@2.x', () => { const shouldTest = testMysql || testMysqlLocally; // Skips these tests if false (default) const memoryExporter = new InMemorySpanExporter(); + const getLastQueries = (count: number) => + new Promise(res => { + const queries: string[] = []; + const query = rootConnection.query({ + sql: "SELECT * FROM mysql.general_log WHERE command_type = 'Query' ORDER BY event_time DESC LIMIT ? OFFSET 1", + values: [count], + }); + + query.on('result', (row: { argument: string | Buffer }) => { + if (typeof row.argument === 'string') { + queries.push(row.argument); + } else { + queries.push(row.argument.toString('utf-8')); + } + }); + query.on('end', () => res(queries)); + }); + before(function (done) { if (!shouldTest) { // this.skip() workaround @@ -67,6 +87,13 @@ describe('mysql@2.x', () => { this.skip(); } provider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); + rootConnection = mysqlTypes.createConnection({ + port, + user: 'root', + host, + password: rootPassword, + database, + }); if (testMysqlLocally) { testUtils.startDocker('mysql'); // wait 15 seconds for docker container to start @@ -77,11 +104,14 @@ describe('mysql@2.x', () => { } }); - after(function () { - if (testMysqlLocally) { - this.timeout(5000); - testUtils.cleanUpDocker('mysql'); - } + after(function (done) { + rootConnection.end(() => { + if (testMysqlLocally) { + this.timeout(5000); + testUtils.cleanUpDocker('mysql'); + } + done(); + }); }); beforeEach(() => { @@ -119,6 +149,7 @@ describe('mysql@2.x', () => { afterEach(done => { context.disable(); memoryExporter.reset(); + instrumentation.setConfig(); instrumentation.disable(); connection.end(() => { pool.end(() => { @@ -299,6 +330,71 @@ describe('mysql@2.x', () => { }); }); }); + + it('should not add comment by default', done => { + const span = provider.getTracer('default').startSpan('test span'); + context.with(trace.setSpan(context.active(), span), () => { + connection.query('SELECT 1+1 as solution', () => { + const spans = memoryExporter.getFinishedSpans(); + assert.strictEqual(spans.length, 1); + getLastQueries(1).then(([query]) => { + assert.doesNotMatch(query, /.*traceparent.*/); + done(); + }); + }); + }); + }); + + it('should not add comment when specified if existing block comment', done => { + instrumentation.setConfig({ + addSqlCommenterCommentToQueries: true, + } as any); + const span = provider.getTracer('default').startSpan('test span'); + context.with(trace.setSpan(context.active(), span), () => { + connection.query('SELECT 1+1 as solution /*block comment*/', () => { + const spans = memoryExporter.getFinishedSpans(); + assert.strictEqual(spans.length, 1); + getLastQueries(1).then(([query]) => { + assert.doesNotMatch(query, /.*traceparent.*/); + done(); + }); + }); + }); + }); + + it('should not add comment when specified if existing line comment', done => { + instrumentation.setConfig({ + addSqlCommenterCommentToQueries: true, + } as any); + const span = provider.getTracer('default').startSpan('test span'); + context.with(trace.setSpan(context.active(), span), () => { + connection.query('SELECT 1+1 as solution -- line comment', () => { + const spans = memoryExporter.getFinishedSpans(); + assert.strictEqual(spans.length, 1); + getLastQueries(1).then(([query]) => { + assert.doesNotMatch(query, /.*traceparent.*/); + done(); + }); + }); + }); + }); + + it('should add comment when specified if no existing comment', done => { + instrumentation.setConfig({ + addSqlCommenterCommentToQueries: true, + } as any); + const span = provider.getTracer('default').startSpan('test span'); + context.with(trace.setSpan(context.active(), span), () => { + connection.query('SELECT 1+1 as solution', () => { + const spans = memoryExporter.getFinishedSpans(); + assert.strictEqual(spans.length, 1); + getLastQueries(1).then(([query]) => { + assert.match(query, /.*traceparent.*/); + done(); + }); + }); + }); + }); }); describe('#Connection.execute', () => { @@ -587,6 +683,71 @@ describe('mysql@2.x', () => { }); }); }); + + it('should not add comment by default', done => { + const span = provider.getTracer('default').startSpan('test span'); + context.with(trace.setSpan(context.active(), span), () => { + pool.query('SELECT 1+1 as solution', () => { + const spans = memoryExporter.getFinishedSpans(); + assert.strictEqual(spans.length, 1); + getLastQueries(1).then(([query]) => { + assert.doesNotMatch(query, /.*traceparent.*/); + done(); + }); + }); + }); + }); + + it('should not add comment when specified if existing block comment', done => { + instrumentation.setConfig({ + addSqlCommenterCommentToQueries: true, + } as any); + const span = provider.getTracer('default').startSpan('test span'); + context.with(trace.setSpan(context.active(), span), () => { + pool.query('SELECT 1+1 as solution /*block comment*/', () => { + const spans = memoryExporter.getFinishedSpans(); + assert.strictEqual(spans.length, 1); + getLastQueries(1).then(([query]) => { + assert.doesNotMatch(query, /.*traceparent.*/); + done(); + }); + }); + }); + }); + + it('should not add comment when specified if existing line comment', done => { + instrumentation.setConfig({ + addSqlCommenterCommentToQueries: true, + } as any); + const span = provider.getTracer('default').startSpan('test span'); + context.with(trace.setSpan(context.active(), span), () => { + pool.query('SELECT 1+1 as solution -- line comment', () => { + const spans = memoryExporter.getFinishedSpans(); + assert.strictEqual(spans.length, 1); + getLastQueries(1).then(([query]) => { + assert.doesNotMatch(query, /.*traceparent.*/); + done(); + }); + }); + }); + }); + + it('should add comment when specified if no existing comment', done => { + instrumentation.setConfig({ + addSqlCommenterCommentToQueries: true, + } as any); + const span = provider.getTracer('default').startSpan('test span'); + context.with(trace.setSpan(context.active(), span), () => { + pool.query('SELECT 1+1 as solution', () => { + const spans = memoryExporter.getFinishedSpans(); + assert.strictEqual(spans.length, 1); + getLastQueries(1).then(([query]) => { + assert.match(query, /.*traceparent.*/); + done(); + }); + }); + }); + }); }); describe('#Pool.execute', () => { @@ -940,21 +1101,14 @@ describe('mysql@2.x', () => { describe('#responseHook', () => { const queryResultAttribute = 'query_result'; - after(() => { - instrumentation.setConfig({}); - }); - describe('invalid repsonse hook', () => { - before(() => { - instrumentation.disable(); - instrumentation.setTracerProvider(provider); + beforeEach(() => { const config: MySQL2InstrumentationConfig = { responseHook: (span, responseHookInfo) => { throw new Error('random failure!'); }, }; instrumentation.setConfig(config); - instrumentation.enable(); }); it('should not affect the behavior of the query', done => { @@ -972,9 +1126,7 @@ describe('mysql@2.x', () => { }); describe('valid response hook', () => { - before(() => { - instrumentation.disable(); - instrumentation.setTracerProvider(provider); + beforeEach(() => { const config: MySQL2InstrumentationConfig = { responseHook: (span, responseHookInfo) => { span.setAttribute( @@ -984,7 +1136,6 @@ describe('mysql@2.x', () => { }, }; instrumentation.setConfig(config); - instrumentation.enable(); }); it('should extract data from responseHook - connection', done => { diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-nestjs-core/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-nestjs-core/CHANGELOG.md index 615a7d5b1..f465577aa 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-nestjs-core/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-nestjs-core/CHANGELOG.md @@ -1,5 +1,18 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-nestjs-core-v0.32.5...instrumentation-nestjs-core-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) +* **nestjs:** update dependency @nestjs/x to v9 ([#1538](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1538)) ([fec1799](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/fec17997d64349f00c1141ada9ae4bcbde3e5e89)) + ## [0.32.5](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-nestjs-core-v0.32.4...instrumentation-nestjs-core-v0.32.5) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-nestjs-core/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-nestjs-core/package.json index 13975b06d..7777b1b29 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-nestjs-core/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-nestjs-core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-nestjs-core", - "version": "0.32.5", + "version": "0.33.0", "description": "OpenTelemetry NestJS automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -58,22 +58,22 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/semver": "7.3.8", + "@types/node": "18.16.19", + "@types/semver": "7.5.0", "cross-env": "7.0.3", "mocha": "7.2.0", "nyc": "15.1.0", "reflect-metadata": "0.1.13", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "rxjs": "7.3.0", "rxjs-compat": "6.6.7", - "semver": "7.3.5", + "semver": "7.5.4", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-nestjs-core#readme" diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-net/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-net/CHANGELOG.md index 08322c393..fd1e8ef3f 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-net/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-net/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-net-v0.31.4...instrumentation-net-v0.32.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.31.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-net-v0.31.3...instrumentation-net-v0.31.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-net/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-net/package.json index 90f9fcbe7..82584add1 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-net/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-net/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-net", - "version": "0.31.4", + "version": "0.32.0", "description": "OpenTelemetry net module automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -51,17 +51,17 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/sinon": "10.0.2", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-net#readme" diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/CHANGELOG.md index e56613223..79db223ad 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/CHANGELOG.md @@ -1,5 +1,27 @@ # Changelog +## [0.36.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-pg-v0.35.3...instrumentation-pg-v0.36.0) (2023-07-12) + + +### Features + +* add sqlcommenter comment to mysql2 queries ([#1523](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1523)) ([856c252](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/856c25211567104ced8b2a2b56d0818a3c48e671)) +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @opentelemetry/sql-common bumped from ^0.39.0 to ^0.40.0 + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.35.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-pg-v0.35.2...instrumentation-pg-v0.35.3) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/package.json index 8d9dd67f2..03caf5426 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-pg", - "version": "0.35.3", + "version": "0.36.0", "description": "OpenTelemetry postgres automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -55,18 +55,18 @@ "devDependencies": { "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/sinon": "10.0.2", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "cross-env": "7.0.3", "mocha": "7.2.0", "nyc": "15.1.0", "pg": "8.7.1", "pg-pool": "3.4.1", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "safe-stable-stringify": "^2.4.1", "sinon": "15.0.1", "test-all-versions": "5.0.1", @@ -75,8 +75,9 @@ }, "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0", + "@opentelemetry/sql-common": "^0.40.0", "@types/pg": "8.6.1", "@types/pg-pool": "2.0.3" }, diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/src/instrumentation.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/src/instrumentation.ts index 00ea20e78..f47b1e81b 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/src/instrumentation.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/src/instrumentation.ts @@ -44,6 +44,7 @@ import { SemanticAttributes, DbSystemValues, } from '@opentelemetry/semantic-conventions'; +import { addSqlCommenterComment } from '@opentelemetry/sql-common'; import { VERSION } from './version'; const PG_POOL_COMPONENT = 'pg-pool'; @@ -214,20 +215,13 @@ export class PgInstrumentation extends InstrumentationBase { // Modify query text w/ a tracing comment before invoking original for // tracing, but only if args[0] has one of our expected shapes. - // - // TODO: remove the `as ...` casts below when the TS version is upgraded. - // Newer TS versions will use the result of firstArgIsQueryObjectWithText - // to properly narrow arg0, but TS 4.3.5 does not. if (instrumentationConfig.addSqlCommenterCommentToQueries) { args[0] = firstArgIsString - ? utils.addSqlCommenterComment(span, arg0 as string) + ? addSqlCommenterComment(span, arg0) : firstArgIsQueryObjectWithText ? { - ...(arg0 as utils.ObjectWithText), - text: utils.addSqlCommenterComment( - span, - (arg0 as utils.ObjectWithText).text - ), + ...arg0, + text: addSqlCommenterComment(span, arg0.text), } : args[0]; } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/src/utils.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/src/utils.ts index 1565d6d03..d97f7f9c3 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/src/utils.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/src/utils.ts @@ -22,10 +22,7 @@ import { Tracer, SpanKind, diag, - defaultTextMapSetter, - ROOT_CONTEXT, } from '@opentelemetry/api'; -import { W3CTraceContextPropagator } from '@opentelemetry/core'; import { AttributeNames } from './enums/AttributeNames'; import { SemanticAttributes, @@ -266,72 +263,6 @@ export function patchClientConnectCallback(span: Span, cb: Function): Function { }; } -// NOTE: This function currently is returning false-positives -// in cases where comment characters appear in string literals -// ("SELECT '-- not a comment';" would return true, although has no comment) -function hasValidSqlComment(query: string): boolean { - const indexOpeningDashDashComment = query.indexOf('--'); - if (indexOpeningDashDashComment >= 0) { - return true; - } - - const indexOpeningSlashComment = query.indexOf('/*'); - if (indexOpeningSlashComment < 0) { - return false; - } - - const indexClosingSlashComment = query.indexOf('*/'); - return indexOpeningDashDashComment < indexClosingSlashComment; -} - -// sqlcommenter specification (https://google.github.io/sqlcommenter/spec/#value-serialization) -// expects us to URL encode based on the RFC 3986 spec (https://en.wikipedia.org/wiki/Percent-encoding), -// but encodeURIComponent does not handle some characters correctly (! ' ( ) *), -// which means we need special handling for this -// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent -function fixedEncodeURIComponent(str: string) { - return encodeURIComponent(str).replace( - /[!'()*]/g, - c => `%${c.charCodeAt(0).toString(16).toUpperCase()}` - ); -} - -export function addSqlCommenterComment(span: Span, query: string): string { - if (typeof query !== 'string' || query.length === 0) { - return query; - } - - // As per sqlcommenter spec we shall not add a comment if there already is a comment - // in the query - if (hasValidSqlComment(query)) { - return query; - } - - const propagator = new W3CTraceContextPropagator(); - const headers: { [key: string]: string } = {}; - propagator.inject( - trace.setSpan(ROOT_CONTEXT, span), - headers, - defaultTextMapSetter - ); - - // sqlcommenter spec requires keys in the comment to be sorted lexicographically - const sortedKeys = Object.keys(headers).sort(); - - if (sortedKeys.length === 0) { - return query; - } - - const commentString = sortedKeys - .map(key => { - const encodedValue = fixedEncodeURIComponent(headers[key]); - return `${key}='${encodedValue}'`; - }) - .join(','); - - return `${query} /*${commentString}*/`; -} - /** * Attempt to get a message string from a thrown value, while being quite * defensive, to recognize the fact that, in JS, any kind of value (even diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/test/pg.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/test/pg.test.ts index a6c368ad3..dec92cd7c 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/test/pg.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/test/pg.test.ts @@ -45,7 +45,7 @@ import { SemanticAttributes, DbSystemValues, } from '@opentelemetry/semantic-conventions'; -import { addSqlCommenterComment } from '../src/utils'; +import { addSqlCommenterComment } from '@opentelemetry/sql-common'; const memoryExporter = new InMemorySpanExporter(); diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/test/utils.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/test/utils.test.ts index d7c4f1f6a..ec32b5569 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/test/utils.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pg/test/utils.test.ts @@ -14,14 +14,7 @@ * limitations under the License. */ -import { - context, - createTraceState, - INVALID_SPAN_CONTEXT, - SpanContext, - trace, - TraceFlags, -} from '@opentelemetry/api'; +import { context, trace } from '@opentelemetry/api'; import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks'; import { InstrumentationConfig } from '@opentelemetry/instrumentation'; import { @@ -200,94 +193,4 @@ describe('utils.ts', () => { assert.deepStrictEqual(pgValues, ['0']); }); }); - - describe('addSqlCommenterComment', () => { - it('adds comment to a simple query', () => { - const spanContext: SpanContext = { - traceId: 'd4cda95b652f4a1592b449d5929fda1b', - spanId: '6e0c63257de34c92', - traceFlags: TraceFlags.SAMPLED, - }; - - const query = 'SELECT * from FOO;'; - assert.strictEqual( - utils.addSqlCommenterComment(trace.wrapSpanContext(spanContext), query), - "SELECT * from FOO; /*traceparent='00-d4cda95b652f4a1592b449d5929fda1b-6e0c63257de34c92-01'*/" - ); - }); - - it('does not add a comment if query already has a comment', () => { - const span = trace.wrapSpanContext({ - traceId: 'd4cda95b652f4a1592b449d5929fda1b', - spanId: '6e0c63257de34c92', - traceFlags: TraceFlags.SAMPLED, - }); - - const blockComment = 'SELECT * from FOO; /* Test comment */'; - assert.strictEqual( - utils.addSqlCommenterComment(span, blockComment), - blockComment - ); - - const dashedComment = 'SELECT * from FOO; -- Test comment'; - assert.strictEqual( - utils.addSqlCommenterComment(span, dashedComment), - dashedComment - ); - }); - - it('does not add a comment to an empty query', () => { - const spanContext: SpanContext = { - traceId: 'd4cda95b652f4a1592b449d5929fda1b', - spanId: '6e0c63257de34c92', - traceFlags: TraceFlags.SAMPLED, - }; - - assert.strictEqual( - utils.addSqlCommenterComment(trace.wrapSpanContext(spanContext), ''), - '' - ); - }); - - it('does not add a comment if span context is invalid', () => { - const query = 'SELECT * from FOO;'; - assert.strictEqual( - utils.addSqlCommenterComment( - trace.wrapSpanContext(INVALID_SPAN_CONTEXT), - query - ), - query - ); - }); - - it('correctly also sets trace state', () => { - const spanContext: SpanContext = { - traceId: 'd4cda95b652f4a1592b449d5929fda1b', - spanId: '6e0c63257de34c92', - traceFlags: TraceFlags.SAMPLED, - traceState: createTraceState('foo=bar,baz=qux'), - }; - - const query = 'SELECT * from FOO;'; - assert.strictEqual( - utils.addSqlCommenterComment(trace.wrapSpanContext(spanContext), query), - "SELECT * from FOO; /*traceparent='00-d4cda95b652f4a1592b449d5929fda1b-6e0c63257de34c92-01',tracestate='foo%3Dbar%2Cbaz%3Dqux'*/" - ); - }); - - it('escapes special characters in values', () => { - const spanContext: SpanContext = { - traceId: 'd4cda95b652f4a1592b449d5929fda1b', - spanId: '6e0c63257de34c92', - traceFlags: TraceFlags.SAMPLED, - traceState: createTraceState("foo='bar,baz='qux!()*',hack='DROP TABLE"), - }; - - const query = 'SELECT * from FOO;'; - assert.strictEqual( - utils.addSqlCommenterComment(trace.wrapSpanContext(spanContext), query), - "SELECT * from FOO; /*traceparent='00-d4cda95b652f4a1592b449d5929fda1b-6e0c63257de34c92-01',tracestate='foo%3D%27bar%2Cbaz%3D%27qux%21%28%29%2A%27%2Chack%3D%27DROP%20TABLE'*/" - ); - }); - }); }); diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pino/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pino/CHANGELOG.md index 91d339fdc..e07d91259 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pino/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pino/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.34.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-pino-v0.33.4...instrumentation-pino-v0.34.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.33.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-pino-v0.33.3...instrumentation-pino-v0.33.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pino/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pino/package.json index 7456bd100..fbca6c4d7 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pino/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-pino/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-pino", - "version": "0.33.4", + "version": "0.34.0", "description": "OpenTelemetry instrumentation for pino", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -52,21 +52,21 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/semver": "7.3.8", - "@types/sinon": "10.0.2", + "@types/node": "18.16.19", + "@types/semver": "7.5.0", + "@types/sinon": "10.0.16", "mocha": "7.2.0", "nyc": "15.1.0", "pino": "8.3.1", - "rimraf": "5.0.0", - "semver": "7.3.5", + "rimraf": "5.0.1", + "semver": "7.5.4", "sinon": "15.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0" + "@opentelemetry/instrumentation": "^0.41.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-pino#readme" } diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/CHANGELOG.md index 229cc3b8d..06a7d17ee 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/CHANGELOG.md @@ -6,6 +6,27 @@ * dependencies * @opentelemetry/redis-common bumped from ^0.34.0 to ^0.35.0 +## [0.35.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-redis-4-v0.34.6...instrumentation-redis-4-v0.35.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @opentelemetry/redis-common bumped from ^0.35.1 to ^0.36.0 + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.34.6](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-redis-4-v0.34.5...instrumentation-redis-4-v0.34.6) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/package.json index 67d177f38..84e65f16d 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-redis-4", - "version": "0.34.6", + "version": "0.35.0", "description": "Automatic OpenTelemetry instrumentation for redis package version 4", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -54,23 +54,23 @@ "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", "@opentelemetry/core": "^1.8.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "cross-env": "7.0.3", "mocha": "7.2.0", "nyc": "15.1.0", "redis": "4.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", - "@opentelemetry/redis-common": "^0.35.1", + "@opentelemetry/instrumentation": "^0.41.2", + "@opentelemetry/redis-common": "^0.36.0", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-redis-4#readme" diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/src/instrumentation.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/src/instrumentation.ts index 4bf503e6c..07628f205 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/src/instrumentation.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/src/instrumentation.ts @@ -354,7 +354,7 @@ export class RedisInstrumentation extends InstrumentationBase { return function patchedConnect(this: any): Promise { const options = this.options; - const attributes = getClientAttributes(options); + const attributes = getClientAttributes(this._diag, options); const span = plugin.tracer.startSpan( `${RedisInstrumentation.COMPONENT}-connect`, @@ -405,7 +405,7 @@ export class RedisInstrumentation extends InstrumentationBase { const dbStatementSerializer = this._config?.dbStatementSerializer || defaultDbStatementSerializer; - const attributes = getClientAttributes(clientOptions); + const attributes = getClientAttributes(this._diag, clientOptions); try { const dbStatement = dbStatementSerializer(commandName, commandArgs); diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/src/utils.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/src/utils.ts index f10260647..336bf7f2b 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/src/utils.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/src/utils.ts @@ -13,16 +13,45 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { DiagLogger } from '@opentelemetry/api'; import { DbSystemValues, SemanticAttributes, } from '@opentelemetry/semantic-conventions'; -export function getClientAttributes(options: any) { +export function getClientAttributes(diag: DiagLogger, options: any) { return { [SemanticAttributes.DB_SYSTEM]: DbSystemValues.REDIS, [SemanticAttributes.NET_PEER_NAME]: options?.socket?.host, [SemanticAttributes.NET_PEER_PORT]: options?.socket?.port, - [SemanticAttributes.DB_CONNECTION_STRING]: options?.url, + [SemanticAttributes.DB_CONNECTION_STRING]: + removeCredentialsFromDBConnectionStringAttribute(diag, options?.url), }; } + +/** + * removeCredentialsFromDBConnectionStringAttribute removes basic auth from url and user_pwd from query string + * + * Examples: + * redis://user:pass@localhost:6379/mydb => redis://localhost:6379/mydb + * redis://localhost:6379?db=mydb&user_pwd=pass => redis://localhost:6379?db=mydb + */ +function removeCredentialsFromDBConnectionStringAttribute( + diag: DiagLogger, + url?: unknown +): string | undefined { + if (typeof url !== 'string') { + return; + } + + try { + const u = new URL(url); + u.searchParams.delete('user_pwd'); + u.username = ''; + u.password = ''; + return u.href; + } catch (err) { + diag.error('failed to sanitize redis connection url', err); + } + return; +} diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/test/redis.test.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/test/redis.test.ts index 615572cf5..ac5abf5bc 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/test/redis.test.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis-4/test/redis.test.ts @@ -220,8 +220,11 @@ describe('redis@^4.0.0', () => { }); it('sets error status on connection failure', async () => { + const redisURL = `redis://${redisTestConfig.host}:${ + redisTestConfig.port + 1 + }`; const newClient = createClient({ - url: `redis://${redisTestConfig.host}:${redisTestConfig.port + 1}`, + url: redisURL, }); await assert.rejects(newClient.connect()); @@ -230,6 +233,64 @@ describe('redis@^4.0.0', () => { assert.strictEqual(span.name, 'redis-connect'); assert.strictEqual(span.status.code, SpanStatusCode.ERROR); + assert.strictEqual( + span.attributes[SemanticAttributes.DB_CONNECTION_STRING], + redisURL + ); + }); + + it('omits basic auth from DB_CONNECTION_STRING span attribute', async () => { + const redisURL = `redis://myuser:mypassword@${redisTestConfig.host}:${ + redisTestConfig.port + 1 + }`; + const expectAttributeConnString = `redis://${redisTestConfig.host}:${ + redisTestConfig.port + 1 + }`; + const newClient = createClient({ + url: redisURL, + }); + + await assert.rejects(newClient.connect()); + + const [span] = getTestSpans(); + + assert.strictEqual(span.name, 'redis-connect'); + assert.strictEqual(span.status.code, SpanStatusCode.ERROR); + assert.strictEqual( + span.attributes[SemanticAttributes.NET_PEER_NAME], + redisTestConfig.host + ); + assert.strictEqual( + span.attributes[SemanticAttributes.DB_CONNECTION_STRING], + expectAttributeConnString + ); + }); + + it('omits user_pwd query parameter from DB_CONNECTION_STRING span attribute', async () => { + const redisURL = `redis://${redisTestConfig.host}:${ + redisTestConfig.port + 1 + }?db=mydb&user_pwd=mypassword`; + const expectAttributeConnString = `redis://${redisTestConfig.host}:${ + redisTestConfig.port + 1 + }?db=mydb`; + const newClient = createClient({ + url: redisURL, + }); + + await assert.rejects(newClient.connect()); + + const [span] = getTestSpans(); + + assert.strictEqual(span.name, 'redis-connect'); + assert.strictEqual(span.status.code, SpanStatusCode.ERROR); + assert.strictEqual( + span.attributes[SemanticAttributes.NET_PEER_NAME], + redisTestConfig.host + ); + assert.strictEqual( + span.attributes[SemanticAttributes.DB_CONNECTION_STRING], + expectAttributeConnString + ); }); }); diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/CHANGELOG.md index efea06e6b..0dfa4a4ec 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/CHANGELOG.md @@ -6,6 +6,27 @@ * dependencies * @opentelemetry/redis-common bumped from ^0.34.0 to ^0.35.0 +## [0.35.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-redis-v0.34.7...instrumentation-redis-v0.35.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @opentelemetry/redis-common bumped from ^0.35.1 to ^0.36.0 + * devDependencies + * @opentelemetry/contrib-test-utils bumped from ^0.33.4 to ^0.34.0 + ## [0.34.7](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-redis-v0.34.6...instrumentation-redis-v0.34.7) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/examples/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/examples/package.json index 5f6738d4c..3d6c75980 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/examples/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/examples/package.json @@ -34,8 +34,8 @@ "@opentelemetry/api": "^1.0.0", "@opentelemetry/exporter-jaeger": "^1.0.0", "@opentelemetry/exporter-zipkin": "^1.0.0", - "@opentelemetry/instrumentation": "^0.40.0", - "@opentelemetry/instrumentation-http": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", + "@opentelemetry/instrumentation-http": "^0.41.2", "@opentelemetry/instrumentation-redis": "^0.32.0", "@opentelemetry/sdk-trace-base": "^1.0.0", "@opentelemetry/sdk-trace-node": "^1.0.0", diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/package.json index 3b0c7bd0e..114097676 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-redis/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-redis", - "version": "0.34.7", + "version": "0.35.0", "description": "Automatic OpenTelemetry instrumentation for redis package version 2 and 3", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -54,24 +54,24 @@ "devDependencies": { "@opentelemetry/api": "^1.3.0", "@opentelemetry/context-async-hooks": "^1.8.0", - "@opentelemetry/contrib-test-utils": "^0.33.4", + "@opentelemetry/contrib-test-utils": "^0.34.0", "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "cross-env": "7.0.3", "mocha": "7.2.0", "nyc": "15.1.0", "redis": "3.1.2", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4", - "@types/redis": "2.8.31" + "@types/redis": "2.8.32" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", - "@opentelemetry/redis-common": "^0.35.1", + "@opentelemetry/instrumentation": "^0.41.2", + "@opentelemetry/redis-common": "^0.36.0", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-redis#readme" diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/.tav.yml b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/.tav.yml index 62556552f..a1ef4c915 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/.tav.yml +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/.tav.yml @@ -1,3 +1,8 @@ restify: - versions: "4.3.4 || 5.2.0 || 6.4.0 || 7.7.0 || ^8.4.0" - commands: npm run test + - versions: "^10.0.0 || ^11.1.0" + node: ">=18" + commands: npm run test + + - versions: "4.3.4 || 5.2.0 || 6.4.0 || 7.7.0 || ^8.4.0 || 9.1.0 || ^10.0.0 || ^11.1.0" + node: "<18" + commands: npm run test diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/CHANGELOG.md index 1f3e15605..4dfd96d09 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-restify-v0.32.4...instrumentation-restify-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.32.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-restify-v0.32.3...instrumentation-restify-v0.32.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/README.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/README.md index 719a042ab..2e16ea749 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/README.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/README.md @@ -17,7 +17,7 @@ npm install --save @opentelemetry/instrumentation-restify ### Supported Versions -- `>=4.0.0 <9` +- `>=4.0.0 <12` ## Usage diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/package.json index 687836fb4..10f36902a 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-restify", - "version": "0.32.4", + "version": "0.33.0", "description": "OpenTelemetry restify automatic instrumentation package", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -51,13 +51,13 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/restify": "4.3.8", - "@types/semver": "^7.3.12", + "@types/node": "18.16.19", + "@types/restify": "4.3.9", + "@types/semver": "7.5.0", "mocha": "7.2.0", "nyc": "15.1.0", - "restify": "8.6.1", - "rimraf": "5.0.0", + "restify": "11.1.0", + "rimraf": "5.0.1", "semver": "^7.3.7", "test-all-versions": "^5.0.1", "ts-mocha": "10.0.0", @@ -65,7 +65,7 @@ }, "dependencies": { "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-restify#readme" diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/src/constants.ts b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/src/constants.ts index 0ba23dccf..ebd38f91c 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/src/constants.ts +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-restify/src/constants.ts @@ -24,4 +24,4 @@ export const RESTIFY_METHODS = [ 'patch', ]; export const MODULE_NAME = 'restify'; -export const SUPPORTED_VERSIONS = ['>=4.0.0 <9']; +export const SUPPORTED_VERSIONS = ['>=4.0.0 <12']; diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-router/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-router/CHANGELOG.md index d38b8b43c..81c8f2e46 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-router/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-router/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-router-v0.32.4...instrumentation-router-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.32.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-router-v0.32.3...instrumentation-router-v0.32.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-router/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-router/package.json index a25b6bf1e..8b0a04924 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-router/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-router/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-router", - "version": "0.32.4", + "version": "0.33.0", "description": "OpenTelemetry Router automatic instrumentation package", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,16 +50,16 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", - "router": "1.3.5", + "rimraf": "5.0.1", + "router": "1.3.8", "ts-mocha": "10.0.0", "typescript": "4.4.4" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0", + "@opentelemetry/instrumentation": "^0.41.2", "@opentelemetry/semantic-conventions": "^1.0.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-router#readme" diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-winston/CHANGELOG.md b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-winston/CHANGELOG.md index d952f9a12..a11e34c03 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-winston/CHANGELOG.md +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-winston/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.32.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-winston-v0.31.4...instrumentation-winston-v0.32.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.31.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-winston-v0.31.3...instrumentation-winston-v0.31.4) (2023-06-12) diff --git a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-winston/package.json b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-winston/package.json index 1820fb580..713fd7c89 100644 --- a/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-winston/package.json +++ b/auto-merge/contrib/plugins/node/opentelemetry-instrumentation-winston/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-winston", - "version": "0.31.4", + "version": "0.32.0", "description": "OpenTelemetry instrumentation for winston", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -52,21 +52,21 @@ "@opentelemetry/sdk-trace-base": "^1.8.0", "@opentelemetry/sdk-trace-node": "^1.8.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/sinon": "10.0.2", + "@types/node": "18.16.19", + "@types/sinon": "10.0.16", "@types/triple-beam": "^1.3.2", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "test-all-versions": "5.0.1", "ts-mocha": "10.0.0", "typescript": "4.4.4", "winston": "3.3.3", - "winston2": "npm:winston@2.4.5" + "winston2": "npm:winston@2.4.7" }, "dependencies": { - "@opentelemetry/instrumentation": "^0.40.0" + "@opentelemetry/instrumentation": "^0.41.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-winston#readme" } diff --git a/auto-merge/contrib/plugins/web/opentelemetry-plugin-react-load/CHANGELOG.md b/auto-merge/contrib/plugins/web/opentelemetry-plugin-react-load/CHANGELOG.md index 74924d12e..358a95f95 100644 --- a/auto-merge/contrib/plugins/web/opentelemetry-plugin-react-load/CHANGELOG.md +++ b/auto-merge/contrib/plugins/web/opentelemetry-plugin-react-load/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.29.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/plugin-react-load-v0.28.2...plugin-react-load-v0.29.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + ## [0.28.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/plugin-react-load-v0.28.1...plugin-react-load-v0.28.2) (2023-05-16) diff --git a/auto-merge/contrib/plugins/web/opentelemetry-plugin-react-load/package.json b/auto-merge/contrib/plugins/web/opentelemetry-plugin-react-load/package.json index 9dc58e1b5..da73ea9a2 100644 --- a/auto-merge/contrib/plugins/web/opentelemetry-plugin-react-load/package.json +++ b/auto-merge/contrib/plugins/web/opentelemetry-plugin-react-load/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/plugin-react-load", - "version": "0.28.2", + "version": "0.29.0", "description": "OpenTelemetry React loading automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -47,16 +47,16 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.15.0", + "@babel/core": "7.22.10", "@opentelemetry/api": "^1.0.0", "@opentelemetry/propagator-b3": "^1.3.1", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", - "@types/react": "17.0.16", + "@types/node": "18.16.19", + "@types/react": "17.0.64", "@types/react-addons-test-utils": "0.14.26", "@types/react-dom": "18.0.2", "@types/shimmer": "1.0.2", - "@types/sinon": "10.0.2", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.2", "babel-loader": "8.2.2", "@jsdevtools/coverage-istanbul-loader": "3.0.5", @@ -64,13 +64,13 @@ "karma-chrome-launcher": "^3.1.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "7.2.0", "nyc": "15.1.0", "react": "17.0.2", "react-dom": "17.0.2", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "sinon": "15.0.1", "ts-loader": "8.3.0", "ts-mocha": "10.0.0", diff --git a/auto-merge/contrib/propagators/opentelemetry-propagator-aws-xray/CHANGELOG.md b/auto-merge/contrib/propagators/opentelemetry-propagator-aws-xray/CHANGELOG.md index bcba2c5f8..b40d7bb2e 100644 --- a/auto-merge/contrib/propagators/opentelemetry-propagator-aws-xray/CHANGELOG.md +++ b/auto-merge/contrib/propagators/opentelemetry-propagator-aws-xray/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [1.3.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/propagator-aws-xray-v1.2.1...propagator-aws-xray-v1.3.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + ## [1.2.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/propagator-aws-xray-v1.2.0...propagator-aws-xray-v1.2.1) (2023-05-16) diff --git a/auto-merge/contrib/propagators/opentelemetry-propagator-aws-xray/package.json b/auto-merge/contrib/propagators/opentelemetry-propagator-aws-xray/package.json index d08745075..7d4fe027c 100644 --- a/auto-merge/contrib/propagators/opentelemetry-propagator-aws-xray/package.json +++ b/auto-merge/contrib/propagators/opentelemetry-propagator-aws-xray/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-aws-xray", - "version": "1.2.1", + "version": "1.3.0", "description": "OpenTelemetry AWS Xray propagator provides context propagation for systems that are using AWS X-Ray format.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -50,18 +50,18 @@ "devDependencies": { "@opentelemetry/api": "^1.0.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "@types/webpack-env": "1.16.2", "@jsdevtools/coverage-istanbul-loader": "3.0.5", "karma": "6.3.16", "karma-chrome-launcher": "^3.1.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "ts-loader": "8.3.0", "ts-mocha": "10.0.0", "typescript": "4.4.4", diff --git a/auto-merge/contrib/propagators/opentelemetry-propagator-grpc-census-binary/CHANGELOG.md b/auto-merge/contrib/propagators/opentelemetry-propagator-grpc-census-binary/CHANGELOG.md index e4c4d75ac..b55e21ced 100644 --- a/auto-merge/contrib/propagators/opentelemetry-propagator-grpc-census-binary/CHANGELOG.md +++ b/auto-merge/contrib/propagators/opentelemetry-propagator-grpc-census-binary/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.27.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/propagator-grpc-census-binary-v0.26.1...propagator-grpc-census-binary-v0.27.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + ## [0.26.1](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/propagator-grpc-census-binary-v0.26.0...propagator-grpc-census-binary-v0.26.1) (2023-05-16) diff --git a/auto-merge/contrib/propagators/opentelemetry-propagator-grpc-census-binary/package.json b/auto-merge/contrib/propagators/opentelemetry-propagator-grpc-census-binary/package.json index 0a2f8e870..44e32383c 100644 --- a/auto-merge/contrib/propagators/opentelemetry-propagator-grpc-census-binary/package.json +++ b/auto-merge/contrib/propagators/opentelemetry-propagator-grpc-census-binary/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-grpc-census-binary", - "version": "0.26.1", + "version": "0.27.0", "description": "OpenTelemetry gRPC Census propagator provides a context propagator for OpenTelemetry that can use the gRPC binary header: 'grpc-trace-bin' for interoperability with OpenCensus", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -47,11 +47,11 @@ "devDependencies": { "@opentelemetry/api": "^1.0.0", "@types/mocha": "7.0.2", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "grpc": "1.24.11", "mocha": "7.2.0", "nyc": "15.1.0", - "rimraf": "5.0.0", + "rimraf": "5.0.1", "ts-loader": "8.3.0", "ts-mocha": "10.0.0", "typescript": "4.4.4" diff --git a/auto-merge/contrib/propagators/opentelemetry-propagator-instana/CHANGELOG.md b/auto-merge/contrib/propagators/opentelemetry-propagator-instana/CHANGELOG.md index a2184d829..363f18007 100644 --- a/auto-merge/contrib/propagators/opentelemetry-propagator-instana/CHANGELOG.md +++ b/auto-merge/contrib/propagators/opentelemetry-propagator-instana/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.3.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/propagator-instana-v0.2.2...propagator-instana-v0.3.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + ## [0.2.2](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/propagator-instana-v0.2.1...propagator-instana-v0.2.2) (2023-05-16) diff --git a/auto-merge/contrib/propagators/opentelemetry-propagator-instana/package.json b/auto-merge/contrib/propagators/opentelemetry-propagator-instana/package.json index d97f70201..c4290cc40 100644 --- a/auto-merge/contrib/propagators/opentelemetry-propagator-instana/package.json +++ b/auto-merge/contrib/propagators/opentelemetry-propagator-instana/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-instana", - "version": "0.2.2", + "version": "0.3.0", "description": "The OpenTelemetry Instana Propagator implements the propagation format used by IBM Observability by Instana", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -52,14 +52,14 @@ "@jsdevtools/coverage-istanbul-loader": "3.0.5", "@opentelemetry/api": "^1.0.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "@types/webpack-env": "1.16.2", "assert": "2.0.0", "karma": "6.3.17", "karma-chrome-launcher": "3.1.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.33", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "7.2.0", "nyc": "15.1.0", diff --git a/auto-merge/contrib/propagators/opentelemetry-propagator-ot-trace/CHANGELOG.md b/auto-merge/contrib/propagators/opentelemetry-propagator-ot-trace/CHANGELOG.md index 3322053e4..2630db118 100644 --- a/auto-merge/contrib/propagators/opentelemetry-propagator-ot-trace/CHANGELOG.md +++ b/auto-merge/contrib/propagators/opentelemetry-propagator-ot-trace/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.27.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/propagator-ot-trace-v0.26.3...propagator-ot-trace-v0.27.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + ## [0.26.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/propagator-ot-trace-v0.26.2...propagator-ot-trace-v0.26.3) (2023-05-16) diff --git a/auto-merge/contrib/propagators/opentelemetry-propagator-ot-trace/package.json b/auto-merge/contrib/propagators/opentelemetry-propagator-ot-trace/package.json index 75dffaed4..a36c753cd 100644 --- a/auto-merge/contrib/propagators/opentelemetry-propagator-ot-trace/package.json +++ b/auto-merge/contrib/propagators/opentelemetry-propagator-ot-trace/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-ot-trace", - "version": "0.26.3", + "version": "0.27.0", "description": "The OpenTelemetry OTTracepropagator implements the propagation format used by the \"basic tracer\" implementations from the OpenTracing project", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -51,14 +51,14 @@ "devDependencies": { "@opentelemetry/api": "^1.0.0", "@types/mocha": "8.2.3", - "@types/node": "18.11.7", + "@types/node": "18.16.19", "@types/webpack-env": "1.16.2", "@jsdevtools/coverage-istanbul-loader": "3.0.5", "karma": "6.3.16", "karma-chrome-launcher": "^3.1.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "2.0.1", - "karma-spec-reporter": "0.0.32", + "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", "mocha": "7.2.0", "nyc": "15.1.0", diff --git a/auto-merge/contrib/release-please-config.json b/auto-merge/contrib/release-please-config.json index 424fe6824..be9ea170a 100644 --- a/auto-merge/contrib/release-please-config.json +++ b/auto-merge/contrib/release-please-config.json @@ -18,8 +18,10 @@ "packages/opentelemetry-id-generator-aws-xray": {}, "packages/opentelemetry-propagation-utils": {}, "packages/opentelemetry-redis-common": {}, + "packages/opentelemetry-sql-common": {}, "packages/opentelemetry-test-utils": {}, "plugins/node/instrumentation-amqplib": {}, + "plugins/node/instrumentation-cucumber": {}, "plugins/node/instrumentation-dataloader": {}, "plugins/node/instrumentation-fs": {}, "plugins/node/instrumentation-lru-memoizer": {}, diff --git a/auto-merge/contrib/renovate.json b/auto-merge/contrib/renovate.json index 80634068e..8d4c9f6f0 100644 --- a/auto-merge/contrib/renovate.json +++ b/auto-merge/contrib/renovate.json @@ -4,30 +4,38 @@ ], "packageRules": [ { - "groupName": "all non-major dependencies", - "updateTypes": ["patch", "minor"], - "groupSlug": "all-minor-patch" + "groupName": "all patch versions", + "groupSlug": "all-patch", + "matchUpdateTypes": ["patch"], + "excludePackageNames": ["prettier"], + "schedule": ["before 3am on Monday"] + }, + { + "matchUpdateTypes": ["minor"], + "dependencyDashboardApproval": true }, { "matchPackageNames": ["@opentelemetry/api"], - "rangeStrategy": "bump" + "rangeStrategy": "widen" }, { - "groupName": "Otel Core experimental", + "groupName": "OTel Core experimental", "matchPackageNames": [ "@opentelemetry/instrumentation", "@opentelemetry/instrumentation-grpc", "@opentelemetry/instrumentation-http", "@opentelemetry/instrumentation-fetch", "@opentelemetry/instrumentation-xml-http-request", + "@opentelemetry/exporter-metrics-otlp-grpc", "@opentelemetry/sdk-node" ], - "rangeStrategy": "bump" + "rangeStrategy": "bump", + "schedule": ["before 3am every weekday"] } ], "ignoreDeps": ["lerna", "lerna-changelog"], "ignorePaths": ["archive/**", "examples/**"], - "assignees": ["@blumamir", "@dyladan", "@legendecas", "@Rauno56", "@vmarchaud"], + "assignees": ["@blumamir", "@dyladan", "@legendecas", "@pichlermarc" ], "schedule": [ "before 3am on Friday" ], diff --git a/auto-merge/contrib/scripts/check-release-please.mjs b/auto-merge/contrib/scripts/check-release-please.mjs index 0496533bc..699133c35 100644 --- a/auto-merge/contrib/scripts/check-release-please.mjs +++ b/auto-merge/contrib/scripts/check-release-please.mjs @@ -30,7 +30,7 @@ const getProcessOutput = (cmd, args) => { } const lernaList = JSON.parse( - getProcessOutput('lerna', ['list', '--json']) + getProcessOutput('npx', ['lerna', 'list', '--json']) ); const manifest = readJson('.release-please-manifest.json'); const config = readJson('release-please-config.json'); diff --git a/auto-merge/contrib/scripts/parse-lerna-scopes.mjs b/auto-merge/contrib/scripts/parse-lerna-scopes.mjs index af66a5af1..53a10dbd7 100644 --- a/auto-merge/contrib/scripts/parse-lerna-scopes.mjs +++ b/auto-merge/contrib/scripts/parse-lerna-scopes.mjs @@ -14,7 +14,7 @@ import { readFileSync } from 'fs'; const labels = JSON.parse(process.argv[2]); const lernaList = JSON.parse( - childProcess.spawnSync('lerna', ['list', '--json']).stdout + childProcess.spawnSync('npx', ['lerna', 'list', '--json']).stdout .toString('utf8') ); const packageList = new Map( diff --git a/auto-merge/js/.github/workflows/unit-test.yml b/auto-merge/js/.github/workflows/unit-test.yml index e326aa822..241e487ce 100644 --- a/auto-merge/js/.github/workflows/unit-test.yml +++ b/auto-merge/js/.github/workflows/unit-test.yml @@ -201,4 +201,9 @@ jobs: - name: Test working-directory: ./api - run: npm test + # running test:eol as node 8 is not supported anymore by the version of nyc we use, as we don't report coverage + # for this step we leave it out. + # Details: nyc requires istanbul-lib-report, which silently dropped support for Node.js v8 when going from + # 3.0.0 to 3.0.1 by requiring make-dir@^4.0.0 to fix https://github.com/advisories/GHSA-c2qf-rxjj-qqgw. + # make-dir does not support Node.js v8 anymore. + run: npm run test:eol diff --git a/auto-merge/js/.nycrc b/auto-merge/js/.nycrc index 22383d8ab..eb64eeca2 100644 --- a/auto-merge/js/.nycrc +++ b/auto-merge/js/.nycrc @@ -8,7 +8,6 @@ "build/**/*.*", "src/index.ts", "src/platform/**/index.ts", - "src/platform/browser/*.ts", "src/version.ts", "test/**/*.*", ".eslintrc.js", diff --git a/auto-merge/js/CHANGELOG.md b/auto-merge/js/CHANGELOG.md index 819fab897..63e669ceb 100644 --- a/auto-merge/js/CHANGELOG.md +++ b/auto-merge/js/CHANGELOG.md @@ -11,15 +11,41 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/ ### :rocket: (Enhancement) -### :bug: (Bug Fix) +* feat(sdk-metrics): implement MetricProducer specification [#4007](https://github.com/open-telemetry/opentelemetry-js/pull/4007) -* fix(sdk-metrics): Update default Histogram's boundary to match OTEL's spec [#3893](https://github.com/open-telemetry/opentelemetry-js/pull/3893/) @chigia001 +### :bug: (Bug Fix) ### :books: (Refine Doc) ### :house: (Internal) -* feat(minification): [Minification] Add noEmitHelpers, importHelpers and tslib as a dependency [#3913](https://github.com/open-telemetry/opentelemetry-js/issues/3913) +## 1.15.2 + +### :bug: (Bug Fix) + +* fix(core): stop rounding to nearest int in hrTimeTo*seconds() functions [#4014](https://github.com/open-telemetry/opentelemetry-js/pull/4014/) @aabmass +* fix(sdk-metrics): ignore invalid metric values [#3988](https://github.com/open-telemetry/opentelemetry-js/pull/3988) @legendecas +* fix(core): add baggage support for values containing an equals sign [#3975](https://github.com/open-telemetry/opentelemetry-js/pull/3975) @krosenk729 + +## 1.15.1 + +### :bug: (Bug Fix) + +* Revert "feat(minification): Add noEmitHelpers, importHelpers and tslib as a dependency (#3914)" + [#4011](https://github.com/open-telemetry/opentelemetry-js/pull/4011) @dyladan + +## 1.15.0 + +### :bug: (Bug Fix) + +* fix(opentelemetry-exporter-prometheus): Update default PrometheusExporter to not append a timestamp to match the text based exposition format [#3961](https://github.com/open-telemetry/opentelemetry-js/pull/3961) @JacksonWeber +* fix(sdk-metrics): Update default Histogram's boundary to match OTEL's spec [#3893](https://github.com/open-telemetry/opentelemetry-js/pull/3893/) @chigia001 +* fix(sdk-metrics): preserve startTime for cumulative ExponentialHistograms [#3934](https://github.com/open-telemetry/opentelemetry-js/pull/3934/) @aabmass +* fix(sdk-trace-web): add secureConnectionStart to https only [#3879](https://github.com/open-telemetry/opentelemetry-js/pull/3879) @Abinet18 + +### :house: (Internal) + +* feat(minification): [Minification] Add noEmitHelpers, importHelpers and tslib as a dependency [#3913](https://github.com/open-telemetry/opentelemetry-js/issues/3913) @MSNev ## 1.14.0 diff --git a/auto-merge/js/README.md b/auto-merge/js/README.md index ca7279674..dfd297a7b 100644 --- a/auto-merge/js/README.md +++ b/auto-merge/js/README.md @@ -37,7 +37,7 @@ ## About this project -This is the JavaScript version of [OpenTelemetry](https://opentelemetry.io/), a framework for collecting traces and metrics from applications. +This is the JavaScript version of [OpenTelemetry](https://opentelemetry.io/), a framework for collecting traces, metrics, and logs from applications. ## Quick Start @@ -109,24 +109,29 @@ If you are a library author looking to build OpenTelemetry into your library, pl ## Supported Runtimes -| Platform Version | Supported | -| ------------------- | ----------------------------------------------- | -| Node.JS `v18` | ✅ | -| Node.JS `v16` | ✅ | -| Node.JS `v14` | ✅ | -| Older Node Versions | See [Node Support](#node-support) | -| Web Browsers | ✅ See [Browser Support](#browser-support) below | +| Platform Version | Supported | +|---------------------|-----------------------------------------------| +| Node.JS `v18` | :heavy_check_mark: | +| Node.JS `v16` | :heavy_check_mark: | +| Node.JS `v14` | :heavy_check_mark: | +| Older Node Versions | See [Node Support](#node-support) | +| Web Browsers | See [Browser Support](#browser-support) below | ### Node Support Only Node.js Active or Maintenance LTS versions are supported. Previous versions of node *may* work, but they are not tested by OpenTelemetry and they are not guaranteed to work. -Please note that versions of Node.JS v8 prior to `v8.12.0` will NOT work, because OpenTelemetry Node depends on the `perf_hooks` module introduced in `v8.5.0` and `performance.timeOrigin` that is set correctly starting in `v8.12.0`. +Note that versions of Node.JS v8 prior to `v8.12.0` will NOT work, because OpenTelemetry Node depends on the +`perf_hooks` module introduced in `v8.5.0` and `performance.timeOrigin` that is set correctly starting in `v8.12.0`. ### Browser Support -Automated browser tests are run in the latest version of Headless Chrome. -There is currently no list of officially supported browsers, but OpenTelemetry is developed using standard web technologies with wide support and should work in currently supported versions of major browsers. +> [!IMPORTANT] +> Client instrumentation for the browser is **experimental** and mostly **unspecified**. If you are interested in +> helping out, get in touch with the [Client Instrumentation SIG][client-instrumentation-sig]. + +There is currently no list of officially supported browsers. OpenTelemetry is developed using standard web +technologies and aims to work in currently supported versions of major browsers. ## Package Version Compatibility @@ -177,7 +182,7 @@ We have a weekly SIG meeting! See the [community page](https://github.com/open-t #### Maintainers ([@open-telemetry/js-maintainers](https://github.com/orgs/open-telemetry/teams/javascript-maintainers)) -- [Amir Blum](https://github.com/blumamir), Aspecto +- [Amir Blum](https://github.com/blumamir), Keyval - [Chengzhong Wu](https://github.com/legendecas), Alibaba - [Daniel Dyla](https://github.com/dyladan), Dynatrace - [Marc Pichler](https://github.com/pichlermarc), Dynatrace @@ -552,6 +557,8 @@ Apache 2.0 - See [LICENSE][license-url] for more information. [up-for-grabs-issues]: https://github.com/open-telemetry/OpenTelemetry-js/issues?q=is%3Aissue+is%3Aopen+label%3Aup-for-grabs [good-first-issues]: https://github.com/open-telemetry/OpenTelemetry-js/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22 +[client-instrumentation-sig]: https://docs.google.com/document/d/16Vsdh-DM72AfMg_FIt9yT9ExEWF4A_vRbQ3jRNBe09w/edit + [docs]: https://open-telemetry.github.io/opentelemetry-js [compliance-matrix]: https://github.com/open-telemetry/opentelemetry-specification/blob/main/spec-compliance-matrix.md [CONTRIBUTING]: https://github.com/open-telemetry/opentelemetry-js/blob/main/CONTRIBUTING.md diff --git a/auto-merge/js/doc/metrics.md b/auto-merge/js/doc/metrics.md index 7162f4363..e2f2b5a14 100644 --- a/auto-merge/js/doc/metrics.md +++ b/auto-merge/js/doc/metrics.md @@ -20,7 +20,7 @@ _Metrics API Reference: { requestCounter.add(1, attributes); upDownCounter.add(Math.random() > 0.5 ? 1 : -1, attributes); histogram.record(Math.random(), attributes); + exponentialHistogram.record(Math.random(), attributes); }, 1000); diff --git a/auto-merge/js/examples/otlp-exporter-node/package.json b/auto-merge/js/examples/otlp-exporter-node/package.json index bb5fa2513..c8817d0e4 100644 --- a/auto-merge/js/examples/otlp-exporter-node/package.json +++ b/auto-merge/js/examples/otlp-exporter-node/package.json @@ -1,7 +1,7 @@ { "name": "example-otlp-exporter-node", "private": true, - "version": "0.40.0", + "version": "0.41.2", "description": "Example of using @opentelemetry/collector-exporter in Node.js", "main": "index.js", "scripts": { @@ -29,17 +29,17 @@ }, "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/exporter-metrics-otlp-grpc": "0.40.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.40.0", - "@opentelemetry/exporter-metrics-otlp-proto": "0.40.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.40.0", - "@opentelemetry/exporter-trace-otlp-http": "0.40.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.41.2", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", + "@opentelemetry/exporter-metrics-otlp-proto": "0.41.2", + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.2", + "@opentelemetry/exporter-trace-otlp-http": "0.41.2", + "@opentelemetry/exporter-trace-otlp-proto": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/otlp-exporter-node" } diff --git a/auto-merge/js/experimental/CHANGELOG.md b/auto-merge/js/experimental/CHANGELOG.md index 1ac87111b..0c7912b3a 100644 --- a/auto-merge/js/experimental/CHANGELOG.md +++ b/auto-merge/js/experimental/CHANGELOG.md @@ -4,6 +4,42 @@ All notable changes to experimental packages in this project will be documented ## Unreleased +### :books: (Refine Doc) + +### :boom: Breaking Change + +### :rocket: (Enhancement) + +### :bug: (Bug Fix) + +### :books: (Refine Doc) + +### :house: (Internal) + +## 0.42.2 + +### :bug: (Bug Fix) + +* fix(opentelemetry-exporter-logs-otlp-http): Add otel-api as dev dep for tests as they are directly importing the api and which is breaking the web-sandbox tests which is using rollup +* fix(instrumentation-grpc): instrument @grpc/grpc-js Client methods [#3804](https://github.com/open-telemetry/opentelemetry-js/pull/3804) @pichlermarc + +## 0.41.1 + +### :books: (Refine Doc) + +* docs(sdk-metrics): add example of exponential histogram metric [#3855](https://github.com/open-telemetry/opentelemetry-js/pull/3855) @JamieDanielson + +### :rocket: (Enhancement) + +* feat(sdk-node): logs support added [#3969](https://github.com/open-telemetry/opentelemetry-js/pull/3969) @psk001 + +### :bug: (Bug Fix) + +* Revert "feat(minification): Add noEmitHelpers, importHelpers and tslib as a dependency (#3914)" + [#4011](https://github.com/open-telemetry/opentelemetry-js/pull/4011) @dyladan + +## 0.41.0 + ### :boom: Breaking Change * chore(instrumentation-grpc): Drop support for package `grpc`. [#3807](https://github.com/open-telemetry/opentelemetry-js/pull/3807) @llc1123 @@ -11,13 +47,22 @@ All notable changes to experimental packages in this project will be documented ### :rocket: (Enhancement) * feat(otlp-grpc-exporters): add support for UDS endpoints. [#3853](https://github.com/open-telemetry/opentelemetry-js/pull/3853) @llc1123 +* feat(otlp-exporters): bump otlp proto to 0.20.0 [#3932](https://github.com/open-telemetry/opentelemetry-js/pull/3932) @pichlermarc +* feat(exporter-metrics-otlp-*): add LowMemory metrics temporality preference [#3915](https://github.com/open-telemetry/opentelemetry-js/pull/3915) @martinkuba + * Adds support for [LowMemory temporality preference](https://github.com/open-telemetry/opentelemetry-specification/blob/f09624bb97e9be3be259733b93be507df18927bd/specification/metrics/sdk_exporters/otlp.md#additional-configuration) + * Adds support for `lowmemory` in `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE` ### :bug: (Bug Fix) -### :books: (Refine Doc) +* fix(exporter-logs-otlp-http): set useHex to true [#3875](https://github.com/open-telemetry/opentelemetry-js/pull/3875) @Nico385412 +* fix(otlp-proto-exporter-base): add missing type import [#3937](https://github.com/open-telemetry/opentelemetry-js/pull/3937) @pichlermarc +* fix(example-opencensus-shim): avoid OpenCensus auto instrumentations [#3951](https://github.com/open-telemetry/opentelemetry-js/pull/3951) @llc1123 +* fix(http-intrumentation): prevent request socket null from throwing uncaught error [#3858](https://github.com/open-telemetry/opentelemetry-js/pull/3858) @aodysseos ### :house: (Internal) +* chore(instrumentation-grpc): Cleanup remnants of grpc-native support. [#3886](https://github.com/open-telemetry/opentelemetry-js/pull/3886) @llc1123 + ## 0.40.0 ### :boom: Breaking Change diff --git a/auto-merge/js/experimental/backwards-compatibility/node14/package.json b/auto-merge/js/experimental/backwards-compatibility/node14/package.json index a18a2795f..fc19e3ddb 100644 --- a/auto-merge/js/experimental/backwards-compatibility/node14/package.json +++ b/auto-merge/js/experimental/backwards-compatibility/node14/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node14", - "version": "0.40.0", + "version": "0.41.2", "private": true, "description": "Backwards compatibility app for node 14 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,9 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.40.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-node": "0.41.2", + "@opentelemetry/sdk-trace-base": "1.15.2" }, "devDependencies": { "@types/node": "14.18.25", diff --git a/auto-merge/js/experimental/backwards-compatibility/node16/package.json b/auto-merge/js/experimental/backwards-compatibility/node16/package.json index aaeb4db42..6c94e0320 100644 --- a/auto-merge/js/experimental/backwards-compatibility/node16/package.json +++ b/auto-merge/js/experimental/backwards-compatibility/node16/package.json @@ -1,6 +1,6 @@ { "name": "backcompat-node16", - "version": "0.40.0", + "version": "0.41.2", "private": true, "description": "Backwards compatibility app for node 16 types and the OpenTelemetry Node.js SDK", "main": "index.js", @@ -9,9 +9,8 @@ "peer-api-check": "node ../../../scripts/peer-api-check.js" }, "dependencies": { - "@opentelemetry/sdk-node": "0.40.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sdk-node": "0.41.2", + "@opentelemetry/sdk-trace-base": "1.15.2" }, "devDependencies": { "@types/node": "16.11.52", diff --git a/auto-merge/js/experimental/examples/.eslintrc.js b/auto-merge/js/experimental/examples/.eslintrc.js index 7927fa0c3..3f58849df 100644 --- a/auto-merge/js/experimental/examples/.eslintrc.js +++ b/auto-merge/js/experimental/examples/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/auto-merge/js/experimental/examples/logs/package.json b/auto-merge/js/experimental/examples/logs/package.json index 0df41c352..f97826564 100644 --- a/auto-merge/js/experimental/examples/logs/package.json +++ b/auto-merge/js/experimental/examples/logs/package.json @@ -1,14 +1,14 @@ { "name": "logs-example", - "version": "0.40.0", + "version": "0.41.1", "private": true, "scripts": { "start": "ts-node index.ts" }, "dependencies": { "@opentelemetry/api": "^1.4.1", - "@opentelemetry/api-logs": "0.40.0", - "@opentelemetry/sdk-logs": "0.40.0" + "@opentelemetry/api-logs": "0.41.0", + "@opentelemetry/sdk-logs": "0.41.0" }, "devDependencies": { "@types/node": "18.6.5", diff --git a/auto-merge/js/experimental/examples/opencensus-shim/package.json b/auto-merge/js/experimental/examples/opencensus-shim/package.json index 689d1c7c2..d3c2726c3 100644 --- a/auto-merge/js/experimental/examples/opencensus-shim/package.json +++ b/auto-merge/js/experimental/examples/opencensus-shim/package.json @@ -1,7 +1,7 @@ { "name": "opencensus-shim", "private": true, - "version": "0.40.0", + "version": "0.41.2", "description": "Example of using @opentelemetry/shim-opencensus in Node.js", "main": "index.js", "scripts": { @@ -27,15 +27,14 @@ "url": "https://github.com/open-telemetry/opentelemetry-js/issues" }, "dependencies": { - "@opentelemetry/api": "1.4.1", - "@opentelemetry/sdk-trace-node": "1.14.0", "@opencensus/core": "0.1.0", - "@opencensus/nodejs": "0.1.0", - "@opentelemetry/semantic-conventions": "1.14.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/shim-opencensus": "0.40.0" + "@opencensus/nodejs-base": "0.1.0", + "@opentelemetry/api": "1.4.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2", + "@opentelemetry/shim-opencensus": "0.41.2" }, - "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/opencensus-shim", - "devDependencies": {} + "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/examples/opencensus-shim" } diff --git a/auto-merge/js/experimental/examples/opencensus-shim/setup.js b/auto-merge/js/experimental/examples/opencensus-shim/setup.js index e96c62ae0..37206971e 100644 --- a/auto-merge/js/experimental/examples/opencensus-shim/setup.js +++ b/auto-merge/js/experimental/examples/opencensus-shim/setup.js @@ -29,7 +29,7 @@ const { } = require('@opentelemetry/semantic-conventions'); module.exports = function setup(serviceName) { - const tracing = require('@opencensus/nodejs'); + const tracing = require('@opencensus/nodejs-base'); diag.setLogger(new DiagConsoleLogger(), { logLevel: DiagLogLevel.ALL }); const provider = new NodeTracerProvider({ diff --git a/auto-merge/js/experimental/examples/prometheus/package.json b/auto-merge/js/experimental/examples/prometheus/package.json index 037e147dc..678f2212c 100644 --- a/auto-merge/js/experimental/examples/prometheus/package.json +++ b/auto-merge/js/experimental/examples/prometheus/package.json @@ -1,6 +1,6 @@ { "name": "prometheus-example", - "version": "0.40.0", + "version": "0.41.2", "private": true, "description": "Example of using @opentelemetry/sdk-metrics and @opentelemetry/exporter-prometheus", "main": "index.js", @@ -11,7 +11,7 @@ "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.3.0", - "@opentelemetry/exporter-prometheus": "0.40.0", - "@opentelemetry/sdk-metrics": "1.14.0" + "@opentelemetry/exporter-prometheus": "0.41.2", + "@opentelemetry/sdk-metrics": "1.15.2" } } diff --git a/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/.eslintrc.js b/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/.eslintrc.js index 8d360898b..9cfb3fd42 100644 --- a/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/.eslintrc.js +++ b/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/README.md b/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/README.md index d683d0beb..b2ba24bf9 100644 --- a/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/README.md +++ b/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides an exporter for OTLP gRPC logs using protocol version `v0.18`. +This module provides a logs-exporter for OTLP (gRPC) using protocol version `v0.20.0`. ## Installation diff --git a/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/package.json b/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/package.json index 77e2285f7..d3c2fb9b1 100644 --- a/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/package.json +++ b/auto-merge/js/experimental/packages/exporter-logs-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-logs-otlp-grpc", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry Collector Exporter allows user to send collected log records to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -48,19 +48,19 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/api-logs": "0.40.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", - "@opentelemetry/resources": "1.14.0", + "@opentelemetry/api-logs": "0.41.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/resources": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", @@ -73,11 +73,10 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/sdk-logs": "0.40.0", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/sdk-logs": "0.41.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-grpc", "sideEffects": false diff --git a/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/.eslintrc.js b/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/.eslintrc.js index 3ed0fbeba..9cfb3fd42 100644 --- a/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/.eslintrc.js +++ b/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/README.md b/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/README.md index 933e12077..32d423187 100644 --- a/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/README.md +++ b/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for node to be used with OTLP (`grpc`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.16 <=0.50`. +This module provides a trace-exporter for OTLP (gRPC) traces using protocol version `v0.20.0`. ## Installation diff --git a/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/package.json b/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/package.json index 2ff7f9172..7d310c875 100644 --- a/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/package.json +++ b/auto-merge/js/experimental/packages/exporter-trace-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-trace-otlp-grpc", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry Collector Exporter allows user to send collected traces to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -47,17 +47,17 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-exporter-base": "0.40.0", + "@opentelemetry/otlp-exporter-base": "0.41.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", @@ -70,12 +70,11 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-grpc", "sideEffects": false diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/.eslintrc.js b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/.eslintrc.js index 3ed0fbeba..9cfb3fd42 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/.eslintrc.js +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md index 5445862af..7a257ba1b 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for node to be used with OTLP (`grpc`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.16 <=0.53`. +This module provides a metrics-exporter for OTLP (gRPC) using protocol version `v0.20.0`. ## Installation @@ -71,7 +70,7 @@ In addition to settings passed to the constructor, the exporter also supports co | OTEL_EXPORTER_OTLP_CLIENT_KEY | The path to the file containing private client key to use when verifying an OTLP trace, metric or log client's TLS credentials. Must provide a client certificate/chain when providing a private client key. By default no client key file is used. | | OTEL_EXPORTER_OTLP_METRICS_CLIENT_CERTIFICATE | The path to the file containing trusted client certificate/chain for clients private key to use when verifying an OTLP metric server's TLS credentials. Must provide a private client key when providing a certificate/chain. By default no chain file is used. | | OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE | The path to the file containing trusted client certificate/chain for clients private key to use when verifying an OTLP trace, metric and log server's TLS credentials. Must provide a private client key when providing a certificate/chain. By default no chain file is used. | -| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, and `delta`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | +| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, `delta`, and `lowmemory`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. `lowmemory` select delta aggregation temporality for Synchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for Synchronous UpDownCounter, Asynchronous Counter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | > Settings configured programmatically take precedence over environment variables. Per-signal environment variables take precedence over non-per-signal environment variables. diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json index 4697eacdb..b1156ba3f 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-grpc", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -47,16 +47,16 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", @@ -69,13 +69,12 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.40.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", + "@opentelemetry/otlp-grpc-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc", "sideEffects": false diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts index 6749c6010..a85d2f342 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-grpc/test/OTLPMetricExporter.test.ts @@ -35,15 +35,13 @@ import { setUp, shutdown, } from './metricsHelper'; -import { - AggregationTemporality, - ResourceMetrics, -} from '@opentelemetry/sdk-metrics'; +import { ResourceMetrics } from '@opentelemetry/sdk-metrics'; import { IExportMetricsServiceRequest, IResourceMetrics, } from '@opentelemetry/otlp-transformer'; import { VERSION } from '../src/version'; +import { AggregationTemporalityPreference } from '@opentelemetry/exporter-metrics-otlp-http'; const metricsServiceProtoPath = 'opentelemetry/proto/collector/metrics/v1/metrics_service.proto'; @@ -144,7 +142,7 @@ const testOTLPMetricExporter = (params: TestParams) => { url: address, credentials, metadata: metadata, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); setUp(); @@ -199,7 +197,7 @@ const testOTLPMetricExporter = (params: TestParams) => { headers: { foo: 'bar', }, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); const args = warnStub.args[0]; assert.strictEqual(args[0], 'Headers cannot be set when using grpc'); @@ -211,7 +209,7 @@ const testOTLPMetricExporter = (params: TestParams) => { } collectorExporter = new OTLPMetricExporter({ url: `${address}/v1/metrics`, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); const args = warnStub.args[0]; assert.strictEqual( @@ -294,7 +292,7 @@ describe('OTLPMetricExporter - node (getDefaultUrl)', () => { const url = 'http://foo.bar.com'; const collectorExporter = new OTLPMetricExporter({ url, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); setTimeout(() => { assert.strictEqual(collectorExporter._otlpExporter.url, 'foo.bar.com'); @@ -343,7 +341,7 @@ describe('when configuring via environment', () => { envSource.OTEL_EXPORTER_OTLP_METRICS_HEADERS = 'foo=boo'; const collectorExporter = new OTLPMetricExporter({ metadata, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); assert.deepStrictEqual( collectorExporter._otlpExporter.metadata?.get('foo'), diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/.eslintrc.js b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/.eslintrc.js index 3ed0fbeba..9cfb3fd42 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/.eslintrc.js +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md index 6a2e160ba..0056d2f3c 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for node to be used with OTLP (`http/protobuf`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.32 <=0.53`. +This module provides a metrics-exporter for OTLP (http/protobuf) using protocol version `v0.20.0`. ## Installation @@ -51,7 +50,7 @@ In addition to settings passed to the constructor, the exporter also supports co |---------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | OTEL_EXPORTER_OTLP_ENDPOINT | The endpoint to send metrics to. This will also be used for the traces exporter if `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` is not configured. By default `http://localhost:4318` will be used. `/v1/metrics` will be automatically appended to configured values. | | OTEL_EXPORTER_OTLP_METRICS_ENDPOINT | The endpoint to send metrics to. By default `https://localhost:4318/v1/metrics` will be used. `v1/metrics` will not be appended automatically and has to be added explicitly. | -| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, and `delta`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | +| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, `delta` and `lowmemory`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. `lowmemory` selects delta aggregation temporality for Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter, Asynchronous Counter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | > Settings configured programmatically take precedence over environment variables. Per-signal environment variables take > precedence over non-per-signal environment variables. diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json index 08a8fb053..e27d1c89f 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-metrics-otlp-proto", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -47,15 +47,15 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", @@ -67,14 +67,13 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.40.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", - "@opentelemetry/otlp-proto-exporter-base": "0.40.0", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-metrics-otlp-http": "0.41.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", + "@opentelemetry/otlp-proto-exporter-base": "0.41.2", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-proto", "sideEffects": false diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts index d3270b6a9..4d4856481 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts @@ -38,11 +38,11 @@ import { setUp, shutdown, } from './metricsHelper'; +import { ResourceMetrics } from '@opentelemetry/sdk-metrics'; import { - AggregationTemporality, - ResourceMetrics, -} from '@opentelemetry/sdk-metrics'; -import { OTLPMetricExporterOptions } from '@opentelemetry/exporter-metrics-otlp-http'; + AggregationTemporalityPreference, + OTLPMetricExporterOptions, +} from '@opentelemetry/exporter-metrics-otlp-http'; import { Stream, PassThrough } from 'stream'; import { OTLPExporterNodeConfigBase } from '@opentelemetry/otlp-exporter-base'; import { IExportMetricsServiceRequest } from '@opentelemetry/otlp-transformer'; @@ -176,7 +176,7 @@ describe('OTLPMetricExporter - node with proto over http', () => { url: 'http://foo.bar.com', keepAlive: true, httpAgentOptions: { keepAliveMsecs: 2000 }, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }; collectorExporter = new OTLPMetricExporter(collectorExporterConfig); setUp(); diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/.eslintrc.js b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/.eslintrc.js index f756f4488..9baf1b495 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/.eslintrc.js +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/package.json b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/package.json index 6a501c55d..327e452c9 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/package.json +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-prometheus", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry Exporter Prometheus provides a metrics endpoint for Prometheus", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,13 +44,13 @@ }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/semantic-conventions": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", @@ -61,10 +61,9 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-prometheus", "sideEffects": false diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts index 2a7cb5fb4..8f84c5134 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusExporter.ts @@ -33,7 +33,7 @@ export class PrometheusExporter extends MetricReader { port: 9464, endpoint: '/metrics', prefix: '', - appendTimestamp: true, + appendTimestamp: false, }; private readonly _host?: string; diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts index 75b29bb61..7dc424a2b 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/src/PrometheusSerializer.ts @@ -176,7 +176,7 @@ export class PrometheusSerializer { private _prefix: string | undefined; private _appendTimestamp: boolean; - constructor(prefix?: string, appendTimestamp = true) { + constructor(prefix?: string, appendTimestamp = false) { if (prefix) { this._prefix = prefix + '_'; } diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts index 292ad3db1..b4c6f0ade 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusExporter.test.ts @@ -21,12 +21,12 @@ import * as sinon from 'sinon'; import * as http from 'http'; import { PrometheusExporter } from '../src'; import { - mockedHrTimeMs, mockHrTime, sdkLanguage, sdkName, sdkVersion, serviceName, + mockedHrTimeMs, } from './util'; import { SinonStubbedInstance } from 'sinon'; @@ -290,7 +290,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total a test description', '# TYPE counter_total counter', - `counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'counter_total{key1="attributeValue1"} 10', '', ]); }); @@ -320,7 +320,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP metric_observable_gauge a test description', '# TYPE metric_observable_gauge gauge', - `metric_observable_gauge{pid="123",core="1"} 0.999 ${mockedHrTimeMs}`, + 'metric_observable_gauge{pid="123",core="1"} 0.999', '', ]); }); @@ -340,8 +340,8 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total a test description', '# TYPE counter_total counter', - `counter_total{counterKey1="attributeValue1"} 10 ${mockedHrTimeMs}`, - `counter_total{counterKey1="attributeValue2"} 20 ${mockedHrTimeMs}`, + 'counter_total{counterKey1="attributeValue1"} 10', + 'counter_total{counterKey1="attributeValue2"} 20', '', ]); }); @@ -389,7 +389,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total description missing', '# TYPE counter_total counter', - `counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'counter_total{key1="attributeValue1"} 10', '', ]); }); @@ -406,7 +406,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_bad_name_total description missing', '# TYPE counter_bad_name_total counter', - `counter_bad_name_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'counter_bad_name_total{key1="attributeValue1"} 10', '', ]); }); @@ -424,7 +424,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter a test description', '# TYPE counter gauge', - `counter{key1="attributeValue1"} 20 ${mockedHrTimeMs}`, + 'counter{key1="attributeValue1"} 20', '', ]); }); @@ -453,7 +453,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP metric_observable_counter a test description', '# TYPE metric_observable_counter counter', - `metric_observable_counter{key1="attributeValue1"} 20 ${mockedHrTimeMs}`, + 'metric_observable_counter{key1="attributeValue1"} 20', '', ]); }); @@ -484,7 +484,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP metric_observable_up_down_counter a test description', '# TYPE metric_observable_up_down_counter gauge', - `metric_observable_up_down_counter{key1="attributeValue1"} 20 ${mockedHrTimeMs}`, + 'metric_observable_up_down_counter{key1="attributeValue1"} 20', '', ]); }); @@ -503,24 +503,24 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP test_histogram a test description', '# TYPE test_histogram histogram', - `test_histogram_count{key1="attributeValue1"} 1 ${mockedHrTimeMs}`, - `test_histogram_sum{key1="attributeValue1"} 20 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="0"} 0 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="5"} 0 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="10"} 0 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="25"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="50"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="75"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="100"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="250"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="500"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="750"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="1000"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="2500"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="5000"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="7500"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="10000"} 1 ${mockedHrTimeMs}`, - `test_histogram_bucket{key1="attributeValue1",le="+Inf"} 1 ${mockedHrTimeMs}`, + 'test_histogram_count{key1="attributeValue1"} 1', + 'test_histogram_sum{key1="attributeValue1"} 20', + 'test_histogram_bucket{key1="attributeValue1",le="0"} 0', + 'test_histogram_bucket{key1="attributeValue1",le="5"} 0', + 'test_histogram_bucket{key1="attributeValue1",le="10"} 0', + 'test_histogram_bucket{key1="attributeValue1",le="25"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="50"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="75"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="100"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="250"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="500"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="750"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="1000"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="2500"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="5000"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="7500"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="10000"} 1', + 'test_histogram_bucket{key1="attributeValue1",le="+Inf"} 1', '', ]); }); @@ -562,7 +562,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP test_prefix_counter_total description missing', '# TYPE test_prefix_counter_total counter', - `test_prefix_counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'test_prefix_counter_total{key1="attributeValue1"} 10', '', ]); @@ -591,7 +591,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total description missing', '# TYPE counter_total counter', - `counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'counter_total{key1="attributeValue1"} 10', '', ]); @@ -620,7 +620,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total description missing', '# TYPE counter_total counter', - `counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, + 'counter_total{key1="attributeValue1"} 10', '', ]); @@ -632,10 +632,10 @@ describe('PrometheusExporter', () => { ); }); - it('should export a metric without timestamp', done => { + it('should export a metric with timestamp', done => { exporter = new PrometheusExporter( { - appendTimestamp: false, + appendTimestamp: true, }, async () => { setup(exporter); @@ -649,7 +649,7 @@ describe('PrometheusExporter', () => { ...serializedDefaultResourceLines, '# HELP counter_total description missing', '# TYPE counter_total counter', - 'counter_total{key1="attributeValue1"} 10', + `counter_total{key1="attributeValue1"} 10 ${mockedHrTimeMs}`, '', ]); diff --git a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts index 5495ca0a8..1a39aae00 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-exporter-prometheus/test/PrometheusSerializer.test.ts @@ -118,17 +118,17 @@ describe('PrometheusSerializer', () => { it('should serialize metrics with singular data type', async () => { const serializer = new PrometheusSerializer(); const result = await testSerializer(serializer); + assert.strictEqual(result, 'test_total{foo1="bar1",foo2="bar2"} 1\n'); + }); + + it('should serialize metrics with singular data type with timestamp', async () => { + const serializer = new PrometheusSerializer(undefined, true); + const result = await testSerializer(serializer); assert.strictEqual( result, `test_total{foo1="bar1",foo2="bar2"} 1 ${mockedHrTimeMs}\n` ); }); - - it('should serialize metrics with singular data type without timestamp', async () => { - const serializer = new PrometheusSerializer(undefined, false); - const result = await testSerializer(serializer); - assert.strictEqual(result, 'test_total{foo1="bar1",foo2="bar2"} 1\n'); - }); }); describe('Histogram', () => { @@ -168,20 +168,6 @@ describe('PrometheusSerializer', () => { it('should serialize metrics with histogram data type', async () => { const serializer = new PrometheusSerializer(); const result = await testSerializer(serializer); - assert.strictEqual( - result, - `test_count{foo1="bar1",foo2="bar2"} 1 ${mockedHrTimeMs}\n` + - `test_sum{foo1="bar1",foo2="bar2"} 5 ${mockedHrTimeMs}\n` + - `test_bucket{foo1="bar1",foo2="bar2",le="1"} 0 ${mockedHrTimeMs}\n` + - `test_bucket{foo1="bar1",foo2="bar2",le="10"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{foo1="bar1",foo2="bar2",le="100"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{foo1="bar1",foo2="bar2",le="+Inf"} 1 ${mockedHrTimeMs}\n` - ); - }); - - it('serialize metric record with sum aggregator without timestamp', async () => { - const serializer = new PrometheusSerializer(undefined, false); - const result = await testSerializer(serializer); assert.strictEqual( result, 'test_count{foo1="bar1",foo2="bar2"} 1\n' + @@ -192,6 +178,20 @@ describe('PrometheusSerializer', () => { 'test_bucket{foo1="bar1",foo2="bar2",le="+Inf"} 1\n' ); }); + + it('serialize metric record with sum aggregator with timestamp', async () => { + const serializer = new PrometheusSerializer(undefined, true); + const result = await testSerializer(serializer); + assert.strictEqual( + result, + `test_count{foo1="bar1",foo2="bar2"} 1 ${mockedHrTimeMs}\n` + + `test_sum{foo1="bar1",foo2="bar2"} 5 ${mockedHrTimeMs}\n` + + `test_bucket{foo1="bar1",foo2="bar2",le="1"} 0 ${mockedHrTimeMs}\n` + + `test_bucket{foo1="bar1",foo2="bar2",le="10"} 1 ${mockedHrTimeMs}\n` + + `test_bucket{foo1="bar1",foo2="bar2",le="100"} 1 ${mockedHrTimeMs}\n` + + `test_bucket{foo1="bar1",foo2="bar2",le="+Inf"} 1 ${mockedHrTimeMs}\n` + ); + }); }); }); @@ -233,20 +233,20 @@ describe('PrometheusSerializer', () => { result, '# HELP test_total foobar\n' + '# TYPE test_total counter\n' + - `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + - `test_total{val="2"} 1 ${mockedHrTimeMs}\n` + 'test_total{val="1"} 1\n' + + 'test_total{val="2"} 1\n' ); }); - it('should serialize metric record without timestamp', async () => { - const serializer = new PrometheusSerializer(undefined, false); + it('should serialize metric record with timestamp', async () => { + const serializer = new PrometheusSerializer(undefined, true); const result = await testSerializer(serializer); assert.strictEqual( result, '# HELP test_total foobar\n' + '# TYPE test_total counter\n' + - 'test_total{val="1"} 1\n' + - 'test_total{val="2"} 1\n' + `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + + `test_total{val="2"} 1 ${mockedHrTimeMs}\n` ); }); }); @@ -287,20 +287,20 @@ describe('PrometheusSerializer', () => { result, '# HELP test_total foobar\n' + '# TYPE test_total gauge\n' + - `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + - `test_total{val="2"} 1 ${mockedHrTimeMs}\n` + 'test_total{val="1"} 1\n' + + 'test_total{val="2"} 1\n' ); }); - it('serialize metric record without timestamp', async () => { - const serializer = new PrometheusSerializer(undefined, false); + it('serialize metric record with timestamp', async () => { + const serializer = new PrometheusSerializer(undefined, true); const result = await testSerializer(serializer); assert.strictEqual( result, '# HELP test_total foobar\n' + '# TYPE test_total gauge\n' + - 'test_total{val="1"} 1\n' + - 'test_total{val="2"} 1\n' + `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + + `test_total{val="2"} 1 ${mockedHrTimeMs}\n` ); }); }); @@ -341,20 +341,20 @@ describe('PrometheusSerializer', () => { result, '# HELP test_total foobar\n' + '# TYPE test_total gauge\n' + - `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + - `test_total{val="2"} 1 ${mockedHrTimeMs}\n` + 'test_total{val="1"} 1\n' + + 'test_total{val="2"} 1\n' ); }); - it('serialize metric record without timestamp', async () => { - const serializer = new PrometheusSerializer(undefined, false); + it('serialize metric record with timestamp', async () => { + const serializer = new PrometheusSerializer(undefined, true); const result = await testSerializer(serializer); assert.strictEqual( result, '# HELP test_total foobar\n' + '# TYPE test_total gauge\n' + - 'test_total{val="1"} 1\n' + - 'test_total{val="2"} 1\n' + `test_total{val="1"} 1 ${mockedHrTimeMs}\n` + + `test_total{val="2"} 1 ${mockedHrTimeMs}\n` ); }); }); @@ -399,18 +399,18 @@ describe('PrometheusSerializer', () => { result, '# HELP test foobar\n' + '# TYPE test histogram\n' + - `test_count{val="1"} 3 ${mockedHrTimeMs}\n` + - `test_sum{val="1"} 175 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="1"} 0 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="10"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="100"} 2 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="+Inf"} 3 ${mockedHrTimeMs}\n` + - `test_count{val="2"} 1 ${mockedHrTimeMs}\n` + - `test_sum{val="2"} 5 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="1"} 0 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="10"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="100"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="+Inf"} 1 ${mockedHrTimeMs}\n` + 'test_count{val="1"} 3\n' + + 'test_sum{val="1"} 175\n' + + 'test_bucket{val="1",le="1"} 0\n' + + 'test_bucket{val="1",le="10"} 1\n' + + 'test_bucket{val="1",le="100"} 2\n' + + 'test_bucket{val="1",le="+Inf"} 3\n' + + 'test_count{val="2"} 1\n' + + 'test_sum{val="2"} 5\n' + + 'test_bucket{val="2",le="1"} 0\n' + + 'test_bucket{val="2",le="10"} 1\n' + + 'test_bucket{val="2",le="100"} 1\n' + + 'test_bucket{val="2",le="+Inf"} 1\n' ); }); @@ -448,16 +448,16 @@ describe('PrometheusSerializer', () => { result, '# HELP test foobar\n' + '# TYPE test histogram\n' + - `test_count{val="1"} 3 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="1"} 0 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="10"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="100"} 2 ${mockedHrTimeMs}\n` + - `test_bucket{val="1",le="+Inf"} 3 ${mockedHrTimeMs}\n` + - `test_count{val="2"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="1"} 0 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="10"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="100"} 1 ${mockedHrTimeMs}\n` + - `test_bucket{val="2",le="+Inf"} 1 ${mockedHrTimeMs}\n` + 'test_count{val="1"} 3\n' + + 'test_bucket{val="1",le="1"} 0\n' + + 'test_bucket{val="1",le="10"} 1\n' + + 'test_bucket{val="1",le="100"} 2\n' + + 'test_bucket{val="1",le="+Inf"} 3\n' + + 'test_count{val="2"} 1\n' + + 'test_bucket{val="2",le="1"} 0\n' + + 'test_bucket{val="2",le="10"} 1\n' + + 'test_bucket{val="2",le="100"} 1\n' + + 'test_bucket{val="2",le="+Inf"} 1\n' ); }); }); @@ -518,7 +518,7 @@ describe('PrometheusSerializer', () => { '# HELP test_total description missing\n' + `# UNIT test_total ${unitOfMetric}\n` + '# TYPE test_total counter\n' + - `test_total 1 ${mockedHrTimeMs}\n` + 'test_total 1\n' ); }); @@ -533,7 +533,7 @@ describe('PrometheusSerializer', () => { serializedDefaultResource + '# HELP test_total description missing\n' + '# TYPE test_total counter\n' + - `test_total 1 ${mockedHrTimeMs}\n` + 'test_total 1\n' ); }); @@ -541,14 +541,14 @@ describe('PrometheusSerializer', () => { const serializer = new PrometheusSerializer(); const result = await getCounterResult('test', serializer); - assert.strictEqual(result, `test_total 1 ${mockedHrTimeMs}\n`); + assert.strictEqual(result, 'test_total 1\n'); }); it('should not rename metric of type counter when name contains _total suffix', async () => { const serializer = new PrometheusSerializer(); const result = await getCounterResult('test_total', serializer); - assert.strictEqual(result, `test_total 1 ${mockedHrTimeMs}\n`); + assert.strictEqual(result, 'test_total 1\n'); }); }); @@ -594,7 +594,7 @@ describe('PrometheusSerializer', () => { counter.add(1); }); - assert.strictEqual(result, `test_total 1 ${mockedHrTimeMs}\n`); + assert.strictEqual(result, 'test_total 1\n'); }); it('should serialize non-string attribute values in JSON representations', async () => { @@ -615,7 +615,7 @@ describe('PrometheusSerializer', () => { assert.strictEqual( result, - `test_total{true="true",false="false",array="[1,null,null,2]",object="{}",Infinity="null",NaN="null",null="null",undefined=""} 1 ${mockedHrTimeMs}\n` + 'test_total{true="true",false="false",array="[1,null,null,2]",object="{}",Infinity="null",NaN="null",null="null",undefined=""} 1\n' ); }); @@ -634,7 +634,7 @@ describe('PrometheusSerializer', () => { assert.strictEqual( result, - `test{foo1="bar1",foo2="bar2"} ${esac[1]} ${mockedHrTimeMs}\n` + `test{foo1="bar1",foo2="bar2"} ${esac[1]}\n` ); } }); @@ -662,7 +662,7 @@ describe('PrometheusSerializer', () => { 'backslashN="\u005c\u005c\u006e",' + 'backslashDoubleQuote="\u005c\u005c\u005c\u0022",' + 'backslashLineFeed="\u005c\u005c\u005c\u006e"' + - `} 1 ${mockedHrTimeMs}\n` + '} 1\n' ); }); @@ -678,10 +678,7 @@ describe('PrometheusSerializer', () => { } as unknown as MetricAttributes); }); - assert.strictEqual( - result, - `test_total{account_id="123456"} 1 ${mockedHrTimeMs}\n` - ); + assert.strictEqual(result, 'test_total{account_id="123456"} 1\n'); }); }); diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/.eslintignore b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/.eslintignore index 378eac25d..cd163f08b 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/.eslintignore +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/.eslintignore @@ -1 +1,2 @@ build +test/proto diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/.eslintrc.js b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/.eslintrc.js index f756f4488..9baf1b495 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/.eslintrc.js +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/package.json b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/package.json index b05ee5172..4e3b39bce 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/package.json +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-grpc", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry grpc automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -9,7 +9,7 @@ "prepublishOnly": "npm run compile", "compile": "tsc --build", "clean": "tsc --build --clean", - "test": "nyc ts-mocha -p tsconfig.json test/**/*.test.ts", + "test": "npm run protos:generate && nyc ts-mocha -p tsconfig.json test/**/*.test.ts", "tdd": "npm run test -- --watch-extensions ts --watch", "lint": "eslint . --ext .ts", "lint:fix": "eslint . --ext .ts --fix", @@ -18,7 +18,8 @@ "watch": "tsc --build --watch", "precompile": "cross-var lerna run version --scope $npm_package_name --include-dependencies", "prewatch": "node ../../../scripts/version-update.js", - "peer-api-check": "node ../../../scripts/peer-api-check.js" + "peer-api-check": "node ../../../scripts/peer-api-check.js", + "protos:generate": "cd test/fixtures && buf generate" }, "keywords": [ "opentelemetry", @@ -45,24 +46,27 @@ "access": "public" }, "devDependencies": { + "@bufbuild/buf": "1.21.0-1", "@grpc/grpc-js": "^1.7.1", "@grpc/proto-loader": "^0.7.3", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.14.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-node": "1.14.0", + "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", + "@protobuf-ts/grpc-transport": "2.9.1", + "@protobuf-ts/runtime": "2.9.1", + "@protobuf-ts/runtime-rpc": "2.9.1", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", - "node-pre-gyp": "0.17.0", "nyc": "15.1.0", - "semver": "7.5.2", + "semver": "7.5.4", "sinon": "15.1.2", "ts-mocha": "10.0.0", "typescript": "4.4.4" @@ -71,9 +75,8 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/semantic-conventions": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-grpc", "sideEffects": false diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts index 1ffaab39b..9e26062d1 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/clientUtils.ts @@ -14,27 +14,24 @@ * limitations under the License. */ -import { GrpcJsInstrumentation } from './'; -import type { GrpcClientFunc, SendUnaryDataCallback } from './types'; -import { - Span, - SpanStatusCode, - SpanStatus, - propagation, - context, -} from '@opentelemetry/api'; +import type { EventEmitter } from 'events'; +import type { Span, SpanStatus } from '@opentelemetry/api'; +import type { Client, Metadata, ServiceError } from '@grpc/grpc-js'; import type * as grpcJs from '@grpc/grpc-js'; +import type { GrpcJsInstrumentation } from './'; +import type { GrpcClientFunc, SendUnaryDataCallback } from './types'; +import type { metadataCaptureType } from '../internal-types'; + +import { propagation, context } from '@opentelemetry/api'; +import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; +import { AttributeNames } from '../enums/AttributeNames'; +import { GRPC_STATUS_CODE_OK } from '../status-code'; import { _grpcStatusCodeToSpanStatus, _grpcStatusCodeToOpenTelemetryStatusCode, _methodIsIgnored, } from '../utils'; -import { CALL_SPAN_ENDED } from './serverUtils'; -import { EventEmitter } from 'events'; -import { AttributeNames } from '../enums/AttributeNames'; -import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; -import { metadataCaptureType } from '../internal-types'; -import { GRPC_STATUS_CODE_OK } from '../status-code'; +import { errorMonitor } from 'events'; /** * Parse a package method list and return a list of methods to patch @@ -42,7 +39,7 @@ import { GRPC_STATUS_CODE_OK } from '../status-code'; */ export function getMethodsToWrap( this: GrpcJsInstrumentation, - client: typeof grpcJs.Client, + client: typeof Client, methods: { [key: string]: { originalName?: string } } ): string[] { const methodList: string[] = []; @@ -66,6 +63,91 @@ export function getMethodsToWrap( return methodList; } +/** + * Patches a callback so that the current span for this trace is also ended + * when the callback is invoked. + */ +export function patchedCallback( + span: Span, + callback: SendUnaryDataCallback +) { + const wrappedFn: SendUnaryDataCallback = ( + err: grpcJs.ServiceError | null, + res?: ResponseType + ) => { + if (err) { + if (err.code) { + span.setStatus(_grpcStatusCodeToSpanStatus(err.code)); + span.setAttribute(SemanticAttributes.RPC_GRPC_STATUS_CODE, err.code); + } + span.setAttributes({ + [AttributeNames.GRPC_ERROR_NAME]: err.name, + [AttributeNames.GRPC_ERROR_MESSAGE]: err.message, + }); + } else { + span.setAttribute( + SemanticAttributes.RPC_GRPC_STATUS_CODE, + GRPC_STATUS_CODE_OK + ); + } + + span.end(); + callback(err, res); + }; + return context.bind(context.active(), wrappedFn); +} + +export function patchResponseMetadataEvent( + span: Span, + call: EventEmitter, + metadataCapture: metadataCaptureType +) { + call.on('metadata', (responseMetadata: any) => { + metadataCapture.client.captureResponseMetadata(span, responseMetadata); + }); +} + +export function patchResponseStreamEvents(span: Span, call: EventEmitter) { + // Both error and status events can be emitted + // the first one emitted set spanEnded to true + let spanEnded = false; + const endSpan = () => { + if (!spanEnded) { + span.end(); + spanEnded = true; + } + }; + context.bind(context.active(), call); + call.on(errorMonitor, (err: ServiceError) => { + if (spanEnded) { + return; + } + + span.setStatus({ + code: _grpcStatusCodeToOpenTelemetryStatusCode(err.code), + message: err.message, + }); + span.setAttributes({ + [AttributeNames.GRPC_ERROR_NAME]: err.name, + [AttributeNames.GRPC_ERROR_MESSAGE]: err.message, + [SemanticAttributes.RPC_GRPC_STATUS_CODE]: err.code, + }); + + endSpan(); + }); + + call.on('status', (status: SpanStatus) => { + if (spanEnded) { + return; + } + + span.setStatus(_grpcStatusCodeToSpanStatus(status.code)); + span.setAttribute(SemanticAttributes.RPC_GRPC_STATUS_CODE, status.code); + + endSpan(); + }); +} + /** * Execute grpc client call. Apply completitionspan properties and end the * span on callback or receiving an emitted event. @@ -77,41 +159,6 @@ export function makeGrpcClientRemoteCall( metadata: grpcJs.Metadata, self: grpcJs.Client ): (span: Span) => EventEmitter { - /** - * Patches a callback so that the current span for this trace is also ended - * when the callback is invoked. - */ - function patchedCallback( - span: Span, - callback: SendUnaryDataCallback - ) { - const wrappedFn: SendUnaryDataCallback = ( - err: grpcJs.ServiceError | null, - res?: ResponseType - ) => { - if (err) { - if (err.code) { - span.setStatus(_grpcStatusCodeToSpanStatus(err.code)); - span.setAttribute(SemanticAttributes.RPC_GRPC_STATUS_CODE, err.code); - } - span.setAttributes({ - [AttributeNames.GRPC_ERROR_NAME]: err.name, - [AttributeNames.GRPC_ERROR_MESSAGE]: err.message, - }); - } else { - span.setStatus({ code: SpanStatusCode.UNSET }); - span.setAttribute( - SemanticAttributes.RPC_GRPC_STATUS_CODE, - GRPC_STATUS_CODE_OK - ); - } - - span.end(); - callback(err, res); - }; - return context.bind(context.active(), wrappedFn); - } - return (span: Span) => { // if unary or clientStream if (!original.responseStream) { @@ -135,96 +182,70 @@ export function makeGrpcClientRemoteCall( // if server stream or bidi if (original.responseStream) { - // Both error and status events can be emitted - // the first one emitted set spanEnded to true - let spanEnded = false; - const endSpan = () => { - if (!spanEnded) { - span.end(); - spanEnded = true; - } - }; - context.bind(context.active(), call); - call.on('error', (err: grpcJs.ServiceError) => { - if (call[CALL_SPAN_ENDED]) { - return; - } - call[CALL_SPAN_ENDED] = true; - - span.setStatus({ - code: _grpcStatusCodeToOpenTelemetryStatusCode(err.code), - message: err.message, - }); - span.setAttributes({ - [AttributeNames.GRPC_ERROR_NAME]: err.name, - [AttributeNames.GRPC_ERROR_MESSAGE]: err.message, - [SemanticAttributes.RPC_GRPC_STATUS_CODE]: err.code, - }); - - endSpan(); - }); - - call.on('status', (status: SpanStatus) => { - if (call[CALL_SPAN_ENDED]) { - return; - } - call[CALL_SPAN_ENDED] = true; - - span.setStatus(_grpcStatusCodeToSpanStatus(status.code)); - span.setAttribute(SemanticAttributes.RPC_GRPC_STATUS_CODE, status.code); - - endSpan(); - }); + patchResponseStreamEvents(span, call); } return call; }; } -/** - * Returns the metadata argument from user provided arguments (`args`) - */ -export function getMetadata( - this: GrpcJsInstrumentation, - grpcClient: typeof grpcJs, - original: GrpcClientFunc, - args: Array -): grpcJs.Metadata { - let metadata: grpcJs.Metadata; - +export function getMetadataIndex(args: Array): number { // This finds an instance of Metadata among the arguments. // A possible issue that could occur is if the 'options' parameter from // the user contains an '_internal_repr' as well as a 'getMap' function, // but this is an extremely rare case. - let metadataIndex = args.findIndex((arg: unknown | grpcJs.Metadata) => { + return args.findIndex((arg: unknown | Metadata) => { return ( arg && typeof arg === 'object' && - (arg as grpcJs.Metadata)['internalRepr'] && // changed from _internal_repr in grpc --> @grpc/grpc-js https://github.com/grpc/grpc-node/blob/95289edcaf36979cccf12797cc27335da8d01f03/packages/grpc-js/src/metadata.ts#L88 - typeof (arg as grpcJs.Metadata).getMap === 'function' + (arg as Metadata)['internalRepr'] && // changed from _internal_repr in grpc --> @grpc/grpc-js https://github.com/grpc/grpc-node/blob/95289edcaf36979cccf12797cc27335da8d01f03/packages/grpc-js/src/metadata.ts#L88 + typeof (arg as Metadata).getMap === 'function' ); }); +} + +/** + * Returns the metadata argument from user provided arguments (`args`) + * If no metadata is provided in `args`: adds empty metadata to `args` and returns that empty metadata + */ +export function extractMetadataOrSplice( + grpcLib: typeof grpcJs, + args: Array, + spliceIndex: number +) { + let metadata: grpcJs.Metadata; + const metadataIndex = getMetadataIndex(args); if (metadataIndex === -1) { - metadata = new grpcClient.Metadata(); - if (!original.requestStream) { - // unary or server stream - metadataIndex = 1; - } else { - // client stream or bidi - metadataIndex = 0; - } - args.splice(metadataIndex, 0, metadata); + // Create metadata if it does not exist + metadata = new grpcLib.Metadata(); + args.splice(spliceIndex, 0, metadata); } else { - metadata = args[metadataIndex] as grpcJs.Metadata; + metadata = args[metadataIndex] as Metadata; } return metadata; } +/** + * Returns the metadata argument from user provided arguments (`args`) + * Adds empty metadata to arguments if the default is used. + */ +export function extractMetadataOrSpliceDefault( + grpcClient: typeof grpcJs, + original: GrpcClientFunc, + args: Array +): grpcJs.Metadata { + return extractMetadataOrSplice( + grpcClient, + args, + original.requestStream ? 0 : 1 + ); +} + /** * Inject opentelemetry trace context into `metadata` for use by another * grpc receiver * @param metadata */ -export function setSpanContext(metadata: grpcJs.Metadata): void { +export function setSpanContext(metadata: Metadata): void { propagation.inject(context.active(), metadata, { set: (meta, k, v) => meta.set(k, v), }); diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts index eaae47c8e..36be79fd0 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/index.ts @@ -14,15 +14,22 @@ * limitations under the License. */ +import type { EventEmitter } from 'events'; + +import type { + Server, + serialize as Serialize, + deserialize as Deserialize, + Metadata, + Client, + ServiceDefinition, + loadPackageDefinition, + GrpcObject, +} from '@grpc/grpc-js'; + import type * as grpcJs from '@grpc/grpc-js'; -import { - InstrumentationNodeModuleDefinition, - isWrapped, -} from '@opentelemetry/instrumentation'; -import { InstrumentationBase } from '@opentelemetry/instrumentation'; -import { GrpcInstrumentationConfig } from '../types'; -import { metadataCaptureType } from '../internal-types'; -import { + +import type { ServerCallWithMeta, SendUnaryDataCallback, ServerRegisterFunction, @@ -30,7 +37,11 @@ import { MakeClientConstructorFunction, PackageDefinition, GrpcClientFunc, + ClientRequestFunction, } from './types'; +import type { GrpcInstrumentationConfig } from '../types'; +import type { metadataCaptureType } from '../internal-types'; + import { context, propagation, @@ -38,7 +49,15 @@ import { SpanOptions, SpanKind, trace, + Span, } from '@opentelemetry/api'; +import { + InstrumentationNodeModuleDefinition, + isWrapped, + InstrumentationBase, +} from '@opentelemetry/instrumentation'; +import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; + import { shouldNotTraceServerCall, handleServerFunction, @@ -47,12 +66,20 @@ import { import { getMethodsToWrap, makeGrpcClientRemoteCall, - getMetadata, + extractMetadataOrSpliceDefault, + setSpanContext, + patchedCallback, + patchResponseStreamEvents, + patchResponseMetadataEvent, + extractMetadataOrSplice, } from './clientUtils'; -import { EventEmitter } from 'events'; -import { _extractMethodAndService, metadataCapture, URI_REGEX } from '../utils'; +import { + _extractMethodAndService, + metadataCapture, + URI_REGEX, + _methodIsIgnored, +} from '../utils'; import { AttributeValues } from '../enums/AttributeValues'; -import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; export class GrpcJsInstrumentation extends InstrumentationBase { private _metadataCapture: metadataCaptureType; @@ -107,6 +134,41 @@ export class GrpcJsInstrumentation extends InstrumentationBase { 'loadPackageDefinition', this._patchLoadPackageDefinition(moduleExports) ); + if (isWrapped(moduleExports.Client.prototype)) { + this._unwrap(moduleExports.Client.prototype, 'makeUnaryRequest'); + this._unwrap( + moduleExports.Client.prototype, + 'makeClientStreamRequest' + ); + this._unwrap( + moduleExports.Client.prototype, + 'makeServerStreamRequest' + ); + this._unwrap( + moduleExports.Client.prototype, + 'makeBidiStreamRequest' + ); + } + this._wrap( + moduleExports.Client.prototype, + 'makeUnaryRequest', + this._patchClientRequestMethod(moduleExports, false) as any + ); + this._wrap( + moduleExports.Client.prototype, + 'makeClientStreamRequest', + this._patchClientRequestMethod(moduleExports, false) as any + ); + this._wrap( + moduleExports.Client.prototype, + 'makeServerStreamRequest', + this._patchClientRequestMethod(moduleExports, true) as any + ); + this._wrap( + moduleExports.Client.prototype, + 'makeBidiStreamRequest', + this._patchClientRequestMethod(moduleExports, true) as any + ); return moduleExports; }, (moduleExports, version) => { @@ -117,6 +179,16 @@ export class GrpcJsInstrumentation extends InstrumentationBase { this._unwrap(moduleExports, 'makeClientConstructor'); this._unwrap(moduleExports, 'makeGenericClientConstructor'); this._unwrap(moduleExports, 'loadPackageDefinition'); + this._unwrap(moduleExports.Client.prototype, 'makeUnaryRequest'); + this._unwrap( + moduleExports.Client.prototype, + 'makeClientStreamRequest' + ); + this._unwrap( + moduleExports.Client.prototype, + 'makeServerStreamRequest' + ); + this._unwrap(moduleExports.Client.prototype, 'makeBidiStreamRequest'); } ), ]; @@ -143,11 +215,11 @@ export class GrpcJsInstrumentation extends InstrumentationBase { const config = this.getConfig(); instrumentation._diag.debug('patched gRPC server'); return function register( - this: grpcJs.Server, + this: Server, name: string, handler: HandleCall, - serialize: grpcJs.serialize, - deserialize: grpcJs.deserialize, + serialize: Serialize, + deserialize: Deserialize, type: string ): boolean { const originalRegisterResult = originalRegister.call( @@ -171,13 +243,7 @@ export class GrpcJsInstrumentation extends InstrumentationBase { ) { const self = this; - if ( - shouldNotTraceServerCall( - call.metadata, - name, - config.ignoreGrpcMethods - ) - ) { + if (shouldNotTraceServerCall(name, config.ignoreGrpcMethods)) { return handleUntracedServerFunction( type, originalFunc, @@ -220,14 +286,13 @@ export class GrpcJsInstrumentation extends InstrumentationBase { instrumentation._wrap( call, 'sendMetadata', - originalSendMetadata => - (responseMetadata: grpcJs.Metadata) => { - instrumentation._metadataCapture.server.captureResponseMetadata( - span, - responseMetadata - ); - originalSendMetadata.call(call, responseMetadata); - } + originalSendMetadata => (responseMetadata: Metadata) => { + instrumentation._metadataCapture.server.captureResponseMetadata( + span, + responseMetadata + ); + originalSendMetadata.call(call, responseMetadata); + } ); context.with(trace.setSpan(context.active(), span), () => { @@ -246,7 +311,85 @@ export class GrpcJsInstrumentation extends InstrumentationBase { } ); return originalRegisterResult; - } as typeof grpcJs.Server.prototype.register; + } as typeof Server.prototype.register; + }; + } + + /** + * Patch for grpc.Client.make*Request(...) functions. + * Provides auto-instrumentation for client requests when using a Client without + * makeGenericClientConstructor/makeClientConstructor + */ + private _patchClientRequestMethod( + grpcLib: typeof grpcJs, + hasResponseStream: boolean + ): ( + original: ClientRequestFunction + ) => ClientRequestFunction { + const instrumentation = this; + return (original: ClientRequestFunction) => { + instrumentation._diag.debug( + 'patched makeClientStreamRequest on grpc client' + ); + + return function makeClientStreamRequest(this: grpcJs.Client) { + // method must always be at first position + const method = arguments[0]; + const { name, service, methodAttributeValue } = + instrumentation._splitMethodString(method); + + // Do not attempt to trace/inject context if method is ignored + if ( + method != null && + _methodIsIgnored( + methodAttributeValue, + instrumentation.getConfig().ignoreGrpcMethods + ) + ) { + return original.apply(this, [...arguments]); + } + + const modifiedArgs = [...arguments]; + const metadata = extractMetadataOrSplice(grpcLib, modifiedArgs, 4); + + const span = instrumentation.createClientSpan( + name, + methodAttributeValue, + service, + metadata + ); + instrumentation.extractNetMetadata(this, span); + + // Callback is only present when there is no responseStream + if (!hasResponseStream) { + // Replace the callback with the patched one if it is there. + // If the callback arg is not a function on the last position then the client will throw + // and never call the callback -> so there's nothing to patch + const lastArgIndex = modifiedArgs.length - 1; + const callback = modifiedArgs[lastArgIndex]; + if (typeof callback === 'function') { + modifiedArgs[lastArgIndex] = patchedCallback(span, callback); + } + } + + return context.with(trace.setSpan(context.active(), span), () => { + setSpanContext(metadata); + + const call = original.apply(this, [...modifiedArgs]); + patchResponseMetadataEvent( + span, + call, + instrumentation._metadataCapture + ); + + // Subscribe to response stream events when there's a response stream. + if (hasResponseStream) { + patchResponseStreamEvents(span, call); + } + + return call; + }); + }; }; } @@ -263,8 +406,8 @@ export class GrpcJsInstrumentation extends InstrumentationBase { return (original: MakeClientConstructorFunction) => { instrumentation._diag.debug('patching client'); return function makeClientConstructor( - this: typeof grpcJs.Client, - methods: grpcJs.ServiceDefinition, + this: typeof Client, + methods: ServiceDefinition, serviceName: string, options?: object ) { @@ -286,18 +429,18 @@ export class GrpcJsInstrumentation extends InstrumentationBase { private _patchLoadPackageDefinition(grpcClient: typeof grpcJs) { const instrumentation = this; instrumentation._diag.debug('patching loadPackageDefinition'); - return (original: typeof grpcJs.loadPackageDefinition) => { + return (original: typeof loadPackageDefinition) => { return function patchedLoadPackageDefinition( this: null, packageDef: PackageDefinition ) { - const result: grpcJs.GrpcObject = original.call( + const result: GrpcObject = original.call( this, packageDef - ) as grpcJs.GrpcObject; + ) as GrpcObject; instrumentation._patchLoadedPackage(grpcClient, result); return result; - } as typeof grpcJs.loadPackageDefinition; + } as typeof loadPackageDefinition; }; } @@ -310,10 +453,10 @@ export class GrpcJsInstrumentation extends InstrumentationBase { const instrumentation = this; return (original: GrpcClientFunc) => { instrumentation._diag.debug('patch all client methods'); - function clientMethodTrace(this: grpcJs.Client) { + function clientMethodTrace(this: Client) { const name = `grpc.${original.path.replace('/', '')}`; const args = [...arguments]; - const metadata = getMetadata.call( + const metadata = extractMetadataOrSpliceDefault.call( instrumentation, grpcClient, original, @@ -328,18 +471,7 @@ export class GrpcJsInstrumentation extends InstrumentationBase { [SemanticAttributes.RPC_METHOD]: method, [SemanticAttributes.RPC_SERVICE]: service, }); - // set net.peer.* from target (e.g., "dns:otel-productcatalogservice:8080") as a hint to APMs - const parsedUri = URI_REGEX.exec(this.getChannel().getTarget()); - if (parsedUri != null && parsedUri.groups != null) { - span.setAttribute( - SemanticAttributes.NET_PEER_NAME, - parsedUri.groups['name'] - ); - span.setAttribute( - SemanticAttributes.NET_PEER_PORT, - parseInt(parsedUri.groups['port']) - ); - } + instrumentation.extractNetMetadata(this, span); instrumentation._metadataCapture.client.captureRequestMetadata( span, @@ -361,6 +493,51 @@ export class GrpcJsInstrumentation extends InstrumentationBase { }; } + private _splitMethodString(method: string) { + if (method == null) { + return { name: '', service: '', methodAttributeValue: '' }; + } + const name = `grpc.${method.replace('/', '')}`; + const { service, method: methodAttributeValue } = + _extractMethodAndService(method); + return { name, service, methodAttributeValue }; + } + + private createClientSpan( + name: string, + methodAttributeValue: string, + service: string, + metadata?: grpcJs.Metadata + ) { + const span = this.tracer + .startSpan(name, { kind: SpanKind.CLIENT }) + .setAttributes({ + [SemanticAttributes.RPC_SYSTEM]: 'grpc', + [SemanticAttributes.RPC_METHOD]: methodAttributeValue, + [SemanticAttributes.RPC_SERVICE]: service, + }); + + if (metadata != null) { + this._metadataCapture.client.captureRequestMetadata(span, metadata); + } + return span; + } + + private extractNetMetadata(client: grpcJs.Client, span: Span) { + // set net.peer.* from target (e.g., "dns:otel-productcatalogservice:8080") as a hint to APMs + const parsedUri = URI_REGEX.exec(client.getChannel().getTarget()); + if (parsedUri != null && parsedUri.groups != null) { + span.setAttribute( + SemanticAttributes.NET_PEER_NAME, + parsedUri.groups['name'] + ); + span.setAttribute( + SemanticAttributes.NET_PEER_PORT, + parseInt(parsedUri.groups['port']) + ); + } + } + /** * Utility function to patch *all* functions loaded through a proto file. * Recursively searches for Client classes and patches all methods, reversing the @@ -369,7 +546,7 @@ export class GrpcJsInstrumentation extends InstrumentationBase { */ private _patchLoadedPackage( grpcClient: typeof grpcJs, - result: grpcJs.GrpcObject + result: GrpcObject ): void { Object.values(result).forEach(service => { if (typeof service === 'function') { @@ -380,11 +557,7 @@ export class GrpcJsInstrumentation extends InstrumentationBase { ); } else if (typeof service.format !== 'string') { // GrpcObject - this._patchLoadedPackage.call( - this, - grpcClient, - service as grpcJs.GrpcObject - ); + this._patchLoadedPackage.call(this, grpcClient, service as GrpcObject); } }); } diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/serverUtils.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/serverUtils.ts index ecfbc3d95..ad07828e6 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/serverUtils.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/serverUtils.ts @@ -20,21 +20,31 @@ * error event should be processed. */ -import { context, Span, SpanStatusCode } from '@opentelemetry/api'; -import type * as grpcJs from '@grpc/grpc-js'; +import type { + ClientReadableStream, + handleBidiStreamingCall, + handleServerStreamingCall, + handleUnaryCall, + ServiceError, +} from '@grpc/grpc-js'; +import type { Span } from '@opentelemetry/api'; + import type { ServerCallWithMeta, SendUnaryDataCallback, GrpcEmitter, HandleCall, } from './types'; +import type { IgnoreMatcher } from '../types'; + +import { context, SpanStatusCode } from '@opentelemetry/api'; +import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; + import { _grpcStatusCodeToOpenTelemetryStatusCode, _methodIsIgnored, } from '../utils'; -import { IgnoreMatcher } from '../types'; import { AttributeNames } from '../enums/AttributeNames'; -import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; import { GRPC_STATUS_CODE_OK } from '../status-code'; export const CALL_SPAN_ENDED = Symbol('opentelemetry call span ended'); @@ -46,8 +56,8 @@ function serverStreamAndBidiHandler( span: Span, call: GrpcEmitter, original: - | grpcJs.handleBidiStreamingCall - | grpcJs.handleServerStreamingCall + | handleBidiStreamingCall + | handleServerStreamingCall ): void { let spanEnded = false; const endSpan = () => { @@ -79,7 +89,7 @@ function serverStreamAndBidiHandler( endSpan(); }); - call.on('error', (err: grpcJs.ServiceError) => { + call.on('error', (err: ServiceError) => { if (call[CALL_SPAN_ENDED]) { return; } @@ -111,11 +121,11 @@ function clientStreamAndUnaryHandler( call: ServerCallWithMeta, callback: SendUnaryDataCallback, original: - | grpcJs.handleUnaryCall - | grpcJs.ClientReadableStream + | handleUnaryCall + | ClientReadableStream ): void { const patchedCallback: SendUnaryDataCallback = ( - err: grpcJs.ServiceError | null, + err: ServiceError | null, value?: ResponseType ) => { if (err) { @@ -166,8 +176,8 @@ export function handleServerFunction( call, callback, originalFunc as - | grpcJs.handleUnaryCall - | grpcJs.ClientReadableStream + | handleUnaryCall + | ClientReadableStream ); case 'serverStream': case 'server_stream': @@ -176,8 +186,8 @@ export function handleServerFunction( span, call, originalFunc as - | grpcJs.handleBidiStreamingCall - | grpcJs.handleServerStreamingCall + | handleBidiStreamingCall + | handleServerStreamingCall ); default: break; @@ -212,7 +222,6 @@ export function handleUntracedServerFunction( * Returns true if the server call should not be traced. */ export function shouldNotTraceServerCall( - metadata: grpcJs.Metadata, methodName: string, ignoreGrpcMethods?: IgnoreMatcher[] ): boolean { diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/types.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/types.ts index e0ae1545d..06ca7c0b6 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/types.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/grpc-js/types.ts @@ -14,29 +14,38 @@ * limitations under the License. */ -import type * as grpcJs from '@grpc/grpc-js'; import type { EventEmitter } from 'events'; import type { CALL_SPAN_ENDED } from './serverUtils'; +import type { + requestCallback, + ServerUnaryCall, + ServerReadableStream, + ServerWritableStream, + ServerDuplexStream, + Metadata, + Server, + makeGenericClientConstructor, +} from '@grpc/grpc-js'; /** * Server Unary callback type */ -export type SendUnaryDataCallback = grpcJs.requestCallback; +export type SendUnaryDataCallback = requestCallback; /** * Intersection type of all grpc server call types */ export type ServerCall = - | grpcJs.ServerUnaryCall - | grpcJs.ServerReadableStream - | grpcJs.ServerWritableStream - | grpcJs.ServerDuplexStream; + | ServerUnaryCall + | ServerReadableStream + | ServerWritableStream + | ServerDuplexStream; /** * {@link ServerCall} ServerCall extended with misc. missing utility types */ export type ServerCallWithMeta = ServerCall & { - metadata: grpcJs.Metadata; + metadata: Metadata; }; /** @@ -53,10 +62,13 @@ export type GrpcClientFunc = ((...args: unknown[]) => GrpcEmitter) & { responseStream: boolean; }; -export type ServerRegisterFunction = typeof grpcJs.Server.prototype.register; +export type ServerRegisterFunction = typeof Server.prototype.register; -export type MakeClientConstructorFunction = - typeof grpcJs.makeGenericClientConstructor; +export type ClientRequestFunction = ( + ...args: unknown[] +) => ReturnType; + +export type MakeClientConstructorFunction = typeof makeGenericClientConstructor; export type { HandleCall } from '@grpc/grpc-js/build/src/server-call'; export type { PackageDefinition } from '@grpc/grpc-js/build/src/make-client'; diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/index.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/index.ts index 26ea0efdb..5e1bb947d 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/index.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/index.ts @@ -15,4 +15,4 @@ */ export * from './instrumentation'; -export { GrpcInstrumentationConfig } from './types'; +export type { GrpcInstrumentationConfig } from './types'; diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts index d597beaae..bb6e095cf 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/instrumentation.ts @@ -14,10 +14,11 @@ * limitations under the License. */ -import { GrpcInstrumentationConfig } from './types'; +import type { GrpcInstrumentationConfig } from './types'; +import type { MeterProvider, TracerProvider } from '@opentelemetry/api'; + import { VERSION } from './version'; import { GrpcJsInstrumentation } from './grpc-js'; -import * as api from '@opentelemetry/api'; /** The metadata key under which span context is stored as a binary value. */ export const GRPC_TRACE_KEY = 'grpc-trace-bin'; @@ -68,7 +69,7 @@ export class GrpcInstrumentation { * Sets MeterProvider to this plugin * @param meterProvider */ - public setMeterProvider(meterProvider: api.MeterProvider) { + public setMeterProvider(meterProvider: MeterProvider) { this._grpcJsInstrumentation.setMeterProvider(meterProvider); } @@ -76,7 +77,7 @@ export class GrpcInstrumentation { * Sets TraceProvider to this plugin * @param tracerProvider */ - public setTracerProvider(tracerProvider: api.TracerProvider) { + public setTracerProvider(tracerProvider: TracerProvider) { this._grpcJsInstrumentation.setTracerProvider(tracerProvider); } } diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts index 594ad7ce0..50d337b63 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/internal-types.ts @@ -14,28 +14,16 @@ * limitations under the License. */ -import { Span } from '@opentelemetry/api'; -import type * as grpcJsTypes from '@grpc/grpc-js'; +import type { Span } from '@opentelemetry/api'; +import type { Metadata } from '@grpc/grpc-js'; export type metadataCaptureType = { client: { - captureRequestMetadata: ( - span: Span, - metadata: grpcJsTypes.Metadata - ) => void; - captureResponseMetadata: ( - span: Span, - metadata: grpcJsTypes.Metadata - ) => void; + captureRequestMetadata: (span: Span, metadata: Metadata) => void; + captureResponseMetadata: (span: Span, metadata: Metadata) => void; }; server: { - captureRequestMetadata: ( - span: Span, - metadata: grpcJsTypes.Metadata - ) => void; - captureResponseMetadata: ( - span: Span, - metadata: grpcJsTypes.Metadata - ) => void; + captureRequestMetadata: (span: Span, metadata: Metadata) => void; + captureResponseMetadata: (span: Span, metadata: Metadata) => void; }; }; diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts index d9e542f50..3cfbfc1f5 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/src/utils.ts @@ -14,9 +14,10 @@ * limitations under the License. */ -import { SpanStatusCode, SpanStatus, Span } from '@opentelemetry/api'; -import type * as grpcJsTypes from '@grpc/grpc-js'; -import { IgnoreMatcher } from './types'; +import { SpanStatusCode } from '@opentelemetry/api'; +import type { SpanStatus, Span } from '@opentelemetry/api'; +import type { status as GrpcStatus, Metadata } from '@grpc/grpc-js'; +import type { IgnoreMatcher } from './types'; // e.g., "dns:otel-productcatalogservice:8080" or "otel-productcatalogservice:8080" or "127.0.0.1:8080" export const URI_REGEX = @@ -42,7 +43,7 @@ export const findIndex: (args: T[], fn: (arg: T) => boolean) => number = ( * @param status */ export const _grpcStatusCodeToOpenTelemetryStatusCode = ( - status?: grpcJsTypes.status + status?: GrpcStatus ): SpanStatusCode => { if (status !== undefined && status === 0) { return SpanStatusCode.UNSET; @@ -127,7 +128,7 @@ export function metadataCapture( ]) ); - return (span: Span, metadata: grpcJsTypes.Metadata) => { + return (span: Span, metadata: Metadata) => { for (const [ capturedMetadata, normalizedMetadata, diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/.gitignore b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/.gitignore new file mode 100644 index 000000000..c9438a302 --- /dev/null +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/.gitignore @@ -0,0 +1 @@ +/proto diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.gen.yaml b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.gen.yaml new file mode 100644 index 000000000..a0aba044f --- /dev/null +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.gen.yaml @@ -0,0 +1,9 @@ +version: v1 +plugins: + - plugin: buf.build/community/timostamm-protobuf-ts:v2.9.0 + out: ../../test/proto/ts/fixtures + opt: + - long_type_string + - generate_dependencies + - ts_nocheck + diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.lock b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.lock new file mode 100644 index 000000000..65d8f1f75 --- /dev/null +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.lock @@ -0,0 +1,8 @@ +# Generated by buf. DO NOT EDIT. +version: v1 +deps: + - remote: buf.build + owner: googleapis + repository: googleapis + commit: cc916c31859748a68fd229a3c8d7a2e8 + digest: shake256:469b049d0eb04203d5272062636c078decefc96fec69739159c25d85349c50c34c7706918a8b216c5c27f76939df48452148cff8c5c3ae77fa6ba5c25c1b8bf8 diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.yaml b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.yaml new file mode 100644 index 000000000..dc977e439 --- /dev/null +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/fixtures/buf.yaml @@ -0,0 +1,9 @@ +version: v1 +lint: + use: + - DEFAULT +breaking: + use: + - FILE +deps: + - buf.build/googleapis/googleapis diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-js.test.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-js.test.ts index 624d267a2..b7e221029 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-js.test.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-js.test.ts @@ -21,8 +21,8 @@ const instrumentation = new GrpcInstrumentation(); instrumentation.enable(); instrumentation.disable(); -import * as grpcJs from '@grpc/grpc-js'; +import '@grpc/grpc-js'; describe('#grpc-js', () => { - runTests(instrumentation, 'grpc', grpcJs, 12346); + runTests(instrumentation, 'grpc', 12346); }); diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-protobuf-ts.test.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-protobuf-ts.test.ts new file mode 100644 index 000000000..8e238a6ac --- /dev/null +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/grpc-protobuf-ts.test.ts @@ -0,0 +1,831 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { GrpcInstrumentation } from '../src'; + +const instrumentation = new GrpcInstrumentation(); +instrumentation.enable(); +instrumentation.disable(); + +import { GrpcTransport } from '@protobuf-ts/grpc-transport'; +import * as grpc from '@grpc/grpc-js'; +import { GrpcTesterClient } from './proto/ts/fixtures/grpc-test.client'; +import { + InMemorySpanExporter, + NodeTracerProvider, + SimpleSpanProcessor, +} from '@opentelemetry/sdk-trace-node'; +import * as protoLoader from '@grpc/proto-loader'; +import * as path from 'path'; +import * as assert from 'assert'; +import { + context, + ContextManager, + propagation, + SpanKind, + trace, +} from '@opentelemetry/api'; +import { W3CTraceContextPropagator } from '@opentelemetry/core'; +import { AsyncHooksContextManager } from '@opentelemetry/context-async-hooks'; +import { startServer } from './helper'; +import { + assertExportedSpans, + assertNoSpansExported, + SpanAssertionFunction, + TestFunction, +} from './protobuf-ts-utils'; + +const memoryExporter = new InMemorySpanExporter(); +const PROTO_PATH = path.resolve(__dirname, './fixtures/grpc-test.proto'); +const NO_ERROR = grpc.status.UNAUTHENTICATED + 1; + +/** + * Creates a client generated via protobuf-ts that is using the {@link grpc.Client} class + * directly. + */ +function createClient() { + return new GrpcTesterClient( + new GrpcTransport({ + host: 'localhost:3333', + channelCredentials: grpc.credentials.createInsecure(), + }) + ); +} + +/** + * Loads the server from proto and starts it on port 3333. + */ +async function loadAndStartServer() { + const options = { + keepCase: true, + longs: String, + enums: String, + defaults: true, + oneofs: true, + }; + + // Reloading from proto is needed as only servers loaded after the + // instrumentation is enabled will be instrumented. + const packageDefinition = await protoLoader.load(PROTO_PATH, options); + const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + return startServer(proto, 3333); +} + +/** + * Creates a list of test data that includes all possible cases of status codes + * returned by the server, the input for the server to provoke the status codes, + * and the expected result code that should be present on the span. + */ +function getStatusCodeTestData(): { + // Name of the key used in the test (OK, UNAUTHENTICATED, DATA_LOSS, ...) + key: string; + // Input for the server implementation that will provoke the status code from 'key' + input: number; + // The result code that should be present on the created span + expectedResultCode: number; +}[] { + const codes = Object.keys(grpc.status) + .filter(key => !isNaN(Number(grpc.status[key as any]))) + // Remove 'OK' as the test server has special behavior to provoke an 'OK' response + .filter(key => key !== 'OK') + // Create the test data + .map(key => { + return { + key: key, + input: Number(grpc.status[key as any]), + expectedResultCode: Number(grpc.status[key as any]), + }; + }); + + // Push 'OK' with special input to provoke 'OK' response from test-server + codes.push({ + key: 'OK', + input: NO_ERROR, + expectedResultCode: grpc.status.OK, + }); + + return codes; +} + +/** + * Creates tests that assert that no spans are created. + * @param statusCodeTestWithRootSpan function that creates tests that include a root span + * @param statusCodeTestNoRootSpan function that creates tests that do not include a root span + */ +function shouldNotCreateSpans( + statusCodeTestWithRootSpan: TestFunction, + statusCodeTestNoRootSpan: TestFunction +) { + describe('with root span', () => { + getStatusCodeTestData().forEach(({ key, input, expectedResultCode }) => { + statusCodeTestWithRootSpan( + input, + key, + expectedResultCode, + assertNoSpansExported + ); + }); + }); + + describe('without root span', () => { + getStatusCodeTestData().forEach(({ key, input, expectedResultCode }) => { + statusCodeTestNoRootSpan( + input, + key, + expectedResultCode, + assertNoSpansExported + ); + }); + }); +} + +describe('#grpc-protobuf', () => { + let client: GrpcTesterClient; + let server: grpc.Server; + const provider = new NodeTracerProvider(); + let contextManager: ContextManager; + provider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); + + before(() => { + propagation.setGlobalPropagator(new W3CTraceContextPropagator()); + instrumentation.setTracerProvider(provider); + }); + + beforeEach(() => { + memoryExporter.reset(); + contextManager = new AsyncHooksContextManager().enable(); + context.setGlobalContextManager(contextManager); + }); + + describe('client', async () => { + beforeEach(async () => { + instrumentation.enable(); + client = createClient(); + + server = await loadAndStartServer(); + }); + + afterEach(done => { + context.disable(); + server.tryShutdown(() => { + instrumentation.disable(); + done(); + }); + }); + + describe('makeUnaryRequest()', async () => { + async function act(status: number) { + return client.unaryMethod({ + num: status, + }); + } + + function statusCodeTestNoRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, async () => { + // Act + try { + const request = await act(input); + // Assert success results + assert.strictEqual(request.response.num, input); + } catch (e) { + // Assert failure results + assert.strictEqual(e.code, key); + } + // Assert span data + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'UnaryMethod', + expectedSpanStatus + ); + }); + } + + function statusCodeTestWithRootSpan( + input: number, + key: string, + expectedResultCode: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, async () => { + // Arrange + const span = provider + .getTracer('default') + .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); + return context.with( + trace.setSpan(context.active(), span), + async () => { + const rootSpan = trace.getSpan(context.active()); + assert.ok(rootSpan != null); + assert.deepStrictEqual(rootSpan, span); + + // Act + try { + const request = await act(input); + // Assert success results + assert.strictEqual(request.response.num, input); + } catch (e) { + // Assert failure results + assert.strictEqual(e.code, key); + } + + // Assert + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'UnaryMethod', + expectedResultCode, + rootSpan + ); + } + ); + }); + } + + describe('should create root client span and server child span', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestNoRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should create child client span when parent span exists', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestWithRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should not create any spans when disabled', () => { + beforeEach(done => { + instrumentation.disable(); + server.tryShutdown(() => { + loadAndStartServer().then(loadedServer => { + server = loadedServer; + done(); + }); + }); + }); + + afterEach(() => { + instrumentation.enable(); + }); + + shouldNotCreateSpans( + statusCodeTestWithRootSpan, + statusCodeTestNoRootSpan + ); + }); + }); + + describe('makeClientStreamRequest()', () => { + async function act(input: number) { + const call = client.clientStreamMethod({ + num: input, + }); + + await call.requests.send({ num: input }); + await call.requests.send({ num: input }); + await call.requests.complete(); + + return await call.response; + } + + async function statusCodeTestNoRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, async () => { + // Act + try { + const response = await act(input); + // Assert success results + assert.strictEqual(response.num, input * 2); + } catch (e) { + // Assert failure results + assert.strictEqual(e.code, key); + } + + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'ClientStreamMethod', + expectedSpanStatus + ); + }); + } + + async function statusCodeTestWithRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, async () => { + // Arrange + const span = provider + .getTracer('default') + .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); + return context.with( + trace.setSpan(context.active(), span), + async () => { + const rootSpan = trace.getSpan(context.active()); + assert.ok(rootSpan != null); + assert.deepStrictEqual(rootSpan, span); + + // Act + try { + const response = await act(input); + // Assert success results + assert.strictEqual(response.num, input * 2); + } catch (e) { + // Assert failure results + assert.strictEqual(e.code, key); + } + + // Assert + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'ClientStreamMethod', + expectedSpanStatus, + rootSpan + ); + } + ); + }); + } + + describe('should create root client span and server child span', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestNoRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should create child client span when parent span exists', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestWithRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should not create any spans when disabled', () => { + beforeEach(done => { + instrumentation.disable(); + server.tryShutdown(() => { + loadAndStartServer().then(loadedServer => { + server = loadedServer; + done(); + }); + }); + }); + + afterEach(() => { + instrumentation.enable(); + }); + + shouldNotCreateSpans( + statusCodeTestWithRootSpan, + statusCodeTestNoRootSpan + ); + }); + }); + + describe('makeServerStreamRequest()', () => { + function statusCodeTestNoRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, done => { + const serverStream = client.serverStreamMethod({ + num: input, + }); + + serverStream.responses.onMessage(message => { + assert.strictEqual(message.num, input); + }); + + function completeCallback() { + try { + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'ServerStreamMethod', + expectedSpanStatus + ); + } catch (err) { + // catch error and call done() to ensure an error message + // is shown in the test results instead of a test timeout + done(err); + return; + } + done(); + } + + serverStream.responses.onError(completeCallback); + serverStream.responses.onComplete(completeCallback); + }); + } + + function statusCodeTestWithRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, done => { + // Arrange + const span = provider + .getTracer('default') + .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); + context.with(trace.setSpan(context.active(), span), async () => { + const rootSpan = trace.getSpan(context.active()); + assert.ok(rootSpan != null); + assert.deepStrictEqual(rootSpan, span); + + // Act + const serverStream = client.serverStreamMethod({ + num: input, + }); + + serverStream.responses.onMessage(message => { + assert.strictEqual(message.num, input); + }); + + function completeCallback() { + try { + // Assert + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'ServerStreamMethod', + expectedSpanStatus, + rootSpan + ); + } catch (err) { + // catch error and call done() to ensure an error message + // is shown in the test results instead of a test timeout + done(err); + return; + } + done(); + } + + serverStream.responses.onError(completeCallback); + serverStream.responses.onComplete(completeCallback); + }); + }); + } + + describe('should create root client span and server child span', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestNoRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should create child client span when parent span exists', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestWithRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should not create any spans when disabled', () => { + beforeEach(done => { + instrumentation.disable(); + server.tryShutdown(() => { + loadAndStartServer().then(loadedServer => { + server = loadedServer; + done(); + }); + }); + }); + + afterEach(() => { + instrumentation.enable(); + }); + + shouldNotCreateSpans( + statusCodeTestWithRootSpan, + statusCodeTestNoRootSpan + ); + }); + }); + + describe('makeBidiStreamRequest()', () => { + function statusCodeTestNoRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, done => { + const bidiStream = client.bidiStreamMethod(); + + bidiStream.responses.onMessage(message => { + assert.strictEqual(message.num, input); + }); + + function completeHandler() { + try { + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'BidiStreamMethod', + expectedSpanStatus + ); + } catch (err) { + // catch error and call done() to ensure an error message + // is shown in the test results instead of a test timeout + done(err); + return; + } + done(); + } + + bidiStream.responses.onError(completeHandler); + bidiStream.responses.onComplete(completeHandler); + + bidiStream.requests.send({ + num: input, + }); + bidiStream.requests.send({ + num: input, + }); + bidiStream.requests.complete(); + }); + } + + function statusCodeTestWithRootSpan( + input: number, + key: string, + expectedSpanStatus: number, + assertSpans: SpanAssertionFunction + ) { + it('with status code: ' + key, done => { + // Arrange + const span = provider + .getTracer('default') + .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); + context.with(trace.setSpan(context.active(), span), () => { + const rootSpan = trace.getSpan(context.active()); + assert.ok(rootSpan != null); + assert.deepStrictEqual(rootSpan, span); + + // Act + const bidiStream = client.bidiStreamMethod(); + + function completeHandler() { + try { + assertSpans( + memoryExporter, + 'pkg_test.GrpcTester', + 'BidiStreamMethod', + expectedSpanStatus, + rootSpan + ); + } catch (err) { + // catch error and call done() to ensure an error message + // is shown in the test results instead of a test timeout + done(err); + return; + } + done(); + } + + bidiStream.responses.onMessage(message => { + assert.strictEqual(message.num, input); + }); + + bidiStream.responses.onError(completeHandler); + bidiStream.responses.onComplete(completeHandler); + + bidiStream.requests.send({ + num: input, + }); + bidiStream.requests.send({ + num: input, + }); + bidiStream.requests.complete(); + }); + }); + } + + describe('should create root client span and server child span', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestNoRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should create child client span when parent span exists', () => { + getStatusCodeTestData().forEach( + ({ key, input, expectedResultCode }) => { + statusCodeTestWithRootSpan( + input, + key, + expectedResultCode, + assertExportedSpans + ); + } + ); + }); + + describe('should not create any spans when disabled', () => { + beforeEach(done => { + instrumentation.disable(); + server.tryShutdown(() => { + loadAndStartServer().then(loadedServer => { + server = loadedServer; + done(); + }); + }); + }); + + afterEach(() => { + instrumentation.enable(); + }); + + shouldNotCreateSpans( + statusCodeTestWithRootSpan, + statusCodeTestNoRootSpan + ); + }); + }); + }); + + describe('should not produce telemetry when ignored via config', () => { + beforeEach(async () => { + instrumentation.disable(); + instrumentation.setConfig({ + ignoreGrpcMethods: [ + 'UnaryMethod', + new RegExp(/^camel.*Method$/), + (str: string) => str === 'BidiStreamMethod', + ], + }); + instrumentation.enable(); + client = createClient(); + + server = await loadAndStartServer(); + }); + + it('when filtered by exact string', async () => { + await client.unaryMethod({ num: NO_ERROR }); + assertNoSpansExported( + memoryExporter, + 'pkg_test.GrpcTester', + 'UnaryMethod', + grpc.status.OK + ); + }); + + it('when filtered by RegExp', async () => { + await client.camelCaseMethod({ num: NO_ERROR }); + assertNoSpansExported( + memoryExporter, + 'pkg_test.GrpcTester', + 'UnaryMethod', + grpc.status.OK + ); + }); + + it('when filtered by predicate', done => { + const stream = client.bidiStreamMethod({ num: NO_ERROR }); + stream.requests.send({ + num: NO_ERROR, + }); + stream.requests.complete(); + + stream.responses.onComplete(() => { + assertNoSpansExported( + memoryExporter, + 'pkg_test.GrpcTester', + 'UnaryMethod', + grpc.status.OK + ); + done(); + }); + }); + + afterEach(done => { + instrumentation.setConfig({}); + context.disable(); + server.tryShutdown(() => { + instrumentation.disable(); + done(); + }); + }); + }); + + describe('should capture metadata when set up in config', () => { + beforeEach(async () => { + instrumentation.setConfig({ + metadataToSpanAttributes: { + client: { + requestMetadata: ['client_metadata_key'], + responseMetadata: ['server_metadata_key'], + }, + server: { + requestMetadata: ['client_metadata_key'], + responseMetadata: ['server_metadata_key'], + }, + }, + }); + instrumentation.enable(); + client = createClient(); + + server = await loadAndStartServer(); + }); + + it('should capture client metadata', async () => { + await client.unaryMethod( + { num: NO_ERROR }, + { + meta: { + client_metadata_key: 'client_metadata_value', + }, + } + ); + const spans = memoryExporter.getFinishedSpans(); + assert.equal( + spans[0].attributes['rpc.request.metadata.client_metadata_key'], + 'client_metadata_value' + ); + }); + + afterEach(done => { + instrumentation.setConfig({}); + context.disable(); + server.tryShutdown(() => { + instrumentation.disable(); + done(); + }); + }); + }); +}); diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts index 7cdc85d26..9d861fd65 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/helper.ts @@ -32,7 +32,21 @@ import { } from '@opentelemetry/sdk-trace-base'; import * as assert from 'assert'; import * as protoLoader from '@grpc/proto-loader'; -import type * as grpcJs from '@grpc/grpc-js'; +import { + status as GrpcStatus, + ServerUnaryCall, + requestCallback, + ServerReadableStream, + ServerDuplexStream, + ServerWritableStream, + Client, + Metadata, + ServiceError, + Server, + credentials, + loadPackageDefinition, + ServerCredentials, +} from '@grpc/grpc-js'; import { assertPropagation, assertSpan } from './utils/assertionUtils'; import { promisify } from 'util'; import type { GrpcInstrumentation } from '../src'; @@ -53,17 +67,7 @@ interface TestRequestResponse { num: number; } -type ServiceError = grpcJs.ServiceError; -type Client = grpcJs.Client; -type Server = grpcJs.Server; -type ServerUnaryCall = grpcJs.ServerUnaryCall; -type RequestCallback = grpcJs.requestCallback; -type ServerReadableStream = grpcJs.ServerReadableStream; -type ServerWriteableStream = grpcJs.ServerWritableStream; -type ServerDuplexStream = grpcJs.ServerDuplexStream; -type Metadata = grpcJs.Metadata; - -type TestGrpcClient = (typeof grpcJs)['Client'] & { +type TestGrpcClient = Client & { unaryMethodWithMetadata: any; unaryMethod: any; UnaryMethod: any; @@ -105,14 +109,149 @@ const checkEqual = ? requestEqual(x)(y) : false; +const replicate = (request: TestRequestResponse) => { + const result: TestRequestResponse[] = []; + for (let i = 0; i < request.num; i++) { + result.push(request); + } + return result; +}; + +export async function startServer(proto: any, port: number) { + const MAX_ERROR_STATUS = GrpcStatus.UNAUTHENTICATED; + const server = new Server(); + + function getError(msg: string, code: number): ServiceError | null { + const err: ServiceError = { + ...new Error(msg), + name: msg, + message: msg, + code, + details: msg, + metadata: new Metadata(), + }; + return err; + } + + server.addService(proto.GrpcTester.service, { + // An error is emitted every time + // request.num <= MAX_ERROR_STATUS = (status.UNAUTHENTICATED) + // in those cases, erro.code = request.num + + // This method returns the request + // This method returns the request + unaryMethodWithMetadata( + call: ServerUnaryCall, + callback: requestCallback + ) { + const serverMetadata: any = new Metadata(); + serverMetadata.add('server_metadata_key', 'server_metadata_value'); + + call.sendMetadata(serverMetadata); + + call.request.num <= MAX_ERROR_STATUS + ? callback( + getError( + 'Unary Method with Metadata Error', + call.request.num + ) as ServiceError + ) + : callback(null, { num: call.request.num }); + }, + + // This method returns the request + unaryMethod( + call: ServerUnaryCall, + callback: requestCallback + ) { + call.request.num <= MAX_ERROR_STATUS + ? callback( + getError('Unary Method Error', call.request.num) as ServiceError + ) + : callback(null, { num: call.request.num }); + }, + + // This method returns the request + camelCaseMethod( + call: ServerUnaryCall, + callback: requestCallback + ) { + call.request.num <= MAX_ERROR_STATUS + ? callback( + getError('Unary Method Error', call.request.num) as ServiceError + ) + : callback(null, { num: call.request.num }); + }, + + // This method sums the requests + clientStreamMethod( + call: ServerReadableStream, + callback: requestCallback + ) { + let sum = 0; + let hasError = false; + let code = GrpcStatus.OK; + call.on('data', (data: TestRequestResponse) => { + sum += data.num; + if (data.num <= MAX_ERROR_STATUS) { + hasError = true; + code = data.num; + } + }); + call.on('end', () => { + hasError + ? callback(getError('Client Stream Method Error', code) as any) + : callback(null, { num: sum }); + }); + }, + + // This method returns an array that replicates the request, request.num of + // times + serverStreamMethod: (call: ServerWritableStream) => { + const result = replicate(call.request); + + if (call.request.num <= MAX_ERROR_STATUS) { + call.emit( + 'error', + getError('Server Stream Method Error', call.request.num) + ); + } else { + result.forEach(element => { + call.write(element); + }); + } + call.end(); + }, + + // This method returns the request + bidiStreamMethod: (call: ServerDuplexStream) => { + call.on('data', (data: TestRequestResponse) => { + if (data.num <= MAX_ERROR_STATUS) { + call.emit('error', getError('Server Stream Method Error', data.num)); + } else { + call.write(data); + } + }); + call.on('end', () => { + call.end(); + }); + }, + }); + const bindAwait = promisify(server.bindAsync); + await bindAwait.call( + server, + 'localhost:' + port, + ServerCredentials.createInsecure() + ); + server.start(); + return server; +} + export const runTests = ( plugin: GrpcInstrumentation, moduleName: string, - grpc: typeof grpcJs, grpcPort: number ) => { - const MAX_ERROR_STATUS = grpc.status.UNAUTHENTICATED; - const grpcClient = { unaryMethodWithMetadata: ( client: TestGrpcClient, @@ -137,7 +276,7 @@ export const runTests = ( unaryMethod: ( client: TestGrpcClient, request: TestRequestResponse, - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { return client.unaryMethod( @@ -157,7 +296,7 @@ export const runTests = ( UnaryMethod: ( client: TestGrpcClient, request: TestRequestResponse, - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { return client.UnaryMethod( @@ -177,7 +316,7 @@ export const runTests = ( camelCaseMethod: ( client: TestGrpcClient, request: TestRequestResponse, - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { return client.camelCaseMethod( @@ -197,7 +336,7 @@ export const runTests = ( clientStreamMethod: ( client: TestGrpcClient, request: TestRequestResponse[], - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { const writeStream = client.clientStreamMethod( @@ -221,7 +360,7 @@ export const runTests = ( serverStreamMethod: ( client: TestGrpcClient, request: TestRequestResponse, - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { const result: TestRequestResponse[] = []; @@ -242,7 +381,7 @@ export const runTests = ( bidiStreamMethod: ( client: TestGrpcClient, request: TestRequestResponse[], - metadata: Metadata = new grpc.Metadata() + metadata = new Metadata() ): Promise => { return new Promise((resolve, reject) => { const result: TestRequestResponse[] = []; @@ -272,149 +411,10 @@ export const runTests = ( let server: Server; let client: Client; - const replicate = (request: TestRequestResponse) => { - const result: TestRequestResponse[] = []; - for (let i = 0; i < request.num; i++) { - result.push(request); - } - return result; - }; - - async function startServer(grpc: typeof grpcJs, proto: any) { - const server = new grpc.Server(); - - function getError(msg: string, code: number): ServiceError | null { - const err: ServiceError = { - ...new Error(msg), - name: msg, - message: msg, - code, - details: msg, - metadata: new grpc.Metadata(), - }; - return err; - } - - server.addService(proto.GrpcTester.service, { - // An error is emitted every time - // request.num <= MAX_ERROR_STATUS = (status.UNAUTHENTICATED) - // in those cases, erro.code = request.num - - // This method returns the request - unaryMethodWithMetadata( - call: ServerUnaryCall, - callback: RequestCallback - ) { - const serverMetadata: any = new grpc.Metadata(); - serverMetadata.add('server_metadata_key', 'server_metadata_value'); - - call.sendMetadata(serverMetadata); - - call.request.num <= MAX_ERROR_STATUS - ? callback( - getError( - 'Unary Method with Metadata Error', - call.request.num - ) as grpcJs.ServiceError - ) - : callback(null, { num: call.request.num }); - }, - - // This method returns the request - unaryMethod(call: ServerUnaryCall, callback: RequestCallback) { - call.request.num <= MAX_ERROR_STATUS - ? callback( - getError( - 'Unary Method Error', - call.request.num - ) as grpcJs.ServiceError - ) - : callback(null, { num: call.request.num }); - }, - - // This method returns the request - camelCaseMethod(call: ServerUnaryCall, callback: RequestCallback) { - call.request.num <= MAX_ERROR_STATUS - ? callback( - getError( - 'Unary Method Error', - call.request.num - ) as grpcJs.ServiceError - ) - : callback(null, { num: call.request.num }); - }, - - // This method sums the requests - clientStreamMethod( - call: ServerReadableStream, - callback: RequestCallback - ) { - let sum = 0; - let hasError = false; - let code = grpc.status.OK; - call.on('data', (data: TestRequestResponse) => { - sum += data.num; - if (data.num <= MAX_ERROR_STATUS) { - hasError = true; - code = data.num; - } - }); - call.on('end', () => { - hasError - ? callback(getError('Client Stream Method Error', code) as any) - : callback(null, { num: sum }); - }); - }, - - // This method returns an array that replicates the request, request.num of - // times - serverStreamMethod: (call: ServerWriteableStream) => { - const result = replicate(call.request); - - if (call.request.num <= MAX_ERROR_STATUS) { - call.emit( - 'error', - getError('Server Stream Method Error', call.request.num) - ); - } else { - result.forEach(element => { - call.write(element); - }); - } - call.end(); - }, - - // This method returns the request - bidiStreamMethod: (call: ServerDuplexStream) => { - call.on('data', (data: TestRequestResponse) => { - if (data.num <= MAX_ERROR_STATUS) { - call.emit( - 'error', - getError('Server Stream Method Error', data.num) - ); - } else { - call.write(data); - } - }); - call.on('end', () => { - call.end(); - }); - }, - }); - const bindAwait = promisify(server.bindAsync); - await bindAwait.call( - server, - 'localhost:' + grpcPort, - grpc.ServerCredentials.createInsecure() as grpcJs.ServerCredentials - ); - server.start(); - return server; - } - - function createClient(grpc: typeof grpcJs, proto: any) { + function createClient(proto: any) { return new proto.GrpcTester( 'localhost:' + grpcPort, - grpc.credentials.createInsecure() + credentials.createInsecure() ); } @@ -503,7 +503,7 @@ export const runTests = ( ) => { const validations = { name: `grpc.pkg_test.GrpcTester/${methodName}`, - status: grpc.status.OK, + status: GrpcStatus.OK, netPeerName: 'localhost', netPeerPort: grpcPort, }; @@ -594,9 +594,7 @@ export const runTests = ( .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); return context.with(trace.setSpan(context.active(), span), async () => { const rootSpan = trace.getSpan(context.active()); - if (!rootSpan) { - return assert.ok(false); - } + assert.ok(rootSpan != null); assert.deepStrictEqual(rootSpan, span); const args = [client, method.request, method.metadata]; @@ -710,9 +708,7 @@ export const runTests = ( .startSpan('TestSpan', { kind: SpanKind.PRODUCER }); return context.with(trace.setSpan(context.active(), span), async () => { const rootSpan = trace.getSpan(context.active()); - if (!rootSpan) { - return assert.ok(false); - } + assert.ok(rootSpan != null); assert.deepStrictEqual(rootSpan, span); const args = [client, insertError(method.request)(errorCode)]; @@ -770,10 +766,10 @@ export const runTests = ( plugin.enable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(grpc, proto); - client = createClient(grpc, proto); + server = await startServer(proto, grpcPort); + client = createClient(proto); }); after(done => { @@ -792,9 +788,9 @@ export const runTests = ( methodList.forEach(method => { describe(`Test error raising for grpc remote ${method.description}`, () => { - Object.keys(grpc.status).forEach((statusKey: string) => { - const errorCode = Number(grpc.status[statusKey as any]); - if (errorCode > grpc.status.OK) { + Object.keys(GrpcStatus).forEach((statusKey: string) => { + const errorCode = Number(GrpcStatus[statusKey as any]); + if (errorCode > GrpcStatus.OK) { runErrorTest(method, statusKey, errorCode, provider); } }); @@ -813,10 +809,10 @@ export const runTests = ( plugin.disable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(grpc, proto); - client = createClient(grpc, proto); + server = await startServer(proto, grpcPort); + client = createClient(proto); }); after(done => { @@ -847,10 +843,10 @@ export const runTests = ( plugin.enable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(grpc, proto); - client = createClient(grpc, proto); + server = await startServer(proto, grpcPort); + client = createClient(proto); }); after(done => { @@ -891,10 +887,10 @@ export const runTests = ( plugin.enable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(grpc, proto); - client = createClient(grpc, proto); + server = await startServer(proto, grpcPort); + client = createClient(proto); }); after(done => { @@ -921,9 +917,9 @@ export const runTests = ( plugin.enable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - client = createClient(grpc, proto); + client = createClient(proto); }); after(done => { @@ -943,7 +939,7 @@ export const runTests = ( const provider = new NodeTracerProvider(); provider.addSpanProcessor(new SimpleSpanProcessor(memoryExporter)); - const clientMetadata: Metadata = new grpc.Metadata(); + const clientMetadata = new Metadata(); clientMetadata.add('client_metadata_key', 'client_metadata_value'); const customMetadataMethod: TestGrpcCall = { @@ -978,10 +974,10 @@ export const runTests = ( plugin.enable(); const packageDefinition = await protoLoader.load(PROTO_PATH, options); - const proto = grpc.loadPackageDefinition(packageDefinition).pkg_test; + const proto = loadPackageDefinition(packageDefinition).pkg_test; - server = await startServer(grpc, proto); - client = createClient(grpc, proto); + server = await startServer(proto, grpcPort); + client = createClient(proto); }); after(done => { diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts new file mode 100644 index 000000000..2fc2a3d1b --- /dev/null +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/protobuf-ts-utils.ts @@ -0,0 +1,111 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Span, SpanKind } from '@opentelemetry/api'; +import * as assert from 'assert'; + +import { + InMemorySpanExporter, + ReadableSpan, +} from '@opentelemetry/sdk-trace-base'; +import { assertPropagation, assertSpan } from './utils/assertionUtils'; +import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; + +export type SpanAssertionFunction = ( + exporter: InMemorySpanExporter, + rpcService: string, + rpcMethod: string, + expectedSpanStatus: number, + rootSpan?: Span +) => void; + +export type TestFunction = ( + input: number, + errorKey: string, + expectedResultCode: number, + assertSpans: SpanAssertionFunction +) => void; + +function validateSpans( + clientSpan: ReadableSpan, + serverSpan: ReadableSpan, + rpcService: string, + rpcMethod: string, + status: number +) { + const validations = { + name: `grpc.${rpcService}/${rpcMethod}`, + netPeerName: 'localhost', + status: status, + netPeerPort: 3333, + }; + + assert.strictEqual( + clientSpan.spanContext().traceId, + serverSpan.spanContext().traceId + ); + assertPropagation(serverSpan, clientSpan); + + assertSpan('grpc', serverSpan, SpanKind.SERVER, validations); + assertSpan('grpc', clientSpan, SpanKind.CLIENT, validations); + assert.strictEqual( + clientSpan.attributes[SemanticAttributes.RPC_METHOD], + rpcMethod + ); + assert.strictEqual( + clientSpan.attributes[SemanticAttributes.RPC_SERVICE], + rpcService + ); +} + +export function assertNoSpansExported( + exporter: InMemorySpanExporter, + _rpcService: string, + _rpcMethod: string, + _expectedSpanStatus: number, + _rootSpan?: Span +) { + const spans = exporter.getFinishedSpans(); + assert.strictEqual(spans.length, 0); +} + +export function assertExportedSpans( + exporter: InMemorySpanExporter, + rpcService: string, + rpcMethod: string, + expectedSpanStatus: number, + rootSpan?: Span +) { + const spans = exporter.getFinishedSpans(); + assert.strictEqual(spans.length, 2); + const serverSpan = spans[0]; + const clientSpan = spans[1]; + + validateSpans( + clientSpan, + serverSpan, + rpcService, + rpcMethod, + expectedSpanStatus + ); + + if (rootSpan) { + assert.strictEqual( + rootSpan?.spanContext().traceId, + serverSpan.spanContext().traceId + ); + assert.strictEqual(rootSpan?.spanContext().spanId, clientSpan.parentSpanId); + } +} diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts index fcdd546b3..1b7966639 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-grpc/test/utils/assertionUtils.ts @@ -16,7 +16,7 @@ import { SpanKind, SpanStatusCode } from '@opentelemetry/api'; import * as assert from 'assert'; -import type * as grpcJs from '@grpc/grpc-js'; +import type { status as GrpcStatus } from '@grpc/grpc-js'; import { ReadableSpan } from '@opentelemetry/sdk-trace-base'; import { hrTimeToMilliseconds, @@ -25,7 +25,7 @@ import { import { SemanticAttributes } from '@opentelemetry/semantic-conventions'; export const grpcStatusCodeToOpenTelemetryStatusCode = ( - status: grpcJs.status + status: GrpcStatus ): SpanStatusCode => { if (status !== undefined && status === 0) { return SpanStatusCode.UNSET; @@ -39,7 +39,7 @@ export const assertSpan = ( kind: SpanKind, validations: { name: string; - status: grpcJs.status; + status: GrpcStatus; netPeerName?: string; netPeerPort?: number; } diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/.eslintrc.js b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/.eslintrc.js index f756f4488..9baf1b495 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/.eslintrc.js +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/package.json b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/package.json index 91d0b99a4..19b0d5651 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/package.json +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/instrumentation-http", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry http/https automatic instrumentation package.", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -46,22 +46,22 @@ }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-node": "1.14.0", + "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/sdk-metrics": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/request-promise-native": "1.0.18", "@types/semver": "7.5.0", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/superagent": "4.1.18", "axios": "1.4.0", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "15.1.0", "request": "2.88.2", "request-promise-native": "1.0.9", @@ -74,11 +74,10 @@ "@opentelemetry/api": "^1.3.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/semantic-conventions": "1.14.0", - "semver": "^7.5.1", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/semantic-conventions": "1.15.2", + "semver": "^7.5.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-http", "sideEffects": false diff --git a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/src/utils.ts b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/src/utils.ts index a563e2947..a70dd3de8 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/src/utils.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-instrumentation-http/src/utils.ts @@ -403,11 +403,12 @@ export const getOutgoingRequestAttributesOnResponse = ( response: IncomingMessage ): SpanAttributes => { const { statusCode, statusMessage, httpVersion, socket } = response; - const { remoteAddress, remotePort } = socket; - const attributes: SpanAttributes = { - [SemanticAttributes.NET_PEER_IP]: remoteAddress, - [SemanticAttributes.NET_PEER_PORT]: remotePort, - }; + const attributes: SpanAttributes = {}; + if (socket) { + const { remoteAddress, remotePort } = socket; + attributes[SemanticAttributes.NET_PEER_IP] = remoteAddress; + attributes[SemanticAttributes.NET_PEER_PORT] = remotePort; + } setResponseContentLengthAttribute(response, attributes); if (statusCode) { @@ -529,17 +530,20 @@ export const getIncomingRequestAttributesOnResponse = ( // since it may be detached from the response object in keep-alive mode const { socket } = request; const { statusCode, statusMessage } = response; - const { localAddress, localPort, remoteAddress, remotePort } = socket; - const rpcMetadata = getRPCMetadata(context.active()); - const attributes: SpanAttributes = { - [SemanticAttributes.NET_HOST_IP]: localAddress, - [SemanticAttributes.NET_HOST_PORT]: localPort, - [SemanticAttributes.NET_PEER_IP]: remoteAddress, - [SemanticAttributes.NET_PEER_PORT]: remotePort, - [SemanticAttributes.HTTP_STATUS_CODE]: statusCode, - [AttributeNames.HTTP_STATUS_TEXT]: (statusMessage || '').toUpperCase(), - }; + const rpcMetadata = getRPCMetadata(context.active()); + const attributes: SpanAttributes = {}; + if (socket) { + const { localAddress, localPort, remoteAddress, remotePort } = socket; + attributes[SemanticAttributes.NET_HOST_IP] = localAddress; + attributes[SemanticAttributes.NET_HOST_PORT] = localPort; + attributes[SemanticAttributes.NET_PEER_IP] = remoteAddress; + attributes[SemanticAttributes.NET_PEER_PORT] = remotePort; + } + attributes[SemanticAttributes.HTTP_STATUS_CODE] = statusCode; + attributes[AttributeNames.HTTP_STATUS_TEXT] = ( + statusMessage || '' + ).toUpperCase(); if (rpcMetadata?.type === RPCType.HTTP && rpcMetadata.route !== undefined) { attributes[SemanticAttributes.HTTP_ROUTE] = rpcMetadata.route; diff --git a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/.eslintrc.js b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/.eslintrc.js index f756f4488..9baf1b495 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/.eslintrc.js +++ b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/package.json b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/package.json index 66c4bf947..857c8c79d 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/package.json +++ b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-node", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry SDK for Node.js", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -44,37 +44,37 @@ "access": "public" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/exporter-jaeger": "1.14.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.40.0", - "@opentelemetry/exporter-trace-otlp-http": "0.40.0", - "@opentelemetry/exporter-trace-otlp-proto": "0.40.0", - "@opentelemetry/exporter-zipkin": "1.14.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-node": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/api-logs": "0.41.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-jaeger": "1.15.2", + "@opentelemetry/exporter-trace-otlp-grpc": "0.41.2", + "@opentelemetry/exporter-trace-otlp-http": "0.41.2", + "@opentelemetry/exporter-trace-otlp-proto": "0.41.2", + "@opentelemetry/exporter-zipkin": "1.15.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-logs": "0.41.2", + "@opentelemetry/sdk-metrics": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-node": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.5.0" }, "devDependencies": { "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.14.0", + "@opentelemetry/context-async-hooks": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", - "semver": "7.5.2", + "semver": "7.5.4", "sinon": "15.1.2", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", diff --git a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/index.ts b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/index.ts index d24617420..891288ee6 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/index.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/index.ts @@ -17,6 +17,7 @@ export * as api from '@opentelemetry/api'; export * as contextBase from '@opentelemetry/api'; export * as core from '@opentelemetry/core'; +export * as logs from '@opentelemetry/sdk-logs'; export * as metrics from '@opentelemetry/sdk-metrics'; export * as node from '@opentelemetry/sdk-trace-node'; export * as resources from '@opentelemetry/resources'; diff --git a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/sdk.ts b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/sdk.ts index 07921a88b..8b96dddea 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/sdk.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/sdk.ts @@ -21,6 +21,7 @@ import { diag, DiagConsoleLogger, } from '@opentelemetry/api'; +import { logs } from '@opentelemetry/api-logs'; import { InstrumentationOption, registerInstrumentations, @@ -35,6 +36,7 @@ import { Resource, ResourceDetectionConfig, } from '@opentelemetry/resources'; +import { LogRecordProcessor, LoggerProvider } from '@opentelemetry/sdk-logs'; import { MeterProvider, MetricReader, View } from '@opentelemetry/sdk-metrics'; import { BatchSpanProcessor, @@ -63,6 +65,13 @@ export type MeterProviderConfig = { views?: View[]; }; +export type LoggerProviderConfig = { + /** + * Reference to the LoggerRecordProcessor instance by the NodeSDK + */ + logRecordProcessor: LogRecordProcessor; +}; + export class NodeSDK { private _tracerProviderConfig?: { tracerConfig: NodeTracerConfig; @@ -70,6 +79,7 @@ export class NodeSDK { contextManager?: ContextManager; textMapPropagator?: TextMapPropagator; }; + private _loggerProviderConfig?: LoggerProviderConfig; private _meterProviderConfig?: MeterProviderConfig; private _instrumentations: InstrumentationOption[]; @@ -79,6 +89,7 @@ export class NodeSDK { private _autoDetectResources: boolean; private _tracerProvider?: NodeTracerProvider | TracerProviderWithEnvExporters; + private _loggerProvider?: LoggerProvider; private _meterProvider?: MeterProvider; private _serviceName?: string; @@ -140,6 +151,13 @@ export class NodeSDK { ); } + if (configuration.logRecordProcessor) { + const loggerProviderConfig: LoggerProviderConfig = { + logRecordProcessor: configuration.logRecordProcessor, + }; + this.configureLoggerProvider(loggerProviderConfig); + } + if (configuration.metricReader || configuration.views) { const meterProviderConfig: MeterProviderConfig = {}; if (configuration.metricReader) { @@ -175,6 +193,30 @@ export class NodeSDK { }; } + /**Set configurations needed to register a LoggerProvider */ + public configureLoggerProvider(config: LoggerProviderConfig): void { + // nothing is set yet, we can set config and then return + if (this._loggerProviderConfig == null) { + this._loggerProviderConfig = config; + return; + } + + // make sure we do not override existing logRecordProcessor with other logRecordProcessors. + if ( + this._loggerProviderConfig.logRecordProcessor != null && + config.logRecordProcessor != null + ) { + throw new Error( + 'LogRecordProcessor passed but LogRecordProcessor has already been configured.' + ); + } + + // set logRecordProcessor, but make sure we do not override existing logRecordProcessors with null/undefined. + if (config.logRecordProcessor != null) { + this._loggerProviderConfig.logRecordProcessor = config.logRecordProcessor; + } + } + /** Set configurations needed to register a MeterProvider */ public configureMeterProvider(config: MeterProviderConfig): void { // nothing is set yet, we can set config and return. @@ -269,6 +311,19 @@ export class NodeSDK { propagator: this._tracerProviderConfig?.textMapPropagator, }); + if (this._loggerProviderConfig) { + const loggerProvider = new LoggerProvider({ + resource: this._resource, + }); + loggerProvider.addLogRecordProcessor( + this._loggerProviderConfig.logRecordProcessor + ); + + this._loggerProvider = loggerProvider; + + logs.setGlobalLoggerProvider(loggerProvider); + } + if (this._meterProviderConfig) { const meterProvider = new MeterProvider({ resource: this._resource, @@ -299,6 +354,9 @@ export class NodeSDK { if (this._tracerProvider) { promises.push(this._tracerProvider.shutdown()); } + if (this._loggerProvider) { + promises.push(this._loggerProvider.shutdown()); + } if (this._meterProvider) { promises.push(this._meterProvider.shutdown()); } diff --git a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/types.ts b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/types.ts index 03efc3114..9292e0ae7 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/types.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/src/types.ts @@ -18,6 +18,7 @@ import type { ContextManager } from '@opentelemetry/api'; import { TextMapPropagator } from '@opentelemetry/api'; import { InstrumentationOption } from '@opentelemetry/instrumentation'; import { Detector, DetectorSync, IResource } from '@opentelemetry/resources'; +import { LogRecordProcessor } from '@opentelemetry/sdk-logs'; import { MetricReader, View } from '@opentelemetry/sdk-metrics'; import { Sampler, @@ -31,6 +32,7 @@ export interface NodeSDKConfiguration { autoDetectResources: boolean; contextManager: ContextManager; textMapPropagator: TextMapPropagator; + logRecordProcessor: LogRecordProcessor; metricReader: MetricReader; views: View[]; instrumentations: InstrumentationOption[]; diff --git a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts index 7a385a760..6fb76f3da 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts +++ b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/test/sdk.test.ts @@ -59,6 +59,12 @@ import { Resource, } from '@opentelemetry/resources'; import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; +import { logs } from '@opentelemetry/api-logs'; +import { + SimpleLogRecordProcessor, + InMemoryLogRecordExporter, + LoggerProvider, +} from '@opentelemetry/sdk-logs'; const DefaultContextManager = semver.gte(process.version, '14.8.0') ? AsyncLocalStorageContextManager @@ -112,6 +118,7 @@ describe('Node SDK', () => { 'tracer provider should not have changed' ); assert.ok(!(metrics.getMeterProvider() instanceof MeterProvider)); + assert.ok(!(logs.getLoggerProvider() instanceof LoggerProvider)); delete env.OTEL_TRACES_EXPORTER; }); @@ -233,6 +240,40 @@ describe('Node SDK', () => { await sdk.shutdown(); delete env.OTEL_TRACES_EXPORTER; }); + + it('should register a logger provider if a log record processor is provided', async () => { + env.OTEL_TRACES_EXPORTER = 'none'; + const logRecordExporter = new InMemoryLogRecordExporter(); + const logRecordProcessor = new SimpleLogRecordProcessor( + logRecordExporter + ); + const sdk = new NodeSDK({ + logRecordProcessor: logRecordProcessor, + autoDetectResources: false, + }); + + sdk.start(); + + assert.strictEqual( + context['_getContextManager'](), + ctxManager, + 'context manager should not change' + ); + assert.strictEqual( + propagation['_getGlobalPropagator'](), + propagator, + 'propagator should not change' + ); + assert.strictEqual( + (trace.getTracerProvider() as ProxyTracerProvider).getDelegate(), + delegate, + 'tracer provider should not have changed' + ); + + assert.ok(logs.getLoggerProvider() instanceof LoggerProvider); + await sdk.shutdown(); + delete env.OTEL_TRACES_EXPORTER; + }); }); async function waitForNumberOfMetrics( @@ -406,6 +447,28 @@ describe('Node SDK', () => { ); }); + it('should throw error when calling configureLoggerProvider when logRecordProcessor is already configured', () => { + const logRecordExporter = new InMemoryLogRecordExporter(); + const logRecordProcessor = new SimpleLogRecordProcessor(logRecordExporter); + const sdk = new NodeSDK({ + logRecordProcessor: logRecordProcessor, + autoDetectResources: false, + }); + + assert.throws( + () => { + sdk.configureLoggerProvider({ + logRecordProcessor: logRecordProcessor, + }); + }, + (error: Error) => { + return error.message.includes( + 'LogRecordProcessor passed but LogRecordProcessor has already been configured.' + ); + } + ); + }); + describe('detectResources', async () => { beforeEach(() => { process.env.OTEL_RESOURCE_ATTRIBUTES = diff --git a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/tsconfig.json b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/tsconfig.json index add730f8b..94c80b884 100644 --- a/auto-merge/js/experimental/packages/opentelemetry-sdk-node/tsconfig.json +++ b/auto-merge/js/experimental/packages/opentelemetry-sdk-node/tsconfig.json @@ -39,6 +39,9 @@ { "path": "../../../packages/sdk-metrics" }, + { + "path": "../api-logs" + }, { "path": "../exporter-trace-otlp-grpc" }, @@ -50,6 +53,9 @@ }, { "path": "../opentelemetry-instrumentation" + }, + { + "path": "../sdk-logs" } ] } diff --git a/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/.eslintrc.js b/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/.eslintrc.js index 3ed0fbeba..9cfb3fd42 100644 --- a/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/.eslintrc.js +++ b/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/package.json b/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/package.json index 7955aac4f..66bf284d2 100644 --- a/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/package.json +++ b/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/otlp-grpc-exporter-base", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry OTLP-gRPC Exporter base (for internal use only)", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -48,18 +48,18 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/api": "1.4.1", - "@opentelemetry/otlp-transformer": "0.40.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/otlp-transformer": "0.41.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "protobufjs-cli": "1.1.1", @@ -73,10 +73,9 @@ }, "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/otlp-exporter-base": "0.40.0", - "protobufjs": "^7.2.3", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/otlp-exporter-base": "0.41.2", + "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-grpc-exporter-base", "sideEffects": false diff --git a/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/LogsExportServiceClient.ts b/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/LogsExportServiceClient.ts index 148fca31a..b867743ce 100644 --- a/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/LogsExportServiceClient.ts +++ b/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/LogsExportServiceClient.ts @@ -16,9 +16,11 @@ import * as root from './generated/root'; import * as grpc from '@grpc/grpc-js'; -import { IExportLogsServiceRequest } from '@opentelemetry/otlp-transformer'; +import { + IExportLogsServiceRequest, + IExportLogsServiceResponse, +} from '@opentelemetry/otlp-transformer'; import { ExportType } from './internal-types'; -import IExportLogsServiceResponse = root.opentelemetry.proto.collector.logs.v1.IExportLogsServiceResponse; const responseType = root.opentelemetry.proto.collector.logs.v1 .ExportLogsServiceResponse as ExportType; diff --git a/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/MetricsExportServiceClient.ts b/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/MetricsExportServiceClient.ts index 9a791ca2f..7f81be608 100644 --- a/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/MetricsExportServiceClient.ts +++ b/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/MetricsExportServiceClient.ts @@ -16,9 +16,11 @@ import * as root from './generated/root'; import * as grpc from '@grpc/grpc-js'; -import { IExportMetricsServiceRequest } from '@opentelemetry/otlp-transformer'; +import { + IExportMetricsServiceRequest, + IExportMetricsServiceResponse, +} from '@opentelemetry/otlp-transformer'; import { ExportType } from './internal-types'; -import IExportMetricsServiceResponse = root.opentelemetry.proto.collector.metrics.v1.IExportMetricsServiceResponse; const responseType = root.opentelemetry.proto.collector.metrics.v1 .ExportMetricsServiceResponse as ExportType; diff --git a/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/TraceExportServiceClient.ts b/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/TraceExportServiceClient.ts index 6a150a24b..d332e4f4d 100644 --- a/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/TraceExportServiceClient.ts +++ b/auto-merge/js/experimental/packages/otlp-grpc-exporter-base/src/TraceExportServiceClient.ts @@ -16,9 +16,11 @@ import * as root from './generated/root'; import * as grpc from '@grpc/grpc-js'; -import { IExportTraceServiceRequest } from '@opentelemetry/otlp-transformer'; +import { + IExportTraceServiceRequest, + IExportTraceServiceResponse, +} from '@opentelemetry/otlp-transformer'; import { ExportType } from './internal-types'; -import IExportTraceServiceResponse = root.opentelemetry.proto.collector.trace.v1.IExportTraceServiceResponse; const responseType = root.opentelemetry.proto.collector.trace.v1 .ExportTraceServiceResponse as ExportType; diff --git a/auto-merge/js/experimental/packages/shim-opencensus/.eslintrc.js b/auto-merge/js/experimental/packages/shim-opencensus/.eslintrc.js index f756f4488..9baf1b495 100644 --- a/auto-merge/js/experimental/packages/shim-opencensus/.eslintrc.js +++ b/auto-merge/js/experimental/packages/shim-opencensus/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/auto-merge/js/experimental/packages/shim-opencensus/package.json b/auto-merge/js/experimental/packages/shim-opencensus/package.json index 6f870cfc6..3c9d4e820 100644 --- a/auto-merge/js/experimental/packages/shim-opencensus/package.json +++ b/auto-merge/js/experimental/packages/shim-opencensus/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opencensus", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenCensus to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -50,14 +50,14 @@ "devDependencies": { "@opencensus/core": "0.1.0", "@opentelemetry/api": "1.4.1", - "@opentelemetry/context-async-hooks": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", @@ -69,10 +69,9 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", + "@opentelemetry/core": "1.15.2", "require-in-the-middle": "^7.1.1", - "semver": "^7.5.1", - "tslib": "^2.3.1" + "semver": "^7.5.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/shim-opencensus", "sideEffects": false diff --git a/auto-merge/js/integration-tests/propagation-validation-server/package.json b/auto-merge/js/integration-tests/propagation-validation-server/package.json index 880251c50..505797007 100644 --- a/auto-merge/js/integration-tests/propagation-validation-server/package.json +++ b/auto-merge/js/integration-tests/propagation-validation-server/package.json @@ -1,6 +1,6 @@ { "name": "propagation-validation-server", - "version": "1.14.0", + "version": "1.15.2", "description": "server for w3c tests", "main": "validation_server.js", "private": true, @@ -12,13 +12,12 @@ }, "dependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/context-async-hooks": "1.14.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", "axios": "1.4.0", "body-parser": "1.19.0", - "express": "4.17.3", - "tslib": "^2.3.1" + "express": "4.17.3" }, "devDependencies": { "typescript": "4.4.4" diff --git a/auto-merge/js/package.json b/auto-merge/js/package.json index d52d6225d..864a548b0 100644 --- a/auto-merge/js/package.json +++ b/auto-merge/js/package.json @@ -65,23 +65,22 @@ "devDependencies": { "@typescript-eslint/eslint-plugin": "5.59.11", "@typescript-eslint/parser": "5.59.11", - "eslint": "8.22.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "4.2.1", "gh-pages": "5.0.0", - "lerna": "7.0.2", - "@lerna/legacy-package-management": "7.0.2", + "lerna": "7.1.4", + "@lerna/legacy-package-management": "7.1.4", "linkinator": "5.0.1", "markdownlint-cli": "0.35.0", "prettier": "2.8.8", - "semver": "7.5.2", + "semver": "7.5.4", "typedoc": "0.22.18", "typedoc-plugin-missing-exports": "1.0.0", "typedoc-plugin-resolve-crossmodule-references": "0.2.2", - "typescript": "4.4.4", - "tslib": "^2.3.1" + "typescript": "4.4.4" }, "changelog": { "repo": "open-telemetry/opentelemetry-js", diff --git a/auto-merge/js/packages/opentelemetry-context-async-hooks/.eslintrc.js b/auto-merge/js/packages/opentelemetry-context-async-hooks/.eslintrc.js index f726f3bec..3d9af536b 100644 --- a/auto-merge/js/packages/opentelemetry-context-async-hooks/.eslintrc.js +++ b/auto-merge/js/packages/opentelemetry-context-async-hooks/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/auto-merge/js/packages/opentelemetry-context-async-hooks/package.json b/auto-merge/js/packages/opentelemetry-context-async-hooks/package.json index 62a77cf7e..362127101 100644 --- a/auto-merge/js/packages/opentelemetry-context-async-hooks/package.json +++ b/auto-merge/js/packages/opentelemetry-context-async-hooks/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/context-async-hooks", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry AsyncHooks-based Context Manager", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -43,16 +43,13 @@ "publishConfig": { "access": "public" }, - "dependencies": { - "tslib": "^2.3.1" - }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "ts-mocha": "10.0.0", diff --git a/auto-merge/js/packages/opentelemetry-exporter-jaeger/.eslintrc.js b/auto-merge/js/packages/opentelemetry-exporter-jaeger/.eslintrc.js index f726f3bec..3d9af536b 100644 --- a/auto-merge/js/packages/opentelemetry-exporter-jaeger/.eslintrc.js +++ b/auto-merge/js/packages/opentelemetry-exporter-jaeger/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/auto-merge/js/packages/opentelemetry-exporter-jaeger/package.json b/auto-merge/js/packages/opentelemetry-exporter-jaeger/package.json index a45636c9a..162997425 100644 --- a/auto-merge/js/packages/opentelemetry-exporter-jaeger/package.json +++ b/auto-merge/js/packages/opentelemetry-exporter-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/exporter-jaeger", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry Exporter Jaeger allows user to send collected traces to Jaeger", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -45,15 +45,15 @@ }, "devDependencies": { "@opentelemetry/api": "^1.0.0", - "@opentelemetry/resources": "1.14.0", + "@opentelemetry/resources": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "15.1.0", "sinon": "15.1.2", "ts-mocha": "10.0.0", @@ -63,11 +63,10 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", - "jaeger-client": "^3.15.0", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2", + "jaeger-client": "^3.15.0" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-jaeger", "sideEffects": false diff --git a/auto-merge/js/packages/opentelemetry-propagator-jaeger/.eslintrc.js b/auto-merge/js/packages/opentelemetry-propagator-jaeger/.eslintrc.js index b23ee98fc..3913d6d94 100644 --- a/auto-merge/js/packages/opentelemetry-propagator-jaeger/.eslintrc.js +++ b/auto-merge/js/packages/opentelemetry-propagator-jaeger/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "browser": true, }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/auto-merge/js/packages/opentelemetry-propagator-jaeger/package.json b/auto-merge/js/packages/opentelemetry-propagator-jaeger/package.json index d15ebcfea..868cb0c2a 100644 --- a/auto-merge/js/packages/opentelemetry-propagator-jaeger/package.json +++ b/auto-merge/js/packages/opentelemetry-propagator-jaeger/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/propagator-jaeger", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry Jaeger propagator provides HTTP header propagation for systems that are using Jaeger HTTP header format.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -10,7 +10,7 @@ "prepublishOnly": "npm run compile", "compile": "tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "test": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/index-webpack.ts'", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "tdd": "npm run tdd:node", "tdd:node": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", @@ -57,18 +57,18 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0", "@types/mocha": "10.0.1", "@types/node": "18.6.5", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "@types/webpack-env": "1.16.3", + "babel-plugin-istanbul": "6.1.1", "codecov": "3.8.3", "cross-var": "1.1.0", - "istanbul-instrumenter-loader": "3.0.1", "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.1", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.36", "karma-webpack": "4.0.2", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", @@ -81,8 +81,7 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-propagator-jaeger", "sideEffects": false diff --git a/auto-merge/js/packages/opentelemetry-sdk-trace-node/.eslintrc.js b/auto-merge/js/packages/opentelemetry-sdk-trace-node/.eslintrc.js index f726f3bec..3d9af536b 100644 --- a/auto-merge/js/packages/opentelemetry-sdk-trace-node/.eslintrc.js +++ b/auto-merge/js/packages/opentelemetry-sdk-trace-node/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/auto-merge/js/packages/opentelemetry-sdk-trace-node/package.json b/auto-merge/js/packages/opentelemetry-sdk-trace-node/package.json index 51e5d59e5..bd88e07fd 100644 --- a/auto-merge/js/packages/opentelemetry-sdk-trace-node/package.json +++ b/auto-merge/js/packages/opentelemetry-sdk-trace-node/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sdk-trace-node", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry Node SDK provides automatic telemetry (tracing, metrics, etc) for Node.js applications", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -46,15 +46,15 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/resources": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "@types/semver": "7.5.0", - "@types/sinon": "10.0.15", + "@types/sinon": "10.0.16", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "sinon": "15.1.2", @@ -65,13 +65,12 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/context-async-hooks": "1.14.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/propagator-b3": "1.14.0", - "@opentelemetry/propagator-jaeger": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "semver": "^7.5.1", - "tslib": "^2.3.1" + "@opentelemetry/context-async-hooks": "1.15.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/propagator-b3": "1.15.2", + "@opentelemetry/propagator-jaeger": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "semver": "^7.5.1" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-node", "sideEffects": false diff --git a/auto-merge/js/packages/opentelemetry-shim-opentracing/.eslintrc.js b/auto-merge/js/packages/opentelemetry-shim-opentracing/.eslintrc.js index f726f3bec..3d9af536b 100644 --- a/auto-merge/js/packages/opentelemetry-shim-opentracing/.eslintrc.js +++ b/auto-merge/js/packages/opentelemetry-shim-opentracing/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/auto-merge/js/packages/opentelemetry-shim-opentracing/package.json b/auto-merge/js/packages/opentelemetry-shim-opentracing/package.json index f4745b1f7..123ed49b8 100644 --- a/auto-merge/js/packages/opentelemetry-shim-opentracing/package.json +++ b/auto-merge/js/packages/opentelemetry-shim-opentracing/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/shim-opentracing", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTracing to OpenTelemetry shim", "main": "build/src/index.js", "types": "build/src/index.d.ts", @@ -43,14 +43,14 @@ }, "devDependencies": { "@opentelemetry/api": ">=1.0.0 <1.5.0", - "@opentelemetry/propagator-b3": "1.14.0", - "@opentelemetry/propagator-jaeger": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", + "@opentelemetry/propagator-b3": "1.15.2", + "@opentelemetry/propagator-jaeger": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", "@types/mocha": "10.0.1", "@types/node": "18.6.5", "codecov": "3.8.3", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "mocha": "10.2.0", "nyc": "15.1.0", "ts-mocha": "10.0.0", @@ -60,10 +60,9 @@ "@opentelemetry/api": ">=1.0.0 <1.5.0" }, "dependencies": { - "@opentelemetry/core": "1.14.0", - "@opentelemetry/semantic-conventions": "1.14.0", - "opentracing": "^0.14.4", - "tslib": "^2.3.1" + "@opentelemetry/core": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2", + "opentracing": "^0.14.4" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-shim-opentracing", "sideEffects": false diff --git a/auto-merge/js/packages/opentelemetry-shim-opentracing/test/Shim.test.ts b/auto-merge/js/packages/opentelemetry-shim-opentracing/test/Shim.test.ts index cd3749a68..2da2f8000 100644 --- a/auto-merge/js/packages/opentelemetry-shim-opentracing/test/Shim.test.ts +++ b/auto-merge/js/packages/opentelemetry-shim-opentracing/test/Shim.test.ts @@ -261,7 +261,7 @@ describe('OpenTracing Shim', () => { assert.strictEqual(otSpan.links.length, 1); assert.deepStrictEqual( hrTimeToMilliseconds(otSpan.startTime), - Math.round(now + adjustment + performance.timeOrigin) + now + adjustment + performance.timeOrigin ); assert.deepStrictEqual(otSpan.attributes, opentracingOptions.tags); }); @@ -495,7 +495,7 @@ describe('OpenTracing Shim', () => { const adjustment = otSpan['_performanceOffset']; assert.deepStrictEqual( hrTimeToMilliseconds(otSpan.endTime), - Math.round(now + adjustment + performance.timeOrigin) + now + adjustment + performance.timeOrigin ); }); diff --git a/auto-merge/js/packages/template/.eslintrc.js b/auto-merge/js/packages/template/.eslintrc.js index 9dfe62f9b..36847df9f 100644 --- a/auto-merge/js/packages/template/.eslintrc.js +++ b/auto-merge/js/packages/template/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/auto-merge/js/packages/template/package.json b/auto-merge/js/packages/template/package.json index 5f0dd1cb5..cb538a503 100644 --- a/auto-merge/js/packages/template/package.json +++ b/auto-merge/js/packages/template/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/template", - "version": "1.14.0", + "version": "1.15.2", "private": true, "publishConfig": { "access": "restricted" @@ -47,7 +47,7 @@ "Add/change these to scripts if browser is supported": { "compile": "tsc --build tsconfig.json", "clean": "tsc --build --clean tsconfig.json", - "test:browser": "nyc karma start --single-run", + "test:browser": "karma start --single-run", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "watch": "tsc --build --watch tsconfig.json" }, @@ -80,12 +80,9 @@ "devDependencies": { "@types/node": "18.6.5", "cross-var": "1.1.0", - "lerna": "7.0.2", + "lerna": "7.1.4", "typescript": "4.4.4" }, - "dependencies": { - "tslib": "^2.3.1" - }, "Add these to devDependencies for testing": { "@types/mocha": "9.1.1", "@types/sinon": "10.0.13", @@ -97,10 +94,10 @@ }, "Add these to devDependencies if browser is targeted": { "@types/webpack-env": "1.16.0", - "istanbul-instrumenter-loader": "3.0.1", - "karma": "5.2.3", + "babel-plugin-istanbul": "6.1.1", + "karma": "6.4.2", "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", + "karma-coverage": "2.2.0", "karma-mocha": "2.0.1", "karma-spec-reporter": "0.0.32", "karma-webpack": "4.0.2", diff --git a/auto-merge/js/selenium-tests/babel.config.js b/auto-merge/js/selenium-tests/babel.config.js index 26b15edca..31007c148 100644 --- a/auto-merge/js/selenium-tests/babel.config.js +++ b/auto-merge/js/selenium-tests/babel.config.js @@ -22,12 +22,12 @@ module.exports = function (api) { ]; const plugins = [ ['@babel/plugin-proposal-decorators', { decoratorsBeforeExport: true }], - ['@babel/plugin-proposal-class-properties', { 'loose': true }], - ["@babel/plugin-proposal-private-methods", { "loose": true }], - ["@babel/plugin-proposal-private-property-in-object", { "loose": true }], + ['@babel/plugin-transform-class-properties', { 'loose': true }], + ["@babel/plugin-transform-private-methods", { "loose": true }], + ["@babel/plugin-transform-private-property-in-object", { "loose": true }], ]; return { presets, plugins, }; -}; \ No newline at end of file +}; diff --git a/auto-merge/js/selenium-tests/package.json b/auto-merge/js/selenium-tests/package.json index cc0ee0108..71c40a8ed 100644 --- a/auto-merge/js/selenium-tests/package.json +++ b/auto-merge/js/selenium-tests/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/selenium-tests", - "version": "1.14.0", + "version": "1.15.2", "private": true, "description": "OpenTelemetry Selenium Tests", "main": "index.js", @@ -31,20 +31,20 @@ "access": "restricted" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@babel/plugin-proposal-class-properties": "7.18.6", - "@babel/plugin-proposal-decorators": "7.22.5", - "@babel/plugin-transform-runtime": "7.22.5", - "@babel/preset-env": "7.22.5", + "@babel/plugin-proposal-decorators": "7.22.10", + "@babel/plugin-transform-runtime": "7.22.10", + "@babel/preset-env": "7.22.10", "@opentelemetry/api": "^1.0.0", "babel-loader": "8.3.0", "babel-polyfill": "6.26.0", "browserstack-local": "1.4.8", - "chromedriver": "114.0.2", + "chromedriver": "114.0.3", "dotenv": "16.0.0", "fast-safe-stringify": "2.1.1", "geckodriver": "3.0.1", - "nightwatch": "2.0.10", + "nightwatch": "3.0.1", "selenium-server": "3.141.59", "terser-webpack-plugin": "4.2.3", "webpack": "4.46.0", @@ -56,16 +56,16 @@ "@opentelemetry/api": "^1.0.0" }, "dependencies": { - "@opentelemetry/context-zone-peer-dep": "1.14.0", - "@opentelemetry/core": "1.14.0", - "@opentelemetry/exporter-trace-otlp-http": "0.40.0", - "@opentelemetry/exporter-zipkin": "1.14.0", - "@opentelemetry/instrumentation": "0.40.0", - "@opentelemetry/instrumentation-fetch": "0.40.0", - "@opentelemetry/instrumentation-xml-http-request": "0.40.0", - "@opentelemetry/sdk-metrics": "1.14.0", - "@opentelemetry/sdk-trace-base": "1.14.0", - "@opentelemetry/sdk-trace-web": "1.14.0", + "@opentelemetry/context-zone-peer-dep": "1.15.2", + "@opentelemetry/core": "1.15.2", + "@opentelemetry/exporter-trace-otlp-http": "0.41.2", + "@opentelemetry/exporter-zipkin": "1.15.2", + "@opentelemetry/instrumentation": "0.41.2", + "@opentelemetry/instrumentation-fetch": "0.41.2", + "@opentelemetry/instrumentation-xml-http-request": "0.41.2", + "@opentelemetry/sdk-metrics": "1.15.2", + "@opentelemetry/sdk-trace-base": "1.15.2", + "@opentelemetry/sdk-trace-web": "1.15.2", "zone.js": "0.11.4" } } diff --git a/auto-merge/js/selenium-tests/pages/fetch/index.js b/auto-merge/js/selenium-tests/pages/fetch/index.js index dbd2fe116..4a3b7ae37 100644 --- a/auto-merge/js/selenium-tests/pages/fetch/index.js +++ b/auto-merge/js/selenium-tests/pages/fetch/index.js @@ -29,7 +29,7 @@ const getData = (url) => fetch(url, { // example of keeping track of context between async operations const prepareClickEvent = () => { - const url = 'https://httpbin.org/get'; + const url = 'https://httpstat.us/200'; const element = document.getElementById('button1'); diff --git a/auto-merge/js/selenium-tests/pages/xhr/index.js b/auto-merge/js/selenium-tests/pages/xhr/index.js index e998c5896..ba03da9c4 100644 --- a/auto-merge/js/selenium-tests/pages/xhr/index.js +++ b/auto-merge/js/selenium-tests/pages/xhr/index.js @@ -10,7 +10,7 @@ const provider = loadOtel([ new XMLHttpRequestInstrumentation({ ignoreUrls: [/localhost:8090\/sockjs-node/], propagateTraceHeaderCorsUrls: [ - 'https://httpbin.org/get', + 'https://httpstat.us/200', ], clearTimingResources: true, }), @@ -35,7 +35,7 @@ const getData = (url) => new Promise((resolve, reject) => { // example of keeping track of context between async operations const prepareClickEvent = () => { - const url = 'https://httpbin.org/get'; + const url = 'https://httpstat.us/200'; const element = document.getElementById('button1'); diff --git a/auto-merge/js/selenium-tests/tests-helpers/constants.js b/auto-merge/js/selenium-tests/tests-helpers/constants.js index 3362a3585..2549a7fc2 100644 --- a/auto-merge/js/selenium-tests/tests-helpers/constants.js +++ b/auto-merge/js/selenium-tests/tests-helpers/constants.js @@ -2,4 +2,4 @@ const TIMEOUT_ELEMENT_MS = 5000; module.exports = { TIMEOUT_ELEMENT_MS, -}; \ No newline at end of file +}; diff --git a/auto-merge/js/selenium-tests/webpack.common.js b/auto-merge/js/selenium-tests/webpack.common.js index 0d00b07c6..3306d91b0 100644 --- a/auto-merge/js/selenium-tests/webpack.common.js +++ b/auto-merge/js/selenium-tests/webpack.common.js @@ -11,7 +11,7 @@ module.exports = { filename: '[name].js', sourceMapFilename: '[file].map', }, - target: ['web', 'es5'], + target: 'web', module: { rules: [ { @@ -35,4 +35,4 @@ module.exports = { ], extensions: ['.ts', '.js', '.jsx', '.json'], }, -}; \ No newline at end of file +}; diff --git a/auto-merge/js/tsconfig.tsbuildinfo b/auto-merge/js/tsconfig.tsbuildinfo new file mode 100644 index 000000000..bd9c8b8ea --- /dev/null +++ b/auto-merge/js/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"version":"4.4.4"} \ No newline at end of file diff --git a/common/config/rush/command-line.json b/common/config/rush/command-line.json index a49ed2c85..3a85d91ac 100644 --- a/common/config/rush/command-line.json +++ b/common/config/rush/command-line.json @@ -2,8 +2,8 @@ "$schema": "https://developer.microsoft.com/json-schemas/rush/v5/command-line.schema.json", "commands": [ { - "commandKind": "bulk", "name": "test", + "commandKind": "bulk", "summary": "Run all tests for all packages", "description": "Runs tests for all projects", "safeForSimultaneousRushProcesses": false, @@ -12,8 +12,8 @@ "allowWarningsInSuccessfulBuild": true }, { - "commandKind": "bulk", "name": "lint", + "commandKind": "bulk", "summary": "Run all tslint for all packages", "description": "Runs tslint for all projects", "safeForSimultaneousRushProcesses": false, @@ -21,8 +21,8 @@ "ignoreMissingScript": false }, { - "commandKind": "bulk", "name": "lint:fix", + "commandKind": "bulk", "summary": "Run all tslint for all packages", "description": "Runs tslint for all projects", "safeForSimultaneousRushProcesses": false, @@ -31,15 +31,24 @@ "allowWarningsInSuccessfulBuild": true }, { - "commandKind": "bulk", - "summary": "Run all build for all packages", "name": "build", - "allowWarningsInSuccessfulBuild": true + "commandKind": "bulk", + "summary": "Run all build targets for all packages", + "allowWarningsInSuccessfulBuild": true, + "enableParallelism": true }, { - "commandKind": "bulk", - "summary": "Run all build for all packages", "name": "rebuild", + "commandKind": "bulk", + "summary": "Run all build targets for all packages", + "allowWarningsInSuccessfulBuild": true, + "enableParallelism": true + }, + { + "name": "compile", + "commandKind": "bulk", + "summary": "Run all compile targets for all packages", + "enableParallelism": true, "allowWarningsInSuccessfulBuild": true } ] diff --git a/common/config/rush/npm-shrinkwrap.json b/common/config/rush/npm-shrinkwrap.json index 5a284bb33..81c5ef8f8 100644 --- a/common/config/rush/npm-shrinkwrap.json +++ b/common/config/rush/npm-shrinkwrap.json @@ -51,23 +51,25 @@ "@types/webpack": "4.41.33", "@types/webpack-env": "1.16.3", "@types/zone.js": "0.5.12", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", "dpdm": "3.13.1", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "4.2.1", - "import-in-the-middle": "1.3.5", + "import-in-the-middle": "1.4.2", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-jquery": "0.2.4", "karma-mocha": "^2.0.1", @@ -78,9 +80,10 @@ "lodash.merge": "^4.6.2", "memfs": "3.5.3", "mocha": "10.0.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "protobufjs": "^7.2.3", "protobufjs-cli": "1.1.1", "puppeteer": "^14.2.1", @@ -90,7 +93,6 @@ "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -122,44 +124,45 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.10.tgz", + "integrity": "sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==", "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.22.10", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", - "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", - "dependencies": { - "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.10.tgz", + "integrity": "sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw==", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.10", + "@babel/parser": "^7.22.10", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" + "json5": "^2.2.2", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -170,19 +173,19 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", + "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", "dependencies": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.22.10", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -192,27 +195,24 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", - "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", "dependencies": { - "@babel/compat-data": "^7.22.5", + "@babel/compat-data": "^7.22.9", "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.3", + "browserslist": "^4.21.9", "lru-cache": "^5.1.1", - "semver": "^6.3.0" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -260,19 +260,27 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-module-imports": "^7.22.5", "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", "engines": { "node": ">=6.9.0" } @@ -289,9 +297,9 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", - "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { "@babel/types": "^7.22.5" }, @@ -324,25 +332,25 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", - "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", "dependencies": { "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.10.tgz", + "integrity": "sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==", "dependencies": { "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -350,9 +358,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", - "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.10.tgz", + "integrity": "sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -374,18 +382,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", - "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.10.tgz", + "integrity": "sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig==", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", + "@babel/code-frame": "^7.22.10", + "@babel/generator": "^7.22.10", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.22.10", + "@babel/types": "^7.22.10", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -394,9 +402,9 @@ } }, "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.10.tgz", + "integrity": "sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", "@babel/helper-validator-identifier": "^7.22.5", @@ -414,25 +422,55 @@ "node": ">=10.0.0" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", + "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", "dependencies": { "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.20.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", @@ -447,12 +485,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "engines": { - "node": ">= 4" + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { @@ -466,19 +507,39 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@eslint/js": { + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", + "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", + "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", + "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -499,62 +560,6 @@ "node": ">=8" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -577,9 +582,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "engines": { "node": ">=6.0.0" } @@ -598,19 +603,14 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", + "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, "node_modules/@jsdevtools/coverage-istanbul-loader": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz", @@ -774,7 +774,7 @@ "node_modules/@rush-temp/sandbox-api": { "version": "0.0.0", "resolved": "file:projects/sandbox-api.tgz", - "integrity": "sha512-WUdDFFQDCEmoGnQE/Dttr6dMZPXoClO6fqYdJPgFFcb8DmfWx9z7TYRSiLd3s2SqMFS/Z+kWSVREQxkl5QkG/Q==", + "integrity": "sha512-PMYpG5sH5epjTuIlVshKKABRKP2oG3ltS6pGgJ853qj36wYWgD/zjWv7urrvAKUwIwgLV4mGhkZ5Xg42exMS9Q==", "dependencies": { "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", @@ -782,13 +782,15 @@ "@types/sinon": "^10.0.13", "@types/webpack": "4.41.33", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", "dpdm": "3.13.1", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -797,6 +799,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -807,11 +810,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -823,19 +826,21 @@ "node_modules/@rush-temp/sandbox-api-events": { "version": "0.0.0", "resolved": "file:projects/sandbox-api-events.tgz", - "integrity": "sha512-ZSZwuH9ycgNPCGQu/Knl+Sfz6Q4jgzB0B8hLfggPr6WFwGqLOonWH+ZDbyz8/SOLCa1HNHj0zD4UfIdx9FQ00A==", + "integrity": "sha512-Qlka+z6ltsDAxMlLStrL2OM/X4F0wu62Gb11n2M/3+b5rwyNAE1BPyOhkgtPSGPc9XZXTKXmU07+7iQhCH9qvg==", "dependencies": { "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -844,6 +849,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -853,11 +859,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -868,19 +874,21 @@ "node_modules/@rush-temp/sandbox-api-logs": { "version": "0.0.0", "resolved": "file:projects/sandbox-api-logs.tgz", - "integrity": "sha512-Ac8vVMMlimlz45AaMvR6Dkq2y19MC799DUlce3Kc+HR5OqZDQb/FlltS3prv9TtxoKzajwMCq/wCAL+wkQAAvg==", + "integrity": "sha512-/W37CmjLE5PtVSLLKXxZ897jjPF/kNq9Z1aSNuG8j37Vd040ZTSBcvIt4U089TezWAuWfI4ln7MJFuRxxmz/JA==", "dependencies": { "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -889,6 +897,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -898,11 +907,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -913,20 +922,21 @@ "node_modules/@rush-temp/sandbox-auto-instrumentations-web": { "version": "0.0.0", "resolved": "file:projects/sandbox-auto-instrumentations-web.tgz", - "integrity": "sha512-JmRZ2uUTwezyeGCn/qv0Wq8tYUAckXAy4Gm3Oysz5hXmVrlONewqWIEmkwm5FNTotM+WIWult2fWV2yLNqfvgg==", + "integrity": "sha512-EgJ+MXdp/ai5/BJR7EkHp3hnyH0/pCjzGmeQ49rJp5lAGMV0HtK8G9pEz1B3ns+SFayOb575AyGwaOjBLpU2hA==", "dependencies": { - "@babel/core": "7.15.0", + "@babel/core": "7.22.10", "@jsdevtools/coverage-istanbul-loader": "3.0.5", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.2.2", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -944,6 +954,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -957,24 +968,67 @@ "webpack-merge": "5.8.0" } }, + "node_modules/@rush-temp/sandbox-auto-instrumentations-web/node_modules/babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/@rush-temp/sandbox-auto-instrumentations-web/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@rush-temp/sandbox-auto-instrumentations-web/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/@rush-temp/sandbox-context-zone": { "version": "0.0.0", "resolved": "file:projects/sandbox-context-zone.tgz", - "integrity": "sha512-k3wD+vBzaoi3thjcvWHSbqcVftZXr2XL2RQwNksyzu3U70+Ris70gL4CLgGMeLy9yFa0uJMKLYrYWXD4HK93aw==", + "integrity": "sha512-BrrkytmVZP98r4spVG052fdMlWhTrfgD0L7lbEVgElbbZ6WjJe7ZKCa8IX8y5gon3Xats8BdlNfBrpdnbQ5jQg==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -992,11 +1046,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -1010,22 +1064,23 @@ "node_modules/@rush-temp/sandbox-context-zone-peer-dep": { "version": "0.0.0", "resolved": "file:projects/sandbox-context-zone-peer-dep.tgz", - "integrity": "sha512-2O4Rr2GV0xlUbLdwfYjKLi5DvyZb4+GhfNXdgpvQKhS3SA4kar2OttZsFQOMTqGnb2oj7xRUcK1ymJ1+49SdzA==", + "integrity": "sha512-sZnGxX5wCYDxhF9h+nJ9NPUbpoi5Y8KrYyTHPAz+ZP8uaOHXy7kWwdP0JJBq3gPgBOuTH1FuBqmMpP6TE4yyOA==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", "@types/zone.js": "0.5.12", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -1034,6 +1089,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -1043,11 +1099,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -1057,53 +1113,6 @@ "zone.js": "^0.11.4" } }, - "node_modules/@rush-temp/sandbox-context-zone-peer-dep/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-context-zone-peer-dep/node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, "node_modules/@rush-temp/sandbox-context-zone-peer-dep/node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -1130,14 +1139,6 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-context-zone-peer-dep/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@rush-temp/sandbox-context-zone-peer-dep/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -1217,64 +1218,17 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-context-zone/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, + "node_modules/@rush-temp/sandbox-context-zone/node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/@rush-temp/sandbox-context-zone/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-context-zone/node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/@rush-temp/sandbox-context-zone/node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/@rush-temp/sandbox-context-zone/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" + "node": ">= 10" } }, "node_modules/@rush-temp/sandbox-context-zone/node_modules/cross-spawn": { @@ -1290,14 +1244,6 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-context-zone/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@rush-temp/sandbox-context-zone/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -1392,19 +1338,21 @@ "node_modules/@rush-temp/sandbox-core": { "version": "0.0.0", "resolved": "file:projects/sandbox-core.tgz", - "integrity": "sha512-Q+lgfvMpF7bc5OnNHXzMl6Ikse/Fi2UDPe3V6BM1p+bkVBm4gC0vCXeowFA0kE76U23dnM+BUqBRSyXWD0c8LA==", + "integrity": "sha512-RbvhxVqJ/P68x7lUO4lrXxhKpH2yh6YY5l2qIipwslO2izpnKpX2xEbFUBkDbCQWuOoOqwzw2CLrFddNQjsn3w==", "dependencies": { "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -1413,6 +1361,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -1422,11 +1371,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -1437,22 +1386,23 @@ "node_modules/@rush-temp/sandbox-exporter-logs-otlp-http": { "version": "0.0.0", "resolved": "file:projects/sandbox-exporter-logs-otlp-http.tgz", - "integrity": "sha512-f1EJ41PDj5BJjVOGVduWN7I32SS52QJVw+7rH2CCsjR3YbSYvFZHZHN8QG5IakwHU9oInfQk2fZjb3xJkTHDRw==", + "integrity": "sha512-5rwXOpx7u3skJJly2wlCgsonGIcZpRm+UV2rmIHrzhaA2GyPWUjsb3ZyyNvE8jpq6eI2OJ90lwv3CRmnEqxj1A==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -1461,6 +1411,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -1470,11 +1421,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -1484,53 +1435,6 @@ "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-exporter-logs-otlp-http/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-exporter-logs-otlp-http/node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, "node_modules/@rush-temp/sandbox-exporter-logs-otlp-http/node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -1557,14 +1461,6 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-exporter-logs-otlp-http/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@rush-temp/sandbox-exporter-logs-otlp-http/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -1659,106 +1555,23 @@ "node_modules/@rush-temp/sandbox-exporter-logs-otlp-proto": { "version": "0.0.0", "resolved": "file:projects/sandbox-exporter-logs-otlp-proto.tgz", - "integrity": "sha512-BtP1FR50+jlfwKDoPpokl5a0jaA2GRXEzsgeMX7N8eOMtaQt/xMjY9QOe6Vwn6qCq0K8Zy1BoTJxm/8Cyx/dpw==", - "dependencies": { - "@babel/core": "7.22.5", - "@types/jquery": "^3.5.14", - "@types/mocha": "^10.0.0", - "@types/node": "^18.14.2", - "@types/sinon": "^10.0.13", - "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", - "chromium": "^3.0.3", - "codecov": "^3.8.3", - "cpx": "1.5.0", - "cross-var": "1.1.0", - "eslint": "7.32.0", - "eslint-config-prettier": "8.5.0", - "eslint-plugin-header": "3.1.1", - "eslint-plugin-import": "2.25.3", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-prettier": "4.2.1", - "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", - "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", - "karma-mocha": "^2.0.1", - "karma-mocha-webworker": "1.3.0", - "karma-spec-reporter": "^0.0.34", - "karma-typescript": "^5.5.3", - "karma-webpack": "^4.0.2", - "mocha": "10.0.0", - "nyc": "^15.1.0", - "pako": "^2.0.3", - "puppeteer": "^14.2.1", - "sinon": "^14.0.0", - "ts-loader": "8.4.0", - "ts-mocha": "10.0.0", - "tslib": "^2.3.1", - "typedoc": "^0.23.26", - "typedoc-plugin-missing-exports": "^1.0.0", - "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", - "typescript": "^4.9.5", - "webpack": "^4.46.0" - } - }, - "node_modules/@rush-temp/sandbox-exporter-logs-otlp-proto/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-exporter-logs-otlp-proto/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http": { - "version": "0.0.0", - "resolved": "file:projects/sandbox-exporter-metrics-otlp-http.tgz", - "integrity": "sha512-jkt069YqoPrr23NgGm2LDd1Qyd3rbwVZOC1++8U86rX61MLOLwm/VxKwdbWtEJJCJuzJZdsLNT0zlHPCNd/2Qw==", + "integrity": "sha512-V/6CesgKB+fJCqrqPXi4599oGtbxAnosQktY7+L5m1CRTxKqudBYQ8yD3tQaQ+se3RCIf5HrpaGHm/6PZ/Tw9Q==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -1767,6 +1580,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -1776,11 +1590,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -1790,59 +1604,12 @@ "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/colorette": { + "node_modules/@rush-temp/sandbox-exporter-logs-otlp-proto/node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/commander": { + "node_modules/@rush-temp/sandbox-exporter-logs-otlp-proto/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", @@ -1850,7 +1617,7 @@ "node": ">= 10" } }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/cross-spawn": { + "node_modules/@rush-temp/sandbox-exporter-logs-otlp-proto/node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", @@ -1863,15 +1630,7 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/shebang-command": { + "node_modules/@rush-temp/sandbox-exporter-logs-otlp-proto/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", @@ -1882,7 +1641,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/shebang-regex": { + "node_modules/@rush-temp/sandbox-exporter-logs-otlp-proto/node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", @@ -1890,7 +1649,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/webpack-cli": { + "node_modules/@rush-temp/sandbox-exporter-logs-otlp-proto/node_modules/webpack-cli": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", @@ -1936,7 +1695,7 @@ } } }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/webpack-merge": { + "node_modules/@rush-temp/sandbox-exporter-logs-otlp-proto/node_modules/webpack-merge": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", @@ -1948,7 +1707,7 @@ "node": ">=10.0.0" } }, - "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/which": { + "node_modules/@rush-temp/sandbox-exporter-logs-otlp-proto/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", @@ -1962,25 +1721,26 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http": { + "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http": { "version": "0.0.0", - "resolved": "file:projects/sandbox-exporter-trace-otlp-http.tgz", - "integrity": "sha512-0+7EiWVJgxzjLz/ZQhEfMazfE9Jw+qPQI9OA0EroYIPbDhM6+m/GVB1AZfmDO2nmJjhw8T1gxPmvh/DhgTpBVQ==", + "resolved": "file:projects/sandbox-exporter-metrics-otlp-http.tgz", + "integrity": "sha512-yLFhi7FS1024dLRfJDS9cQ6TPA4JfEP4CbdaxwHvq5z7iR/CxQiiM5pihQ+23JrqjBAz/8YlHvqVm/msbquMNg==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -1989,6 +1749,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -1998,11 +1759,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -2012,59 +1773,12 @@ "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/colorette": { + "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/commander": { + "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", @@ -2072,7 +1786,7 @@ "node": ">= 10" } }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/cross-spawn": { + "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", @@ -2085,15 +1799,7 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/shebang-command": { + "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", @@ -2104,7 +1810,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/shebang-regex": { + "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", @@ -2112,7 +1818,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/webpack-cli": { + "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/webpack-cli": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", @@ -2158,7 +1864,7 @@ } } }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/webpack-merge": { + "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/webpack-merge": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", @@ -2170,7 +1876,7 @@ "node": ">=10.0.0" } }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/which": { + "node_modules/@rush-temp/sandbox-exporter-metrics-otlp-http/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", @@ -2184,24 +1890,26 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto": { + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http": { "version": "0.0.0", - "resolved": "file:projects/sandbox-exporter-trace-otlp-proto.tgz", - "integrity": "sha512-XlxZH/BNaS/Lv9sxTdnZWSGDUlICshY4vfK7QO4nKm+3phnDFnoTqnl8kqGNJTtAqoz6giG5O7/ynPTRO5Y6hg==", + "resolved": "file:projects/sandbox-exporter-trace-otlp-http.tgz", + "integrity": "sha512-Qy+X1vUC9DNa6zx4QfJdK0jDE8TY+sTXvl3rL9gFHT2gWdOugiqzhj7QIOwKj/GnswqHayAyAhVeugSHox2tjw==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -2210,6 +1918,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -2219,73 +1928,157 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", "typescript": "^4.9.5", - "webpack": "^4.46.0" + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">= 8" + } + }, + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/babel" + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-http/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, "bin": { - "semver": "bin/semver.js" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-exporter-zipkin": { + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto": { "version": "0.0.0", - "resolved": "file:projects/sandbox-exporter-zipkin.tgz", - "integrity": "sha512-w5Qp5/FSSFFY7XMZeA+OXC1s9ad9y2M2QkKGI9AAoGTXq5qRoOedseo9DyXd+nI8U8AeEu+lDnkp/D/IOg/UiQ==", + "resolved": "file:projects/sandbox-exporter-trace-otlp-proto.tgz", + "integrity": "sha512-AsiygIHsZeuxEYhp5dN3oXg5CMDTM2vR04pSDc6/2u5qPyIaoKQEs3207/7s2HdFWRIJs2xhqx9XHx9LozVhEg==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", + "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -2294,6 +2087,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -2301,14 +2095,13 @@ "karma-typescript": "^5.5.3", "karma-webpack": "^4.0.2", "mocha": "10.0.0", - "nock": "13.3.1", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -2318,59 +2111,12 @@ "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/colorette": { + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto/node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, - "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/commander": { + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", @@ -2378,7 +2124,7 @@ "node": ">= 10" } }, - "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/cross-spawn": { + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto/node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", @@ -2391,15 +2137,7 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/shebang-command": { + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", @@ -2410,7 +2148,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/shebang-regex": { + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto/node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", @@ -2418,7 +2156,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/webpack-cli": { + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto/node_modules/webpack-cli": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", @@ -2464,7 +2202,7 @@ } } }, - "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/webpack-merge": { + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto/node_modules/webpack-merge": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", @@ -2476,7 +2214,7 @@ "node": ">=10.0.0" } }, - "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/which": { + "node_modules/@rush-temp/sandbox-exporter-trace-otlp-proto/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", @@ -2490,36 +2228,34 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-instrumentation": { + "node_modules/@rush-temp/sandbox-exporter-zipkin": { "version": "0.0.0", - "resolved": "file:projects/sandbox-instrumentation.tgz", - "integrity": "sha512-z6/LqYJE5iA9g0EggAkd5RKdcDW/4yhDXZFvr9XsD2ROTHU+ETY2a7ZXQkWWLq38un+DHV8bQmPcBsRmf/3nuQ==", + "resolved": "file:projects/sandbox-exporter-zipkin.tgz", + "integrity": "sha512-by9HK3wU5He7rM8oSR9d2D6OEPlj2IPK9fwJR1wl3OsRSpOFEFGBW3mZL7i+szQo8tzA5w3oO8eVBUu4pCpqIA==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", - "@types/semver": "7.5.0", - "@types/shimmer": "^1.0.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", - "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "4.2.1", - "import-in-the-middle": "1.3.5", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -2527,16 +2263,14 @@ "karma-typescript": "^5.5.3", "karma-webpack": "^4.0.2", "mocha": "10.0.0", + "nock": "13.3.2", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", - "require-in-the-middle": "^7.1.1", - "semver": "^7.5.1", - "shimmer": "^1.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -2546,166 +2280,23 @@ "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-instrumentation-document-load": { - "version": "0.0.0", - "resolved": "file:projects/sandbox-instrumentation-document-load.tgz", - "integrity": "sha512-iYQF54FyX/i3oaB/hG9nU8lOP6C8zBzctbofD54R0KvQkwU8KBis/rKPhvqrnwZWDjUkZ/eC1TIUIT1cRINlng==", - "dependencies": { - "@babel/core": "7.15.0", - "@jsdevtools/coverage-istanbul-loader": "3.0.5", - "@types/jquery": "^3.5.14", - "@types/mocha": "^10.0.0", - "@types/node": "^18.14.2", - "@types/sinon": "^10.0.13", - "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", - "babel-loader": "8.2.2", - "chromium": "^3.0.3", - "eslint": "7.32.0", - "eslint-config-prettier": "8.5.0", - "eslint-plugin-header": "3.1.1", - "eslint-plugin-import": "2.25.3", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-prettier": "4.2.1", - "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", - "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", - "karma-mocha": "^2.0.1", - "karma-mocha-webworker": "1.3.0", - "karma-spec-reporter": "^0.0.34", - "karma-typescript": "^5.5.3", - "karma-webpack": "^4.0.2", - "mocha": "10.0.0", - "nyc": "^15.1.0", - "pako": "^2.0.3", - "puppeteer": "^14.2.1", - "sinon": "^14.0.0", - "ts-loader": "8.4.0", - "ts-mocha": "10.0.0", - "typedoc": "^0.23.26", - "typedoc-plugin-missing-exports": "^1.0.0", - "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", - "typescript": "^4.9.5", - "webpack": "^4.46.0", - "webpack-cli": "4.7.2", - "webpack-merge": "5.8.0" + "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" } }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch": { - "version": "0.0.0", - "resolved": "file:projects/sandbox-instrumentation-fetch.tgz", - "integrity": "sha512-odp1IpKEpUGU9k3Q1gFUC5EF0zWYVDJKBzB/J1Sl7CRY5UVhWaPBJpvKaBA6wXVKUI/tGkhhkfgUhs0EX+eLBg==", - "dependencies": { - "@babel/core": "7.22.5", - "@types/jquery": "^3.5.14", - "@types/mocha": "^10.0.0", - "@types/node": "^18.14.2", - "@types/sinon": "^10.0.13", - "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", - "babel-loader": "8.3.0", - "chromium": "^3.0.3", - "codecov": "^3.8.3", - "cross-var": "1.1.0", - "eslint": "7.32.0", - "eslint-config-prettier": "8.5.0", - "eslint-plugin-header": "3.1.1", - "eslint-plugin-import": "2.25.3", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-prettier": "4.2.1", - "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", - "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", - "karma-mocha": "^2.0.1", - "karma-mocha-webworker": "1.3.0", - "karma-spec-reporter": "^0.0.34", - "karma-typescript": "^5.5.3", - "karma-webpack": "^4.0.2", - "mocha": "10.0.0", - "nyc": "^15.1.0", - "pako": "^2.0.3", - "puppeteer": "^14.2.1", - "sinon": "^14.0.0", - "ts-loader": "8.4.0", - "ts-mocha": "10.0.0", - "tslib": "^2.3.1", - "typedoc": "^0.23.26", - "typedoc-plugin-missing-exports": "^1.0.0", - "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", - "typescript": "^4.9.5", - "webpack": "^4.46.0", - "webpack-cli": "4.10.0", - "webpack-merge": "5.9.0" - } - }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" - }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2715,15 +2306,7 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/shebang-command": { + "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", @@ -2734,7 +2317,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/shebang-regex": { + "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", @@ -2742,7 +2325,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/webpack-cli": { + "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/webpack-cli": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", @@ -2788,7 +2371,7 @@ } } }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/webpack-merge": { + "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/webpack-merge": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", @@ -2800,7 +2383,7 @@ "node": ">=10.0.0" } }, - "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/which": { + "node_modules/@rush-temp/sandbox-exporter-zipkin/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", @@ -2814,33 +2397,39 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-instrumentation-long-task": { + "node_modules/@rush-temp/sandbox-instrumentation": { "version": "0.0.0", - "resolved": "file:projects/sandbox-instrumentation-long-task.tgz", - "integrity": "sha512-lXXb9IVl8EC/B05ClX6EixSDmuc1M6OH1Ax/NPmExy8QC1SuwIyzXzc5ruZkgmk6XNi6jTJ3iKS3WiI0YjebOg==", + "resolved": "file:projects/sandbox-instrumentation.tgz", + "integrity": "sha512-q3M4/zr0mWi0U4k9+n1OXGMeATBYPKA4ZROaeQrA5WC62yobyNEc+Kmp7vGsrBMHNbrWO0p4+VSrq5jAUNlklw==", "dependencies": { - "@babel/core": "7.15.0", - "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", + "@types/semver": "7.5.0", + "@types/shimmer": "^1.0.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", - "babel-loader": "8.2.2", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", - "eslint": "7.32.0", + "codecov": "^3.8.3", + "cpx": "1.5.0", + "cross-var": "1.1.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", "eslint-plugin-node": "11.1.0", "eslint-plugin-prettier": "4.2.1", + "import-in-the-middle": "1.4.2", "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", - "karma-jquery": "0.2.4", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "^0.0.34", @@ -2849,7 +2438,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.1", + "shimmer": "^1.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", @@ -2858,28 +2451,28 @@ "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", "typescript": "^4.9.5", "webpack": "^4.46.0", - "webpack-cli": "4.7.2", - "webpack-merge": "5.8.0", - "zone.js": "^0.11.4" + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-instrumentation-user-interaction": { + "node_modules/@rush-temp/sandbox-instrumentation-document-load": { "version": "0.0.0", - "resolved": "file:projects/sandbox-instrumentation-user-interaction.tgz", - "integrity": "sha512-sNnSEHCgK0euX8NB4cuWusgTo5aDMhUwND3PfSIwlun+2mpsZlUI5WZoQgRKdEXrJZN0egPZqeqiWTiQbsMJ/w==", + "resolved": "file:projects/sandbox-instrumentation-document-load.tgz", + "integrity": "sha512-kPw02oyZ2R+bWPwBA+qv4Xcx5rzft9tmTVpD2AF1UKH7SuT3g8EybZVt9HmljH9feBXrTn+Y1QIpt7kC63IGnw==", "dependencies": { - "@babel/core": "7.15.0", + "@babel/core": "7.22.10", "@jsdevtools/coverage-istanbul-loader": "3.0.5", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.2.2", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -2889,7 +2482,6 @@ "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", "karma-coverage-istanbul-reporter": "3.0.3", - "karma-jquery": "0.2.4", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "^0.0.34", @@ -2898,6 +2490,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -2908,28 +2501,70 @@ "typescript": "^4.9.5", "webpack": "^4.46.0", "webpack-cli": "4.7.2", - "webpack-merge": "5.8.0", - "zone.js": "^0.11.4" + "webpack-merge": "5.8.0" } }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request": { + "node_modules/@rush-temp/sandbox-instrumentation-document-load/node_modules/babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-document-load/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-document-load/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-fetch": { "version": "0.0.0", - "resolved": "file:projects/sandbox-instrumentation-xml-http-request.tgz", - "integrity": "sha512-54g7Bk3JZujCwg+8FKcbCJaewBf61HVjbLAN3s75Qo9PQzikutVHkIKSuEa/7QG9STWIJgPpmRSbj1Ww4YH6lA==", + "resolved": "file:projects/sandbox-instrumentation-fetch.tgz", + "integrity": "sha512-wJ7BvCippKzTPrQQOu4DOMSE9fLzNLYRhHCEMWsbyDeoaVgj+oZA/oPQYwO6HYoCAHoygvDqBN9/rxP35ONZ0A==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -2938,6 +2573,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -2947,11 +2583,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -2961,59 +2597,12 @@ "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/colorette": { + "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/commander": { + "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", @@ -3021,7 +2610,7 @@ "node": ">= 10" } }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/cross-spawn": { + "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", @@ -3034,15 +2623,7 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/shebang-command": { + "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", @@ -3053,7 +2634,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/shebang-regex": { + "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", @@ -3061,7 +2642,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/webpack-cli": { + "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/webpack-cli": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", @@ -3107,7 +2688,7 @@ } } }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/webpack-merge": { + "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/webpack-merge": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", @@ -3119,7 +2700,7 @@ "node": ">=10.0.0" } }, - "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/which": { + "node_modules/@rush-temp/sandbox-instrumentation-fetch/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", @@ -3133,67 +2714,534 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-instrumentation/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "node_modules/@rush-temp/sandbox-instrumentation-long-task": { + "version": "0.0.0", + "resolved": "file:projects/sandbox-instrumentation-long-task.tgz", + "integrity": "sha512-raIbIvFyb/UUEArdx+INuy3t5fJNts5ncFyjt9dGRhTh8/iBSyrPMR7fwW3DMF82VuvCUj69m3K1/Aaq6zaKRg==", "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-instrumentation/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" + "@babel/core": "7.22.10", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@types/jquery": "^3.5.14", + "@types/mocha": "^10.0.0", + "@types/node": "^18.14.2", + "@types/sinon": "^10.0.13", + "@types/webpack-env": "1.16.3", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.2.2", + "babel-plugin-istanbul": "6.1.1", + "chromium": "^3.0.3", + "eslint": "8.44.0", + "eslint-config-prettier": "8.5.0", + "eslint-plugin-header": "3.1.1", + "eslint-plugin-import": "2.25.3", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "4.2.1", + "istanbul-instrumenter-loader": "3.0.1", + "karma": "6.3.16", + "karma-chrome-launcher": "3.1.0", + "karma-coverage-istanbul-reporter": "3.0.3", + "karma-jquery": "0.2.4", + "karma-mocha": "^2.0.1", + "karma-mocha-webworker": "1.3.0", + "karma-spec-reporter": "^0.0.34", + "karma-typescript": "^5.5.3", + "karma-webpack": "^4.0.2", + "mocha": "10.0.0", + "nyc": "^15.1.0", + "pako": "^2.0.3", + "prettier": "2.8.8", + "puppeteer": "^14.2.1", + "sinon": "^14.0.0", + "ts-loader": "8.4.0", + "ts-mocha": "10.0.0", + "typedoc": "^0.23.26", + "typedoc-plugin-missing-exports": "^1.0.0", + "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", + "typescript": "^4.9.5", + "webpack": "^4.46.0", + "webpack-cli": "4.7.2", + "webpack-merge": "5.8.0", + "zone.js": "^0.11.4" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-long-task/node_modules/babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-long-task/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-long-task/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-user-interaction": { + "version": "0.0.0", + "resolved": "file:projects/sandbox-instrumentation-user-interaction.tgz", + "integrity": "sha512-Wxuvh713yiChefO/lpXtQ82zmFj8gjNNsSoAjKZNdXp6eE+yv/H2ivsyS02Cvahr23ptSNzfbLA1vJ0vpJGb4g==", + "dependencies": { + "@babel/core": "7.22.10", + "@jsdevtools/coverage-istanbul-loader": "3.0.5", + "@types/jquery": "^3.5.14", + "@types/mocha": "^10.0.0", + "@types/node": "^18.14.2", + "@types/sinon": "^10.0.13", + "@types/webpack-env": "1.16.3", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.2.2", + "babel-plugin-istanbul": "6.1.1", + "chromium": "^3.0.3", + "eslint": "8.44.0", + "eslint-config-prettier": "8.5.0", + "eslint-plugin-header": "3.1.1", + "eslint-plugin-import": "2.25.3", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "4.2.1", + "istanbul-instrumenter-loader": "3.0.1", + "karma": "6.3.16", + "karma-chrome-launcher": "3.1.0", + "karma-coverage-istanbul-reporter": "3.0.3", + "karma-jquery": "0.2.4", + "karma-mocha": "^2.0.1", + "karma-mocha-webworker": "1.3.0", + "karma-spec-reporter": "^0.0.34", + "karma-typescript": "^5.5.3", + "karma-webpack": "^4.0.2", + "mocha": "10.0.0", + "nyc": "^15.1.0", + "pako": "^2.0.3", + "prettier": "2.8.8", + "puppeteer": "^14.2.1", + "sinon": "^14.0.0", + "ts-loader": "8.4.0", + "ts-mocha": "10.0.0", + "typedoc": "^0.23.26", + "typedoc-plugin-missing-exports": "^1.0.0", + "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", + "typescript": "^4.9.5", + "webpack": "^4.46.0", + "webpack-cli": "4.7.2", + "webpack-merge": "5.8.0", + "zone.js": "^0.11.4" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-user-interaction/node_modules/babel-loader": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", + "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^1.4.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-user-interaction/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-user-interaction/node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request": { + "version": "0.0.0", + "resolved": "file:projects/sandbox-instrumentation-xml-http-request.tgz", + "integrity": "sha512-yLS5vqrf3E+BpAkwVtvkjxJUzitsvfa91Q8ta5UBBUOg9sqmBMSMSq/X7XK1dB1ukEfzoT/689XClQCud3gvbA==", + "dependencies": { + "@babel/core": "7.22.10", + "@types/jquery": "^3.5.14", + "@types/mocha": "^10.0.0", + "@types/node": "^18.14.2", + "@types/sinon": "^10.0.13", + "@types/webpack-env": "1.16.3", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", + "chromium": "^3.0.3", + "codecov": "^3.8.3", + "cross-var": "1.1.0", + "eslint": "8.44.0", + "eslint-config-prettier": "8.5.0", + "eslint-plugin-header": "3.1.1", + "eslint-plugin-import": "2.25.3", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "4.2.1", + "istanbul-instrumenter-loader": "3.0.1", + "karma": "6.3.16", + "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", + "karma-coverage-istanbul-reporter": "3.0.3", + "karma-mocha": "^2.0.1", + "karma-mocha-webworker": "1.3.0", + "karma-spec-reporter": "^0.0.34", + "karma-typescript": "^5.5.3", + "karma-webpack": "^4.0.2", + "mocha": "10.0.0", + "nyc": "^15.1.0", + "pako": "^2.0.3", + "prettier": "2.8.8", + "puppeteer": "^14.2.1", + "sinon": "^14.0.0", + "ts-loader": "8.4.0", + "ts-mocha": "10.0.0", + "typedoc": "^0.23.26", + "typedoc-plugin-missing-exports": "^1.0.0", + "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", + "typescript": "^4.9.5", + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation-xml-http-request/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation/node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/@rush-temp/sandbox-instrumentation/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation/node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/@rush-temp/sandbox-instrumentation/node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", + "node_modules/@rush-temp/sandbox-instrumentation/node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" }, "engines": { - "node": ">= 8.9" + "node": ">=10.0.0" + } + }, + "node_modules/@rush-temp/sandbox-instrumentation/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-instrumentation/node_modules/colorette": { + "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector": { + "version": "0.0.0", + "resolved": "file:projects/sandbox-opentelemetry-browser-detector.tgz", + "integrity": "sha512-7IRkzxicj99uOIblVnP/2fNAr1pPLIkoOYJ//ubVURi15BVNvXKtC7I9xfzfPbV28wpJsJQA7/MrXmEp8TWJ4g==", + "dependencies": { + "@babel/core": "7.22.10", + "@types/jquery": "^3.5.14", + "@types/mocha": "^10.0.0", + "@types/node": "^18.14.2", + "@types/sinon": "^10.0.13", + "@types/webpack-env": "1.16.3", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", + "chromium": "^3.0.3", + "codecov": "^3.8.3", + "cross-var": "1.1.0", + "eslint": "8.44.0", + "eslint-config-prettier": "8.5.0", + "eslint-plugin-header": "3.1.1", + "eslint-plugin-import": "2.25.3", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "4.2.1", + "istanbul-instrumenter-loader": "3.0.1", + "karma": "6.3.16", + "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", + "karma-coverage-istanbul-reporter": "3.0.3", + "karma-mocha": "^2.0.1", + "karma-mocha-webworker": "1.3.0", + "karma-spec-reporter": "^0.0.34", + "karma-typescript": "^5.5.3", + "karma-webpack": "^4.0.2", + "mocha": "10.0.0", + "nyc": "^15.1.0", + "pako": "^2.0.3", + "prettier": "2.8.8", + "puppeteer": "^14.2.1", + "sinon": "^14.0.0", + "ts-loader": "8.4.0", + "ts-mocha": "10.0.0", + "typedoc": "^0.23.26", + "typedoc-plugin-missing-exports": "^1.0.0", + "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", + "typescript": "^4.9.5", + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" + } + }, + "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector/node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, - "node_modules/@rush-temp/sandbox-instrumentation/node_modules/commander": { + "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", @@ -3201,7 +3249,7 @@ "node": ">= 10" } }, - "node_modules/@rush-temp/sandbox-instrumentation/node_modules/cross-spawn": { + "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector/node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", @@ -3214,7 +3262,7 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-instrumentation/node_modules/shebang-command": { + "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", @@ -3225,7 +3273,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-instrumentation/node_modules/shebang-regex": { + "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector/node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", @@ -3233,7 +3281,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-instrumentation/node_modules/webpack-cli": { + "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector/node_modules/webpack-cli": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", @@ -3279,7 +3327,7 @@ } } }, - "node_modules/@rush-temp/sandbox-instrumentation/node_modules/webpack-merge": { + "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector/node_modules/webpack-merge": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", @@ -3291,7 +3339,7 @@ "node": ">=10.0.0" } }, - "node_modules/@rush-temp/sandbox-instrumentation/node_modules/which": { + "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", @@ -3305,23 +3353,25 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector": { + "node_modules/@rush-temp/sandbox-otlp-exporter-base": { "version": "0.0.0", - "resolved": "file:projects/sandbox-opentelemetry-browser-detector.tgz", - "integrity": "sha512-qIbJGNmzBOD2fro6e0mLdGm/TTdwQPNV0RKONfnmNP+JLZpi0BODkR0Jy+kIN6J9n7vyDCuoUEO1dBUvQexWUA==", + "resolved": "file:projects/sandbox-otlp-exporter-base.tgz", + "integrity": "sha512-j4XLtLU7Ci4od6oGGwJdCBMM7ZS8CV2qzMn4Nwhu1EiP2hE+JRGNoAL/2kh4QgvR5cGVeWIGe5M+YVx4H9ThWA==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -3330,6 +3380,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -3339,71 +3390,205 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", "typescript": "^4.9.5", - "webpack": "^4.46.0" + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "node_modules/@rush-temp/sandbox-otlp-exporter-base/node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/@rush-temp/sandbox-otlp-exporter-base/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@rush-temp/sandbox-otlp-exporter-base/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=6.9.0" + "node": ">= 8" + } + }, + "node_modules/@rush-temp/sandbox-otlp-exporter-base/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-otlp-exporter-base/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-otlp-exporter-base/node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/babel" + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/@rush-temp/sandbox-opentelemetry-browser-detector/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "node_modules/@rush-temp/sandbox-otlp-exporter-base/node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@rush-temp/sandbox-otlp-exporter-base/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, "bin": { - "semver": "bin/semver.js" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rush-temp/sandbox-otlp-proto-exporter-base": { + "version": "0.0.0", + "resolved": "file:projects/sandbox-otlp-proto-exporter-base.tgz", + "integrity": "sha512-JPYkyOi0ZkUXnGedbHwo6xxro+EmonBB+R7H9baBgCC3xqxrlmBlBnpku/i+o3QeoLAvomit2jsub5NK4+uLZA==", + "dependencies": { + "@babel/core": "7.22.10", + "@types/jquery": "^3.5.14", + "@types/mocha": "^10.0.0", + "@types/node": "^18.14.2", + "@types/sinon": "^10.0.13", + "@types/webpack-env": "1.16.3", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", + "chromium": "^3.0.3", + "codecov": "^3.8.3", + "cross-var": "1.1.0", + "eslint": "8.44.0", + "eslint-config-prettier": "8.5.0", + "eslint-plugin-header": "3.1.1", + "eslint-plugin-import": "2.25.3", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-prettier": "4.2.1", + "istanbul-instrumenter-loader": "3.0.1", + "karma": "6.3.16", + "karma-chrome-launcher": "3.1.0", + "karma-coverage-istanbul-reporter": "3.0.3", + "karma-mocha": "^2.0.1", + "karma-mocha-webworker": "1.3.0", + "karma-spec-reporter": "^0.0.34", + "karma-typescript": "^5.5.3", + "karma-webpack": "^4.0.2", + "mocha": "10.0.0", + "nyc": "^15.1.0", + "pako": "^2.0.3", + "prettier": "2.8.8", + "protobufjs": "^7.2.3", + "protobufjs-cli": "1.1.1", + "puppeteer": "^14.2.1", + "sinon": "^14.0.0", + "ts-loader": "8.4.0", + "ts-mocha": "10.0.0", + "typedoc": "^0.23.26", + "typedoc-plugin-missing-exports": "^1.0.0", + "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", + "typescript": "^4.9.5", + "webpack": "^4.46.0" } }, - "node_modules/@rush-temp/sandbox-otlp-exporter-base": { + "node_modules/@rush-temp/sandbox-otlp-transformer": { "version": "0.0.0", - "resolved": "file:projects/sandbox-otlp-exporter-base.tgz", - "integrity": "sha512-FJ8IW6cIaAotGEtevBc86gQAjZQ63wdVsrtHv49rW5ZQi53Xf1AnZyNmmvY92MDEsl6yS3SWiQWS+ZwWCpFlEA==", + "resolved": "file:projects/sandbox-otlp-transformer.tgz", + "integrity": "sha512-yIB2c95+F1AVYZw0FBmtZgh6WBgwhgFaBdmPk4Xy/AXZQGu5ESl5x0P9/TZiQKWa9iOXsjScMncc0iPJCzaLCQ==", "dependencies": { "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -3412,6 +3597,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -3419,14 +3605,13 @@ "karma-typescript": "^5.5.3", "karma-webpack": "^4.0.2", "mocha": "10.0.0", - "nock": "13.3.1", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -3434,23 +3619,24 @@ "webpack": "^4.46.0" } }, - "node_modules/@rush-temp/sandbox-otlp-proto-exporter-base": { + "node_modules/@rush-temp/sandbox-propagator-b3": { "version": "0.0.0", - "resolved": "file:projects/sandbox-otlp-proto-exporter-base.tgz", - "integrity": "sha512-LLu01kybM+TkQucJMIR6ZcsbZDbsetKJhuVHxyOQFNV0jdFjY+8UQp1sEJ2uJnQcSHgEeFX/eZmrJraTwBj5Dg==", + "resolved": "file:projects/sandbox-propagator-b3.tgz", + "integrity": "sha512-iAVpK7LEJRC1xyOLYj+Femwdx5mHEG2MCB3sTV/z0kRdmjVJEkS3ztamFPO3Vw2j7x6jLsFhofREDjCqbiQQTw==", "dependencies": { - "@babel/core": "7.22.5", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -3468,13 +3654,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", - "protobufjs": "^7.2.3", - "protobufjs-cli": "1.1.1", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -3482,59 +3666,25 @@ "webpack": "^4.46.0" } }, - "node_modules/@rush-temp/sandbox-otlp-proto-exporter-base/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-otlp-proto-exporter-base/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@rush-temp/sandbox-otlp-transformer": { + "node_modules/@rush-temp/sandbox-resources": { "version": "0.0.0", - "resolved": "file:projects/sandbox-otlp-transformer.tgz", - "integrity": "sha512-KkHS7X1ZmjNRFsMvaDPVNj+qvp5nwO1ReWNNQW+flzuLFpVqiK1of/o7kTv4W+AnwA/V1HYF9Q+Rjf7KjpFkxQ==", + "resolved": "file:projects/sandbox-resources.tgz", + "integrity": "sha512-KLd74K3ZaMU8XYLLxcbIbUj/R/UvlXcm4qGcD+lkymBzz4ENYvkWdlSdF68LtQ6mt0lsDpVPiws8bBSRKOf55Q==", "dependencies": { + "@opentelemetry/resources": "npm:@opentelemetry/resources@1.9.0", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -3543,6 +3693,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -3550,36 +3701,159 @@ "karma-typescript": "^5.5.3", "karma-webpack": "^4.0.2", "mocha": "10.0.0", + "nock": "13.3.2", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", "typescript": "^4.9.5", - "webpack": "^4.46.0" + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-propagator-b3": { + "node_modules/@rush-temp/sandbox-resources/node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/@rush-temp/sandbox-resources/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@rush-temp/sandbox-resources/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rush-temp/sandbox-resources/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-resources/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-resources/node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@rush-temp/sandbox-resources/node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@rush-temp/sandbox-resources/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rush-temp/sandbox-sdk-logs": { "version": "0.0.0", - "resolved": "file:projects/sandbox-propagator-b3.tgz", - "integrity": "sha512-1eLlvpOQl5cPN/vXKgxmOLMvARgKanve6Gl+hPapsVlCZn1sdKER5+Pl0tygvtInFiVUprfyS861chtElHxY0A==", + "resolved": "file:projects/sandbox-sdk-logs.tgz", + "integrity": "sha512-P2AYVduSANkuqYC1C+KrM5n1hN4c2tPuox3fAH9ip65MEvl1F1MCgyOOdaKAAA2LKRIhtvJCsFjGLjYkhnfjOA==", "dependencies": { + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -3588,6 +3862,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -3597,35 +3872,157 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", "typescript": "^4.9.5", - "webpack": "^4.46.0" + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" + } + }, + "node_modules/@rush-temp/sandbox-sdk-logs/node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" + }, + "node_modules/@rush-temp/sandbox-sdk-logs/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@rush-temp/sandbox-sdk-logs/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rush-temp/sandbox-sdk-logs/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-sdk-logs/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@rush-temp/sandbox-sdk-logs/node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } } }, - "node_modules/@rush-temp/sandbox-resources": { + "node_modules/@rush-temp/sandbox-sdk-logs/node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@rush-temp/sandbox-sdk-logs/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rush-temp/sandbox-sdk-metrics": { "version": "0.0.0", - "resolved": "file:projects/sandbox-resources.tgz", - "integrity": "sha512-eD/xH681aIrtDe9d+XaxGWzaZQ8yUhUczp+SnfAzH49ECgoJKMVam2oxurUF0Ap+LbL7EWErKAdBm+YZzghR0A==", + "resolved": "file:projects/sandbox-sdk-metrics.tgz", + "integrity": "sha512-ylKNBahRub1NK2y7K3AvwyJKYS2nO+7GwNJwBMG4pesvmuf00kedQYd2+Oxt6F8sVsdW6VM+zoKzcL0Joq6sDA==", "dependencies": { - "@opentelemetry/resources": "npm:@opentelemetry/resources@1.9.0", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", + "@types/lodash.merge": "4.6.7", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -3634,21 +4031,22 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", "karma-spec-reporter": "^0.0.34", "karma-typescript": "^5.5.3", "karma-webpack": "^4.0.2", + "lodash.merge": "^4.6.2", "mocha": "10.0.0", - "nock": "13.3.1", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -3658,12 +4056,12 @@ "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-resources/node_modules/colorette": { + "node_modules/@rush-temp/sandbox-sdk-metrics/node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, - "node_modules/@rush-temp/sandbox-resources/node_modules/commander": { + "node_modules/@rush-temp/sandbox-sdk-metrics/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", @@ -3671,7 +4069,7 @@ "node": ">= 10" } }, - "node_modules/@rush-temp/sandbox-resources/node_modules/cross-spawn": { + "node_modules/@rush-temp/sandbox-sdk-metrics/node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", @@ -3684,7 +4082,7 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-resources/node_modules/shebang-command": { + "node_modules/@rush-temp/sandbox-sdk-metrics/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", @@ -3695,7 +4093,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-resources/node_modules/shebang-regex": { + "node_modules/@rush-temp/sandbox-sdk-metrics/node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", @@ -3703,7 +4101,7 @@ "node": ">=8" } }, - "node_modules/@rush-temp/sandbox-resources/node_modules/webpack-cli": { + "node_modules/@rush-temp/sandbox-sdk-metrics/node_modules/webpack-cli": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", @@ -3749,7 +4147,7 @@ } } }, - "node_modules/@rush-temp/sandbox-resources/node_modules/webpack-merge": { + "node_modules/@rush-temp/sandbox-sdk-metrics/node_modules/webpack-merge": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", @@ -3761,7 +4159,7 @@ "node": ">=10.0.0" } }, - "node_modules/@rush-temp/sandbox-resources/node_modules/which": { + "node_modules/@rush-temp/sandbox-sdk-metrics/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", @@ -3775,102 +4173,10 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-sdk-logs": { - "version": "0.0.0", - "resolved": "file:projects/sandbox-sdk-logs.tgz", - "integrity": "sha512-/ZyTgeimSyePpIWcWXH4JR4MDXe6tU3Ee1SFcERE5HFvqTuT2oLFnLKVhQLDkX38a172sYeOkBBxfi1zCa8DIA==", - "dependencies": { - "@types/jquery": "^3.5.14", - "@types/mocha": "^10.0.0", - "@types/node": "^18.14.2", - "@types/sinon": "^10.0.13", - "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", - "chromium": "^3.0.3", - "codecov": "^3.8.3", - "cross-var": "1.1.0", - "eslint": "7.32.0", - "eslint-config-prettier": "8.5.0", - "eslint-plugin-header": "3.1.1", - "eslint-plugin-import": "2.25.3", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-prettier": "4.2.1", - "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", - "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", - "karma-mocha": "^2.0.1", - "karma-mocha-webworker": "1.3.0", - "karma-spec-reporter": "^0.0.34", - "karma-typescript": "^5.5.3", - "karma-webpack": "^4.0.2", - "mocha": "10.0.0", - "nyc": "^15.1.0", - "pako": "^2.0.3", - "puppeteer": "^14.2.1", - "sinon": "^14.0.0", - "ts-loader": "8.4.0", - "ts-mocha": "10.0.0", - "tslib": "^2.3.1", - "typedoc": "^0.23.26", - "typedoc-plugin-missing-exports": "^1.0.0", - "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", - "typescript": "^4.9.5", - "webpack": "^4.46.0" - } - }, - "node_modules/@rush-temp/sandbox-sdk-metrics": { - "version": "0.0.0", - "resolved": "file:projects/sandbox-sdk-metrics.tgz", - "integrity": "sha512-DjKFUr1NyxZrpqXAZG1MfdyDap7xsoTwmLIV/b0uXXpJelaBKaw0xFRFZ/yUgvc1Zeg/h0sH1f5uHRVKm8Xp/g==", - "dependencies": { - "@types/jquery": "^3.5.14", - "@types/lodash.merge": "4.6.7", - "@types/mocha": "^10.0.0", - "@types/node": "^18.14.2", - "@types/sinon": "^10.0.13", - "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", - "chromium": "^3.0.3", - "codecov": "^3.8.3", - "cross-var": "1.1.0", - "eslint": "7.32.0", - "eslint-config-prettier": "8.5.0", - "eslint-plugin-header": "3.1.1", - "eslint-plugin-import": "2.25.3", - "eslint-plugin-node": "11.1.0", - "eslint-plugin-prettier": "4.2.1", - "istanbul-instrumenter-loader": "3.0.1", - "karma": "6.3.16", - "karma-chrome-launcher": "3.1.0", - "karma-coverage-istanbul-reporter": "3.0.3", - "karma-mocha": "^2.0.1", - "karma-mocha-webworker": "1.3.0", - "karma-spec-reporter": "^0.0.34", - "karma-typescript": "^5.5.3", - "karma-webpack": "^4.0.2", - "lodash.merge": "^4.6.2", - "mocha": "10.0.0", - "nyc": "^15.1.0", - "pako": "^2.0.3", - "puppeteer": "^14.2.1", - "sinon": "^14.0.0", - "ts-loader": "8.4.0", - "ts-mocha": "10.0.0", - "tslib": "^2.3.1", - "typedoc": "^0.23.26", - "typedoc-plugin-missing-exports": "^1.0.0", - "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", - "typescript": "^4.9.5", - "webpack": "^4.46.0" - } - }, "node_modules/@rush-temp/sandbox-sdk-trace-base": { "version": "0.0.0", "resolved": "file:projects/sandbox-sdk-trace-base.tgz", - "integrity": "sha512-o9S98FcExdz/VHCeNMgYTgHiRARoIAqVQ+PdtiDcjwFxB8MInt3Yzj1U6Cpct1JK9thVvPjJNZQvEliMbzFYHA==", + "integrity": "sha512-EJvx1Y+Ym9HYhc74l+px+PN1o+j7IxVZZDmVl/xI714YkR2yiylB7guEhGWW4QeOfk3DRa7yY06HgSks85uptQ==", "dependencies": { "@opentelemetry/resources": "npm:@opentelemetry/resources@1.9.0", "@types/jquery": "^3.5.14", @@ -3878,12 +4184,14 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -3892,6 +4200,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -3901,11 +4210,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -3916,21 +4225,22 @@ "node_modules/@rush-temp/sandbox-sdk-trace-web": { "version": "0.0.0", "resolved": "file:projects/sandbox-sdk-trace-web.tgz", - "integrity": "sha512-F4eG4yqTGn2OgkRoe7NG7K8YaJLIyEKvpX5ajnhrudP1AR3cmJwpLHlRND37HegJTDbwxm/JRQOw2cEldqilnQ==", + "integrity": "sha512-H0dij1z+zmupnIS/SCHgahkEZQyHjnLXQ6894YHrYevl1hJxFEVAKScKGn5ARqWav0//ub0vFZFDL5/V7e14VQ==", "dependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -3939,6 +4249,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-jquery": "0.2.4", "karma-mocha": "^2.0.1", @@ -3949,11 +4260,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -3963,53 +4274,6 @@ "webpack-merge": "5.9.0" } }, - "node_modules/@rush-temp/sandbox-sdk-trace-web/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@rush-temp/sandbox-sdk-trace-web/node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, "node_modules/@rush-temp/sandbox-sdk-trace-web/node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", @@ -4036,14 +4300,6 @@ "node": ">= 8" } }, - "node_modules/@rush-temp/sandbox-sdk-trace-web/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@rush-temp/sandbox-sdk-trace-web/node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4138,19 +4394,21 @@ "node_modules/@rush-temp/sandbox-semantic-conventions": { "version": "0.0.0", "resolved": "file:projects/sandbox-semantic-conventions.tgz", - "integrity": "sha512-c61UyJpIT2THBlmD6x/CXTXG0CBVyL9IKRbhiduB+bX2S+P9RKXutpty196Zl6NddB/ay7F1Z512plWrL9dG7Q==", + "integrity": "sha512-LzKdFCQSmMpGrXaGDyZpmtYTzrUPFyxu4T3pOpzCjQYf1BnVjM8ePhC4MLtKz/k2VhO5Maiombq//diOU4AxWQ==", "dependencies": { "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -4166,14 +4424,14 @@ "karma-typescript": "^5.5.3", "karma-webpack": "^4.0.2", "mocha": "10.0.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -4184,7 +4442,7 @@ "node_modules/@rush-temp/web-opentelemetry-example": { "version": "0.0.0", "resolved": "file:projects/web-opentelemetry-example.tgz", - "integrity": "sha512-ErxB2qeWSkBODg7ME6BPGPSau4YsaN+nBOP31gCe45tpNy4ybfVVyC4n7e8mY5YMYMUIvyTn76UkNcPR4JPDPw==", + "integrity": "sha512-Fm1sRfbdIc2BpXwc8Ve3eOPz2HlUFqciw8O3c0WKjlwTSqiJn+KyDcH3/RwMKLPv+QoAvX5GbhMhbD43sRiykw==", "dependencies": { "@babel/core": "^7.6.0", "@types/jquery": "^3.5.14", @@ -4192,11 +4450,12 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "^8.0.6", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -4214,11 +4473,11 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", "ts-mocha": "10.0.0", - "tslib": "^2.3.1", "typedoc": "^0.23.26", "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", @@ -4538,9 +4797,9 @@ "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==" }, "node_modules/@types/lodash": { - "version": "4.14.195", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.195.tgz", - "integrity": "sha512-Hwx9EUgdwf2GLarOjQp5ZH8ZmblzcbTBC2wtQWNKARBSxM9ezRIAUpeDTgoQRAFB0+8CNWXVA9+MaSOzOF3nPg==" + "version": "4.14.197", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", + "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==" }, "node_modules/@types/lodash.merge": { "version": "4.6.7", @@ -4575,9 +4834,9 @@ "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==" }, "node_modules/@types/node": { - "version": "18.16.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.18.tgz", - "integrity": "sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==" + "version": "18.17.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.4.tgz", + "integrity": "sha512-ATL4WLgr7/W40+Sp1WnNTSKbgVn6Pvhc/2RHAdt8fl6NsQyp4oPCi2eKcGOvA494bwf1K/W6nGgZ9TwDqvpjdw==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -4640,9 +4899,9 @@ "integrity": "sha512-dKkr1bTxbEsFlh2ARpKzcaAmsYixqt9UyCdoEZk8rHyE4iQYcDCyvSjDSf7JUWJHlJiTtbIoQjxKh6ViywqDAg==" }, "node_modules/@types/sinon": { - "version": "10.0.15", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.15.tgz", - "integrity": "sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==", + "version": "10.0.16", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.16.tgz", + "integrity": "sha512-j2Du5SYpXZjJVJtXBokASpPRj+e2z+VUhCPHmM6WMfe3dpHu6iVKJMU6AiBcMp/XTAYnEj6Wc1trJUWwZ0QaAQ==", "dependencies": { "@types/sinonjs__fake-timers": "*" } @@ -4683,14 +4942,6 @@ "source-map": "^0.6.1" } }, - "node_modules/@types/uglify-js/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@types/webpack": { "version": "4.41.33", "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz", @@ -4727,14 +4978,6 @@ "node": ">= 8" } }, - "node_modules/@types/webpack/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@types/ws": { "version": "8.5.5", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", @@ -4762,17 +5005,19 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.3.1.tgz", - "integrity": "sha512-cFImaoIr5Ojj358xI/SDhjog57OK2NqlpxwdcgyxDA3bJlZcJq5CPzUXtpD7CxI2Hm6ATU7w5fQnnkVnmwpHqw==", - "dependencies": { - "@typescript-eslint/experimental-utils": "5.3.1", - "@typescript-eslint/scope-manager": "5.3.1", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.11.tgz", + "integrity": "sha512-XxuOfTkCUiOSyBWIvHlUraLw/JT/6Io1365RO6ZuI88STKMavJZPNMU0lFcUTeQXEhHiv64CbxYxBNoDVSmghg==", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/type-utils": "5.59.11", + "@typescript-eslint/utils": "5.59.11", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -4792,17 +5037,15 @@ } } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.3.1.tgz", - "integrity": "sha512-RgFn5asjZ5daUhbK5Sp0peq0SSMytqcrkNfU4pnDma2D8P3ElZ6JbYjY8IMSFfZAJ0f3x3tnO3vXHweYg0g59w==", + "node_modules/@typescript-eslint/parser": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.11.tgz", + "integrity": "sha512-s9ZF3M+Nym6CAZEkJJeO2TFHHDsKAM3ecNkLuH4i4s8/RCPnF5JRip2GyviYkeEAcwGMJxkqG9h2dAsnA1nZpA==", "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.3.1", - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/typescript-estree": "5.3.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/typescript-estree": "5.59.11", + "debug": "^4.3.4" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4812,18 +5055,21 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.3.1.tgz", - "integrity": "sha512-TD+ONlx5c+Qhk21x9gsJAMRohWAUMavSOmJgv3JGy9dgPhuBd5Wok0lmMClZDyJNLLZK1JRKiATzCKZNUmoyfw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.11.tgz", + "integrity": "sha512-dHFOsxoLFtrIcSj5h0QoBT/89hxQONwmn3FOQ0GOQcLOOXm+MIrS8zEAhs4tWl5MraxCY3ZJpaXQQdFMc2Tu+Q==", "dependencies": { - "@typescript-eslint/scope-manager": "5.3.1", - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/typescript-estree": "5.3.1", - "debug": "^4.3.2" + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4831,23 +5077,17 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.3.1.tgz", - "integrity": "sha512-XksFVBgAq0Y9H40BDbuPOTUIp7dn4u8oOuhcgGq7EoDP50eqcafkMVGrypyVGvDYHzjhdUCUwuwVUK4JhkMAMg==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.11.tgz", + "integrity": "sha512-LZqVY8hMiVRF2a7/swmkStMYSoXMFlzL6sXV6U/2gL5cwnLWQgLEG8tjWPpaE4rMIdZ6VKWwcffPlo1jPfk43g==", "dependencies": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1" + "@typescript-eslint/typescript-estree": "5.59.11", + "@typescript-eslint/utils": "5.59.11", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4855,12 +5095,20 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/types": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.3.1.tgz", - "integrity": "sha512-bG7HeBLolxKHtdHG54Uac750eXuQQPpdJfCYuw4ZI3bZ7+GgKClMWM8jExBtp7NSP4m8PmLRM8+lhzkYnSmSxQ==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.11.tgz", + "integrity": "sha512-epoN6R6tkvBYSc+cllrz+c2sOFWkbisJZWkOE+y3xHtvYaOE6Wk6B8e114McRJwFRjGvYdJwLXQH5c9osME/AA==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4870,16 +5118,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.3.1.tgz", - "integrity": "sha512-PwFbh/PKDVo/Wct6N3w+E4rLZxUDgsoII/GrWM2A62ETOzJd4M6s0Mu7w4CWsZraTbaC5UQI+dLeyOIFF1PquQ==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.11.tgz", + "integrity": "sha512-YupOpot5hJO0maupJXixi6l5ETdrITxeo5eBOeuV7RSKgYdU3G5cxO49/9WRnJq9EMrB7AuTSLH/bqOsXi7wPA==", "dependencies": { - "@typescript-eslint/types": "5.3.1", - "@typescript-eslint/visitor-keys": "5.3.1", - "debug": "^4.3.2", - "globby": "^11.0.4", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/visitor-keys": "5.59.11", + "debug": "^4.3.4", + "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.5", + "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { @@ -4895,13 +5143,38 @@ } } }, + "node_modules/@typescript-eslint/utils": { + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.11.tgz", + "integrity": "sha512-didu2rHSOMUdJThLk4aZ1Or8IcO3HzCw/ZvEjTTIfjIrcdd5cvSIwwDy2AOlE7htSNp7QIZ10fLMyRCveesMLg==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.11", + "@typescript-eslint/types": "5.59.11", + "@typescript-eslint/typescript-estree": "5.59.11", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.3.1.tgz", - "integrity": "sha512-3cHUzUuVTuNHx0Gjjt5pEHa87+lzyqOiHXy/Gz+SJOCW1mpw9xQHIIEwnKn+Thph1mgWyZ90nboOcSuZr/jTTQ==", + "version": "5.59.11", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.11.tgz", + "integrity": "sha512-KGYniTGG3AMTuKF9QBD7EIrvufkB6O6uX3knP73xbKLMpH+QRPcgnCxjWXSHjMRuOxFLovljqQgQpR0c7GvjoA==", "dependencies": { - "@typescript-eslint/types": "5.3.1", - "eslint-visitor-keys": "^3.0.0" + "@typescript-eslint/types": "5.59.11", + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5129,9 +5402,9 @@ } }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", "bin": { "acorn": "bin/acorn" }, @@ -5139,6 +5412,14 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -5246,9 +5527,9 @@ } }, "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "engines": { "node": ">=6" } @@ -5273,9 +5554,9 @@ } }, "node_modules/ansi-sequence-parser": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz", - "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==" }, "node_modules/ansi-styles": { "version": "3.2.1", @@ -5433,6 +5714,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", + "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", @@ -5476,14 +5776,6 @@ "node": ">=0.10.0" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -5634,6 +5926,14 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/babel-core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/babel-generator": { "version": "6.26.1", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", @@ -5657,6 +5957,14 @@ "jsesc": "bin/jsesc" } }, + "node_modules/babel-generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/babel-helper-bindify-decorators": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", @@ -5804,12 +6112,12 @@ } }, "node_modules/babel-loader": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.2.tgz", - "integrity": "sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", + "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", "dependencies": { "find-cache-dir": "^3.3.1", - "loader-utils": "^1.4.0", + "loader-utils": "^2.0.0", "make-dir": "^3.1.0", "schema-utils": "^2.6.5" }, @@ -5821,30 +6129,6 @@ "webpack": ">=2" } }, - "node_modules/babel-loader/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/babel-loader/node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", @@ -5861,6 +6145,44 @@ "babel-runtime": "^6.22.0" } }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-syntax-async-functions": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", @@ -6717,9 +7039,9 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", "funding": [ { "type": "opencollective", @@ -6735,9 +7057,9 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", "update-browserslist-db": "^1.0.11" }, "bin": { @@ -6868,9 +7190,9 @@ } }, "node_modules/cachedir": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", - "integrity": "sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", "engines": { "node": ">=6" } @@ -6918,9 +7240,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001509", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001509.tgz", - "integrity": "sha512-2uDDk+TRiTX5hMcUYT/7CSyzMZxjfGu0vAUjS2g0LSD8UoXOv0LtpH4LxGMemsiPq6LCVIUjNwVM0erkOkGCDA==", + "version": "1.0.30001519", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", + "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", "funding": [ { "type": "opencollective", @@ -7108,6 +7430,11 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + }, "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -7355,6 +7682,14 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", "integrity": "sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg==" }, + "node_modules/combine-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -8146,9 +8481,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.447", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz", - "integrity": "sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw==" + "version": "1.4.490", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.490.tgz", + "integrity": "sha512-6s7NVJz+sATdYnIwhdshx/N/9O6rvMxmhVoDSDFdj6iA45gHR8EQje70+RYsF4GeB+k0IeNSBnP7yG9ZXJFr7A==" }, "node_modules/elliptic": { "version": "6.5.4", @@ -8199,9 +8534,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.1.tgz", - "integrity": "sha512-mGqhI+D7YxS9KJMppR6Iuo37Ed3abhU8NdfgSvJSDUafQutrN+sPTncJYTyM9+tkhSmWodKtVYGPPHyXJEwEQA==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.2.tgz", + "integrity": "sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", @@ -8211,17 +8546,17 @@ "cookie": "~0.4.1", "cors": "~2.8.5", "debug": "~4.3.1", - "engine.io-parser": "~5.1.0", + "engine.io-parser": "~5.2.1", "ws": "~8.11.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/engine.io-parser": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.1.0.tgz", - "integrity": "sha512-enySgNiK5tyZFynt3z7iqBR+Bto9EVVVvDFuTT0ioHCGbzirZVGDGiQjZzEp8hWl6hd5FSVytJGuScX1C1C35w==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz", + "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==", "engines": { "node": ">=10.0.0" } @@ -8259,17 +8594,6 @@ "node": ">=6.9.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", @@ -8306,17 +8630,18 @@ } }, "node_modules/es-abstract": { - "version": "1.21.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", - "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.1.tgz", + "integrity": "sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==", "dependencies": { "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.1", "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "get-symbol-description": "^1.0.0", "globalthis": "^1.0.3", "gopd": "^1.0.1", @@ -8336,14 +8661,18 @@ "object-inspect": "^1.12.3", "object-keys": "^1.1.1", "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", + "regexp.prototype.flags": "^1.5.0", + "safe-array-concat": "^1.0.0", "safe-regex-test": "^1.0.0", "string.prototype.trim": "^1.2.7", "string.prototype.trimend": "^1.0.6", "string.prototype.trimstart": "^1.0.6", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", "typed-array-length": "^1.0.4", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "which-typed-array": "^1.1.10" }, "engines": { "node": ">= 0.4" @@ -8477,15 +8806,6 @@ "node": ">= 0.8.0" } }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/escodegen/node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -8498,56 +8818,55 @@ } }, "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", + "version": "8.44.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", + "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.1.0", + "@eslint/js": "8.44.0", + "@humanwhocodes/config-array": "^0.11.10", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", - "debug": "^4.0.1", + "debug": "^4.3.2", "doctrine": "^3.0.0", - "enquirer": "^2.3.5", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.6.0", + "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -8565,13 +8884,13 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dependencies": { "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -8624,28 +8943,6 @@ "eslint": ">=4.19.1" } }, - "node_modules/eslint-plugin-es/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-es/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-plugin-header": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", @@ -8723,32 +9020,10 @@ "eslint": ">=5.16.0" } }, - "node_modules/eslint-plugin-node/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -8786,34 +9061,31 @@ } }, "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "dependencies": { - "eslint-visitor-keys": "^2.0.0" + "eslint-visitor-keys": "^1.1.0" }, "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" } }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "engines": { - "node": ">=10" + "node": ">=4" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", + "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -8821,14 +9093,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "dependencies": { - "@babel/highlight": "^7.10.4" - } - }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -8843,6 +9107,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -8898,75 +9167,128 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": ">=4" + "node": ">=4.0" } }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" }, - "engines": { - "node": ">= 6" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dependencies": { - "type-fest": "^0.20.2" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">= 4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint/node_modules/shebang-command": { @@ -9025,24 +9347,19 @@ } }, "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -9517,9 +9834,9 @@ "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==" }, "node_modules/fast-glob": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", - "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -9704,18 +10021,15 @@ "integrity": "sha512-uJ5vWrfBKMcE6y2Z8834dwEZj9mNGxYa3t3I53OwFeuZ8D9oc2E5zcsrkuhX6h4iYrjhiv0T3szQmxlAV9uxDg==" }, "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "locate-path": "^6.0.0", + "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/flat": { @@ -10004,11 +10318,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" - }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", @@ -10269,6 +10578,16 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==" + }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -10726,11 +11045,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, "node_modules/import-in-the-middle": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.3.5.tgz", - "integrity": "sha512-yzHlBqi1EBFrkieAnSt8eTgO5oLSl+YJ7qaOpUH/PMqQOMZoQ/RmDlwnTLQrwYto+gHYjRG+i/IbsB1eDx32NQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz", + "integrity": "sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==", "dependencies": { + "acorn": "^8.8.2", + "acorn-import-assertions": "^1.9.0", + "cjs-module-lexer": "^1.2.2", "module-details-from-path": "^1.0.3" } }, @@ -10795,6 +11125,14 @@ "source-map": "~0.5.3" } }, + "node_modules/inline-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/internal-slot": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", @@ -10925,9 +11263,9 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", "dependencies": { "has": "^1.0.3" }, @@ -11122,6 +11460,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", @@ -11226,15 +11572,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "which-typed-array": "^1.1.11" }, "engines": { "node": ">= 0.4" @@ -11408,9 +11750,9 @@ } }, "node_modules/istanbul-instrumenter-loader/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -11449,9 +11791,9 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -11533,16 +11875,16 @@ } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/has-flag": { @@ -11553,6 +11895,20 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -11565,60 +11921,22 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dependencies": { "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", + "istanbul-lib-coverage": "^3.0.0", "source-map": "^0.6.1" }, "engines": { - "node": ">=6" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -11830,6 +12148,22 @@ "which": "^1.2.1" } }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/karma-coverage-istanbul-reporter": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", @@ -11845,6 +12179,72 @@ "url": "https://github.com/sponsors/mattlewis92" } }, + "node_modules/karma-coverage-istanbul-reporter/node_modules/istanbul-lib-source-maps": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", + "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.5", + "make-dir": "^2.1.0", + "rimraf": "^2.6.3", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/karma-coverage-istanbul-reporter/node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/karma-coverage-istanbul-reporter/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/karma-coverage-istanbul-reporter/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/karma-jquery": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/karma-jquery/-/karma-jquery-0.2.4.tgz", @@ -11919,55 +12319,23 @@ "pad": "^3.2.0", "path-browserify": "^1.0.0", "process": "^0.11.10", - "punycode": "^2.1.1", - "querystring-es3": "^0.2.1", - "readable-stream": "^3.1.1", - "source-map": "^0.7.3", - "stream-browserify": "^3.0.0", - "stream-http": "^3.1.0", - "string_decoder": "^1.3.0", - "timers-browserify": "^2.0.11", - "tmp": "^0.2.1", - "tty-browserify": "^0.0.1", - "url": "^0.11.0", - "util": "^0.12.1", - "vm-browserify": "^1.1.2" - }, - "peerDependencies": { - "karma": "1 || 2 || 3 || 4 || 5 || 6", - "typescript": "1 || 2 || 3 || 4 || 5" - } - }, - "node_modules/karma-typescript/node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/karma-typescript/node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "punycode": "^2.1.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.1.1", + "source-map": "^0.7.3", + "stream-browserify": "^3.0.0", + "stream-http": "^3.1.0", + "string_decoder": "^1.3.0", + "timers-browserify": "^2.0.11", + "tmp": "^0.2.1", + "tty-browserify": "^0.0.1", + "url": "^0.11.0", + "util": "^0.12.1", + "vm-browserify": "^1.1.2" }, - "engines": { - "node": ">=10" - } - }, - "node_modules/karma-typescript/node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "karma": "1 || 2 || 3 || 4 || 5 || 6", + "typescript": "1 || 2 || 3 || 4 || 5" } }, "node_modules/karma-typescript/node_modules/readable-stream": { @@ -12184,14 +12552,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/karma/node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -12229,9 +12589,9 @@ } }, "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", + "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", "dependencies": { "json-buffer": "3.0.1" } @@ -12303,17 +12663,14 @@ } }, "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dependencies": { - "p-locate": "^5.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/lodash": { @@ -12341,11 +12698,6 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -12492,9 +12844,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -12627,14 +12979,6 @@ "source-map": "^0.6.1" } }, - "node_modules/merge-source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -12867,14 +13211,6 @@ "url": "https://opencollective.com/mochajs" } }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "engines": { - "node": ">=6" - } - }, "node_modules/mocha/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -12943,6 +13279,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mocha/node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -13027,6 +13378,20 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -13051,6 +13416,34 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mocha/node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -13195,6 +13588,11 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -13237,9 +13635,9 @@ } }, "node_modules/nock": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.1.tgz", - "integrity": "sha512-vHnopocZuI93p2ccivFyGuUfzjq2fxNyNurp7816mlT5V5HF4SzXu8lvLrVzBbNqzs+ODooZ6OksuSUNM7Njkw==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.3.2.tgz", + "integrity": "sha512-CwbljitiWJhF1gL83NbanhoKs1l23TDlRioNraPTZrzZIEooPemrHRj5m0FZCPkB1ecdYCSWWGcHysJgX/ngnQ==", "dependencies": { "debug": "^4.1.0", "json-stringify-safe": "^5.0.1", @@ -13409,9 +13807,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -13523,75 +13921,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/nyc/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/nyc/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nyc/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, "node_modules/nyc/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -13606,14 +13935,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/nyc/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/nyc/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -14049,31 +14370,28 @@ } }, "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dependencies": { - "yocto-queue": "^0.1.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dependencies": { - "p-limit": "^3.0.2" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/p-map": { @@ -14260,12 +14578,12 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-scurry": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.0.tgz", - "integrity": "sha512-tZFEaRQbMLjwrsmidsGJ6wDMv0iazJWk6SfIKnY4Xru8auXgmJkOBa5DUbYFcFD2Rzk2+KDlIiF0GVXNCbgC7g==", + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2" + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -14283,9 +14601,9 @@ } }, "node_modules/path-scurry/node_modules/minipass": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz", - "integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.2.tgz", + "integrity": "sha512-eL79dXrE1q9dBbDCLg7xfn/vl7MS4F1gvJAgjJrQli/jbQWdUttuVawphqpffoIYfRdq78LHx6GP4bU/EQ2ATA==", "engines": { "node": ">=16 || 14 >=14.17" } @@ -14332,83 +14650,35 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { - "node": ">=8" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dependencies": { - "p-limit": "^2.2.0" + "find-up": "^4.0.0" }, "engines": { "node": ">=8" @@ -14442,7 +14712,6 @@ "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "peer": true, "bin": { "prettier": "bin-prettier.js" }, @@ -14567,17 +14836,6 @@ "protobufjs": "^7.0.0" } }, - "node_modules/protobufjs-cli/node_modules/acorn": { - "version": "8.9.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.9.0.tgz", - "integrity": "sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/protobufjs-cli/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -14631,22 +14889,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "node_modules/protobufjs-cli/node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/protobufjs-cli/node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", @@ -15534,9 +15776,9 @@ } }, "node_modules/require-in-the-middle": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.1.1.tgz", - "integrity": "sha512-OScOjQjrrjhAdFpQmnkE/qbIBGCRFhQB/YaJhcC3CPOlmhe7llnW46Ac1J5+EjcNXOTnDdpF96Erw/yedsGksQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.2.0.tgz", + "integrity": "sha512-3TLx5TGyAY6AOqLBoXmHkNql0HIf2RGbuMgCDT2WO/uGVAPJs6h7Kl+bN6TIZGd9bWhWPwnDnTHGtW8Iu77sdw==", "dependencies": { "debug": "^4.1.1", "module-details-from-path": "^1.0.3", @@ -15565,11 +15807,11 @@ } }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "dependencies": { - "is-core-module": "^2.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -15596,7 +15838,7 @@ "node": ">=8" } }, - "node_modules/resolve-cwd/node_modules/resolve-from": { + "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", @@ -15604,14 +15846,6 @@ "node": ">=8" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, "node_modules/resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", @@ -15721,6 +15955,28 @@ "aproba": "^1.1.1" } }, + "node_modules/safe-array-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", + "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -15800,9 +16056,9 @@ } }, "node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -16083,6 +16339,7 @@ "version": "2.2.16", "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.16.tgz", "integrity": "sha512-Ugt+GIZqvGXCIItnsL+lvFJOiN7RYqlGy7QE41O3YC1xbNSeDGIRO7xg2JJXIAj1cAGnOeC1r7/T9pgrtQbv4g==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dependencies": { "nanoid": "^2.1.0" } @@ -16162,52 +16419,6 @@ "node": ">=0.10.0" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -16372,21 +16583,29 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/socket.io": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.1.tgz", - "integrity": "sha512-W+utHys2w//dhFjy7iQQu9sGd3eokCjGbl2r59tyLqNiJJBdIebn3GAKEXBr3osqHTObJi2die/25bCx2zsaaw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz", + "integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.0", + "engine.io": "~6.5.2", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, "engines": { - "node": ">=10.0.0" + "node": ">=10.2.0" } }, "node_modules/socket.io-adapter": { @@ -16445,9 +16664,9 @@ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" }, "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "engines": { "node": ">=0.10.0" } @@ -16473,6 +16692,14 @@ "source-map": "^0.5.6" } }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", @@ -16930,41 +17157,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, "node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", @@ -17113,20 +17305,6 @@ "node": ">=6" } }, - "node_modules/terser-webpack-plugin/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/terser-webpack-plugin/node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", @@ -17171,9 +17349,9 @@ } }, "node_modules/terser-webpack-plugin/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "bin": { "semver": "bin/semver" } @@ -17186,22 +17364,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/terser-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/terser/node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -17483,14 +17645,6 @@ "node": ">=0.3.1" } }, - "node_modules/ts-node/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ts-node/node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -17531,9 +17685,9 @@ } }, "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" }, "node_modules/tsutils": { "version": "3.21.0", @@ -17606,6 +17760,54 @@ "node": ">= 0.6" } }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typed-array-length": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", @@ -18947,14 +19149,6 @@ "source-map": "~0.6.1" } }, - "node_modules/webpack-sources/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/webpack/node_modules/acorn": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", @@ -19372,16 +19566,15 @@ "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" }, "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", "dependencies": { "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -19396,9 +19589,9 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==" }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "engines": { "node": ">=0.10.0" } diff --git a/eslint.base.js b/eslint.base.js new file mode 100644 index 000000000..2ec897464 --- /dev/null +++ b/eslint.base.js @@ -0,0 +1,71 @@ +module.exports = { + plugins: [ + "@typescript-eslint", + "header", + "node", + "prettier" + ], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:prettier/recommended"], + parser: "@typescript-eslint/parser", + parserOptions: { + "project": "./tsconfig.json" + }, + rules: { + "quotes": ["error", "single", { "avoidEscape": true }], + "eqeqeq": [ + "error", + "smart" + ], + "prefer-rest-params": "off", + "no-console": "error", + "no-shadow": "off", + "node/no-deprecated-api": ["warn"], + "header/header": ["error", "block", [{ + pattern: / \* Copyright The OpenTelemetry Authors[\r\n]+ \*[\r\n]+ \* Licensed under the Apache License, Version 2\.0 \(the \"License\"\);[\r\n]+ \* you may not use this file except in compliance with the License\.[\r\n]+ \* You may obtain a copy of the License at[\r\n]+ \*[\r\n]+ \* https:\/\/www\.apache\.org\/licenses\/LICENSE-2\.0[\r\n]+ \*[\r\n]+ \* Unless required by applicable law or agreed to in writing, software[\r\n]+ \* distributed under the License is distributed on an \"AS IS\" BASIS,[\r\n]+ \* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied\.[\r\n]+ \* See the License for the specific language governing permissions and[\r\n]+ \* limitations under the License\./gm, + template: + `\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the "License");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an "AS IS" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n ` + }]] + }, + overrides: [ + { + files: ['*.ts'], + rules: { + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-this-alias": "off", + "@typescript-eslint/naming-convention": [ + "error", + { + "selector": "memberLike", + "modifiers": ["private", "protected"], + "format": ["camelCase"], + "leadingUnderscore": "require" + } + ], + "@typescript-eslint/no-unused-vars": ["error", {"argsIgnorePattern": "^_", "args": "after-used"}], + "@typescript-eslint/no-inferrable-types": ["error", { ignoreProperties: true }], + "@typescript-eslint/no-empty-function": ["off"], + "@typescript-eslint/ban-types": ["warn", { + "types": { + "Function": null, + } + }], + "@typescript-eslint/no-shadow": ["warn"], + } + }, + { + files: ["test/**/*.ts"], + rules: { + "no-empty": "off", + "@typescript-eslint/ban-ts-ignore": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/no-shadow": ["off"], + "@typescript-eslint/no-floating-promises": ["off"], + "@typescript-eslint/no-non-null-assertion": ["off"], + "@typescript-eslint/explicit-module-boundary-types": ["off"] + } + } + ] +}; diff --git a/examples/web/js/package.json b/examples/web/js/package.json index e3c9248a3..3fc8bcb39 100644 --- a/examples/web/js/package.json +++ b/examples/web/js/package.json @@ -1,7 +1,7 @@ { "name": "web-opentelemetry-example", "private": true, - "version": "0.40.0", + "version": "0.41.2", "description": "Example of using @opentelemetry/sdk-trace-web and @opentelemetry/sdk-metrics in browser", "main": "index.js", "scripts": { @@ -15,7 +15,7 @@ "lint:fix": "", "lint:fix-quiet": "", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "start": "webpack serve --progress --color --port 8090 --config webpack.dev.config.js --hot --host 0.0.0.0 --compress", "start-nc": "webpack serve --progress --color --port 8090 --config webpack.dev.config.js --hot --host 0.0.0.0 --no-compress", "start-prod": "webpack serve --progress --color --port 8090 --config webpack.prod.config.js --hot --host 0.0.0.0 --compress", @@ -53,11 +53,12 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "^8.0.6", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -75,6 +76,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -90,21 +92,20 @@ }, "dependencies": { "@opentelemetry/sandbox-api": "1.4.1", - "@opentelemetry/sandbox-context-zone": "1.14.0", - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-exporter-metrics-otlp-http": "0.40.0", - "@opentelemetry/sandbox-exporter-trace-otlp-http": "0.40.0", - "@opentelemetry/sandbox-exporter-trace-otlp-proto": "0.40.0", - "@opentelemetry/sandbox-exporter-zipkin": "1.14.0", - "@opentelemetry/sandbox-instrumentation": "0.40.0", - "@opentelemetry/sandbox-instrumentation-fetch": "0.40.0", - "@opentelemetry/sandbox-instrumentation-xml-http-request": "0.40.0", - "@opentelemetry/sandbox-propagator-b3": "1.14.0", - "@opentelemetry/sandbox-sdk-metrics": "1.14.0", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", - "@opentelemetry/sandbox-sdk-trace-web": "1.14.0", - "@opentelemetry/sandbox-semantic-conventions": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-context-zone": "1.15.2", + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-exporter-metrics-otlp-http": "0.41.2", + "@opentelemetry/sandbox-exporter-trace-otlp-http": "0.41.2", + "@opentelemetry/sandbox-exporter-trace-otlp-proto": "0.41.2", + "@opentelemetry/sandbox-exporter-zipkin": "1.15.2", + "@opentelemetry/sandbox-instrumentation": "0.41.2", + "@opentelemetry/sandbox-instrumentation-fetch": "0.41.2", + "@opentelemetry/sandbox-instrumentation-xml-http-request": "0.41.2", + "@opentelemetry/sandbox-propagator-b3": "1.15.2", + "@opentelemetry/sandbox-sdk-metrics": "1.15.2", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2", + "@opentelemetry/sandbox-sdk-trace-web": "1.15.2", + "@opentelemetry/sandbox-semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/examples/tracer-web" } \ No newline at end of file diff --git a/karma.base.js b/karma.base.js index 7df76d7b1..2af286936 100644 --- a/karma.base.js +++ b/karma.base.js @@ -19,12 +19,12 @@ module.exports = { hostname: 'localhost', browsers: ['ChromeHeadless'], frameworks: ['mocha'], - coverageIstanbulReporter: { - reports: ['html', 'json'], - dir: '.nyc_output', - fixWebpackSourcePaths: true + coverageReporter: { + type : 'json', + subdir: '.', + dir : '.nyc_output/' }, - reporters: ['spec', 'coverage-istanbul'], + reporters: ['spec', 'coverage'], files: ['test/index-webpack.ts'], preprocessors: { 'test/index-webpack*.ts': ['webpack'] diff --git a/karma.webpack.js b/karma.webpack.js index 138112547..b7fa7acb9 100644 --- a/karma.webpack.js +++ b/karma.webpack.js @@ -31,8 +31,10 @@ module.exports = { exclude: /(node_modules|\.test\.[tj]sx?$)/, test: /\.ts$/, use: { - loader: 'istanbul-instrumenter-loader', - options: { esModules: true }, + loader: 'babel-loader', + options: { + plugins: ['babel-plugin-istanbul'], + } }, }, // This setting configures Node polyfills for the browser that will be diff --git a/package.json b/package.json index abcfb686e..c9d174469 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "rollup": "^3.10.0", "rollup-plugin-cleanup": "^3.2.1", diff --git a/pkgs/api-events/.eslintrc.js b/pkgs/api-events/.eslintrc.js index 6a54663c6..f99cd2a53 100644 --- a/pkgs/api-events/.eslintrc.js +++ b/pkgs/api-events/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "shared-node-browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/pkgs/api-events/package.json b/pkgs/api-events/package.json index 4cc203c62..72fd6174b 100644 --- a/pkgs/api-events/package.json +++ b/pkgs/api-events/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-api-events", - "version": "0.40.0", + "version": "0.41.2", "description": "Public events API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,17 +14,17 @@ }, "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "", "test:debug": "nyc karma start ./karma.debug.conf.js --wait", @@ -65,8 +65,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/sandbox-api": "1.4.1", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-api": "1.4.1" }, "devDependencies": { "@types/jquery": "^3.5.14", @@ -74,12 +73,14 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -88,6 +89,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -97,6 +99,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", diff --git a/pkgs/api-logs/.eslintrc.js b/pkgs/api-logs/.eslintrc.js index 6a54663c6..f99cd2a53 100644 --- a/pkgs/api-logs/.eslintrc.js +++ b/pkgs/api-logs/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "shared-node-browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/pkgs/api-logs/README.md b/pkgs/api-logs/README.md index acf3d8bf7..6d5f03d85 100644 --- a/pkgs/api-logs/README.md +++ b/pkgs/api-logs/README.md @@ -1,13 +1,19 @@ -# OpenTelemetry API for JavaScript +# OpenTelemetry Logs Bridge API for JavaScript [![NPM Published Version][npm-img]][npm-url] [![Apache License][license-image]][license-image] -This package provides everything needed to interact with the unstable OpenTelemetry Logs API, including all TypeScript interfaces, enums, and no-op implementations. It is intended for use both on the server and in the browser. +**Note: This is an experimental package under active development. New releases may include breaking changes.** -## Beta Software - Use at your own risk +This package provides everything needed to interact with the unstable OpenTelemetry Logs Bridge API, including all TypeScript interfaces, enums, and no-op implementations. It is intended for use both on the server and in the browser. -The logs API is considered alpha software and there is no guarantee of stability or long-term support. When the API is stabilized, it will be made available and supported long-term in the `@opentelemetry/api` package and this package will be deprecated. +**Note: This module defines a log backend API. The API is not intended to be called by application developers directly. +It is provided for logging library authors to build log appenders, which use this API to bridge between existing +logging libraries and the OpenTelemetry log data model.** + +## Alpha Software - Use at your own risk + +The Logs Bridge API is considered alpha software and there is no guarantee of stability or long-term support. When the API is stabilized, it will be made available and supported long-term in the `@opentelemetry/api` package and this package will be deprecated. ## Quick Start diff --git a/pkgs/api-logs/package.json b/pkgs/api-logs/package.json index ead41ac0e..abc47e4ba 100644 --- a/pkgs/api-logs/package.json +++ b/pkgs/api-logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-api-logs", - "version": "0.40.0", + "version": "0.41.2", "description": "Public logs API for OpenTelemetry", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,17 +14,17 @@ }, "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "", "test:debug": "nyc karma start ./karma.debug.conf.js --wait", @@ -65,8 +65,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/sandbox-api": "1.4.1", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-api": "1.4.1" }, "devDependencies": { "@types/jquery": "^3.5.14", @@ -74,12 +73,14 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -88,6 +89,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -97,6 +99,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", diff --git a/pkgs/api/.eslintrc.js b/pkgs/api/.eslintrc.js index e20344660..f91d07d4f 100644 --- a/pkgs/api/.eslintrc.js +++ b/pkgs/api/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "shared-node-browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/pkgs/api/package.json b/pkgs/api/package.json index ddc77f5f5..fbc27e925 100644 --- a/pkgs/api/package.json +++ b/pkgs/api/package.json @@ -12,12 +12,12 @@ }, "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../", "codecov:webworker": "nyc report --reporter=json && codecov -f coverage/*.json -p ../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "cycle-check": "dpdm --exit-code circular:1 src/index.ts", "docs": "typedoc", "docs:deploy": "gh-pages --dist docs/out", @@ -27,12 +27,13 @@ "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../scripts/peer-api-check.js", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", "test:debug": "nyc karma start ./karma.debug.conf.js --wait", + "test:eol": "ts-mocha -p tsconfig.json 'test/**/*.test.ts'", "test:node": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", - "test:webworker": "nyc karma start karma.worker.js --single-run", + "test:webworker": "", "version": "node ../../scripts/version-update.js", "watch": "npm run version && tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json" }, @@ -70,13 +71,15 @@ "@types/sinon": "^10.0.13", "@types/webpack": "4.41.33", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", "dpdm": "3.13.1", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -85,6 +88,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -95,6 +99,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -106,9 +111,6 @@ "unionfs": "4.5.1", "webpack": "^4.46.0" }, - "dependencies": { - "tslib": "^2.3.1" - }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/api", "sideEffects": false } \ No newline at end of file diff --git a/pkgs/context/zone-peer-dep/.eslintrc.js b/pkgs/context/zone-peer-dep/.eslintrc.js index 3af7f9cb8..e732cabf1 100644 --- a/pkgs/context/zone-peer-dep/.eslintrc.js +++ b/pkgs/context/zone-peer-dep/.eslintrc.js @@ -7,5 +7,5 @@ module.exports = { "globals": { "Zone": "readonly" }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/pkgs/context/zone-peer-dep/package.json b/pkgs/context/zone-peer-dep/package.json index 6fc54b7da..53e26bb04 100644 --- a/pkgs/context/zone-peer-dep/package.json +++ b/pkgs/context/zone-peer-dep/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-context-zone-peer-dep", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry Context Zone with peer dependency for zone.js", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -8,17 +8,17 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", @@ -59,7 +59,7 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", @@ -67,13 +67,14 @@ "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", "@types/zone.js": "0.5.12", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -82,6 +83,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -91,6 +93,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -107,9 +110,6 @@ "@opentelemetry/sandbox-api": "1.4.1", "zone.js": "^0.11.4" }, - "dependencies": { - "tslib": "^2.3.1" - }, "sideEffects": false, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-context-zone-peer-dep" } \ No newline at end of file diff --git a/pkgs/context/zone/.eslintrc.js b/pkgs/context/zone/.eslintrc.js index 218eba710..e108d0905 100644 --- a/pkgs/context/zone/.eslintrc.js +++ b/pkgs/context/zone/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "browser": true, "commonjs": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/pkgs/context/zone/package.json b/pkgs/context/zone/package.json index 78c40c5bd..534580ab5 100644 --- a/pkgs/context/zone/package.json +++ b/pkgs/context/zone/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-context-zone", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry Context Zone", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -8,16 +8,16 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "test": "", "test:browser": "", "test:debug": "", @@ -57,19 +57,20 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -87,6 +88,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -100,8 +102,7 @@ "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/sandbox-context-zone-peer-dep": "1.14.0", - "tslib": "^2.3.1", + "@opentelemetry/sandbox-context-zone-peer-dep": "1.15.2", "zone.js": "^0.11.4" }, "sideEffects": true, diff --git a/pkgs/core/.eslintrc.js b/pkgs/core/.eslintrc.js index 9dfe62f9b..36847df9f 100644 --- a/pkgs/core/.eslintrc.js +++ b/pkgs/core/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/pkgs/core/package.json b/pkgs/core/package.json index d2a4c3234..5952f35f2 100644 --- a/pkgs/core/package.json +++ b/pkgs/core/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-core", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,18 +14,18 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run tdd:node", "tdd:browser": "karma start", "tdd:node": "npm run test -- --watch-extensions ts --watch", @@ -75,12 +75,14 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -89,6 +91,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -98,6 +101,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -112,8 +116,7 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-semantic-conventions": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-core", "sideEffects": false diff --git a/pkgs/core/src/baggage/utils.ts b/pkgs/core/src/baggage/utils.ts index 94147b98a..ec761ba78 100644 --- a/pkgs/core/src/baggage/utils.ts +++ b/pkgs/core/src/baggage/utils.ts @@ -61,10 +61,14 @@ export function parsePairKeyValue( if (valueProps.length <= 0) return; const keyPairPart = valueProps.shift(); if (!keyPairPart) return; - const keyPair = keyPairPart.split(BAGGAGE_KEY_PAIR_SEPARATOR); - if (keyPair.length !== 2) return; - const key = decodeURIComponent(keyPair[0].trim()); - const value = decodeURIComponent(keyPair[1].trim()); + const separatorIndex = keyPairPart.indexOf(BAGGAGE_KEY_PAIR_SEPARATOR); + if (separatorIndex <= 0) return; + const key = decodeURIComponent( + keyPairPart.substring(0, separatorIndex).trim() + ); + const value = decodeURIComponent( + keyPairPart.substring(separatorIndex + 1).trim() + ); let metadata; if (valueProps.length > 0) { metadata = baggageEntryMetadataFromString( diff --git a/pkgs/core/src/common/time.ts b/pkgs/core/src/common/time.ts index 57c5a8316..d88c1fd5c 100644 --- a/pkgs/core/src/common/time.ts +++ b/pkgs/core/src/common/time.ts @@ -129,7 +129,7 @@ export function hrTimeToNanoseconds(time: api.HrTime): number { * @param time */ export function hrTimeToMilliseconds(time: api.HrTime): number { - return Math.round(time[0] * 1e3 + time[1] / 1e6); + return time[0] * 1e3 + time[1] / 1e6; } /** @@ -137,7 +137,7 @@ export function hrTimeToMilliseconds(time: api.HrTime): number { * @param time */ export function hrTimeToMicroseconds(time: api.HrTime): number { - return Math.round(time[0] * 1e6 + time[1] / 1e3); + return time[0] * 1e6 + time[1] / 1e3; } /** diff --git a/pkgs/core/test/baggage/W3CBaggagePropagator.test.ts b/pkgs/core/test/baggage/W3CBaggagePropagator.test.ts index 35f757d9d..2e7669ee4 100644 --- a/pkgs/core/test/baggage/W3CBaggagePropagator.test.ts +++ b/pkgs/core/test/baggage/W3CBaggagePropagator.test.ts @@ -181,9 +181,9 @@ describe('W3CBaggagePropagator', () => { describe('.extract()', () => { const baggageValue = - 'key1=d4cda95b,key3=c88815a7, keyn = valn, keym =valm'; + 'key1=d4cda95b==,key3=c88815a7, keyn = valn, keym =valm'; const expected = propagation.createBaggage({ - key1: { value: 'd4cda95b' }, + key1: { value: 'd4cda95b==' }, key3: { value: 'c88815a7' }, keyn: { value: 'valn' }, keym: { value: 'valm' }, @@ -217,7 +217,7 @@ describe('W3CBaggagePropagator', () => { it('should extract context of a sampled span when the headerValue comes as array with multiple items', () => { carrier[BAGGAGE_HEADER] = [ - 'key1=d4cda95b,key3=c88815a7, keyn = valn', + 'key1=d4cda95b==,key3=c88815a7, keyn = valn', 'keym =valm', ]; const extractedBaggage = propagation.getBaggage( @@ -282,10 +282,6 @@ describe('W3CBaggagePropagator', () => { header: '289371298nekjh2939299283jbk2b', baggage: undefined, }, - invalidDoubleEqual: { - header: 'key1==value;key2=value2', - baggage: undefined, - }, invalidWrongKeyValueFormat: { header: 'key1:value;key2=value2', baggage: undefined, @@ -295,7 +291,7 @@ describe('W3CBaggagePropagator', () => { baggage: undefined, }, mixInvalidAndValidKeys: { - header: 'key1==value,key2=value2', + header: 'key1:value,key2=value2', baggage: propagation.createBaggage({ key2: { value: 'value2', diff --git a/pkgs/detectors/browser/.eslintrc.js b/pkgs/detectors/browser/.eslintrc.js index 3ed0fbeba..9cfb3fd42 100644 --- a/pkgs/detectors/browser/.eslintrc.js +++ b/pkgs/detectors/browser/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/pkgs/detectors/browser/package.json b/pkgs/detectors/browser/package.json index 943cc6b84..0dd36f5f6 100644 --- a/pkgs/detectors/browser/package.json +++ b/pkgs/detectors/browser/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-opentelemetry-browser-detector", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry Resource Detector for Browser", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -8,17 +8,17 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", @@ -58,19 +58,21 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -79,6 +81,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -88,6 +91,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -96,15 +100,16 @@ "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", "typescript": "^4.9.5", - "webpack": "^4.46.0" + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-resources": "1.14.0", - "@opentelemetry/sandbox-semantic-conventions": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-resources": "1.15.2", + "@opentelemetry/sandbox-semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/browser-detector" } \ No newline at end of file diff --git a/pkgs/exporters/otlp/base/.eslintrc.js b/pkgs/exporters/otlp/base/.eslintrc.js index a56ddd7a7..c3bb93bde 100644 --- a/pkgs/exporters/otlp/base/.eslintrc.js +++ b/pkgs/exporters/otlp/base/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../../eslint.config.js') + ...require('../../../../eslint.base.js') } diff --git a/pkgs/exporters/otlp/base/package.json b/pkgs/exporters/otlp/base/package.json index b2d207413..d3c7c13a4 100644 --- a/pkgs/exporters/otlp/base/package.json +++ b/pkgs/exporters/otlp/base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-otlp-exporter-base", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry OTLP Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,17 +14,17 @@ "./build/src/platform/index.js": "./build/src/platform/browser/index.js" }, "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", @@ -66,22 +66,24 @@ "access": "public" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2" }, "devDependencies": { + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -90,6 +92,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -97,9 +100,9 @@ "karma-typescript": "^5.5.3", "karma-webpack": "^4.0.2", "mocha": "10.0.0", - "nock": "13.3.1", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -108,7 +111,9 @@ "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", "typescript": "^4.9.5", - "webpack": "^4.46.0" + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/sandbox-api": "1.4.1" diff --git a/pkgs/exporters/otlp/logs/http/.eslintrc.js b/pkgs/exporters/otlp/logs/http/.eslintrc.js index eab2b292d..188bbc4bd 100644 --- a/pkgs/exporters/otlp/logs/http/.eslintrc.js +++ b/pkgs/exporters/otlp/logs/http/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { node: true, browser: true, }, - ...require('../../../../../eslint.config.js'), + ...require('../../../../../eslint.base.js'), }; diff --git a/pkgs/exporters/otlp/logs/http/README.md b/pkgs/exporters/otlp/logs/http/README.md index 8efe89a07..f49588a09 100644 --- a/pkgs/exporters/otlp/logs/http/README.md +++ b/pkgs/exporters/otlp/logs/http/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides an exporter for OTLP (http/json) logs using protocol version `v0.18`. +This module provides a logs-exporter for OTLP (http/json) using protocol version `v0.20.0`. ## Installation diff --git a/pkgs/exporters/otlp/logs/http/package.json b/pkgs/exporters/otlp/logs/http/package.json index df7355491..912ce3d32 100644 --- a/pkgs/exporters/otlp/logs/http/package.json +++ b/pkgs/exporters/otlp/logs/http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-exporter-logs-otlp-http", - "version": "0.40.0", + "version": "0.41.2", "publishConfig": { "access": "public" }, @@ -29,18 +29,18 @@ "node": ">=14" }, "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", @@ -76,21 +76,24 @@ ], "sideEffects": false, "devDependencies": { - "@babel/core": "7.22.5", - "@opentelemetry/sandbox-api-logs": "0.40.0", + "@babel/core": "7.22.10", + "@opentelemetry/sandbox-api": "1.4.1", + "@opentelemetry/sandbox-api-logs": "0.41.2", + "@opentelemetry/sandbox-resources": "1.15.2", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -99,6 +102,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -108,6 +112,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -121,13 +126,12 @@ "webpack-merge": "5.9.0" }, "peerDependencies": { - "@opentelemetry/sandbox-api-logs": "0.40.0" + "@opentelemetry/sandbox-api-logs": "0.41.2" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-otlp-exporter-base": "0.40.0", - "@opentelemetry/sandbox-otlp-transformer": "0.40.0", - "@opentelemetry/sandbox-sdk-logs": "0.40.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-otlp-exporter-base": "0.41.2", + "@opentelemetry/sandbox-otlp-transformer": "0.41.2", + "@opentelemetry/sandbox-sdk-logs": "0.41.2" } } \ No newline at end of file diff --git a/pkgs/exporters/otlp/logs/http/src/platform/browser/OTLPLogExporter.ts b/pkgs/exporters/otlp/logs/http/src/platform/browser/OTLPLogExporter.ts index a76122613..037d22e49 100644 --- a/pkgs/exporters/otlp/logs/http/src/platform/browser/OTLPLogExporter.ts +++ b/pkgs/exporters/otlp/logs/http/src/platform/browser/OTLPLogExporter.ts @@ -48,7 +48,7 @@ export class OTLPLogExporter } convert(logRecords: ReadableLogRecord[]): IExportLogsServiceRequest { - return createExportLogsServiceRequest(logRecords); + return createExportLogsServiceRequest(logRecords, true); } getDefaultUrl(config: OTLPExporterConfigBase): string { diff --git a/pkgs/exporters/otlp/logs/http/src/platform/node/OTLPLogExporter.ts b/pkgs/exporters/otlp/logs/http/src/platform/node/OTLPLogExporter.ts index 86b682957..f0d7b6165 100644 --- a/pkgs/exporters/otlp/logs/http/src/platform/node/OTLPLogExporter.ts +++ b/pkgs/exporters/otlp/logs/http/src/platform/node/OTLPLogExporter.ts @@ -48,7 +48,7 @@ export class OTLPLogExporter } convert(logRecords: ReadableLogRecord[]): IExportLogsServiceRequest { - return createExportLogsServiceRequest(logRecords); + return createExportLogsServiceRequest(logRecords, true); } getDefaultUrl(config: OTLPExporterNodeConfigBase): string { diff --git a/pkgs/exporters/otlp/logs/http/test/browser/OTLPLogExporter.test.ts b/pkgs/exporters/otlp/logs/http/test/browser/OTLPLogExporter.test.ts index 66958a9fe..a4b23647b 100644 --- a/pkgs/exporters/otlp/logs/http/test/browser/OTLPLogExporter.test.ts +++ b/pkgs/exporters/otlp/logs/http/test/browser/OTLPLogExporter.test.ts @@ -13,15 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import * as assert from 'assert'; import * as sinon from 'sinon'; import * as Config from '../../src/platform/config'; import { OTLPLogExporter } from '../../src/platform/browser'; +import { OTLPExporterConfigBase } from '@opentelemetry/sandbox-otlp-exporter-base'; +import { ReadableLogRecord } from '@opentelemetry/sandbox-sdk-logs'; +import { mockedReadableLogRecord } from '../logHelper'; +import { ExportResultCode } from '@opentelemetry/sandbox-core'; describe('OTLPLogExporter', () => { let envSource: Record; + let collectorExporter: OTLPLogExporter; + let collectorExporterConfig: OTLPExporterConfigBase; + + afterEach(() => { + sinon.restore(); + }); if (typeof process === 'undefined') { envSource = globalThis as unknown as Record; @@ -61,4 +70,79 @@ describe('OTLPLogExporter', () => { assert.strictEqual(getDefaultUrl.callCount, 2); }); }); + + describe('export - common', () => { + let spySend: any; + beforeEach(() => { + spySend = sinon.stub(OTLPLogExporter.prototype, 'send'); + collectorExporter = new OTLPLogExporter(collectorExporterConfig); + }); + + it('should export spans as otlpTypes.Spans', done => { + const logs: ReadableLogRecord[] = []; + logs.push(Object.assign({}, mockedReadableLogRecord)); + + collectorExporter.export(logs, () => {}); + setTimeout(() => { + const log = spySend.args[0][0][0] as ReadableLogRecord; + assert.deepStrictEqual(logs[0], log); + done(); + }); + assert.strictEqual(spySend.callCount, 1); + }); + + describe('when exporter is shutdown', () => { + it( + 'should not export anything but return callback with code' + + ' "FailedNotRetryable"', + async () => { + const spans: ReadableLogRecord[] = []; + spans.push(Object.assign({}, mockedReadableLogRecord)); + await collectorExporter.shutdown(); + spySend.resetHistory(); + + const callbackSpy = sinon.spy(); + collectorExporter.export(spans, callbackSpy); + const returnCode = callbackSpy.args[0][0]; + + assert.strictEqual( + returnCode.code, + ExportResultCode.FAILED, + 'return value is wrong' + ); + assert.strictEqual(spySend.callCount, 0, 'should not call send'); + } + ); + }); + describe('when an error occurs', () => { + it('should return failed export result', done => { + const spans: ReadableLogRecord[] = []; + spans.push(Object.assign({}, mockedReadableLogRecord)); + spySend.throws({ + code: 100, + details: 'Test error', + metadata: {}, + message: 'Non-retryable', + stack: 'Stack', + }); + const callbackSpy = sinon.spy(); + collectorExporter.export(spans, callbackSpy); + setTimeout(() => { + const returnCode = callbackSpy.args[0][0]; + assert.strictEqual( + returnCode.code, + ExportResultCode.FAILED, + 'return value is wrong' + ); + assert.strictEqual( + returnCode.error.message, + 'Non-retryable', + 'return error message is wrong' + ); + assert.strictEqual(spySend.callCount, 1, 'should call send'); + done(); + }); + }); + }); + }); }); diff --git a/pkgs/exporters/otlp/logs/http/test/logHelper.ts b/pkgs/exporters/otlp/logs/http/test/logHelper.ts new file mode 100644 index 000000000..05f8e35b3 --- /dev/null +++ b/pkgs/exporters/otlp/logs/http/test/logHelper.ts @@ -0,0 +1,166 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { HrTime, TraceFlags } from '@opentelemetry/sandbox-api'; +import { SeverityNumber } from '@opentelemetry/sandbox-api-logs'; +import { Resource } from '@opentelemetry/sandbox-resources'; +import * as assert from 'assert'; +import { VERSION } from '@opentelemetry/sandbox-core'; +import { + IAnyValue, + IExportLogsServiceRequest, + IKeyValue, + ILogRecord, + IResource, +} from '@opentelemetry/sandbox-otlp-transformer'; +import { ReadableLogRecord } from '@opentelemetry/sandbox-sdk-logs'; + +export const mockedReadableLogRecord: ReadableLogRecord = { + resource: Resource.default().merge( + new Resource({ + 'resource-attribute': 'some resource-attr value', + }) + ), + instrumentationScope: { + name: 'scope_name_1', + version: '0.1.0', + schemaUrl: 'http://url.to.schema', + }, + hrTime: [1680253513, 123241635] as HrTime, + hrTimeObserved: [1680253513, 123241635] as HrTime, + attributes: { + 'some-attribute': 'some attribute value', + }, + severityNumber: SeverityNumber.ERROR, + severityText: 'error', + body: 'some_log_body', + spanContext: { + traceFlags: TraceFlags.SAMPLED, + traceId: '1f1008dc8e270e85c40a0d7c3939b278', + spanId: '5e107261f64fa53e', + }, +}; +export function ensureExportedAttributesAreCorrect(attributes: IKeyValue[]) { + assert.deepStrictEqual( + attributes, + [ + { + key: 'some-attribute', + value: { + stringValue: 'some attribute value', + }, + }, + ], + 'exported attributes are incorrect' + ); +} + +export function ensureExportedBodyIsCorrect(body?: IAnyValue) { + assert.deepStrictEqual( + body, + { stringValue: 'some_log_body' }, + 'exported attributes are incorrect' + ); +} + +export function ensureExportedLogRecordIsCorrect(logRecord: ILogRecord) { + ensureExportedBodyIsCorrect(logRecord.body); + ensureExportedAttributesAreCorrect(logRecord.attributes); + assert.strictEqual( + logRecord.timeUnixNano, + 1680253513123241700, + 'timeUnixNano is wrong' + ); + assert.strictEqual( + logRecord.observedTimeUnixNano, + 1680253513123241700, + 'observedTimeUnixNano is wrong' + ); + assert.strictEqual( + logRecord.severityNumber, + SeverityNumber.ERROR, + 'severityNumber is wrong' + ); + assert.strictEqual(logRecord.severityText, 'error', 'severityText is wrong'); + assert.strictEqual( + logRecord.droppedAttributesCount, + 0, + 'droppedAttributesCount is wrong' + ); + assert.strictEqual(logRecord.flags, TraceFlags.SAMPLED, 'flags is wrong'); +} + +export function ensureResourceIsCorrect(resource: IResource) { + assert.deepStrictEqual(resource, { + attributes: [ + { + key: 'service.name', + value: { + stringValue: `unknown_service:${process.argv0}`, + value: 'stringValue', + }, + }, + { + key: 'telemetry.sdk.language', + value: { + stringValue: 'nodejs', + value: 'stringValue', + }, + }, + { + key: 'telemetry.sdk.name', + value: { + stringValue: 'opentelemetry', + value: 'stringValue', + }, + }, + { + key: 'telemetry.sdk.version', + value: { + stringValue: VERSION, + value: 'stringValue', + }, + }, + { + key: 'resource-attribute', + value: { + stringValue: 'some resource-attr value', + value: 'stringValue', + }, + }, + ], + droppedAttributesCount: 0, + }); +} + +export function ensureExportLogsServiceRequestIsSet( + json: IExportLogsServiceRequest +) { + const resourceLogs = json.resourceLogs; + assert.strictEqual(resourceLogs?.length, 1, 'resourceLogs is missing'); + + const resource = resourceLogs?.[0].resource; + assert.ok(resource, 'resource is missing'); + + const scopeLogs = resourceLogs?.[0].scopeLogs; + assert.strictEqual(scopeLogs?.length, 1, 'scopeLogs is missing'); + + const scope = scopeLogs?.[0].scope; + assert.ok(scope, 'scope is missing'); + + const logRecords = scopeLogs?.[0].logRecords; + assert.strictEqual(logRecords?.length, 1, 'logs are missing'); +} diff --git a/pkgs/exporters/otlp/logs/http/test/node/OTLPLogExporter.test.ts b/pkgs/exporters/otlp/logs/http/test/node/OTLPLogExporter.test.ts index aa0d34534..00c236ad3 100644 --- a/pkgs/exporters/otlp/logs/http/test/node/OTLPLogExporter.test.ts +++ b/pkgs/exporters/otlp/logs/http/test/node/OTLPLogExporter.test.ts @@ -14,14 +14,55 @@ * limitations under the License. */ +import { diag } from '@opentelemetry/sandbox-api'; import * as assert from 'assert'; +import * as http from 'http'; import * as sinon from 'sinon'; - import * as Config from '../../src/platform/config'; + import { OTLPLogExporter } from '../../src/platform/node'; +import { OTLPExporterNodeConfigBase } from '@opentelemetry/sandbox-otlp-exporter-base'; +import { ReadableLogRecord } from '@opentelemetry/sandbox-sdk-logs'; +import { + ensureExportLogsServiceRequestIsSet, + ensureExportedLogRecordIsCorrect, + mockedReadableLogRecord, +} from '../logHelper'; +import { PassThrough, Stream } from 'stream'; +import { IExportLogsServiceRequest } from '@opentelemetry/sandbox-otlp-transformer'; +import { ExportResultCode } from '@opentelemetry/sandbox-core'; + +let fakeRequest: PassThrough; + +class MockedResponse extends Stream { + constructor(private _code: number, private _msg?: string) { + super(); + } + + send(data: string) { + this.emit('data', data); + this.emit('end'); + } + + get statusCode() { + return this._code; + } + + get statusMessage() { + return this._msg; + } +} describe('OTLPLogExporter', () => { let envSource: Record; + let collectorExporter: OTLPLogExporter; + let collectorExporterConfig: OTLPExporterNodeConfigBase; + let logs: ReadableLogRecord[]; + + afterEach(() => { + fakeRequest = new Stream.PassThrough(); + sinon.restore(); + }); if (typeof process === 'undefined') { envSource = globalThis as unknown as Record; @@ -61,4 +102,130 @@ describe('OTLPLogExporter', () => { assert.strictEqual(getDefaultUrl.callCount, 2); }); }); + + describe('export', () => { + beforeEach(() => { + collectorExporterConfig = { + headers: { + foo: 'bar', + }, + hostname: 'foo', + url: 'http://foo.bar.com', + keepAlive: true, + httpAgentOptions: { keepAliveMsecs: 2000 }, + }; + collectorExporter = new OTLPLogExporter(collectorExporterConfig); + logs = []; + logs.push(Object.assign({}, mockedReadableLogRecord)); + }); + afterEach(() => { + sinon.restore(); + }); + + it('should open the connection', done => { + sinon.stub(http, 'request').callsFake((options: any, cb: any) => { + assert.strictEqual(options.hostname, 'foo.bar.com'); + assert.strictEqual(options.method, 'POST'); + assert.strictEqual(options.path, '/'); + + const mockRes = new MockedResponse(200); + cb(mockRes); + mockRes.send('success'); + done(); + return fakeRequest as any; + }); + collectorExporter.export(logs, () => {}); + }); + + it('should set custom headers', done => { + sinon.stub(http, 'request').callsFake((options: any, cb: any) => { + assert.strictEqual(options.headers['foo'], 'bar'); + + const mockRes = new MockedResponse(200); + cb(mockRes); + mockRes.send('success'); + done(); + return fakeRequest as any; + }); + + collectorExporter.export(logs, () => {}); + }); + + it('should have keep alive and keepAliveMsecs option set', done => { + sinon.stub(http, 'request').callsFake((options: any, cb: any) => { + assert.strictEqual(options.agent.keepAlive, true); + assert.strictEqual(options.agent.options.keepAliveMsecs, 2000); + + const mockRes = new MockedResponse(200); + cb(mockRes); + mockRes.send('success'); + done(); + return fakeRequest as any; + }); + + collectorExporter.export(logs, () => {}); + }); + + it('should successfully send the logs', done => { + const fakeRequest = new Stream.PassThrough(); + sinon.stub(http, 'request').returns(fakeRequest as any); + + let buff = Buffer.from(''); + fakeRequest.on('end', () => { + const responseBody = buff.toString(); + const json = JSON.parse(responseBody) as IExportLogsServiceRequest; + const log1 = json.resourceLogs?.[0].scopeLogs?.[0].logRecords?.[0]; + assert.ok(typeof log1 !== 'undefined', "log doesn't exist"); + ensureExportedLogRecordIsCorrect(log1); + + ensureExportLogsServiceRequestIsSet(json); + + done(); + }); + + fakeRequest.on('data', chunk => { + buff = Buffer.concat([buff, chunk]); + }); + + const clock = sinon.useFakeTimers(); + collectorExporter.export(logs, () => {}); + clock.tick(200); + clock.restore(); + }); + + it('should log the successful message', done => { + // Need to stub/spy on the underlying logger as the "diag" instance is global + const spyLoggerError = sinon.stub(diag, 'error'); + + sinon.stub(http, 'request').callsFake((options: any, cb: any) => { + const mockRes = new MockedResponse(200); + cb(mockRes); + mockRes.send('success'); + return fakeRequest as any; + }); + + collectorExporter.export(logs, result => { + assert.strictEqual(result.code, ExportResultCode.SUCCESS); + assert.strictEqual(spyLoggerError.args.length, 0); + done(); + }); + }); + + it('should log the error message', done => { + sinon.stub(http, 'request').callsFake((options: any, cb: any) => { + const mockResError = new MockedResponse(400); + cb(mockResError); + mockResError.send('failed'); + + return fakeRequest as any; + }); + + collectorExporter.export(logs, result => { + assert.strictEqual(result.code, ExportResultCode.FAILED); + // @ts-expect-error verify error code + assert.strictEqual(result.error.code, 400); + done(); + }); + }); + }); }); diff --git a/pkgs/exporters/otlp/logs/http/tsconfig.json b/pkgs/exporters/otlp/logs/http/tsconfig.json index 4b8f571d0..d63950bc8 100644 --- a/pkgs/exporters/otlp/logs/http/tsconfig.json +++ b/pkgs/exporters/otlp/logs/http/tsconfig.json @@ -1,7 +1,6 @@ { "extends": "../../../../../tsconfig.base.json", "compilerOptions": { - "esModuleInterop": true, "outDir": "build", "rootDir": "." }, diff --git a/pkgs/exporters/otlp/logs/proto/.eslintrc.js b/pkgs/exporters/otlp/logs/proto/.eslintrc.js index 01d9a9feb..d0bc5f818 100644 --- a/pkgs/exporters/otlp/logs/proto/.eslintrc.js +++ b/pkgs/exporters/otlp/logs/proto/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../../../eslint.config.js') + ...require('../../../../../eslint.base.js') } diff --git a/pkgs/exporters/otlp/logs/proto/README.md b/pkgs/exporters/otlp/logs/proto/README.md index 50b0838a1..3e8447a50 100644 --- a/pkgs/exporters/otlp/logs/proto/README.md +++ b/pkgs/exporters/otlp/logs/proto/README.md @@ -5,7 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides an exporter for OTLP (http/protobuf) logs using protocol version `v0.18`. +This module provides a logs-exporter for OTLP (http/protobuf) using protocol version `v0.20.0`. ## Installation diff --git a/pkgs/exporters/otlp/logs/proto/package.json b/pkgs/exporters/otlp/logs/proto/package.json index ad38fce40..e394dced0 100644 --- a/pkgs/exporters/otlp/logs/proto/package.json +++ b/pkgs/exporters/otlp/logs/proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-exporter-logs-otlp-proto", - "version": "0.40.0", + "version": "0.41.2", "description": "An OTLP exporter to send logs using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,17 +14,17 @@ "./build/src/platform/index.js": "./build/src/platform/browser/index.js" }, "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", @@ -68,20 +68,22 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -90,6 +92,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -99,6 +102,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -107,21 +111,22 @@ "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", "typescript": "^4.9.5", - "webpack": "^4.46.0" + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-api-logs": "0.40.0", - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-otlp-exporter-base": "0.40.0", - "@opentelemetry/sandbox-otlp-proto-exporter-base": "0.40.0", - "@opentelemetry/sandbox-otlp-transformer": "0.40.0", - "@opentelemetry/sandbox-resources": "1.14.0", - "@opentelemetry/sandbox-sdk-logs": "0.40.0", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-api-logs": "0.41.2", + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-otlp-exporter-base": "0.41.2", + "@opentelemetry/sandbox-otlp-proto-exporter-base": "0.41.2", + "@opentelemetry/sandbox-otlp-transformer": "0.41.2", + "@opentelemetry/sandbox-resources": "1.15.2", + "@opentelemetry/sandbox-sdk-logs": "0.41.2", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-logs-otlp-proto", "sideEffects": false diff --git a/pkgs/exporters/otlp/metrics/http/.eslintrc.js b/pkgs/exporters/otlp/metrics/http/.eslintrc.js index a460c8fb2..f99de8141 100644 --- a/pkgs/exporters/otlp/metrics/http/.eslintrc.js +++ b/pkgs/exporters/otlp/metrics/http/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../../../eslint.config.js') + ...require('../../../../../eslint.base.js') } diff --git a/pkgs/exporters/otlp/metrics/http/README.md b/pkgs/exporters/otlp/metrics/http/README.md index a11584589..3d8b5f4b9 100644 --- a/pkgs/exporters/otlp/metrics/http/README.md +++ b/pkgs/exporters/otlp/metrics/http/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for web and node to be used with OTLP (`http/json`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.52 <=0.53`. +This module provides a metrics-exporter for OTLP (http/json) using protocol version `v0.20.0`. ## Installation @@ -81,7 +80,7 @@ In addition to settings passed to the constructor, the exporter also supports co |---------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | OTEL_EXPORTER_OTLP_ENDPOINT | The endpoint to send metrics to. This will also be used for the traces exporter if `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` is not configured. By default `http://localhost:4318` will be used. `/v1/metrics` will be automatically appended to configured values. | | OTEL_EXPORTER_OTLP_METRICS_ENDPOINT | The endpoint to send metrics to. By default `https://localhost:4318/v1/metrics` will be used. `v1/metrics` will not be appended automatically and has to be added explicitly. | -| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, and `delta`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | +| OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE | The exporters aggregation temporality preference. Valid values are `cumulative`, `delta`, and `lowmemory`. `cumulative` selects cumulative temporality for all instrument kinds. `delta` selects delta aggregation temporality for Counter, Asynchronous Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter and Asynchronous UpDownCounter instrument kinds. `lowmemory` selects delta aggregation temporality for Counter and Histogram instrument kinds, and selects cumulative aggregation for UpDownCounter, Asynchronous Counter and Asynchronous UpDownCounter instrument kinds. By default `cumulative` is used. | > Settings configured programmatically take precedence over environment variables. Per-signal environment variables take > precedence over non-per-signal environment variables. diff --git a/pkgs/exporters/otlp/metrics/http/package.json b/pkgs/exporters/otlp/metrics/http/package.json index 4874a80e1..0e407f872 100644 --- a/pkgs/exporters/otlp/metrics/http/package.json +++ b/pkgs/exporters/otlp/metrics/http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-exporter-metrics-otlp-http", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry Collector Metrics Exporter allows user to send collected metrics to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,18 +14,18 @@ "./build/src/platform/index.js": "./build/src/platform/browser/index.js" }, "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", @@ -68,21 +68,22 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -91,6 +92,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -100,6 +102,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -116,12 +119,11 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-otlp-exporter-base": "0.40.0", - "@opentelemetry/sandbox-otlp-transformer": "0.40.0", - "@opentelemetry/sandbox-resources": "1.14.0", - "@opentelemetry/sandbox-sdk-metrics": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-otlp-exporter-base": "0.41.2", + "@opentelemetry/sandbox-otlp-transformer": "0.41.2", + "@opentelemetry/sandbox-resources": "1.15.2", + "@opentelemetry/sandbox-sdk-metrics": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-exporter-metrics-otlp-http", "sideEffects": false diff --git a/pkgs/exporters/otlp/metrics/http/src/OTLPMetricExporterBase.ts b/pkgs/exporters/otlp/metrics/http/src/OTLPMetricExporterBase.ts index 204f80a0e..f853bb70c 100644 --- a/pkgs/exporters/otlp/metrics/http/src/OTLPMetricExporterBase.ts +++ b/pkgs/exporters/otlp/metrics/http/src/OTLPMetricExporterBase.ts @@ -22,7 +22,10 @@ import { PushMetricExporter, ResourceMetrics, } from '@opentelemetry/sandbox-sdk-metrics'; -import { OTLPMetricExporterOptions } from './OTLPMetricExporterOptions'; +import { + AggregationTemporalityPreference, + OTLPMetricExporterOptions, +} from './OTLPMetricExporterOptions'; import { OTLPExporterBase } from '@opentelemetry/sandbox-otlp-exporter-base'; import { IExportMetricsServiceRequest } from '@opentelemetry/sandbox-otlp-transformer'; import { diag } from '@opentelemetry/sandbox-api'; @@ -45,6 +48,21 @@ export const DeltaTemporalitySelector: AggregationTemporalitySelector = ( } }; +export const LowMemoryTemporalitySelector: AggregationTemporalitySelector = ( + instrumentType: InstrumentType +) => { + switch (instrumentType) { + case InstrumentType.COUNTER: + case InstrumentType.HISTOGRAM: + return AggregationTemporality.DELTA; + case InstrumentType.UP_DOWN_COUNTER: + case InstrumentType.OBSERVABLE_UP_DOWN_COUNTER: + case InstrumentType.OBSERVABLE_COUNTER: + case InstrumentType.OBSERVABLE_GAUGE: + return AggregationTemporality.CUMULATIVE; + } +}; + function chooseTemporalitySelectorFromEnvironment() { const env = getEnv(); const configuredTemporality = @@ -56,6 +74,9 @@ function chooseTemporalitySelectorFromEnvironment() { if (configuredTemporality === 'delta') { return DeltaTemporalitySelector; } + if (configuredTemporality === 'lowmemory') { + return LowMemoryTemporalitySelector; + } diag.warn( `OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE is set to '${env.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE}', but only 'cumulative' and 'delta' are allowed. Using default ('cumulative') instead.` @@ -64,12 +85,18 @@ function chooseTemporalitySelectorFromEnvironment() { } function chooseTemporalitySelector( - temporalityPreference?: AggregationTemporality + temporalityPreference?: + | AggregationTemporalityPreference + | AggregationTemporality ): AggregationTemporalitySelector { // Directly passed preference has priority. if (temporalityPreference != null) { - if (temporalityPreference === AggregationTemporality.DELTA) { + if (temporalityPreference === AggregationTemporalityPreference.DELTA) { return DeltaTemporalitySelector; + } else if ( + temporalityPreference === AggregationTemporalityPreference.LOWMEMORY + ) { + return LowMemoryTemporalitySelector; } return CumulativeTemporalitySelector; } @@ -86,7 +113,7 @@ export class OTLPMetricExporterBase< > implements PushMetricExporter { public _otlpExporter: T; - protected _aggregationTemporalitySelector: AggregationTemporalitySelector; + private _aggregationTemporalitySelector: AggregationTemporalitySelector; constructor(exporter: T, config?: OTLPMetricExporterOptions) { this._otlpExporter = exporter; diff --git a/pkgs/exporters/otlp/metrics/http/src/OTLPMetricExporterOptions.ts b/pkgs/exporters/otlp/metrics/http/src/OTLPMetricExporterOptions.ts index 323ebb07a..e4d353628 100644 --- a/pkgs/exporters/otlp/metrics/http/src/OTLPMetricExporterOptions.ts +++ b/pkgs/exporters/otlp/metrics/http/src/OTLPMetricExporterOptions.ts @@ -14,9 +14,17 @@ * limitations under the License. */ -import { AggregationTemporality } from '@opentelemetry/sandbox-sdk-metrics'; import { OTLPExporterConfigBase } from '@opentelemetry/sandbox-otlp-exporter-base'; +import { AggregationTemporality } from '@opentelemetry/sandbox-sdk-metrics'; export interface OTLPMetricExporterOptions extends OTLPExporterConfigBase { - temporalityPreference?: AggregationTemporality; + temporalityPreference?: + | AggregationTemporalityPreference + | AggregationTemporality; +} + +export enum AggregationTemporalityPreference { + DELTA, + CUMULATIVE, + LOWMEMORY, } diff --git a/pkgs/exporters/otlp/metrics/http/test/browser/CollectorMetricExporter.test.ts b/pkgs/exporters/otlp/metrics/http/test/browser/CollectorMetricExporter.test.ts index 89e91d802..4876e19a4 100644 --- a/pkgs/exporters/otlp/metrics/http/test/browser/CollectorMetricExporter.test.ts +++ b/pkgs/exporters/otlp/metrics/http/test/browser/CollectorMetricExporter.test.ts @@ -22,10 +22,7 @@ import { Histogram, } from '@opentelemetry/sandbox-api'; import { ExportResultCode, hrTimeToNanoseconds } from '@opentelemetry/sandbox-core'; -import { - AggregationTemporality, - ResourceMetrics, -} from '@opentelemetry/sandbox-sdk-metrics'; +import { ResourceMetrics } from '@opentelemetry/sandbox-sdk-metrics'; import * as assert from 'assert'; import * as sinon from 'sinon'; import { OTLPMetricExporter } from '../../src/platform/browser'; @@ -44,7 +41,10 @@ import { setUp, shutdown, } from '../metricsHelper'; -import { OTLPMetricExporterOptions } from '../../src'; +import { + AggregationTemporalityPreference, + OTLPMetricExporterOptions, +} from '../../src'; import { OTLPExporterConfigBase } from '@opentelemetry/sandbox-otlp-exporter-base'; import { IExportMetricsServiceRequest } from '@opentelemetry/sandbox-otlp-transformer'; @@ -102,7 +102,7 @@ describe('OTLPMetricExporter - web', () => { beforeEach(() => { collectorExporter = new OTLPMetricExporter({ url: 'http://foo.bar.com', - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); }); @@ -230,7 +230,7 @@ describe('OTLPMetricExporter - web', () => { (window.navigator as any).sendBeacon = false; collectorExporter = new OTLPMetricExporter({ url: 'http://foo.bar.com', - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); // Overwrites the start time to make tests consistent Object.defineProperty(collectorExporter, '_startTime', { @@ -386,7 +386,7 @@ describe('OTLPMetricExporter - web', () => { beforeEach(() => { collectorExporterConfig = { headers: customHeaders, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }; server = sinon.fakeServer.create(); }); @@ -518,7 +518,7 @@ describe('when configuring via environment', () => { envSource.OTEL_EXPORTER_OTLP_HEADERS = 'foo=bar'; const collectorExporter = new OTLPMetricExporter({ headers: {}, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); assert.strictEqual( collectorExporter['_otlpExporter']['_headers'].foo, @@ -531,7 +531,7 @@ describe('when configuring via environment', () => { envSource.OTEL_EXPORTER_OTLP_METRICS_HEADERS = 'foo=boo'; const collectorExporter = new OTLPMetricExporter({ headers: {}, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); assert.strictEqual( collectorExporter['_otlpExporter']['_headers'].foo, diff --git a/pkgs/exporters/otlp/metrics/http/test/node/CollectorMetricExporter.test.ts b/pkgs/exporters/otlp/metrics/http/test/node/CollectorMetricExporter.test.ts index c48983ee6..83703937f 100644 --- a/pkgs/exporters/otlp/metrics/http/test/node/CollectorMetricExporter.test.ts +++ b/pkgs/exporters/otlp/metrics/http/test/node/CollectorMetricExporter.test.ts @@ -20,8 +20,10 @@ import * as assert from 'assert'; import * as http from 'http'; import * as sinon from 'sinon'; import { + AggregationTemporalityPreference, CumulativeTemporalitySelector, DeltaTemporalitySelector, + LowMemoryTemporalitySelector, OTLPMetricExporterOptions, } from '../../src'; @@ -42,6 +44,7 @@ import { import { MockedResponse } from './nodeHelpers'; import { AggregationTemporality, + InstrumentType, ResourceMetrics, } from '@opentelemetry/sandbox-sdk-metrics'; import { PassThrough, Stream } from 'stream'; @@ -105,6 +108,116 @@ describe('OTLPMetricExporter - node with json over http', () => { }); }); + describe('temporality', () => { + it('should use the right temporality when Cumulative preference is selected', () => { + const exporter = new OTLPMetricExporter({ + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, + }); + + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.COUNTER), + AggregationTemporality.CUMULATIVE, + 'Counter' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.HISTOGRAM), + AggregationTemporality.CUMULATIVE, + 'Histogram' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.UP_DOWN_COUNTER), + AggregationTemporality.CUMULATIVE, + 'UpDownCounter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_COUNTER + ), + AggregationTemporality.CUMULATIVE, + 'Asynchronous Counter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_UP_DOWN_COUNTER + ), + AggregationTemporality.CUMULATIVE, + 'Asynchronous UpDownCounter' + ); + }); + + it('should use the right temporality when Delta preference is selected', () => { + const exporter = new OTLPMetricExporter({ + temporalityPreference: AggregationTemporalityPreference.DELTA, + }); + + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.COUNTER), + AggregationTemporality.DELTA, + 'Counter' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.HISTOGRAM), + AggregationTemporality.DELTA, + 'Histogram' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.UP_DOWN_COUNTER), + AggregationTemporality.CUMULATIVE, + 'UpDownCounter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_COUNTER + ), + AggregationTemporality.DELTA, + 'Asynchronous Counter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_UP_DOWN_COUNTER + ), + AggregationTemporality.CUMULATIVE, + 'Asynchronous UpDownCounter' + ); + }); + + it('should use the right temporality when LowMemory preference is selected', () => { + const exporter = new OTLPMetricExporter({ + temporalityPreference: AggregationTemporalityPreference.LOWMEMORY, + }); + + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.COUNTER), + AggregationTemporality.DELTA, + 'Counter' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.HISTOGRAM), + AggregationTemporality.DELTA, + 'Histogram' + ); + assert.equal( + exporter.selectAggregationTemporality(InstrumentType.UP_DOWN_COUNTER), + AggregationTemporality.CUMULATIVE, + 'UpDownCounter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_COUNTER + ), + AggregationTemporality.CUMULATIVE, + 'Asynchronous Counter' + ); + assert.equal( + exporter.selectAggregationTemporality( + InstrumentType.OBSERVABLE_UP_DOWN_COUNTER + ), + AggregationTemporality.CUMULATIVE, + 'Asynchronous UpDownCounter' + ); + }); + }); + describe('when configuring via environment', () => { const envSource = process.env; it('should use url defined in env that ends with root path and append version and signal path', () => { @@ -230,6 +343,21 @@ describe('OTLPMetricExporter - node with json over http', () => { ); } }); + it('should use low memory temporality defined via env', () => { + for (const envValue of [ + 'lowmemory', + 'LOWMEMORY', + 'LoWMeMOrY', + 'lowmemory ', + ]) { + envSource.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE = envValue; + const exporter = new OTLPMetricExporter(); + assert.strictEqual( + exporter['_aggregationTemporalitySelector'], + LowMemoryTemporalitySelector + ); + } + }); it('should configure cumulative temporality with invalid value in env', () => { for (const envValue of ['invalid', ' ']) { envSource.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE = envValue; @@ -244,7 +372,7 @@ describe('OTLPMetricExporter - node with json over http', () => { envSource.OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE = 'cumulative'; const exporter = new OTLPMetricExporter({ - temporalityPreference: AggregationTemporality.DELTA, + temporalityPreference: AggregationTemporalityPreference.DELTA, }); assert.strictEqual( exporter['_aggregationTemporalitySelector'], @@ -264,7 +392,7 @@ describe('OTLPMetricExporter - node with json over http', () => { url: 'http://foo.bar.com', keepAlive: true, httpAgentOptions: { keepAliveMsecs: 2000 }, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }; collectorExporter = new OTLPMetricExporter(collectorExporterConfig); @@ -485,7 +613,7 @@ describe('OTLPMetricExporter - node with json over http', () => { const url = 'http://foo.bar.com'; const collectorExporter = new OTLPMetricExporter({ url, - temporalityPreference: AggregationTemporality.CUMULATIVE, + temporalityPreference: AggregationTemporalityPreference.CUMULATIVE, }); setTimeout(() => { assert.strictEqual(collectorExporter._otlpExporter.url, url); diff --git a/pkgs/exporters/otlp/proto-base/.eslintrc.js b/pkgs/exporters/otlp/proto-base/.eslintrc.js index 8d360898b..5310d0835 100644 --- a/pkgs/exporters/otlp/proto-base/.eslintrc.js +++ b/pkgs/exporters/otlp/proto-base/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../../eslint.config.js') + ...require('../../../../eslint.base.js') } diff --git a/pkgs/exporters/otlp/proto-base/package.json b/pkgs/exporters/otlp/proto-base/package.json index 607b27559..fe80cf14d 100644 --- a/pkgs/exporters/otlp/proto-base/package.json +++ b/pkgs/exporters/otlp/proto-base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-otlp-proto-exporter-base", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry OTLP-HTTP-protobuf Exporter base (for internal use only)", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,9 +14,9 @@ "./build/src/platform/index.js": "./build/src/platform/browser/index.js" }, "scripts": { - "build": "npm run lint:fix-quiet && npm run version && npm run pre-build && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && npm run pre-build && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", @@ -25,7 +25,7 @@ "prepublishOnly": "npm run compile", "protos": "npm run submodule && npm run protos:generate", "protos:generate": "node ../../../../scripts/generate-protos.js", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "submodule": "git submodule sync --recursive && git submodule update --init --recursive", "test": "", "test:browser": "", @@ -67,19 +67,21 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -97,6 +99,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "protobufjs-cli": "1.1.1", "puppeteer": "^14.2.1", "sinon": "^14.0.0", @@ -112,10 +115,9 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-otlp-exporter-base": "0.40.0", - "protobufjs": "^7.2.3", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-otlp-exporter-base": "0.41.2", + "protobufjs": "^7.2.3" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-proto-exporter-base", "sideEffects": false diff --git a/pkgs/exporters/otlp/proto-base/protos b/pkgs/exporters/otlp/proto-base/protos index c4dfbc51f..81a296f9d 160000 --- a/pkgs/exporters/otlp/proto-base/protos +++ b/pkgs/exporters/otlp/proto-base/protos @@ -1 +1 @@ -Subproject commit c4dfbc51f3cd4089778555a2ac5d9bc093ed2956 +Subproject commit 81a296f9dba23e32d77f46d58c8ea4244a2157a6 diff --git a/pkgs/exporters/otlp/proto-base/src/platform/util.ts b/pkgs/exporters/otlp/proto-base/src/platform/util.ts index c6e127281..2fe428b43 100644 --- a/pkgs/exporters/otlp/proto-base/src/platform/util.ts +++ b/pkgs/exporters/otlp/proto-base/src/platform/util.ts @@ -16,6 +16,7 @@ import * as root from '../generated/root'; import { ServiceClientType } from './types'; +import type * as protobuf from 'protobufjs'; export interface ExportRequestType unknown }> { create(properties?: T): R; diff --git a/pkgs/exporters/otlp/trace/http/.eslintrc.js b/pkgs/exporters/otlp/trace/http/.eslintrc.js index a460c8fb2..f99de8141 100644 --- a/pkgs/exporters/otlp/trace/http/.eslintrc.js +++ b/pkgs/exporters/otlp/trace/http/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../../../eslint.config.js') + ...require('../../../../../eslint.base.js') } diff --git a/pkgs/exporters/otlp/trace/http/README.md b/pkgs/exporters/otlp/trace/http/README.md index 87c02d339..db9e2b5be 100644 --- a/pkgs/exporters/otlp/trace/http/README.md +++ b/pkgs/exporters/otlp/trace/http/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for web and node to be used with OTLP (`http/json`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.48 <=0.50`. +This module provides a trace-exporter for OTLP (http/json) using protocol version `v0.20.0`. ## Installation diff --git a/pkgs/exporters/otlp/trace/http/package.json b/pkgs/exporters/otlp/trace/http/package.json index 97adbd03e..06ef94be4 100644 --- a/pkgs/exporters/otlp/trace/http/package.json +++ b/pkgs/exporters/otlp/trace/http/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-exporter-trace-otlp-http", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry Collector Trace Exporter allows user to send collected traces to the OpenTelemetry Collector", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,18 +14,18 @@ "./build/src/platform/index.js": "./build/src/platform/browser/index.js" }, "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", @@ -68,21 +68,22 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -91,6 +92,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -100,6 +102,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -116,12 +119,11 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-otlp-exporter-base": "0.40.0", - "@opentelemetry/sandbox-otlp-transformer": "0.40.0", - "@opentelemetry/sandbox-resources": "1.14.0", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-otlp-exporter-base": "0.41.2", + "@opentelemetry/sandbox-otlp-transformer": "0.41.2", + "@opentelemetry/sandbox-resources": "1.15.2", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-http", "sideEffects": false diff --git a/pkgs/exporters/otlp/trace/proto/.eslintrc.js b/pkgs/exporters/otlp/trace/proto/.eslintrc.js index 01d9a9feb..d0bc5f818 100644 --- a/pkgs/exporters/otlp/trace/proto/.eslintrc.js +++ b/pkgs/exporters/otlp/trace/proto/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "node": true, }, - ...require('../../../../../eslint.config.js') + ...require('../../../../../eslint.base.js') } diff --git a/pkgs/exporters/otlp/trace/proto/README.md b/pkgs/exporters/otlp/trace/proto/README.md index a90f5c2ae..04133f021 100644 --- a/pkgs/exporters/otlp/trace/proto/README.md +++ b/pkgs/exporters/otlp/trace/proto/README.md @@ -5,8 +5,7 @@ **Note: This is an experimental package under active development. New releases may include breaking changes.** -This module provides exporter for node to be used with OTLP (`http/protobuf`) compatible receivers. -Compatible with [opentelemetry-collector][opentelemetry-collector-url] versions `>=0.32 <=0.50`. +This module provides a trace-exporter for OTLP (http/protobuf) using protocol version `v0.20.0`. ## Installation diff --git a/pkgs/exporters/otlp/trace/proto/package.json b/pkgs/exporters/otlp/trace/proto/package.json index 671362327..46098c37a 100644 --- a/pkgs/exporters/otlp/trace/proto/package.json +++ b/pkgs/exporters/otlp/trace/proto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-exporter-trace-otlp-proto", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry Collector Exporter allows user to send collected traces to the OpenTelemetry Collector using protobuf over HTTP", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,17 +14,17 @@ "./build/src/platform/index.js": "./build/src/platform/browser/index.js" }, "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", @@ -67,20 +67,22 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -89,6 +91,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -98,6 +101,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -106,19 +110,20 @@ "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", "typescript": "^4.9.5", - "webpack": "^4.46.0" + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-otlp-exporter-base": "0.40.0", - "@opentelemetry/sandbox-otlp-proto-exporter-base": "0.40.0", - "@opentelemetry/sandbox-otlp-transformer": "0.40.0", - "@opentelemetry/sandbox-resources": "1.14.0", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-otlp-exporter-base": "0.41.2", + "@opentelemetry/sandbox-otlp-proto-exporter-base": "0.41.2", + "@opentelemetry/sandbox-otlp-transformer": "0.41.2", + "@opentelemetry/sandbox-resources": "1.15.2", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/exporter-trace-otlp-proto", "sideEffects": false diff --git a/pkgs/exporters/otlp/transformer/.eslintrc.js b/pkgs/exporters/otlp/transformer/.eslintrc.js index 13a6e31d9..feb677d23 100644 --- a/pkgs/exporters/otlp/transformer/.eslintrc.js +++ b/pkgs/exporters/otlp/transformer/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "commonjs": true, "shared-node-browser": true }, - ...require('../../../../eslint.config.js') + ...require('../../../../eslint.base.js') } diff --git a/pkgs/exporters/otlp/transformer/package.json b/pkgs/exporters/otlp/transformer/package.json index 48c2dff97..3ed8d8c5d 100644 --- a/pkgs/exporters/otlp/transformer/package.json +++ b/pkgs/exporters/otlp/transformer/package.json @@ -4,7 +4,7 @@ "publishConfig": { "access": "public" }, - "version": "0.40.0", + "version": "0.41.2", "description": "Transform OpenTelemetry SDK data into OTLP", "module": "build/esm/index.js", "esnext": "build/esnext/index.js", @@ -12,17 +12,17 @@ "main": "build/src/index.js", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", @@ -69,12 +69,14 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -83,6 +85,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -92,6 +95,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -103,13 +107,12 @@ "webpack": "^4.46.0" }, "dependencies": { - "@opentelemetry/sandbox-api-logs": "0.40.0", - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-resources": "1.14.0", - "@opentelemetry/sandbox-sdk-logs": "0.40.0", - "@opentelemetry/sandbox-sdk-metrics": "1.14.0", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-api-logs": "0.41.2", + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-resources": "1.15.2", + "@opentelemetry/sandbox-sdk-logs": "0.41.2", + "@opentelemetry/sandbox-sdk-metrics": "1.15.2", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/otlp-transformer", "sideEffects": false diff --git a/pkgs/exporters/otlp/transformer/src/common/types.ts b/pkgs/exporters/otlp/transformer/src/common/types.ts index 8b30231e7..159a595ba 100644 --- a/pkgs/exporters/otlp/transformer/src/common/types.ts +++ b/pkgs/exporters/otlp/transformer/src/common/types.ts @@ -21,6 +21,12 @@ export interface IInstrumentationScope { /** InstrumentationScope version */ version?: string; + + /** InstrumentationScope attributes */ + attributes?: IKeyValue[]; + + /** InstrumentationScope droppedAttributesCount */ + droppedAttributesCount?: number; } /** Properties of a KeyValue. */ diff --git a/pkgs/exporters/otlp/transformer/src/logs/types.ts b/pkgs/exporters/otlp/transformer/src/logs/types.ts index 3d3e610bc..05709af6f 100644 --- a/pkgs/exporters/otlp/transformer/src/logs/types.ts +++ b/pkgs/exporters/otlp/transformer/src/logs/types.ts @@ -27,6 +27,19 @@ export interface IExportLogsServiceRequest { resourceLogs?: IResourceLogs[]; } +export interface IExportLogsServiceResponse { + /** ExportLogsServiceResponse partialSuccess */ + partialSuccess?: IExportLogsPartialSuccess; +} + +export interface IExportLogsPartialSuccess { + /** ExportLogsPartialSuccess rejectedLogRecords */ + rejectedLogRecords?: number; + + /** ExportLogsPartialSuccess errorMessage */ + errorMessage?: string; +} + /** Properties of a ResourceLogs. */ export interface IResourceLogs { /** ResourceLogs resource */ diff --git a/pkgs/exporters/otlp/transformer/src/metrics/types.ts b/pkgs/exporters/otlp/transformer/src/metrics/types.ts index 6db9c17a9..2728ab1ab 100644 --- a/pkgs/exporters/otlp/transformer/src/metrics/types.ts +++ b/pkgs/exporters/otlp/transformer/src/metrics/types.ts @@ -22,6 +22,19 @@ export interface IExportMetricsServiceRequest { resourceMetrics: IResourceMetrics[]; } +export interface IExportMetricsServiceResponse { + /** ExportMetricsServiceResponse partialSuccess */ + partialSuccess?: IExportMetricsPartialSuccess; +} + +export interface IExportMetricsPartialSuccess { + /** ExportMetricsPartialSuccess rejectedDataPoints */ + rejectedDataPoints?: number; + + /** ExportMetricsPartialSuccess errorMessage */ + errorMessage?: string; +} + /** Properties of a ResourceMetrics. */ export interface IResourceMetrics { /** ResourceMetrics resource */ diff --git a/pkgs/exporters/otlp/transformer/src/trace/types.ts b/pkgs/exporters/otlp/transformer/src/trace/types.ts index 08e52c7a0..a6cfb82ad 100644 --- a/pkgs/exporters/otlp/transformer/src/trace/types.ts +++ b/pkgs/exporters/otlp/transformer/src/trace/types.ts @@ -23,6 +23,19 @@ export interface IExportTraceServiceRequest { resourceSpans?: IResourceSpans[]; } +export interface IExportTraceServiceResponse { + /** ExportTraceServiceResponse partialSuccess */ + partialSuccess?: IExportTracePartialSuccess; +} + +export interface IExportTracePartialSuccess { + /** ExportLogsServiceResponse rejectedLogRecords */ + rejectedSpans?: number; + + /** ExportLogsServiceResponse errorMessage */ + errorMessage?: string; +} + /** Properties of a ResourceSpans. */ export interface IResourceSpans { /** ResourceSpans resource */ diff --git a/pkgs/exporters/zipkin/.eslintrc.js b/pkgs/exporters/zipkin/.eslintrc.js index e41d9a929..c05408904 100644 --- a/pkgs/exporters/zipkin/.eslintrc.js +++ b/pkgs/exporters/zipkin/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/pkgs/exporters/zipkin/package.json b/pkgs/exporters/zipkin/package.json index d831986d3..87f0f36d3 100644 --- a/pkgs/exporters/zipkin/package.json +++ b/pkgs/exporters/zipkin/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-exporter-zipkin", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry Zipkin Exporter allows the user to send collected traces to Zipkin.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,18 +14,18 @@ "./build/src/platform/index.js": "./build/src/platform/browser/index.js" }, "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", @@ -65,20 +65,21 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -87,6 +88,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -94,9 +96,10 @@ "karma-typescript": "^5.5.3", "karma-webpack": "^4.0.2", "mocha": "10.0.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -113,11 +116,10 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-resources": "1.14.0", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", - "@opentelemetry/sandbox-semantic-conventions": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-resources": "1.15.2", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2", + "@opentelemetry/sandbox-semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-exporter-zipkin", "sideEffects": false diff --git a/pkgs/instrumentations/instrumentation/.eslintrc.js b/pkgs/instrumentations/instrumentation/.eslintrc.js index e41d9a929..c05408904 100644 --- a/pkgs/instrumentations/instrumentation/.eslintrc.js +++ b/pkgs/instrumentations/instrumentation/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/pkgs/instrumentations/instrumentation/package.json b/pkgs/instrumentations/instrumentation/package.json index be6295289..d81f5b3a3 100644 --- a/pkgs/instrumentations/instrumentation/package.json +++ b/pkgs/instrumentations/instrumentation/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-instrumentation", - "version": "0.40.0", + "version": "0.41.2", "description": "Base class for node which OpenTelemetry instrumentation modules extend", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation", @@ -38,18 +38,18 @@ "README.md" ], "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run tdd:node", "tdd:browser": "karma start", "tdd:node": "npm run test -- --watch-extensions ts --watch", @@ -77,33 +77,33 @@ }, "dependencies": { "@types/shimmer": "^1.0.2", - "import-in-the-middle": "1.3.5", + "import-in-the-middle": "1.4.2", "require-in-the-middle": "^7.1.1", "semver": "^7.5.1", - "shimmer": "^1.2.1", - "tslib": "^2.3.1" + "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/sandbox-api": "1.4.1" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", - "@opentelemetry/sandbox-sdk-metrics": "1.14.0", + "@opentelemetry/sandbox-sdk-metrics": "1.15.2", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/semver": "7.5.0", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cpx": "1.5.0", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -112,6 +112,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -121,6 +122,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", diff --git a/pkgs/instrumentations/instrumentation/src/platform/browser/index.ts b/pkgs/instrumentations/instrumentation/src/platform/browser/index.ts index 0b238b42b..24c76056a 100644 --- a/pkgs/instrumentations/instrumentation/src/platform/browser/index.ts +++ b/pkgs/instrumentations/instrumentation/src/platform/browser/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export { InstrumentationBase } from './instrumentation'; +export * from './instrumentation'; diff --git a/pkgs/instrumentations/instrumentation/src/platform/index.ts b/pkgs/instrumentations/instrumentation/src/platform/index.ts index 1fc5f5e14..cdaf8858c 100644 --- a/pkgs/instrumentations/instrumentation/src/platform/index.ts +++ b/pkgs/instrumentations/instrumentation/src/platform/index.ts @@ -14,10 +14,4 @@ * limitations under the License. */ -export { - InstrumentationBase, - InstrumentationModuleDefinition, - InstrumentationModuleFile, - InstrumentationNodeModuleDefinition, - InstrumentationNodeModuleFile, -} from './node'; +export * from './node'; diff --git a/pkgs/instrumentations/instrumentation/src/platform/node/index.ts b/pkgs/instrumentations/instrumentation/src/platform/node/index.ts index d3df10491..842797c34 100644 --- a/pkgs/instrumentations/instrumentation/src/platform/node/index.ts +++ b/pkgs/instrumentations/instrumentation/src/platform/node/index.ts @@ -13,10 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { InstrumentationBase } from './instrumentation'; -export { InstrumentationNodeModuleDefinition } from './instrumentationNodeModuleDefinition'; -export { InstrumentationNodeModuleFile } from './instrumentationNodeModuleFile'; -export { - InstrumentationModuleDefinition, - InstrumentationModuleFile, -} from './types'; +export * from './instrumentation'; +export * from './instrumentationNodeModuleDefinition'; +export * from './instrumentationNodeModuleFile'; +export * from './types'; diff --git a/pkgs/instrumentations/instrumentation/test/node/EsmInstrumentation.test.mjs b/pkgs/instrumentations/instrumentation/test/node/EsmInstrumentation.test.mjs index 715dbdbff..f09097cd7 100644 --- a/pkgs/instrumentations/instrumentation/test/node/EsmInstrumentation.test.mjs +++ b/pkgs/instrumentations/instrumentation/test/node/EsmInstrumentation.test.mjs @@ -18,7 +18,7 @@ import * as assert from 'assert'; import { InstrumentationBase, InstrumentationNodeModuleDefinition, -} from '../../build/src/platform/index.js'; +} from '../../build/src/index.js'; import * as exported from 'test-esm-module'; class TestInstrumentationWrapFn extends InstrumentationBase { diff --git a/pkgs/instrumentations/web/auto/.eslintrc.js b/pkgs/instrumentations/web/auto/.eslintrc.js index 189f3645f..87dbd631a 100644 --- a/pkgs/instrumentations/web/auto/.eslintrc.js +++ b/pkgs/instrumentations/web/auto/.eslintrc.js @@ -4,5 +4,5 @@ module.exports = { "node": true, "mocha": true, }, - ...require('../../../../eslint.config.js') + ...require('../../../../eslint.base.js') } diff --git a/pkgs/instrumentations/web/auto/CHANGELOG.md b/pkgs/instrumentations/web/auto/CHANGELOG.md index 55af3d789..8269ad067 100644 --- a/pkgs/instrumentations/web/auto/CHANGELOG.md +++ b/pkgs/instrumentations/web/auto/CHANGELOG.md @@ -12,6 +12,26 @@ * dependencies * @opentelemetry/instrumentation-document-load bumped from ^0.31.1 to ^0.31.2 +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/auto-instrumentations-web-v0.32.3...auto-instrumentations-web-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + + +### Dependencies + +* The following workspace dependencies were updated + * dependencies + * @opentelemetry/instrumentation-document-load bumped from ^0.32.3 to ^0.33.0 + * @opentelemetry/instrumentation-user-interaction bumped from ^0.32.4 to ^0.33.0 + ## [0.32.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/auto-instrumentations-web-v0.32.2...auto-instrumentations-web-v0.32.3) (2023-06-12) diff --git a/pkgs/instrumentations/web/auto/package.json b/pkgs/instrumentations/web/auto/package.json index 6ea54fcf2..05b72adb8 100644 --- a/pkgs/instrumentations/web/auto/package.json +++ b/pkgs/instrumentations/web/auto/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-auto-instrumentations-web", - "version": "0.32.3", + "version": "0.33.0", "description": "Metapackage which bundles opentelemetry node core and contrib instrumentations", "author": "OpenTelemetry Authors", "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/metapackages/auto-instrumentations-web#readme", @@ -16,15 +16,15 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js-contrib", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "prepare": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", "test:debug": "nyc karma start ./karma.debug.conf.js --wait", @@ -40,7 +40,7 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "devDependencies": { - "@babel/core": "7.15.0", + "@babel/core": "7.22.10", "@jsdevtools/coverage-istanbul-loader": "3.0.5", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", @@ -48,11 +48,12 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.2.2", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -70,6 +71,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -83,10 +85,10 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@opentelemetry/sandbox-instrumentation": "0.40.0", - "@opentelemetry/sandbox-instrumentation-document-load": "0.32.3", - "@opentelemetry/sandbox-instrumentation-fetch": "0.40.0", - "@opentelemetry/sandbox-instrumentation-user-interaction": "0.32.4", - "@opentelemetry/sandbox-instrumentation-xml-http-request": "0.40.0" + "@opentelemetry/sandbox-instrumentation": "0.41.2", + "@opentelemetry/sandbox-instrumentation-document-load": "0.33.0", + "@opentelemetry/sandbox-instrumentation-fetch": "0.41.2", + "@opentelemetry/sandbox-instrumentation-user-interaction": "0.33.0", + "@opentelemetry/sandbox-instrumentation-xml-http-request": "0.41.2" } } \ No newline at end of file diff --git a/pkgs/instrumentations/web/document-load/.eslintrc.js b/pkgs/instrumentations/web/document-load/.eslintrc.js index 2d08666a8..0f538c856 100644 --- a/pkgs/instrumentations/web/document-load/.eslintrc.js +++ b/pkgs/instrumentations/web/document-load/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "browser": true, "jquery": true }, - ...require('../../../../eslint.config.js') + ...require('../../../../eslint.base.js') } diff --git a/pkgs/instrumentations/web/document-load/CHANGELOG.md b/pkgs/instrumentations/web/document-load/CHANGELOG.md index db63db43b..4230bfda0 100644 --- a/pkgs/instrumentations/web/document-load/CHANGELOG.md +++ b/pkgs/instrumentations/web/document-load/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-document-load-v0.32.3...instrumentation-document-load-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) +* **opentelemetry-instrumentation-document-load:** Add access to performance resource timing object for custom attributes ([#1529](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1529)) ([7c7294c](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/7c7294ce0591a3c8d4c12b5f135f4fcd24b79762)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) +* **document-load:** compatibility issue with @opentelemetry/sdk-trace-web@1.15.0 ([#1565](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1565)) ([774d254](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/774d25463bdbf7f290d99a07f627237888137e24)) + ## [0.32.3](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-document-load-v0.32.2...instrumentation-document-load-v0.32.3) (2023-06-12) diff --git a/pkgs/instrumentations/web/document-load/README.md b/pkgs/instrumentations/web/document-load/README.md index c2f518f55..7e40344d6 100644 --- a/pkgs/instrumentations/web/document-load/README.md +++ b/pkgs/instrumentations/web/document-load/README.md @@ -82,7 +82,7 @@ Because the browser does not send a trace context header for the initial page na ``` -## Optional : Add custom attributes to document load span if needed +## Optional : Add custom attributes to spans if needed If it is needed to add custom attributes to the document load span,and/or document fetch span and/or resource fetch spans, respective functions to do so needs to be provided as a config to the DocumentLoad Instrumentation as shown below. The attributes will be added to the respective spans @@ -93,11 +93,16 @@ the rest of the process continues. const addCustomAttributesToSpan = (span: Span) => { span.setAttribute('',''); } +const addCustomAttributesToResourceFetchSpan = (span: Span, resource: PerformanceResourceTiming) => { + span.setAttribute('',''); + span.setAttribute('resource.tcp.duration_ms', resource.connectEnd - resource.connectStart); +} registerInstrumentations({ instrumentations: [ new DocumentLoadInstrumentation({ applyCustomAttributesOnSpan: { - documentLoad: addCustomAttributesToSpan + documentLoad: addCustomAttributesToSpan, + resourceFetch: addCustomAttributesToResourceFetchSpan } }) ] diff --git a/pkgs/instrumentations/web/document-load/package.json b/pkgs/instrumentations/web/document-load/package.json index dcaaebc68..e69bdca50 100644 --- a/pkgs/instrumentations/web/document-load/package.json +++ b/pkgs/instrumentations/web/document-load/package.json @@ -1,21 +1,21 @@ { "name": "@opentelemetry/sandbox-instrumentation-document-load", - "version": "0.32.3", + "version": "0.33.0", "description": "OpenTelemetry document-load automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js-contrib", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "prepare": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", @@ -57,7 +57,7 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "devDependencies": { - "@babel/core": "7.15.0", + "@babel/core": "7.22.10", "@jsdevtools/coverage-istanbul-loader": "3.0.5", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", @@ -65,11 +65,12 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.2.2", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -87,6 +88,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -100,11 +102,11 @@ "webpack-merge": "5.8.0" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-instrumentation": "0.40.0", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", - "@opentelemetry/sandbox-sdk-trace-web": "1.14.0", - "@opentelemetry/sandbox-semantic-conventions": "1.14.0" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-instrumentation": "0.41.2", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2", + "@opentelemetry/sandbox-sdk-trace-web": "1.15.2", + "@opentelemetry/sandbox-semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/web/opentelemetry-instrumentation-document-load#readme" } \ No newline at end of file diff --git a/pkgs/instrumentations/web/document-load/src/instrumentation.ts b/pkgs/instrumentations/web/document-load/src/instrumentation.ts index c1a5b6349..80f7f524a 100644 --- a/pkgs/instrumentations/web/document-load/src/instrumentation.ts +++ b/pkgs/instrumentations/web/document-load/src/instrumentation.ts @@ -36,6 +36,7 @@ import { import { DocumentLoadCustomAttributeFunction, DocumentLoadInstrumentationConfig, + ResourceFetchCustomAttributeFunction, } from './types'; import { AttributeNames } from './enums/AttributeNames'; import { VERSION } from './version'; @@ -197,8 +198,9 @@ export class DocumentLoadInstrumentation extends InstrumentationBase { if (span) { span.setAttribute(SemanticAttributes.HTTP_URL, resource.name); addSpanNetworkEvents(span, resource); - this._addCustomAttributesOnSpan( + this._addCustomAttributesOnResourceSpan( span, + resource, this._getConfig().applyCustomAttributesOnSpan?.resourceFetch ); this._endSpan(span, PTN.RESPONSE_END, resource); @@ -271,6 +273,31 @@ export class DocumentLoadInstrumentation extends InstrumentationBase { } } + /** + * adds custom attributes to span if configured + */ + private _addCustomAttributesOnResourceSpan( + span: Span, + resource: PerformanceResourceTiming, + applyCustomAttributesOnSpan: + | ResourceFetchCustomAttributeFunction + | undefined + ) { + if (applyCustomAttributesOnSpan) { + safeExecuteInTheMiddle( + () => applyCustomAttributesOnSpan(span, resource), + error => { + if (!error) { + return; + } + + this._diag.error('addCustomAttributesOnResourceSpan', error); + }, + true + ); + } + } + /** * implements enable function */ diff --git a/pkgs/instrumentations/web/document-load/src/types.ts b/pkgs/instrumentations/web/document-load/src/types.ts index bad1525fd..cdaafb00f 100644 --- a/pkgs/instrumentations/web/document-load/src/types.ts +++ b/pkgs/instrumentations/web/document-load/src/types.ts @@ -20,6 +20,10 @@ export interface DocumentLoadCustomAttributeFunction { (span: Span): void; } +export interface ResourceFetchCustomAttributeFunction { + (span: Span, resource: PerformanceResourceTiming): void; +} + /** * DocumentLoadInstrumentationPlugin Config */ @@ -29,6 +33,6 @@ export interface DocumentLoadInstrumentationConfig applyCustomAttributesOnSpan?: { documentLoad?: DocumentLoadCustomAttributeFunction; documentFetch?: DocumentLoadCustomAttributeFunction; - resourceFetch?: DocumentLoadCustomAttributeFunction; + resourceFetch?: ResourceFetchCustomAttributeFunction; }; } diff --git a/pkgs/instrumentations/web/document-load/test/documentLoad.test.ts b/pkgs/instrumentations/web/document-load/test/documentLoad.test.ts index fac60a789..ea1fd06cd 100644 --- a/pkgs/instrumentations/web/document-load/test/documentLoad.test.ts +++ b/pkgs/instrumentations/web/document-load/test/documentLoad.test.ts @@ -210,11 +210,10 @@ function ensureNetworkEventsExists(events: TimedEvent[]) { assert.strictEqual(events[1].name, PTN.DOMAIN_LOOKUP_START); assert.strictEqual(events[2].name, PTN.DOMAIN_LOOKUP_END); assert.strictEqual(events[3].name, PTN.CONNECT_START); - assert.strictEqual(events[4].name, PTN.SECURE_CONNECTION_START); - assert.strictEqual(events[5].name, PTN.CONNECT_END); - assert.strictEqual(events[6].name, PTN.REQUEST_START); - assert.strictEqual(events[7].name, PTN.RESPONSE_START); - assert.strictEqual(events[8].name, PTN.RESPONSE_END); + assert.strictEqual(events[4].name, PTN.CONNECT_END); + assert.strictEqual(events[5].name, PTN.REQUEST_START); + assert.strictEqual(events[6].name, PTN.RESPONSE_START); + assert.strictEqual(events[7].name, PTN.RESPONSE_END); } describe('DocumentLoad Instrumentation', () => { @@ -370,7 +369,7 @@ describe('DocumentLoad Instrumentation', () => { assert.strictEqual(fsEvents[7].name, PTN.LOAD_EVENT_START); assert.strictEqual(fsEvents[8].name, PTN.LOAD_EVENT_END); - assert.strictEqual(rsEvents.length, 9); + assert.strictEqual(rsEvents.length, 8); assert.strictEqual(fsEvents.length, 11); assert.strictEqual(exporter.getFinishedSpans().length, 2); done(); @@ -486,15 +485,7 @@ describe('DocumentLoad Instrumentation', () => { 'http://localhost:8090/bundle.js' ); - assert.strictEqual(srEvents1[0].name, PTN.FETCH_START); - assert.strictEqual(srEvents1[1].name, PTN.DOMAIN_LOOKUP_START); - assert.strictEqual(srEvents1[2].name, PTN.DOMAIN_LOOKUP_END); - assert.strictEqual(srEvents1[3].name, PTN.CONNECT_START); - assert.strictEqual(srEvents1[4].name, PTN.SECURE_CONNECTION_START); - assert.strictEqual(srEvents1[5].name, PTN.CONNECT_END); - assert.strictEqual(srEvents1[6].name, PTN.REQUEST_START); - assert.strictEqual(srEvents1[7].name, PTN.RESPONSE_START); - assert.strictEqual(srEvents1[8].name, PTN.RESPONSE_END); + ensureNetworkEventsExists(srEvents1); assert.strictEqual(exporter.getFinishedSpans().length, 3); done(); @@ -570,7 +561,7 @@ describe('DocumentLoad Instrumentation', () => { assert.strictEqual(rsEvents[7].name, PTN.LOAD_EVENT_START); assert.strictEqual(rsEvents[8].name, PTN.LOAD_EVENT_END); - assert.strictEqual(fsEvents.length, 9); + assert.strictEqual(fsEvents.length, 8); assert.strictEqual(rsEvents.length, 9); assert.strictEqual(exporter.getFinishedSpans().length, 2); done(); @@ -706,8 +697,12 @@ describe('DocumentLoad Instrumentation', () => { plugin = new DocumentLoadInstrumentation({ enabled: false, applyCustomAttributesOnSpan: { - resourceFetch: span => { + resourceFetch: (span, resource) => { span.setAttribute('custom-key', 'custom-val'); + span.setAttribute( + 'resource.tcp.duration_ms', + resource.connectEnd - resource.connectStart + ); }, }, }); @@ -723,6 +718,14 @@ describe('DocumentLoad Instrumentation', () => { resourceSpan2.attributes['custom-key'], 'custom-val' ); + assert.strictEqual( + resourceSpan1.attributes['resource.tcp.duration_ms'], + 0 + ); + assert.strictEqual( + resourceSpan2.attributes['resource.tcp.duration_ms'], + 0 + ); assert.strictEqual(exporter.getFinishedSpans().length, 4); done(); }); diff --git a/pkgs/instrumentations/web/fetch/.eslintrc.js b/pkgs/instrumentations/web/fetch/.eslintrc.js index a56ddd7a7..c3bb93bde 100644 --- a/pkgs/instrumentations/web/fetch/.eslintrc.js +++ b/pkgs/instrumentations/web/fetch/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../../eslint.config.js') + ...require('../../../../eslint.base.js') } diff --git a/pkgs/instrumentations/web/fetch/package.json b/pkgs/instrumentations/web/fetch/package.json index 841020f9f..c445c39a7 100644 --- a/pkgs/instrumentations/web/fetch/package.json +++ b/pkgs/instrumentations/web/fetch/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-instrumentation-fetch", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry fetch automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -8,17 +8,17 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", @@ -60,23 +60,24 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", - "@opentelemetry/sandbox-context-zone": "1.14.0", - "@opentelemetry/sandbox-propagator-b3": "1.14.0", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", + "@opentelemetry/sandbox-context-zone": "1.15.2", + "@opentelemetry/sandbox-propagator-b3": "1.15.2", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -85,6 +86,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -94,6 +96,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -110,11 +113,10 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-instrumentation": "0.40.0", - "@opentelemetry/sandbox-sdk-trace-web": "1.14.0", - "@opentelemetry/sandbox-semantic-conventions": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-instrumentation": "0.41.2", + "@opentelemetry/sandbox-sdk-trace-web": "1.15.2", + "@opentelemetry/sandbox-semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-fetch", "sideEffects": false diff --git a/pkgs/instrumentations/web/fetch/test/fetch.test.ts b/pkgs/instrumentations/web/fetch/test/fetch.test.ts index 8bcf5daef..09bd4d187 100644 --- a/pkgs/instrumentations/web/fetch/test/fetch.test.ts +++ b/pkgs/instrumentations/web/fetch/test/fetch.test.ts @@ -139,6 +139,19 @@ function createFakePerformanceObs(url: string) { return FakePerfObs; } +function testForCorrectEvents( + events: tracing.TimedEvent[], + eventNames: string[] +) { + for (let i = 0; i < events.length; i++) { + assert.strictEqual( + events[i].name, + eventNames[i], + `event ${eventNames[i]} is not defined` + ); + } +} + describe('fetch', () => { let contextManager: ZoneContextManager; let lastResponse: any | undefined; @@ -152,6 +165,7 @@ describe('fetch', () => { let fetchInstrumentation: FetchInstrumentation; const url = 'http://localhost:8090/get'; + const secureUrl = 'https://localhost:8090/get'; const badUrl = 'http://foo.bar.com/get'; const clearData = () => { @@ -399,53 +413,17 @@ describe('fetch', () => { it('span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[1][0][0]; const events = span.events; - assert.strictEqual(events.length, 9, 'number of events is wrong'); - - assert.strictEqual( - events[0].name, + assert.strictEqual(events.length, 8, 'number of events is wrong'); + testForCorrectEvents(events, [ PTN.FETCH_START, - `event ${PTN.FETCH_START} is not defined` - ); - assert.strictEqual( - events[1].name, PTN.DOMAIN_LOOKUP_START, - `event ${PTN.DOMAIN_LOOKUP_START} is not defined` - ); - assert.strictEqual( - events[2].name, PTN.DOMAIN_LOOKUP_END, - `event ${PTN.DOMAIN_LOOKUP_END} is not defined` - ); - assert.strictEqual( - events[3].name, PTN.CONNECT_START, - `event ${PTN.CONNECT_START} is not defined` - ); - assert.strictEqual( - events[4].name, - PTN.SECURE_CONNECTION_START, - `event ${PTN.SECURE_CONNECTION_START} is not defined` - ); - assert.strictEqual( - events[5].name, PTN.CONNECT_END, - `event ${PTN.CONNECT_END} is not defined` - ); - assert.strictEqual( - events[6].name, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); - assert.strictEqual( - events[7].name, PTN.RESPONSE_START, - `event ${PTN.RESPONSE_START} is not defined` - ); - assert.strictEqual( - events[8].name, PTN.RESPONSE_END, - `event ${PTN.RESPONSE_END} is not defined` - ); + ]); }); it('should create a span for preflight request', () => { @@ -479,53 +457,17 @@ describe('fetch', () => { it('preflight request span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - assert.strictEqual(events.length, 9, 'number of events is wrong'); - - assert.strictEqual( - events[0].name, + assert.strictEqual(events.length, 8, 'number of events is wrong'); + testForCorrectEvents(events, [ PTN.FETCH_START, - `event ${PTN.FETCH_START} is not defined` - ); - assert.strictEqual( - events[1].name, PTN.DOMAIN_LOOKUP_START, - `event ${PTN.DOMAIN_LOOKUP_START} is not defined` - ); - assert.strictEqual( - events[2].name, PTN.DOMAIN_LOOKUP_END, - `event ${PTN.DOMAIN_LOOKUP_END} is not defined` - ); - assert.strictEqual( - events[3].name, PTN.CONNECT_START, - `event ${PTN.CONNECT_START} is not defined` - ); - assert.strictEqual( - events[4].name, - PTN.SECURE_CONNECTION_START, - `event ${PTN.SECURE_CONNECTION_START} is not defined` - ); - assert.strictEqual( - events[5].name, PTN.CONNECT_END, - `event ${PTN.CONNECT_END} is not defined` - ); - assert.strictEqual( - events[6].name, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); - assert.strictEqual( - events[7].name, PTN.RESPONSE_START, - `event ${PTN.RESPONSE_START} is not defined` - ); - assert.strictEqual( - events[8].name, PTN.RESPONSE_END, - `event ${PTN.RESPONSE_END} is not defined` - ); + ]); }); it('should set trace headers', () => { @@ -639,6 +581,51 @@ describe('fetch', () => { }); }); + describe('when request is secure and successful', () => { + beforeEach(async () => { + const propagateTraceHeaderCorsUrls = [secureUrl]; + await prepareData(secureUrl, { propagateTraceHeaderCorsUrls }); + }); + + afterEach(() => { + clearData(); + }); + + it('span should have correct events', () => { + const span: tracing.ReadableSpan = exportSpy.args[1][0][0]; + const events = span.events; + assert.strictEqual(events.length, 9, 'number of events is wrong'); + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.SECURE_CONNECTION_START, + PTN.CONNECT_END, + PTN.REQUEST_START, + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); + }); + + it('preflight request span should have correct events', () => { + const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; + const events = span.events; + assert.strictEqual(events.length, 9, 'number of events is wrong'); + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.SECURE_CONNECTION_START, + PTN.CONNECT_END, + PTN.REQUEST_START, + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); + }); + }); + describe('applyCustomAttributesOnSpan option', () => { const prepare = async ( url: string, @@ -815,13 +802,18 @@ describe('fetch', () => { `Wrong number of spans: ${exportSpy.args.length}` ); - assert.strictEqual(events.length, 9, 'number of events is wrong'); + assert.strictEqual(events.length, 8, 'number of events is wrong'); - assert.strictEqual( - events[6].name, + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.CONNECT_END, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); }); }); @@ -844,12 +836,17 @@ describe('fetch', () => { `Wrong number of spans: ${exportSpy.args.length}` ); - assert.strictEqual(events.length, 9, 'number of events is wrong'); - assert.strictEqual( - events[6].name, + assert.strictEqual(events.length, 8, 'number of events is wrong'); + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.CONNECT_END, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); }); it('should have an absolute http.url attribute', () => { @@ -882,12 +879,17 @@ describe('fetch', () => { 2, `Wrong number of spans: ${exportSpy.args.length}` ); - assert.strictEqual(events.length, 9, 'number of events is wrong'); - assert.strictEqual( - events[6].name, + assert.strictEqual(events.length, 8, 'number of events is wrong'); + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.CONNECT_END, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); }); }); diff --git a/pkgs/instrumentations/web/long-task/.eslintrc.js b/pkgs/instrumentations/web/long-task/.eslintrc.js index 2d08666a8..0f538c856 100644 --- a/pkgs/instrumentations/web/long-task/.eslintrc.js +++ b/pkgs/instrumentations/web/long-task/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "browser": true, "jquery": true }, - ...require('../../../../eslint.config.js') + ...require('../../../../eslint.base.js') } diff --git a/pkgs/instrumentations/web/long-task/CHANGELOG.md b/pkgs/instrumentations/web/long-task/CHANGELOG.md index a150d4ada..fb7d9c17e 100644 --- a/pkgs/instrumentations/web/long-task/CHANGELOG.md +++ b/pkgs/instrumentations/web/long-task/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-long-task-v0.32.5...instrumentation-long-task-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.32.5](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-long-task-v0.32.4...instrumentation-long-task-v0.32.5) (2023-06-12) diff --git a/pkgs/instrumentations/web/long-task/package.json b/pkgs/instrumentations/web/long-task/package.json index 19fbf71b0..a27758df2 100644 --- a/pkgs/instrumentations/web/long-task/package.json +++ b/pkgs/instrumentations/web/long-task/package.json @@ -1,21 +1,21 @@ { "name": "@opentelemetry/sandbox-instrumentation-long-task", - "version": "0.32.5", + "version": "0.33.0", "description": "OpenTelemetry long task API automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js-contrib", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "prepare": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", @@ -54,20 +54,21 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.15.0", + "@babel/core": "7.22.10", "@jsdevtools/coverage-istanbul-loader": "3.0.5", "@opentelemetry/sandbox-api": "1.4.1", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.2.2", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -86,6 +87,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -100,9 +102,9 @@ "zone.js": "^0.11.4" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-instrumentation": "0.40.0", - "@opentelemetry/sandbox-sdk-trace-web": "1.14.0" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-instrumentation": "0.41.2", + "@opentelemetry/sandbox-sdk-trace-web": "1.15.2" }, "peerDependencies": { "@opentelemetry/sandbox-api": "1.4.1" diff --git a/pkgs/instrumentations/web/user-interaction/.eslintrc.js b/pkgs/instrumentations/web/user-interaction/.eslintrc.js index 599d0b54f..b270bcd97 100644 --- a/pkgs/instrumentations/web/user-interaction/.eslintrc.js +++ b/pkgs/instrumentations/web/user-interaction/.eslintrc.js @@ -8,5 +8,5 @@ module.exports = { "globals": { "Zone": "readonly" }, - ...require('../../../../eslint.config.js') + ...require('../../../../eslint.base.js') } diff --git a/pkgs/instrumentations/web/user-interaction/CHANGELOG.md b/pkgs/instrumentations/web/user-interaction/CHANGELOG.md index 678a8f7d5..16732bf9e 100644 --- a/pkgs/instrumentations/web/user-interaction/CHANGELOG.md +++ b/pkgs/instrumentations/web/user-interaction/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [0.33.0](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-user-interaction-v0.32.4...instrumentation-user-interaction-v0.33.0) (2023-07-12) + + +### Features + +* **minification:** Add importHelpers and tslib as a dependency ([#1545](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1545)) ([65f612e](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/65f612e35c4d67b9935dc3a9155588b35d915482)) + + +### Bug Fixes + +* **deps:** update otel core experimental to ^0.41.0 ([#1566](https://github.com/open-telemetry/opentelemetry-js-contrib/issues/1566)) ([84a2377](https://github.com/open-telemetry/opentelemetry-js-contrib/commit/84a2377845c313f0ca68b4de7f3e7a464be68885)) + ## [0.32.4](https://github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-user-interaction-v0.32.3...instrumentation-user-interaction-v0.32.4) (2023-06-12) diff --git a/pkgs/instrumentations/web/user-interaction/package.json b/pkgs/instrumentations/web/user-interaction/package.json index 2f27c964e..9227619b8 100644 --- a/pkgs/instrumentations/web/user-interaction/package.json +++ b/pkgs/instrumentations/web/user-interaction/package.json @@ -1,21 +1,21 @@ { "name": "@opentelemetry/sandbox-instrumentation-user-interaction", - "version": "0.32.4", + "version": "0.33.0", "description": "OpenTelemetry UserInteraction automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js-contrib", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "prepare": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", @@ -54,22 +54,23 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.15.0", + "@babel/core": "7.22.10", "@jsdevtools/coverage-istanbul-loader": "3.0.5", "@opentelemetry/sandbox-api": "1.4.1", - "@opentelemetry/sandbox-context-zone-peer-dep": "1.14.0", - "@opentelemetry/sandbox-instrumentation-xml-http-request": "0.40.0", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", + "@opentelemetry/sandbox-context-zone-peer-dep": "1.15.2", + "@opentelemetry/sandbox-instrumentation-xml-http-request": "0.41.2", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.2.2", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -88,6 +89,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -102,9 +104,9 @@ "zone.js": "^0.11.4" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-instrumentation": "0.40.0", - "@opentelemetry/sandbox-sdk-trace-web": "1.14.0" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-instrumentation": "0.41.2", + "@opentelemetry/sandbox-sdk-trace-web": "1.15.2" }, "peerDependencies": { "@opentelemetry/sandbox-api": "1.4.1", diff --git a/pkgs/instrumentations/web/xhr/.eslintrc.js b/pkgs/instrumentations/web/xhr/.eslintrc.js index d8a963f4e..18b4667aa 100644 --- a/pkgs/instrumentations/web/xhr/.eslintrc.js +++ b/pkgs/instrumentations/web/xhr/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "browser": true, }, - ...require('../../../../eslint.config.js') + ...require('../../../../eslint.base.js') } diff --git a/pkgs/instrumentations/web/xhr/package.json b/pkgs/instrumentations/web/xhr/package.json index b57826f7c..4e65e56b0 100644 --- a/pkgs/instrumentations/web/xhr/package.json +++ b/pkgs/instrumentations/web/xhr/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-instrumentation-xml-http-request", - "version": "0.40.0", + "version": "0.41.2", "description": "OpenTelemetry XMLHttpRequest automatic instrumentation package.", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -8,17 +8,17 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", @@ -60,23 +60,24 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", - "@opentelemetry/sandbox-context-zone": "1.14.0", - "@opentelemetry/sandbox-propagator-b3": "1.14.0", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", + "@opentelemetry/sandbox-context-zone": "1.15.2", + "@opentelemetry/sandbox-propagator-b3": "1.15.2", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -85,6 +86,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -94,6 +96,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -110,11 +113,10 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-instrumentation": "0.40.0", - "@opentelemetry/sandbox-sdk-trace-web": "1.14.0", - "@opentelemetry/sandbox-semantic-conventions": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-instrumentation": "0.41.2", + "@opentelemetry/sandbox-sdk-trace-web": "1.15.2", + "@opentelemetry/sandbox-semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/experimental/packages/opentelemetry-instrumentation-xml-http-request", "sideEffects": false diff --git a/pkgs/instrumentations/web/xhr/test/xhr.test.ts b/pkgs/instrumentations/web/xhr/test/xhr.test.ts index dac493af0..2de23bf4e 100644 --- a/pkgs/instrumentations/web/xhr/test/xhr.test.ts +++ b/pkgs/instrumentations/web/xhr/test/xhr.test.ts @@ -162,6 +162,19 @@ function createFakePerformanceObs(url: string) { return FakePerfObs; } +function testForCorrectEvents( + events: tracing.TimedEvent[], + eventNames: string[] +) { + for (let i = 0; i < events.length; i++) { + assert.strictEqual( + events[i].name, + eventNames[i], + `event ${eventNames[i]} is not defined` + ); + } +} + describe('xhr', () => { const asyncTests = [{ async: true }, { async: false }]; asyncTests.forEach(test => { @@ -200,6 +213,7 @@ describe('xhr', () => { let rootSpan: api.Span; let spyEntries: any; const url = 'http://localhost:8090/xml-http-request.js'; + const secureUrl = 'https://localhost:8090/xml-http-request.js'; let fakeNow = 0; let xmlHttpRequestInstrumentation: XMLHttpRequestInstrumentation; @@ -383,69 +397,20 @@ describe('xhr', () => { it('span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[1][0][0]; const events = span.events; - - assert.strictEqual( - events[0].name, + testForCorrectEvents(events, [ EventNames.METHOD_OPEN, - `event ${EventNames.METHOD_OPEN} is not defined` - ); - assert.strictEqual( - events[1].name, EventNames.METHOD_SEND, - `event ${EventNames.METHOD_SEND} is not defined` - ); - assert.strictEqual( - events[2].name, PTN.FETCH_START, - `event ${PTN.FETCH_START} is not defined` - ); - assert.strictEqual( - events[3].name, PTN.DOMAIN_LOOKUP_START, - `event ${PTN.DOMAIN_LOOKUP_START} is not defined` - ); - assert.strictEqual( - events[4].name, PTN.DOMAIN_LOOKUP_END, - `event ${PTN.DOMAIN_LOOKUP_END} is not defined` - ); - assert.strictEqual( - events[5].name, PTN.CONNECT_START, - `event ${PTN.CONNECT_START} is not defined` - ); - assert.strictEqual( - events[6].name, - PTN.SECURE_CONNECTION_START, - `event ${PTN.SECURE_CONNECTION_START} is not defined` - ); - assert.strictEqual( - events[7].name, PTN.CONNECT_END, - `event ${PTN.CONNECT_END} is not defined` - ); - assert.strictEqual( - events[8].name, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); - assert.strictEqual( - events[9].name, PTN.RESPONSE_START, - `event ${PTN.RESPONSE_START} is not defined` - ); - assert.strictEqual( - events[10].name, PTN.RESPONSE_END, - `event ${PTN.RESPONSE_END} is not defined` - ); - assert.strictEqual( - events[11].name, EventNames.EVENT_LOAD, - `event ${EventNames.EVENT_LOAD} is not defined` - ); - - assert.strictEqual(events.length, 12, 'number of events is wrong'); + ]); + assert.strictEqual(events.length, 11, 'number of events is wrong'); }); it('should create a span for preflight request', () => { @@ -479,53 +444,17 @@ describe('xhr', () => { it('preflight request span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - assert.strictEqual(events.length, 9, 'number of events is wrong'); - - assert.strictEqual( - events[0].name, + assert.strictEqual(events.length, 8, 'number of events is wrong'); + testForCorrectEvents(events, [ PTN.FETCH_START, - `event ${PTN.FETCH_START} is not defined` - ); - assert.strictEqual( - events[1].name, PTN.DOMAIN_LOOKUP_START, - `event ${PTN.DOMAIN_LOOKUP_START} is not defined` - ); - assert.strictEqual( - events[2].name, PTN.DOMAIN_LOOKUP_END, - `event ${PTN.DOMAIN_LOOKUP_END} is not defined` - ); - assert.strictEqual( - events[3].name, PTN.CONNECT_START, - `event ${PTN.CONNECT_START} is not defined` - ); - assert.strictEqual( - events[4].name, - PTN.SECURE_CONNECTION_START, - `event ${PTN.SECURE_CONNECTION_START} is not defined` - ); - assert.strictEqual( - events[5].name, PTN.CONNECT_END, - `event ${PTN.CONNECT_END} is not defined` - ); - assert.strictEqual( - events[6].name, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); - assert.strictEqual( - events[7].name, PTN.RESPONSE_START, - `event ${PTN.RESPONSE_START} is not defined` - ); - assert.strictEqual( - events[8].name, PTN.RESPONSE_END, - `event ${PTN.RESPONSE_END} is not defined` - ); + ]); }); it('should NOT clear the resources', () => { @@ -534,6 +463,53 @@ describe('xhr', () => { 'resources have been cleared' ); }); + describe('When making https requests', () => { + beforeEach(done => { + clearData(); + // this won't generate a preflight span + const propagateTraceHeaderCorsUrls = [secureUrl]; + prepareData(done, secureUrl, { + propagateTraceHeaderCorsUrls, + }); + }); + + it('span should have correct events', () => { + const span: tracing.ReadableSpan = exportSpy.args[1][0][0]; + const events = span.events; + testForCorrectEvents(events, [ + EventNames.METHOD_OPEN, + EventNames.METHOD_SEND, + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.SECURE_CONNECTION_START, + PTN.CONNECT_END, + PTN.REQUEST_START, + PTN.RESPONSE_START, + PTN.RESPONSE_END, + EventNames.EVENT_LOAD, + ]); + assert.strictEqual(events.length, 12, 'number of events is wrong'); + }); + + it('preflight request span should have correct events', () => { + const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; + const events = span.events; + assert.strictEqual(events.length, 9, 'number of events is wrong'); + testForCorrectEvents(events, [ + PTN.FETCH_START, + PTN.DOMAIN_LOOKUP_START, + PTN.DOMAIN_LOOKUP_END, + PTN.CONNECT_START, + PTN.SECURE_CONNECTION_START, + PTN.CONNECT_END, + PTN.REQUEST_START, + PTN.RESPONSE_START, + PTN.RESPONSE_END, + ]); + }); + }); describe('AND origin match with window.location', () => { beforeEach(done => { @@ -786,11 +762,11 @@ describe('xhr', () => { assert.strictEqual( events.length, - 12, + 11, `number of events is wrong: ${events.length}` ); assert.strictEqual( - events[8].name, + events[7].name, PTN.REQUEST_START, `event ${PTN.REQUEST_START} is not defined` ); @@ -1008,67 +984,20 @@ describe('xhr', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - assert.strictEqual( - events[0].name, + testForCorrectEvents(events, [ EventNames.METHOD_OPEN, - `event ${EventNames.METHOD_OPEN} is not defined` - ); - assert.strictEqual( - events[1].name, EventNames.METHOD_SEND, - `event ${EventNames.METHOD_SEND} is not defined` - ); - assert.strictEqual( - events[2].name, PTN.FETCH_START, - `event ${PTN.FETCH_START} is not defined` - ); - assert.strictEqual( - events[3].name, PTN.DOMAIN_LOOKUP_START, - `event ${PTN.DOMAIN_LOOKUP_START} is not defined` - ); - assert.strictEqual( - events[4].name, PTN.DOMAIN_LOOKUP_END, - `event ${PTN.DOMAIN_LOOKUP_END} is not defined` - ); - assert.strictEqual( - events[5].name, PTN.CONNECT_START, - `event ${PTN.CONNECT_START} is not defined` - ); - assert.strictEqual( - events[6].name, PTN.SECURE_CONNECTION_START, - `event ${PTN.SECURE_CONNECTION_START} is not defined` - ); - assert.strictEqual( - events[7].name, PTN.CONNECT_END, - `event ${PTN.CONNECT_END} is not defined` - ); - assert.strictEqual( - events[8].name, PTN.REQUEST_START, - `event ${PTN.REQUEST_START} is not defined` - ); - assert.strictEqual( - events[9].name, PTN.RESPONSE_START, - `event ${PTN.RESPONSE_START} is not defined` - ); - assert.strictEqual( - events[10].name, PTN.RESPONSE_END, - `event ${PTN.RESPONSE_END} is not defined` - ); - assert.strictEqual( - events[11].name, EventNames.EVENT_ERROR, - `event ${EventNames.EVENT_ERROR} is not defined` - ); - + ]); assert.strictEqual(events.length, 12, 'number of events is wrong'); }); }); @@ -1123,23 +1052,11 @@ describe('xhr', () => { it('span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - - assert.strictEqual( - events[0].name, + testForCorrectEvents(events, [ EventNames.METHOD_OPEN, - `event ${EventNames.METHOD_OPEN} is not defined` - ); - assert.strictEqual( - events[1].name, EventNames.METHOD_SEND, - `event ${EventNames.METHOD_SEND} is not defined` - ); - assert.strictEqual( - events[2].name, EventNames.EVENT_ERROR, - `event ${EventNames.EVENT_ERROR} is not defined` - ); - + ]); assert.strictEqual(events.length, 3, 'number of events is wrong'); }); }); @@ -1201,23 +1118,11 @@ describe('xhr', () => { it('span should have correct events', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - - assert.strictEqual( - events[0].name, + testForCorrectEvents(events, [ EventNames.METHOD_OPEN, - `event ${EventNames.METHOD_OPEN} is not defined` - ); - assert.strictEqual( - events[1].name, EventNames.METHOD_SEND, - `event ${EventNames.METHOD_SEND} is not defined` - ); - assert.strictEqual( - events[2].name, EventNames.EVENT_ABORT, - `event ${EventNames.EVENT_ABORT} is not defined` - ); - + ]); assert.strictEqual(events.length, 3, 'number of events is wrong'); }); }); @@ -1280,22 +1185,11 @@ describe('xhr', () => { const span: tracing.ReadableSpan = exportSpy.args[0][0][0]; const events = span.events; - assert.strictEqual( - events[0].name, + testForCorrectEvents(events, [ EventNames.METHOD_OPEN, - `event ${EventNames.METHOD_OPEN} is not defined` - ); - assert.strictEqual( - events[1].name, EventNames.METHOD_SEND, - `event ${EventNames.METHOD_SEND} is not defined` - ); - assert.strictEqual( - events[2].name, EventNames.EVENT_TIMEOUT, - `event ${EventNames.EVENT_TIMEOUT} is not defined` - ); - + ]); assert.strictEqual(events.length, 3, 'number of events is wrong'); }); }); diff --git a/pkgs/propagators/b3/.eslintrc.js b/pkgs/propagators/b3/.eslintrc.js index e41d9a929..c05408904 100644 --- a/pkgs/propagators/b3/.eslintrc.js +++ b/pkgs/propagators/b3/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/pkgs/propagators/b3/package.json b/pkgs/propagators/b3/package.json index 7c6a0fc1b..73d8e3fea 100644 --- a/pkgs/propagators/b3/package.json +++ b/pkgs/propagators/b3/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-propagator-b3", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry B3 propagator provides context propagation for systems that are using the B3 header format", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -8,17 +8,17 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.browser.conf.js --single-run", "test:debug": "nyc karma start ./karma.debug.conf.js --wait", @@ -57,8 +57,7 @@ "access": "public" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2" }, "peerDependencies": { "@opentelemetry/sandbox-api": "1.4.1" @@ -70,12 +69,14 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -93,6 +94,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", diff --git a/pkgs/resources/.eslintrc.js b/pkgs/resources/.eslintrc.js index 9dfe62f9b..36847df9f 100644 --- a/pkgs/resources/.eslintrc.js +++ b/pkgs/resources/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/pkgs/resources/package.json b/pkgs/resources/package.json index 33feab220..b25f8d147 100644 --- a/pkgs/resources/package.json +++ b/pkgs/resources/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-resources", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry SDK resources", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,25 +14,25 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "codecov:webworker": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", "test:debug": "nyc karma start ./karma.debug.conf.js --wait", "test:node": "nyc ts-mocha -p tsconfig.json 'test/**/*.test.ts' --exclude 'test/browser/**/*.ts'", - "test:webworker": "nyc karma start karma.worker.js --single-run", + "test:webworker": "", "version": "node ../../scripts/version-update.js", "watch": "npm run version && tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json" }, @@ -73,12 +73,14 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -87,6 +89,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -94,9 +97,10 @@ "karma-typescript": "^5.5.3", "karma-webpack": "^4.0.2", "mocha": "10.0.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -113,9 +117,8 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-semantic-conventions": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-resources", "sideEffects": false diff --git a/pkgs/resources/src/detect-resources.ts b/pkgs/resources/src/detect-resources.ts index d66450d67..3f0ba37f2 100644 --- a/pkgs/resources/src/detect-resources.ts +++ b/pkgs/resources/src/detect-resources.ts @@ -26,7 +26,7 @@ import { IResource } from './IResource'; * does not resolve until all the underlying detectors have resolved, unlike * detectResourcesSync. * - * @deprecated use detectResourceSync() instead. + * @deprecated use detectResourcesSync() instead. * @param config Configuration for resource detection */ export const detectResources = async ( diff --git a/pkgs/sdk/logs/.eslintrc.js b/pkgs/sdk/logs/.eslintrc.js index 0c986a856..fc24af194 100644 --- a/pkgs/sdk/logs/.eslintrc.js +++ b/pkgs/sdk/logs/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { mocha: true, node: true, }, - ...require('../../../eslint.config.js'), + ...require('../../../eslint.base.js'), }; diff --git a/pkgs/sdk/logs/package.json b/pkgs/sdk/logs/package.json index 9a7303214..c61b725a7 100644 --- a/pkgs/sdk/logs/package.json +++ b/pkgs/sdk/logs/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-sdk-logs", - "version": "0.40.0", + "version": "0.41.2", "publishConfig": { "access": "public" }, @@ -29,17 +29,17 @@ "node": ">=14" }, "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", @@ -74,22 +74,25 @@ "sideEffects": false, "peerDependencies": { "@opentelemetry/sandbox-api": "1.4.1", - "@opentelemetry/sandbox-api-logs": "0.40.0" + "@opentelemetry/sandbox-api-logs": "0.41.2" }, "devDependencies": { + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", - "@opentelemetry/sandbox-api-logs": "0.40.0", + "@opentelemetry/sandbox-api-logs": "0.41.2", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -98,6 +101,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -107,6 +111,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -115,11 +120,12 @@ "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", "typescript": "^4.9.5", - "webpack": "^4.46.0" + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-resources": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-resources": "1.15.2" } } \ No newline at end of file diff --git a/pkgs/sdk/metrics/.eslintrc.js b/pkgs/sdk/metrics/.eslintrc.js index f756f4488..9baf1b495 100644 --- a/pkgs/sdk/metrics/.eslintrc.js +++ b/pkgs/sdk/metrics/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "node": true }, - ...require('../../../eslint.config.js') + ...require('../../../eslint.base.js') } diff --git a/pkgs/sdk/metrics/package.json b/pkgs/sdk/metrics/package.json index 1e5a4477a..637f64d39 100644 --- a/pkgs/sdk/metrics/package.json +++ b/pkgs/sdk/metrics/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-sdk-metrics", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry metrics SDK", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -8,17 +8,17 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run test -- --watch-extensions ts --watch", "tdd:browser": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", @@ -59,6 +59,7 @@ "access": "public" }, "devDependencies": { + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", "@types/jquery": "^3.5.14", "@types/lodash.merge": "4.6.7", @@ -66,12 +67,14 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -80,6 +83,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -89,6 +93,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -97,16 +102,17 @@ "typedoc-plugin-missing-exports": "^1.0.0", "typedoc-plugin-resolve-crossmodule-references": "^0.3.3", "typescript": "^4.9.5", - "webpack": "^4.46.0" + "webpack": "^4.46.0", + "webpack-cli": "4.10.0", + "webpack-merge": "5.9.0" }, "peerDependencies": { "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-resources": "1.14.0", - "lodash.merge": "^4.6.2", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-resources": "1.15.2", + "lodash.merge": "^4.6.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/sdk-metrics", "sideEffects": false diff --git a/pkgs/sdk/metrics/src/Instruments.ts b/pkgs/sdk/metrics/src/Instruments.ts index 1b6dfe930..dc517e5cb 100644 --- a/pkgs/sdk/metrics/src/Instruments.ts +++ b/pkgs/sdk/metrics/src/Instruments.ts @@ -48,6 +48,12 @@ export class SyncInstrument { attributes: MetricAttributes = {}, context: Context = contextApi.active() ) { + if (typeof value !== 'number') { + diag.warn( + `non-number value provided to metric ${this._descriptor.name}: ${value}` + ); + return; + } if ( this._descriptor.valueType === ValueType.INT && !Number.isInteger(value) @@ -56,6 +62,10 @@ export class SyncInstrument { `INT value type cannot accept a floating-point value for ${this._descriptor.name}, ignoring the fractional digits.` ); value = Math.trunc(value); + // ignore non-finite values. + if (!Number.isInteger(value)) { + return; + } } this._writableMetricStorage.record( value, diff --git a/pkgs/sdk/metrics/src/ObservableResult.ts b/pkgs/sdk/metrics/src/ObservableResult.ts index 58e31d3d2..fb8f72dfb 100644 --- a/pkgs/sdk/metrics/src/ObservableResult.ts +++ b/pkgs/sdk/metrics/src/ObservableResult.ts @@ -41,6 +41,12 @@ export class ObservableResultImpl implements ObservableResult { * Observe a measurement of the value associated with the given attributes. */ observe(value: number, attributes: MetricAttributes = {}): void { + if (typeof value !== 'number') { + diag.warn( + `non-number value provided to metric ${this._descriptor.name}: ${value}` + ); + return; + } if ( this._descriptor.valueType === ValueType.INT && !Number.isInteger(value) @@ -49,6 +55,10 @@ export class ObservableResultImpl implements ObservableResult { `INT value type cannot accept a floating-point value for ${this._descriptor.name}, ignoring the fractional digits.` ); value = Math.trunc(value); + // ignore non-finite values. + if (!Number.isInteger(value)) { + return; + } } this._buffer.set(attributes, value); } @@ -79,6 +89,12 @@ export class BatchObservableResultImpl implements BatchObservableResult { map = new AttributeHashMap(); this._buffer.set(metric, map); } + if (typeof value !== 'number') { + diag.warn( + `non-number value provided to metric ${metric._descriptor.name}: ${value}` + ); + return; + } if ( metric._descriptor.valueType === ValueType.INT && !Number.isInteger(value) @@ -87,6 +103,10 @@ export class BatchObservableResultImpl implements BatchObservableResult { `INT value type cannot accept a floating-point value for ${metric._descriptor.name}, ignoring the fractional digits.` ); value = Math.trunc(value); + // ignore non-finite values. + if (!Number.isInteger(value)) { + return; + } } map.set(attributes, value); } diff --git a/pkgs/sdk/metrics/src/aggregator/ExponentialHistogram.ts b/pkgs/sdk/metrics/src/aggregator/ExponentialHistogram.ts index 11104d9e5..a93ef9e0c 100644 --- a/pkgs/sdk/metrics/src/aggregator/ExponentialHistogram.ts +++ b/pkgs/sdk/metrics/src/aggregator/ExponentialHistogram.ts @@ -213,32 +213,33 @@ export class ExponentialHistogramAccumulation implements Accumulation { } /** - * merge combines data from other into self - * @param {ExponentialHistogramAccumulation} other + * merge combines data from previous value into self + * @param {ExponentialHistogramAccumulation} previous */ - merge(other: ExponentialHistogramAccumulation) { + merge(previous: ExponentialHistogramAccumulation) { if (this._count === 0) { - this._min = other.min; - this._max = other.max; - } else if (other.count !== 0) { - if (other.min < this.min) { - this._min = other.min; + this._min = previous.min; + this._max = previous.max; + } else if (previous.count !== 0) { + if (previous.min < this.min) { + this._min = previous.min; } - if (other.max > this.max) { - this._max = other.max; + if (previous.max > this.max) { + this._max = previous.max; } } - this._sum += other.sum; - this._count += other.count; - this._zeroCount += other.zeroCount; + this.startTime = previous.startTime; + this._sum += previous.sum; + this._count += previous.count; + this._zeroCount += previous.zeroCount; - const minScale = this._minScale(other); + const minScale = this._minScale(previous); this._downscale(this.scale - minScale); - this._mergeBuckets(this.positive, other, other.positive, minScale); - this._mergeBuckets(this.negative, other, other.negative, minScale); + this._mergeBuckets(this.positive, previous, previous.positive, minScale); + this._mergeBuckets(this.negative, previous, previous.negative, minScale); } /** diff --git a/pkgs/sdk/metrics/src/export/MetricReader.ts b/pkgs/sdk/metrics/src/export/MetricReader.ts index a7b2ea97a..ad2ab75e6 100644 --- a/pkgs/sdk/metrics/src/export/MetricReader.ts +++ b/pkgs/sdk/metrics/src/export/MetricReader.ts @@ -18,7 +18,7 @@ import * as api from '@opentelemetry/sandbox-api'; import { AggregationTemporality } from './AggregationTemporality'; import { MetricProducer } from './MetricProducer'; import { CollectionResult } from './MetricData'; -import { callWithTimeout } from '../utils'; +import { FlatMap, callWithTimeout } from '../utils'; import { InstrumentType } from '../InstrumentDescriptor'; import { CollectionOptions, @@ -45,6 +45,13 @@ export interface MetricReaderOptions { * not configured, cumulative is used for all instruments. */ aggregationTemporalitySelector?: AggregationTemporalitySelector; + /** + * **Note, this option is experimental**. Additional MetricProducers to use as a source of + * aggregated metric data in addition to the SDK's metric data. The resource returned by + * these MetricProducers is ignored; the SDK's resource will be used instead. + * @experimental + */ + metricProducers?: MetricProducer[]; } /** @@ -55,8 +62,10 @@ export abstract class MetricReader { // Tracks the shutdown state. // TODO: use BindOncePromise here once a new version of @opentelemetry/core is available. private _shutdown = false; - // MetricProducer used by this instance. - private _metricProducer?: MetricProducer; + // Additional MetricProducers which will be combined with the SDK's output + private _metricProducers: MetricProducer[]; + // MetricProducer used by this instance which produces metrics from the SDK + private _sdkMetricProducer?: MetricProducer; private readonly _aggregationTemporalitySelector: AggregationTemporalitySelector; private readonly _aggregationSelector: AggregationSelector; @@ -66,20 +75,26 @@ export abstract class MetricReader { this._aggregationTemporalitySelector = options?.aggregationTemporalitySelector ?? DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR; + this._metricProducers = options?.metricProducers ?? []; } /** - * Set the {@link MetricProducer} used by this instance. + * Set the {@link MetricProducer} used by this instance. **This should only be called by the + * SDK and should be considered internal.** * + * To add additional {@link MetricProducer}s to a {@link MetricReader}, pass them to the + * constructor as {@link MetricReaderOptions.metricProducers}. + * + * @internal * @param metricProducer */ setMetricProducer(metricProducer: MetricProducer) { - if (this._metricProducer) { + if (this._sdkMetricProducer) { throw new Error( 'MetricReader can not be bound to a MeterProvider again.' ); } - this._metricProducer = metricProducer; + this._sdkMetricProducer = metricProducer; this.onInitialized(); } @@ -130,7 +145,7 @@ export abstract class MetricReader { * Collect all metrics from the associated {@link MetricProducer} */ async collect(options?: CollectionOptions): Promise { - if (this._metricProducer === undefined) { + if (this._sdkMetricProducer === undefined) { throw new Error('MetricReader is not bound to a MetricProducer'); } @@ -139,9 +154,37 @@ export abstract class MetricReader { throw new Error('MetricReader is shutdown'); } - return this._metricProducer.collect({ - timeoutMillis: options?.timeoutMillis, - }); + const [sdkCollectionResults, ...additionalCollectionResults] = + await Promise.all([ + this._sdkMetricProducer.collect({ + timeoutMillis: options?.timeoutMillis, + }), + ...this._metricProducers.map(producer => + producer.collect({ + timeoutMillis: options?.timeoutMillis, + }) + ), + ]); + + // Merge the results, keeping the SDK's Resource + const errors = sdkCollectionResults.errors.concat( + FlatMap(additionalCollectionResults, result => result.errors) + ); + const resource = sdkCollectionResults.resourceMetrics.resource; + const scopeMetrics = + sdkCollectionResults.resourceMetrics.scopeMetrics.concat( + FlatMap( + additionalCollectionResults, + result => result.resourceMetrics.scopeMetrics + ) + ); + return { + resourceMetrics: { + resource, + scopeMetrics, + }, + errors, + }; } /** diff --git a/pkgs/sdk/metrics/src/index.ts b/pkgs/sdk/metrics/src/index.ts index 4760da3cc..c9623707f 100644 --- a/pkgs/sdk/metrics/src/index.ts +++ b/pkgs/sdk/metrics/src/index.ts @@ -54,6 +54,8 @@ export { InMemoryMetricExporter } from './export/InMemoryMetricExporter'; export { ConsoleMetricExporter } from './export/ConsoleMetricExporter'; +export { MetricCollectOptions, MetricProducer } from './export/MetricProducer'; + export { InstrumentDescriptor, InstrumentType } from './InstrumentDescriptor'; export { MeterProvider, MeterProviderOptions } from './MeterProvider'; diff --git a/pkgs/sdk/metrics/test/Instruments.test.ts b/pkgs/sdk/metrics/test/Instruments.test.ts index 42ce7a218..5be049d6d 100644 --- a/pkgs/sdk/metrics/test/Instruments.test.ts +++ b/pkgs/sdk/metrics/test/Instruments.test.ts @@ -74,9 +74,14 @@ describe('Instruments', () => { }); counter.add(1); - // floating-point value should be trunc-ed. - counter.add(1.1); counter.add(1, { foo: 'bar' }); + // floating-point values should be trunc-ed. + counter.add(1.1); + // non-finite/non-number values should be ignored. + counter.add(Infinity); + counter.add(-Infinity); + counter.add(NaN); + counter.add('1' as any); await validateExport(cumulativeReader, { descriptor: { name: 'test', @@ -124,10 +129,13 @@ describe('Instruments', () => { }); counter.add(1); - // add floating-point value. - counter.add(1.1); counter.add(1, { foo: 'bar' }); + // add floating-point values. + counter.add(1.1); counter.add(1.2, { foo: 'bar' }); + // non-number values should be ignored. + counter.add('1' as any); + await validateExport(cumulativeReader, { dataPointType: DataPointType.SUM, isMonotonic: true, @@ -197,6 +205,13 @@ describe('Instruments', () => { upDownCounter.add(-1.1); upDownCounter.add(4, { foo: 'bar' }); upDownCounter.add(1.1, { foo: 'bar' }); + + // non-finite/non-number values should be ignored. + upDownCounter.add(Infinity); + upDownCounter.add(-Infinity); + upDownCounter.add(NaN); + upDownCounter.add('1' as any); + await validateExport(deltaReader, { descriptor: { name: 'test', @@ -230,6 +245,8 @@ describe('Instruments', () => { upDownCounter.add(-1.1); upDownCounter.add(4, { foo: 'bar' }); upDownCounter.add(1.1, { foo: 'bar' }); + // non-number values should be ignored. + upDownCounter.add('1' as any); await validateExport(deltaReader, { dataPointType: DataPointType.SUM, isMonotonic: false, @@ -283,6 +300,12 @@ describe('Instruments', () => { histogram.record(0.1); histogram.record(100, { foo: 'bar' }); histogram.record(0.1, { foo: 'bar' }); + // non-finite/non-number values should be ignored. + histogram.record(Infinity); + histogram.record(-Infinity); + histogram.record(NaN); + histogram.record('1' as any); + await validateExport(deltaReader, { descriptor: { name: 'test', @@ -427,6 +450,9 @@ describe('Instruments', () => { histogram.record(0.1); histogram.record(100, { foo: 'bar' }); histogram.record(0.1, { foo: 'bar' }); + // non-number values should be ignored. + histogram.record('1' as any); + await validateExport(deltaReader, { dataPointType: DataPointType.HISTOGRAM, dataPoints: [ diff --git a/pkgs/sdk/metrics/test/ObservableResult.test.ts b/pkgs/sdk/metrics/test/ObservableResult.test.ts index 0308b21e1..dc5698208 100644 --- a/pkgs/sdk/metrics/test/ObservableResult.test.ts +++ b/pkgs/sdk/metrics/test/ObservableResult.test.ts @@ -63,8 +63,27 @@ describe('ObservableResultImpl', () => { valueType: ValueType.INT, }); observableResult.observe(1.1, {}); + // should ignore non-finite/non-number values. + observableResult.observe(Infinity, {}); + observableResult.observe(-Infinity, {}); + observableResult.observe(NaN, {}); + assert.strictEqual(observableResult._buffer.get({}), 1); }); + + it('should ignore non-number values', () => { + const observableResult = new ObservableResultImpl({ + name: 'test', + description: '', + type: InstrumentType.COUNTER, + unit: '', + valueType: ValueType.INT, + }); + + observableResult.observe('1' as any, {}); + + assert.strictEqual(observableResult._buffer.get({}), undefined); + }); }); }); @@ -126,7 +145,34 @@ describe('BatchObservableResultImpl', () => { ); observableResult.observe(observable, 1.1, {}); + // should ignore non-finite/non-number values. + observableResult.observe(observable, Infinity, {}); + observableResult.observe(observable, -Infinity, {}); + observableResult.observe(observable, NaN, {}); assert.strictEqual(observableResult._buffer.get(observable)?.get({}), 1); }); + + it('should ignore invalid values', () => { + const observableResult = new BatchObservableResultImpl(); + const observable = new ObservableInstrument( + { + name: 'test', + description: '', + type: InstrumentType.COUNTER, + unit: '', + valueType: ValueType.INT, + }, + [], + new ObservableRegistry() + ); + + observableResult.observe(observable, '1' as any, {}); + observableResult.observe(/** invalid observable */ {} as any, 1, {}); + assert.strictEqual( + observableResult._buffer.get(observable)!.get({}), + undefined + ); + assert.strictEqual(observableResult._buffer.size, 1); + }); }); }); diff --git a/pkgs/sdk/metrics/test/aggregator/ExponentialHistogram.test.ts b/pkgs/sdk/metrics/test/aggregator/ExponentialHistogram.test.ts index 1dc1017ae..ca577e303 100644 --- a/pkgs/sdk/metrics/test/aggregator/ExponentialHistogram.test.ts +++ b/pkgs/sdk/metrics/test/aggregator/ExponentialHistogram.test.ts @@ -574,6 +574,15 @@ describe('ExponentialHistogramAggregation', () => { assert.deepStrictEqual(acc0.toPointValue(), acc0Snapshot); assert.deepStrictEqual(acc1.toPointValue(), acc1Snapshot); }); + + it("keeps the previous point's startTime", () => { + const agg = new ExponentialHistogramAggregator(4, true); + const acc0 = agg.createAccumulation([0, 0]); + const acc1 = agg.createAccumulation([3, 0]); + + const result = agg.merge(acc0, acc1); + assert.strictEqual(result.startTime, acc0.startTime); + }); }); describe('diff', () => { diff --git a/pkgs/sdk/metrics/test/export/MetricReader.test.ts b/pkgs/sdk/metrics/test/export/MetricReader.test.ts index 297622982..639f812a1 100644 --- a/pkgs/sdk/metrics/test/export/MetricReader.test.ts +++ b/pkgs/sdk/metrics/test/export/MetricReader.test.ts @@ -20,7 +20,13 @@ import { MeterProvider } from '../../src/MeterProvider'; import { assertRejects } from '../test-utils'; import { emptyResourceMetrics, TestMetricProducer } from './TestMetricProducer'; import { TestMetricReader } from './TestMetricReader'; -import { Aggregation, AggregationTemporality } from '../../src'; +import { + Aggregation, + AggregationTemporality, + DataPointType, + InstrumentType, + ScopeMetrics, +} from '../../src'; import { DEFAULT_AGGREGATION_SELECTOR, DEFAULT_AGGREGATION_TEMPORALITY_SELECTOR, @@ -29,6 +35,39 @@ import { assertAggregationSelector, assertAggregationTemporalitySelector, } from './utils'; +import { defaultResource } from '../util'; +import { ValueType } from '@opentelemetry/sandbox-api'; +import { Resource } from '@opentelemetry/sandbox-resources'; + +const testScopeMetrics: ScopeMetrics[] = [ + { + scope: { + name: 'additionalMetricProducerMetrics', + }, + metrics: [ + { + aggregationTemporality: AggregationTemporality.CUMULATIVE, + dataPointType: DataPointType.SUM, + dataPoints: [ + { + attributes: {}, + value: 1, + startTime: [0, 0], + endTime: [1, 0], + }, + ], + descriptor: { + name: 'additionalCounter', + unit: '', + type: InstrumentType.COUNTER, + description: '', + valueType: ValueType.INT, + }, + isMonotonic: true, + }, + ], + }, +]; describe('MetricReader', () => { describe('setMetricProducer', () => { @@ -83,20 +122,91 @@ describe('MetricReader', () => { assertRejects(reader.collect(), /MetricReader is shutdown/); }); - it('should call MetricProduce.collect with timeout', async () => { + it('should call MetricProducer.collect with timeout', async () => { const reader = new TestMetricReader(); const producer = new TestMetricProducer(); reader.setMetricProducer(producer); - const collectStub = sinon.stub(producer, 'collect'); + const collectSpy = sinon.spy(producer, 'collect'); await reader.collect({ timeoutMillis: 20 }); - assert(collectStub.calledOnce); - const args = collectStub.args[0]; + assert(collectSpy.calledOnce); + const args = collectSpy.args[0]; assert.deepStrictEqual(args, [{ timeoutMillis: 20 }]); await reader.shutdown(); }); + + it('should collect metrics from the SDK and the additional metricProducers', async () => { + const meterProvider = new MeterProvider({ resource: defaultResource }); + const additionalProducer = new TestMetricProducer({ + resourceMetrics: { + resource: new Resource({ + shouldBeDiscarded: 'should-be-discarded', + }), + scopeMetrics: testScopeMetrics, + }, + }); + const reader = new TestMetricReader({ + metricProducers: [additionalProducer], + }); + meterProvider.addMetricReader(reader); + + // Make a measurement + meterProvider + .getMeter('someSdkMetrics') + .createCounter('sdkCounter') + .add(5, { hello: 'world' }); + const collectionResult = await reader.collect(); + + assert.strictEqual(collectionResult.errors.length, 0); + // Should keep the SDK's Resource only + assert.deepStrictEqual( + collectionResult.resourceMetrics.resource, + defaultResource + ); + assert.strictEqual( + collectionResult.resourceMetrics.scopeMetrics.length, + 2 + ); + const [sdkScopeMetrics, additionalScopeMetrics] = + collectionResult.resourceMetrics.scopeMetrics; + + assert.strictEqual(sdkScopeMetrics.scope.name, 'someSdkMetrics'); + assert.strictEqual( + additionalScopeMetrics.scope.name, + 'additionalMetricProducerMetrics' + ); + + await reader.shutdown(); + }); + + it('should merge the errors from the SDK and all metricProducers', async () => { + const meterProvider = new MeterProvider(); + const reader = new TestMetricReader({ + metricProducers: [ + new TestMetricProducer({ errors: ['err1'] }), + new TestMetricProducer({ errors: ['err2'] }), + ], + }); + meterProvider.addMetricReader(reader); + + // Provide a callback throwing an error too + meterProvider + .getMeter('someSdkMetrics') + .createObservableCounter('sdkCounter') + .addCallback(result => { + throw 'errsdk'; + }); + const collectionResult = await reader.collect(); + + assert.deepStrictEqual(collectionResult.errors, [ + 'errsdk', + 'err1', + 'err2', + ]); + await reader.shutdown(); + }); }); describe('selectAggregation', () => { diff --git a/pkgs/sdk/metrics/test/export/TestMetricProducer.ts b/pkgs/sdk/metrics/test/export/TestMetricProducer.ts index 29137d62a..d4865724c 100644 --- a/pkgs/sdk/metrics/test/export/TestMetricProducer.ts +++ b/pkgs/sdk/metrics/test/export/TestMetricProducer.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CollectionResult } from '../../src/export/MetricData'; +import { CollectionResult, ResourceMetrics } from '../../src/export/MetricData'; import { MetricProducer } from '../../src/export/MetricProducer'; import { defaultResource } from '../util'; @@ -24,10 +24,21 @@ export const emptyResourceMetrics = { }; export class TestMetricProducer implements MetricProducer { + private resourceMetrics: ResourceMetrics; + private errors: unknown[]; + + constructor(params?: { + resourceMetrics?: ResourceMetrics; + errors?: unknown[]; + }) { + this.resourceMetrics = params?.resourceMetrics ?? emptyResourceMetrics; + this.errors = params?.errors ?? []; + } + async collect(): Promise { return { - resourceMetrics: { resource: defaultResource, scopeMetrics: [] }, - errors: [], + resourceMetrics: this.resourceMetrics, + errors: this.errors, }; } } diff --git a/pkgs/sdk/metrics/test/export/TestMetricReader.ts b/pkgs/sdk/metrics/test/export/TestMetricReader.ts index 61727322a..46fd41c04 100644 --- a/pkgs/sdk/metrics/test/export/TestMetricReader.ts +++ b/pkgs/sdk/metrics/test/export/TestMetricReader.ts @@ -31,7 +31,7 @@ export class TestMetricReader extends MetricReader { } getMetricCollector(): MetricCollector { - return this['_metricProducer'] as MetricCollector; + return this['_sdkMetricProducer'] as MetricCollector; } } diff --git a/pkgs/sdk/metrics/test/regression/cumulative-exponential-histogram.test.ts b/pkgs/sdk/metrics/test/regression/cumulative-exponential-histogram.test.ts new file mode 100644 index 000000000..79dcfc434 --- /dev/null +++ b/pkgs/sdk/metrics/test/regression/cumulative-exponential-histogram.test.ts @@ -0,0 +1,90 @@ +/* + * Copyright The OpenTelemetry Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import * as assert from 'assert'; +import * as sinon from 'sinon'; +import { + Aggregation, + AggregationTemporality, + InstrumentType, + MeterProvider, + MetricReader, +} from '../../src'; +import { TestMetricReader } from '../export/TestMetricReader'; + +describe('cumulative-exponential-histogram', () => { + let clock: sinon.SinonFakeTimers; + + beforeEach(() => { + clock = sinon.useFakeTimers(); + }); + afterEach(() => { + sinon.restore(); + }); + + it('Cumulative Histogram should have the same startTime every collection', async () => { + // Works fine and passes + await doTest(Aggregation.Histogram()); + }); + + it('Cumulative ExponentialHistogram should have the same startTime every collection', async () => { + // Fails + await doTest(Aggregation.ExponentialHistogram()); + }); + + const doTest = async (histogramAggregation: Aggregation) => { + const meterProvider = new MeterProvider(); + const reader = new TestMetricReader({ + aggregationTemporalitySelector() { + return AggregationTemporality.CUMULATIVE; + }, + aggregationSelector(type) { + return type === InstrumentType.HISTOGRAM + ? histogramAggregation + : Aggregation.Default(); + }, + }); + + meterProvider.addMetricReader(reader); + const meter = meterProvider.getMeter('my-meter'); + const hist = meter.createHistogram('testhist'); + + hist.record(1); + + const resourceMetrics1 = await collectNoErrors(reader); + const dataPoint1 = + resourceMetrics1.scopeMetrics[0].metrics[0].dataPoints[0]; + + clock.tick(1000); + hist.record(2); + + const resourceMetrics2 = await collectNoErrors(reader); + const dataPoint2 = + resourceMetrics2.scopeMetrics[0].metrics[0].dataPoints[0]; + + assert.deepStrictEqual( + dataPoint1.startTime, + dataPoint2.startTime, + 'The start time should be the same across cumulative collections' + ); + }; + + const collectNoErrors = async (reader: MetricReader) => { + const { resourceMetrics, errors } = await reader.collect(); + assert.strictEqual(errors.length, 0); + return resourceMetrics; + }; +}); diff --git a/pkgs/sdk/trace/base/.eslintrc.js b/pkgs/sdk/trace/base/.eslintrc.js index a56ddd7a7..c3bb93bde 100644 --- a/pkgs/sdk/trace/base/.eslintrc.js +++ b/pkgs/sdk/trace/base/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../../../eslint.config.js') + ...require('../../../../eslint.base.js') } diff --git a/pkgs/sdk/trace/base/package.json b/pkgs/sdk/trace/base/package.json index bff03831e..a2c271a46 100644 --- a/pkgs/sdk/trace/base/package.json +++ b/pkgs/sdk/trace/base/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-sdk-trace-base", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry Tracing", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -14,18 +14,18 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "codecov:webworker": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "npm run tdd:node", "tdd:browser": "karma start", "tdd:node": "npm run test -- --watch-extensions ts --watch", @@ -33,7 +33,7 @@ "test:browser": "nyc karma start ./karma.conf.js --single-run", "test:debug": "nyc karma start ./karma.debug.conf.js --wait", "test:node": "", - "test:webworker": "nyc karma start karma.worker.js --single-run", + "test:webworker": "", "version": "node ../../../../scripts/version-update.js", "watch": "npm run version && tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json" }, @@ -75,12 +75,14 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -89,6 +91,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-mocha": "^2.0.1", "karma-mocha-webworker": "1.3.0", @@ -98,6 +101,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -112,10 +116,9 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-resources": "1.14.0", - "@opentelemetry/sandbox-semantic-conventions": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-resources": "1.15.2", + "@opentelemetry/sandbox-semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-base", "sideEffects": false diff --git a/pkgs/sdk/trace/web/.eslintrc.js b/pkgs/sdk/trace/web/.eslintrc.js index d8a963f4e..18b4667aa 100644 --- a/pkgs/sdk/trace/web/.eslintrc.js +++ b/pkgs/sdk/trace/web/.eslintrc.js @@ -3,5 +3,5 @@ module.exports = { "mocha": true, "browser": true, }, - ...require('../../../../eslint.config.js') + ...require('../../../../eslint.base.js') } diff --git a/pkgs/sdk/trace/web/package.json b/pkgs/sdk/trace/web/package.json index 539e7b791..ab7ae169a 100644 --- a/pkgs/sdk/trace/web/package.json +++ b/pkgs/sdk/trace/web/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-sdk-trace-web", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry Web Tracer", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -8,24 +8,24 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "codecov:browser": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", "codecov:webworker": "nyc report --reporter=json && codecov -f coverage/*.json -p ../../", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "tdd": "karma start", "test": "npm run test:node && npm run test:browser && npm run test:webworker", "test:browser": "nyc karma start ./karma.conf.js --single-run", "test:debug": "nyc karma start ./karma.debug.conf.js --wait", "test:node": "", - "test:webworker": "nyc karma start karma.worker.js --single-run", + "test:webworker": "", "version": "node ../../../../scripts/version-update.js", "watch": "npm run version && tsc --build --watch tsconfig.json tsconfig.esm.json tsconfig.esnext.json" }, @@ -60,23 +60,24 @@ "access": "public" }, "devDependencies": { - "@babel/core": "7.22.5", + "@babel/core": "7.22.10", "@opentelemetry/sandbox-api": "1.4.1", - "@opentelemetry/sandbox-context-zone": "1.14.0", - "@opentelemetry/sandbox-propagator-b3": "1.14.0", - "@opentelemetry/sandbox-resources": "1.14.0", + "@opentelemetry/sandbox-context-zone": "1.15.2", + "@opentelemetry/sandbox-propagator-b3": "1.15.2", + "@opentelemetry/sandbox-resources": "1.15.2", "@types/jquery": "^3.5.14", "@types/mocha": "^10.0.0", "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -85,6 +86,7 @@ "istanbul-instrumenter-loader": "3.0.1", "karma": "6.3.16", "karma-chrome-launcher": "3.1.0", + "karma-coverage": "2.2.1", "karma-coverage-istanbul-reporter": "3.0.3", "karma-jquery": "0.2.4", "karma-mocha": "^2.0.1", @@ -95,6 +97,7 @@ "mocha": "10.0.0", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -111,10 +114,9 @@ "@opentelemetry/sandbox-api": "1.4.1" }, "dependencies": { - "@opentelemetry/sandbox-core": "1.14.0", - "@opentelemetry/sandbox-sdk-trace-base": "1.14.0", - "@opentelemetry/sandbox-semantic-conventions": "1.14.0", - "tslib": "^2.3.1" + "@opentelemetry/sandbox-core": "1.15.2", + "@opentelemetry/sandbox-sdk-trace-base": "1.15.2", + "@opentelemetry/sandbox-semantic-conventions": "1.15.2" }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-web", "sideEffects": false diff --git a/pkgs/sdk/trace/web/src/utils.ts b/pkgs/sdk/trace/web/src/utils.ts index 4dd2710b0..c675ddaab 100644 --- a/pkgs/sdk/trace/web/src/utils.ts +++ b/pkgs/sdk/trace/web/src/utils.ts @@ -85,7 +85,12 @@ export function addSpanNetworkEvents( addSpanNetworkEvent(span, PTN.DOMAIN_LOOKUP_START, resource); addSpanNetworkEvent(span, PTN.DOMAIN_LOOKUP_END, resource); addSpanNetworkEvent(span, PTN.CONNECT_START, resource); - addSpanNetworkEvent(span, PTN.SECURE_CONNECTION_START, resource); + if ( + hasKey(resource as PerformanceResourceTiming, 'name') && + (resource as PerformanceResourceTiming)['name'].startsWith('https:') + ) { + addSpanNetworkEvent(span, PTN.SECURE_CONNECTION_START, resource); + } addSpanNetworkEvent(span, PTN.CONNECT_END, resource); addSpanNetworkEvent(span, PTN.REQUEST_START, resource); addSpanNetworkEvent(span, PTN.RESPONSE_START, resource); diff --git a/pkgs/sdk/trace/web/test/utils.test.ts b/pkgs/sdk/trace/web/test/utils.test.ts index 16abebf63..eb56f46e0 100644 --- a/pkgs/sdk/trace/web/test/utils.test.ts +++ b/pkgs/sdk/trace/web/test/utils.test.ts @@ -116,9 +116,16 @@ describe('utils', () => { assert.strictEqual(addEventSpy.callCount, 0); addSpanNetworkEvents(span, entries); - - assert.strictEqual(addEventSpy.callCount, 9); assert.strictEqual(setAttributeSpy.callCount, 2); + //secure connect start should not be added to non-https resource + assert.strictEqual(addEventSpy.callCount, 8); + //secure connect start should be added to an https resource + addEventSpy.resetHistory(); + addSpanNetworkEvents(span, { + ...entries, + name: 'https://foo', + } as PerformanceResourceTiming); + assert.strictEqual(addEventSpy.callCount, 9); }); it('should only include encoded size when content encoding is being used', () => { const addEventSpy = sinon.spy(); diff --git a/pkgs/semantic-conventions/.eslintrc.js b/pkgs/semantic-conventions/.eslintrc.js index 9dfe62f9b..36847df9f 100644 --- a/pkgs/semantic-conventions/.eslintrc.js +++ b/pkgs/semantic-conventions/.eslintrc.js @@ -5,5 +5,5 @@ module.exports = { "node": true, "browser": true }, - ...require('../../eslint.config.js') + ...require('../../eslint.base.js') } diff --git a/pkgs/semantic-conventions/package.json b/pkgs/semantic-conventions/package.json index 3ebbeb037..cf3814c45 100644 --- a/pkgs/semantic-conventions/package.json +++ b/pkgs/semantic-conventions/package.json @@ -1,6 +1,6 @@ { "name": "@opentelemetry/sandbox-semantic-conventions", - "version": "1.14.0", + "version": "1.15.2", "description": "OpenTelemetry semantic conventions", "main": "build/src/index.js", "module": "build/esm/index.js", @@ -8,16 +8,16 @@ "types": "build/src/index.d.ts", "repository": "open-telemetry/opentelemetry-js", "scripts": { - "build": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json && npm run package", + "build": "npm run compile && npm run package", "clean": "tsc --build --clean tsconfig.json tsconfig.esm.json tsconfig.esnext.json", - "compile": "npm run build", + "compile": "npm run lint:fix-quiet && npm run version && tsc --build tsconfig.json tsconfig.esm.json tsconfig.esnext.json", "lint": "eslint . --ext .ts", "lint:fix": "npm run lint -- --fix", "lint:fix-quiet": "npm run lint -- --fix --quiet", "package": "npx rollup -c ./rollup.config.js --bundleConfigAsCjs", "peer-api-check": "node ../../scripts/peer-api-check.js", "prepublishOnly": "npm run compile", - "rebuild": "npm run build", + "rebuild": "npm run clean && npm run build", "test": "", "test:browser": "", "test:debug": "", @@ -61,12 +61,14 @@ "@types/node": "^18.14.2", "@types/sinon": "^10.0.13", "@types/webpack-env": "1.16.3", - "@typescript-eslint/eslint-plugin": "5.3.1", - "@typescript-eslint/parser": "5.3.1", + "@typescript-eslint/eslint-plugin": "5.59.11", + "@typescript-eslint/parser": "5.59.11", + "babel-loader": "8.3.0", + "babel-plugin-istanbul": "6.1.1", "chromium": "^3.0.3", "codecov": "^3.8.3", "cross-var": "1.1.0", - "eslint": "7.32.0", + "eslint": "8.44.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.25.3", @@ -82,9 +84,10 @@ "karma-typescript": "^5.5.3", "karma-webpack": "^4.0.2", "mocha": "10.0.0", - "nock": "13.3.1", + "nock": "13.3.2", "nyc": "^15.1.0", "pako": "^2.0.3", + "prettier": "2.8.8", "puppeteer": "^14.2.1", "sinon": "^14.0.0", "ts-loader": "8.4.0", @@ -95,9 +98,6 @@ "typescript": "^4.9.5", "webpack": "^4.46.0" }, - "dependencies": { - "tslib": "^2.3.1" - }, "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-semantic-conventions", "sideEffects": false } \ No newline at end of file diff --git a/tsconfig.base.json b/tsconfig.base.json index 84e684c8a..cbafb6767 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -21,8 +21,7 @@ "strict": true, "strictNullChecks": true, "target": "es2017", - "useUnknownInCatchVariables": false, - "importHelpers": true + "useUnknownInCatchVariables": false }, "exclude": [ "node_modules"