From 9866a7467b0c03492633f8e0218be3ecf1f2e194 Mon Sep 17 00:00:00 2001 From: Jerry Leung Date: Wed, 15 Apr 2026 14:24:17 -0700 Subject: [PATCH 1/9] Removed unused lambda function --- .github/dependabot.yml | 59 - .github/workflows/ci-java.yml | 42 - .github/workflows/ci-nodejs.yml | 42 - .github/workflows/ci-python.yml | 54 - .github/workflows/ci-terraform.yml | 26 - .github/workflows/release-layer-java.yml | 188 - .github/workflows/release-layer-nodejs.yml | 95 - .github/workflows/release-layer-python.yml | 98 - .github/workflows/release-layer-ruby.yml | 91 - docs/design_proposal.md | 79 - dotnet/README.md | 16 - .../aws-sdk/deploy/wrapper/main.tf | 43 - .../aws-sdk/deploy/wrapper/outputs.tf | 7 - .../aws-sdk/deploy/wrapper/variables.tf | 22 - .../wrapper/SampleApps/AwsSdkSample.sln | 25 - .../AwsSdkSample/AwsSdkSample.csproj | 20 - .../SampleApps/AwsSdkSample/Function.cs | 48 - .../Properties/launchSettings.json | 10 - .../aws-sdk/wrapper/SampleApps/build.sh | 25 - go/README.md | 16 - go/sample-apps/aws-sdk/deploy/wrapper/main.tf | 43 - .../aws-sdk/deploy/wrapper/outputs.tf | 7 - .../aws-sdk/deploy/wrapper/variables.tf | 22 - go/sample-apps/function/build.sh | 9 - go/sample-apps/function/function.go | 104 - go/sample-apps/function/go.mod | 60 - go/sample-apps/function/go.sum | 204 - java/README.md | 102 - java/awssdk-autoconfigure/build.gradle.kts | 14 - ...configuredTracingExecutionInterceptor.java | 148 - .../global/handlers/execution.interceptors | 1 - java/build.gradle.kts | 32 - java/dependencyManagement/build.gradle.kts | 58 - java/gradle.properties | 5 - java/gradle/wrapper/gradle-wrapper.jar | Bin 48966 -> 0 bytes java/gradle/wrapper/gradle-wrapper.properties | 8 - java/gradlew | 248 - java/gradlew.bat | 93 - java/layer-javaagent/build.gradle.kts | 34 - java/layer-javaagent/scripts/otel-handler | 40 - java/layer-wrapper/build.gradle.kts | 42 - java/layer-wrapper/scripts/otel-handler | 20 - java/layer-wrapper/scripts/otel-proxy-handler | 20 - java/layer-wrapper/scripts/otel-sqs-handler | 20 - .../layer-wrapper/scripts/otel-stream-handler | 20 - java/sample-apps/aws-sdk/README.md | 41 - java/sample-apps/aws-sdk/build.gradle.kts | 20 - java/sample-apps/aws-sdk/deploy/agent/main.tf | 70 - .../aws-sdk/deploy/agent/outputs.tf | 7 - .../aws-sdk/deploy/agent/variables.tf | 40 - .../aws-sdk/deploy/wrapper/main.tf | 48 - .../aws-sdk/deploy/wrapper/outputs.tf | 7 - .../aws-sdk/deploy/wrapper/variables.tf | 35 - .../awssdk/AwsSdkRequestHandler.java | 55 - .../aws-sdk/src/main/resources/log4j2.xml | 13 - java/sample-apps/okhttp/README.md | 53 - java/sample-apps/okhttp/build.gradle.kts | 20 - .../sample-apps/okhttp/deploy/wrapper/main.tf | 48 - .../okhttp/deploy/wrapper/outputs.tf | 7 - .../okhttp/deploy/wrapper/variables.tf | 35 - .../okhttp/OkHttpRequestHandler.java | 43 - .../okhttp/src/main/resources/log4j2.xml | 13 - java/sample-apps/sqs/README.md | 41 - java/sample-apps/sqs/build.gradle.kts | 18 - java/sample-apps/sqs/deploy/agent/main.tf | 57 - java/sample-apps/sqs/deploy/agent/outputs.tf | 3 - .../sample-apps/sqs/deploy/agent/variables.tf | 46 - java/sample-apps/sqs/deploy/wrapper/main.tf | 48 - .../sample-apps/sqs/deploy/wrapper/outputs.tf | 3 - .../sqs/deploy/wrapper/variables.tf | 41 - .../sampleapps/sqs/SqsRequestHandler.java | 25 - .../sqs/src/main/resources/log4j2.xml | 13 - java/settings.gradle.kts | 24 - nodejs/.commitlintrc.yml | 29 - nodejs/.editorconfig | 11 - nodejs/.gitattributes | 39 - nodejs/.gitignore | 73 - nodejs/.npmignore | 4 - nodejs/README.md | 87 - nodejs/eslint.config.js | 44 - nodejs/lerna.json | 17 - nodejs/package-lock.json | 15447 ---------------- nodejs/package.json | 61 - nodejs/packages/layer/.gitignore | 2 - nodejs/packages/layer/.mocharc.json | 4 - nodejs/packages/layer/install-externals.sh | 25 - nodejs/packages/layer/package.json | 99 - nodejs/packages/layer/scripts/otel-handler | 19 - nodejs/packages/layer/src/init.mjs | 9 - nodejs/packages/layer/src/loader.mjs | 91 - nodejs/packages/layer/src/wrapper.ts | 623 - nodejs/packages/layer/test/handler.spec.mjs | 105 - nodejs/packages/layer/test/handler.spec.ts | 107 - .../packages/layer/test/handler/cjs/index.js | 4 - .../layer/test/handler/cjs/index_commonjs.cjs | 4 - .../layer/test/handler/cjs/package.json | 5 - .../packages/layer/test/handler/esm/index.js | 4 - .../layer/test/handler/esm/index_esm.mjs | 5 - .../layer/test/handler/esm/package.json | 6 - nodejs/packages/layer/test/wrapper.spec.ts | 241 - nodejs/packages/layer/tsconfig.json | 12 - nodejs/packages/layer/tsconfig.webpack.json | 11 - nodejs/packages/layer/webpack.config.js | 47 - nodejs/sample-apps/aws-sdk/.eslintignore | 4 - nodejs/sample-apps/aws-sdk/.eslintrc.js | 7 - nodejs/sample-apps/aws-sdk/.gitignore | 2 - nodejs/sample-apps/aws-sdk/README.md | 77 - nodejs/sample-apps/aws-sdk/bin/app.ts | 6 - nodejs/sample-apps/aws-sdk/cdk.json | 3 - .../aws-sdk/deploy/wrapper/main.tf | 47 - .../aws-sdk/deploy/wrapper/outputs.tf | 7 - .../aws-sdk/deploy/wrapper/variables.tf | 36 - nodejs/sample-apps/aws-sdk/lambda/index.ts | 40 - .../aws-sdk/lib/otel-sample-lambda-stack.ts | 40 - nodejs/sample-apps/aws-sdk/package-lock.json | 1841 -- nodejs/sample-apps/aws-sdk/package.json | 49 - .../sample-apps/aws-sdk/sampleLogOutput.png | Bin 206594 -> 0 bytes nodejs/sample-apps/aws-sdk/src/index.ts | 22 - nodejs/sample-apps/aws-sdk/tsconfig.json | 10 - nodejs/tsconfig.base.json | 28 - nodejs/tsconfig.esm.json | 26 - python/README.md | 16 - .../aws-sdk/deploy/wrapper/main.tf | 48 - .../aws-sdk/deploy/wrapper/outputs.tf | 7 - .../aws-sdk/deploy/wrapper/variables.tf | 35 - python/sample-apps/build.sh | 8 - .../sample-apps/function/lambda_function.py | 16 - python/sample-apps/function/requirements.txt | 2 - python/sample-apps/run.sh | 9 - python/sample-apps/template.yml | 51 - python/src/build.sh | 6 - python/src/otel/Dockerfile | 26 - python/src/otel/Makefile | 14 - .../src/otel/otel_sdk/nodeps-requirements.txt | 4 - python/src/otel/otel_sdk/otel-handler | 41 - python/src/otel/otel_sdk/otel-instrument | 166 - python/src/otel/otel_sdk/otel_wrapper.py | 62 - python/src/otel/otel_sdk/requirements.txt | 36 - .../src/otel/tests/mocks/lambda_function.py | 17 - python/src/otel/tests/nodeps-requirements.txt | 1 - python/src/otel/tests/requirements.txt | 5 - python/src/otel/tests/test_otel.py | 317 - python/src/run.sh | 1 - python/src/template.yml | 23 - python/src/tox.ini | 29 - ruby/README.md | 104 - ruby/sample-apps/function/Gemfile | 3 - ruby/sample-apps/function/lambda_function.rb | 9 - ruby/sample-apps/template.yml | 46 - ruby/src/build.sh | 7 - ruby/src/otel/Dockerfile | 67 - ruby/src/otel/layer/Gemfile | 5 - ruby/src/otel/layer/Makefile | 10 - ruby/src/otel/layer/otel-handler | 22 - ruby/src/otel/layer/wrapper.rb | 40 - ruby/src/template.yml | 19 - ruby/src/zip_ruby_layer.sh | 39 - .../aws-cf-stack-for-layer-publish.yml | 53 - utils/sam/run.sh | 108 - utils/terraform/api-gateway-proxy/main.tf | 67 - utils/terraform/api-gateway-proxy/outputs.tf | 3 - .../terraform/api-gateway-proxy/variables.tf | 26 - 162 files changed, 24282 deletions(-) delete mode 100644 .github/workflows/ci-java.yml delete mode 100644 .github/workflows/ci-nodejs.yml delete mode 100644 .github/workflows/ci-python.yml delete mode 100644 .github/workflows/ci-terraform.yml delete mode 100644 .github/workflows/release-layer-java.yml delete mode 100644 .github/workflows/release-layer-nodejs.yml delete mode 100644 .github/workflows/release-layer-python.yml delete mode 100644 .github/workflows/release-layer-ruby.yml delete mode 100644 docs/design_proposal.md delete mode 100644 dotnet/README.md delete mode 100644 dotnet/sample-apps/aws-sdk/deploy/wrapper/main.tf delete mode 100644 dotnet/sample-apps/aws-sdk/deploy/wrapper/outputs.tf delete mode 100644 dotnet/sample-apps/aws-sdk/deploy/wrapper/variables.tf delete mode 100644 dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample.sln delete mode 100644 dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/AwsSdkSample.csproj delete mode 100644 dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/Function.cs delete mode 100644 dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/Properties/launchSettings.json delete mode 100755 dotnet/sample-apps/aws-sdk/wrapper/SampleApps/build.sh delete mode 100644 go/README.md delete mode 100644 go/sample-apps/aws-sdk/deploy/wrapper/main.tf delete mode 100644 go/sample-apps/aws-sdk/deploy/wrapper/outputs.tf delete mode 100644 go/sample-apps/aws-sdk/deploy/wrapper/variables.tf delete mode 100755 go/sample-apps/function/build.sh delete mode 100644 go/sample-apps/function/function.go delete mode 100644 go/sample-apps/function/go.mod delete mode 100644 go/sample-apps/function/go.sum delete mode 100644 java/README.md delete mode 100644 java/awssdk-autoconfigure/build.gradle.kts delete mode 100644 java/awssdk-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/autoconfigure/AutoconfiguredTracingExecutionInterceptor.java delete mode 100644 java/awssdk-autoconfigure/src/main/resources/software/amazon/awssdk/global/handlers/execution.interceptors delete mode 100644 java/build.gradle.kts delete mode 100644 java/dependencyManagement/build.gradle.kts delete mode 100644 java/gradle.properties delete mode 100644 java/gradle/wrapper/gradle-wrapper.jar delete mode 100644 java/gradle/wrapper/gradle-wrapper.properties delete mode 100755 java/gradlew delete mode 100644 java/gradlew.bat delete mode 100644 java/layer-javaagent/build.gradle.kts delete mode 100755 java/layer-javaagent/scripts/otel-handler delete mode 100644 java/layer-wrapper/build.gradle.kts delete mode 100755 java/layer-wrapper/scripts/otel-handler delete mode 100755 java/layer-wrapper/scripts/otel-proxy-handler delete mode 100755 java/layer-wrapper/scripts/otel-sqs-handler delete mode 100755 java/layer-wrapper/scripts/otel-stream-handler delete mode 100644 java/sample-apps/aws-sdk/README.md delete mode 100644 java/sample-apps/aws-sdk/build.gradle.kts delete mode 100644 java/sample-apps/aws-sdk/deploy/agent/main.tf delete mode 100644 java/sample-apps/aws-sdk/deploy/agent/outputs.tf delete mode 100644 java/sample-apps/aws-sdk/deploy/agent/variables.tf delete mode 100644 java/sample-apps/aws-sdk/deploy/wrapper/main.tf delete mode 100644 java/sample-apps/aws-sdk/deploy/wrapper/outputs.tf delete mode 100644 java/sample-apps/aws-sdk/deploy/wrapper/variables.tf delete mode 100644 java/sample-apps/aws-sdk/src/main/java/io/opentelemetry/lambda/sampleapps/awssdk/AwsSdkRequestHandler.java delete mode 100644 java/sample-apps/aws-sdk/src/main/resources/log4j2.xml delete mode 100644 java/sample-apps/okhttp/README.md delete mode 100644 java/sample-apps/okhttp/build.gradle.kts delete mode 100644 java/sample-apps/okhttp/deploy/wrapper/main.tf delete mode 100644 java/sample-apps/okhttp/deploy/wrapper/outputs.tf delete mode 100644 java/sample-apps/okhttp/deploy/wrapper/variables.tf delete mode 100644 java/sample-apps/okhttp/src/main/java/io/opentelemetry/lambda/sampleapps/okhttp/OkHttpRequestHandler.java delete mode 100644 java/sample-apps/okhttp/src/main/resources/log4j2.xml delete mode 100644 java/sample-apps/sqs/README.md delete mode 100644 java/sample-apps/sqs/build.gradle.kts delete mode 100644 java/sample-apps/sqs/deploy/agent/main.tf delete mode 100644 java/sample-apps/sqs/deploy/agent/outputs.tf delete mode 100644 java/sample-apps/sqs/deploy/agent/variables.tf delete mode 100644 java/sample-apps/sqs/deploy/wrapper/main.tf delete mode 100644 java/sample-apps/sqs/deploy/wrapper/outputs.tf delete mode 100644 java/sample-apps/sqs/deploy/wrapper/variables.tf delete mode 100644 java/sample-apps/sqs/src/main/java/io/opentelemetry/lambda/sampleapps/sqs/SqsRequestHandler.java delete mode 100644 java/sample-apps/sqs/src/main/resources/log4j2.xml delete mode 100644 java/settings.gradle.kts delete mode 100644 nodejs/.commitlintrc.yml delete mode 100644 nodejs/.editorconfig delete mode 100644 nodejs/.gitattributes delete mode 100644 nodejs/.gitignore delete mode 100644 nodejs/.npmignore delete mode 100644 nodejs/README.md delete mode 100644 nodejs/eslint.config.js delete mode 100644 nodejs/lerna.json delete mode 100644 nodejs/package-lock.json delete mode 100644 nodejs/package.json delete mode 100644 nodejs/packages/layer/.gitignore delete mode 100644 nodejs/packages/layer/.mocharc.json delete mode 100755 nodejs/packages/layer/install-externals.sh delete mode 100644 nodejs/packages/layer/package.json delete mode 100755 nodejs/packages/layer/scripts/otel-handler delete mode 100644 nodejs/packages/layer/src/init.mjs delete mode 100644 nodejs/packages/layer/src/loader.mjs delete mode 100644 nodejs/packages/layer/src/wrapper.ts delete mode 100644 nodejs/packages/layer/test/handler.spec.mjs delete mode 100644 nodejs/packages/layer/test/handler.spec.ts delete mode 100644 nodejs/packages/layer/test/handler/cjs/index.js delete mode 100644 nodejs/packages/layer/test/handler/cjs/index_commonjs.cjs delete mode 100644 nodejs/packages/layer/test/handler/cjs/package.json delete mode 100644 nodejs/packages/layer/test/handler/esm/index.js delete mode 100644 nodejs/packages/layer/test/handler/esm/index_esm.mjs delete mode 100644 nodejs/packages/layer/test/handler/esm/package.json delete mode 100644 nodejs/packages/layer/test/wrapper.spec.ts delete mode 100644 nodejs/packages/layer/tsconfig.json delete mode 100644 nodejs/packages/layer/tsconfig.webpack.json delete mode 100644 nodejs/packages/layer/webpack.config.js delete mode 100644 nodejs/sample-apps/aws-sdk/.eslintignore delete mode 100644 nodejs/sample-apps/aws-sdk/.eslintrc.js delete mode 100644 nodejs/sample-apps/aws-sdk/.gitignore delete mode 100644 nodejs/sample-apps/aws-sdk/README.md delete mode 100644 nodejs/sample-apps/aws-sdk/bin/app.ts delete mode 100644 nodejs/sample-apps/aws-sdk/cdk.json delete mode 100644 nodejs/sample-apps/aws-sdk/deploy/wrapper/main.tf delete mode 100644 nodejs/sample-apps/aws-sdk/deploy/wrapper/outputs.tf delete mode 100644 nodejs/sample-apps/aws-sdk/deploy/wrapper/variables.tf delete mode 100644 nodejs/sample-apps/aws-sdk/lambda/index.ts delete mode 100644 nodejs/sample-apps/aws-sdk/lib/otel-sample-lambda-stack.ts delete mode 100644 nodejs/sample-apps/aws-sdk/package-lock.json delete mode 100644 nodejs/sample-apps/aws-sdk/package.json delete mode 100644 nodejs/sample-apps/aws-sdk/sampleLogOutput.png delete mode 100644 nodejs/sample-apps/aws-sdk/src/index.ts delete mode 100644 nodejs/sample-apps/aws-sdk/tsconfig.json delete mode 100644 nodejs/tsconfig.base.json delete mode 100644 nodejs/tsconfig.esm.json delete mode 100644 python/README.md delete mode 100644 python/sample-apps/aws-sdk/deploy/wrapper/main.tf delete mode 100644 python/sample-apps/aws-sdk/deploy/wrapper/outputs.tf delete mode 100644 python/sample-apps/aws-sdk/deploy/wrapper/variables.tf delete mode 100755 python/sample-apps/build.sh delete mode 100644 python/sample-apps/function/lambda_function.py delete mode 100644 python/sample-apps/function/requirements.txt delete mode 100755 python/sample-apps/run.sh delete mode 100644 python/sample-apps/template.yml delete mode 100755 python/src/build.sh delete mode 100644 python/src/otel/Dockerfile delete mode 100644 python/src/otel/Makefile delete mode 100644 python/src/otel/otel_sdk/nodeps-requirements.txt delete mode 100755 python/src/otel/otel_sdk/otel-handler delete mode 100755 python/src/otel/otel_sdk/otel-instrument delete mode 100644 python/src/otel/otel_sdk/otel_wrapper.py delete mode 100644 python/src/otel/otel_sdk/requirements.txt delete mode 100644 python/src/otel/tests/mocks/lambda_function.py delete mode 100644 python/src/otel/tests/nodeps-requirements.txt delete mode 100644 python/src/otel/tests/requirements.txt delete mode 100644 python/src/otel/tests/test_otel.py delete mode 120000 python/src/run.sh delete mode 100644 python/src/template.yml delete mode 100644 python/src/tox.ini delete mode 100644 ruby/README.md delete mode 100644 ruby/sample-apps/function/Gemfile delete mode 100644 ruby/sample-apps/function/lambda_function.rb delete mode 100644 ruby/sample-apps/template.yml delete mode 100755 ruby/src/build.sh delete mode 100644 ruby/src/otel/Dockerfile delete mode 100644 ruby/src/otel/layer/Gemfile delete mode 100644 ruby/src/otel/layer/Makefile delete mode 100755 ruby/src/otel/layer/otel-handler delete mode 100644 ruby/src/otel/layer/wrapper.rb delete mode 100644 ruby/src/template.yml delete mode 100755 ruby/src/zip_ruby_layer.sh delete mode 100644 utils/aws-cloudformation/aws-cf-stack-for-layer-publish.yml delete mode 100755 utils/sam/run.sh delete mode 100644 utils/terraform/api-gateway-proxy/main.tf delete mode 100644 utils/terraform/api-gateway-proxy/outputs.tf delete mode 100644 utils/terraform/api-gateway-proxy/variables.tf diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 458a80eaf3..4885ec898f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -21,7 +21,6 @@ updates: - "/collector/processor/coldstartprocessor" - "/collector/processor/decoupleprocessor" - "/collector/receiver/telemetryapireceiver" - - "/go/sample-apps/function" schedule: interval: "weekly" groups: @@ -31,61 +30,3 @@ updates: collector-other: patterns: - "*" - - - package-ecosystem: "gradle" - directories: - - "/java" - schedule: - interval: "weekly" - groups: - opentelemetry-deps-java: - patterns: - - "io.opentelemetry.*" - java-other: - patterns: - - "*" - - - package-ecosystem: "npm" - directories: - - "/nodejs" - - "/nodejs/packages/layer" - - "/nodejs/sample-apps/aws-sdk" - schedule: - interval: "weekly" - groups: - opentelemetry-deps-nodejs: - patterns: - - "@opentelemetry/*" - nodejs-other: - patterns: - - "*" - - - package-ecosystem: "pip" - directories: - - "/python/src/otel" - - "/python/sample-apps/function" - - "/python/src/otel/otel_sdk" - - "/python/src/otel/tests" - schedule: - interval: "weekly" - groups: - opentelemetry-deps-python: - patterns: - - "opentelemetry-*" - python-other: - patterns: - - "*" - - - package-ecosystem: "bundler" - directories: - - "/ruby/src/otel/layer" - - "/ruby/sample-apps/function" - schedule: - interval: "weekly" - groups: - opentelemetry-deps-ruby: - patterns: - - "opentelemetry-*" - ruby-other: - patterns: - - "*" diff --git a/.github/workflows/ci-java.yml b/.github/workflows/ci-java.yml deleted file mode 100644 index c50cd2e230..0000000000 --- a/.github/workflows/ci-java.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: "Continuous Build (Java)" - -on: - push: - paths: - - 'java/**' - - '.github/workflows/ci-java.yml' - branches: - - main - pull_request: - paths: - - 'java/**' - - '.github/workflows/ci-java.yml' - branches: - - main - -permissions: - contents: read - -jobs: - build: - permissions: - pull-requests: write - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 - with: - distribution: corretto - java-version: 17 - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0 - with: - add-job-summary-as-pr-comment: on-failure # Valid values are 'never' (default), 'always', and 'on-failure' - cache-provider: basic # MIT licensed (see https://github.com/gradle/actions/releases/tag/v6.1.0) - - - name: Execute Gradle build - run: | - cd java - ./gradlew build --scan --stacktrace diff --git a/.github/workflows/ci-nodejs.yml b/.github/workflows/ci-nodejs.yml deleted file mode 100644 index e1ffa87d57..0000000000 --- a/.github/workflows/ci-nodejs.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: "Continuous Build (NodeJS)" - -on: - push: - paths: - - 'nodejs/**' - - '.github/workflows/ci-nodejs.yml' - branches: - - main - pull_request: - paths: - - 'nodejs/**' - - '.github/workflows/ci-nodejs.yml' - branches: - - main - -permissions: - contents: read - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0 - with: - node-version: 18 - - uses: actions/cache@8b402f58fbc84540c8b491a91e594a4576fec3d7 # v5.0.2 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - - run: npm install - working-directory: nodejs - - run: npm run lint - working-directory: nodejs - - run: npm test - working-directory: nodejs - - name: Build AWS SDK Sample - run: npm run build - working-directory: nodejs/sample-apps/aws-sdk diff --git a/.github/workflows/ci-python.yml b/.github/workflows/ci-python.yml deleted file mode 100644 index 2f1a6bf205..0000000000 --- a/.github/workflows/ci-python.yml +++ /dev/null @@ -1,54 +0,0 @@ -name: "Continuous Build (Python)" - -on: - push: - paths: - - 'python/**' - - '.github/workflows/ci-python.yml' - branches: - - main - pull_request: - paths: - - 'python/**' - - '.github/workflows/ci-python.yml' - branches: - - main - -env: - AWS_REGION: us-east-1 - # Copied this CORE_REPO_SHA from - # https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/.github/workflows/test.yml#L9 - CORE_REPO_SHA: v1.19.0 - -permissions: - contents: read - -jobs: - build: - runs-on: ubuntu-latest - - strategy: - matrix: - # If you add a python version here, please make sure that the collector/Makefile publish and publish-layer targets - # get updated as well - python: ['3.9', '3.10', '3.11', '3.12', '3.13', '3.14'] - - steps: - - name: Checkout this repo - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Setup Python for OTel Python SDK - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0 - with: - python-version: ${{ matrix.python }} - - name: Install tox testing package - working-directory: python/src - run: | - pip install tox - tox - - name: Set up Go for ADOT Collector - uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0 - with: - go-version: '^1.20.8' - - name: Build Python Layer which includes ADOT Collector - working-directory: python/src - run: ./run.sh -b diff --git a/.github/workflows/ci-terraform.yml b/.github/workflows/ci-terraform.yml deleted file mode 100644 index c2ab6a27ae..0000000000 --- a/.github/workflows/ci-terraform.yml +++ /dev/null @@ -1,26 +0,0 @@ -name: "Continuous Build (Terraform)" - -on: - push: - paths: - - '**/*.tf' - - '.github/workflows/ci-terraform.yml' - branches: - - main - pull_request: - paths: - - '**/*.tf' - - '.github/workflows/ci-terraform.yml' - branches: - - main - -permissions: - contents: read - -jobs: - check-terraform-syntax: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - uses: hashicorp/setup-terraform@5e8dbf3c6d9deaf4193ca7a8fb23f2ac83bb6c85 # v4.0.0 - - run: terraform fmt -check -recursive diff --git a/.github/workflows/release-layer-java.yml b/.github/workflows/release-layer-java.yml deleted file mode 100644 index 2fbd9d70dd..0000000000 --- a/.github/workflows/release-layer-java.yml +++ /dev/null @@ -1,188 +0,0 @@ -name: "Release Javaagent Lambda Layer" - -on: - # (Using tag push instead of release to allow filtering by tag prefix.) - push: - tags: - - layer-javaagent/** - -permissions: - contents: read - -jobs: - create-release: - permissions: - contents: write - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - name: Create Release - run: gh release create ${{ github.ref_name }} --draft --title ${{ github.ref_name }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - build-layer: - permissions: - contents: write - runs-on: ubuntu-latest - needs: create-release - outputs: - JAVAAGENT_VERSION: ${{ steps.save-javaagent-version.outputs.JAVAAGENT_VERSION }} - JAVAWRAPPER_VERSION: ${{ steps.save-javawrapper-version.outputs.JAVAWRAPPER_VERSION }} - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 - with: - distribution: corretto - java-version: 17 - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0 - with: - cache-provider: basic # MIT licensed (see https://github.com/gradle/actions/releases/tag/v6.1.0) - - - name: Execute Gradle build - run: | - cd java - ./gradlew :layer-javaagent:assemble :layer-wrapper:assemble --scan --stacktrace - - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - name: Save javaagent layer to build - with: - name: opentelemetry-javaagent-layer.zip - path: java/layer-javaagent/build/distributions/opentelemetry-javaagent-layer.zip - - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 - name: Save javawrapper layer to build - with: - name: opentelemetry-javawrapper-layer.zip - path: java/layer-wrapper/build/distributions/opentelemetry-javawrapper-layer.zip - - - name: Add Binary to Release - run: | - gh release upload ${{github.ref_name}} java/layer-wrapper/build/distributions/opentelemetry-javawrapper-layer.zip - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Save Javaagent Version - id: save-javaagent-version - shell: bash - run: | - unzip java/layer-javaagent/build/distributions/opentelemetry-javaagent-layer.zip - JAVAAGENT_VERSION=$(java -jar ./opentelemetry-javaagent.jar) - echo "JAVAAGENT_VERSION=$JAVAAGENT_VERSION" >> $GITHUB_OUTPUT - - - name: Save Java Wrapper Version - id: save-javawrapper-version - shell: bash - run: | - cd java - JAVAWRAPPER_VERSION=$(./gradlew layer-wrapper:printOtelJavaInstrumentationVersion -q) - echo "JAVAWRAPPER_VERSION=$JAVAWRAPPER_VERSION" >> $GITHUB_OUTPUT - - publish-javaagent-layer: - permissions: # required by the reusable workflow - contents: read - id-token: write - uses: ./.github/workflows/layer-publish.yml - needs: build-layer - strategy: - matrix: - aws_region: - - af-south-1 - - ap-east-1 - - ap-east-2 - - ap-northeast-1 - - ap-northeast-2 - - ap-south-1 - - ap-south-2 - - ap-southeast-1 - - ap-southeast-2 - - ap-southeast-3 - - ap-southeast-4 - - ap-southeast-5 - - ap-southeast-6 - - ap-southeast-7 - - ca-central-1 - - ca-west-1 - - eu-central-1 - - eu-central-2 - - eu-north-1 - - eu-south-1 - - eu-south-2 - - eu-west-1 - - eu-west-2 - - eu-west-3 - - il-central-1 - - me-central-1 - - me-south-1 - - mx-central-1 - - sa-east-1 - - us-east-1 - - us-east-2 - - us-west-1 - - us-west-2 - with: - artifact-name: opentelemetry-javaagent-layer.zip - layer-name: opentelemetry-javaagent - component-version: ${{needs.build-layer.outputs.JAVAAGENT_VERSION}} - # architecture: - # If you add a java runtime here, please make sure that the collector/Makefile publish and publish-layer targets - # get updated as well - runtimes: java8.al2 java11 java17 java21 - release-group: prod - aws_region: ${{ matrix.aws_region }} - secrets: inherit - - publish-javawrapper-layer: - permissions: # required by the reusable workflow - contents: read - id-token: write - uses: ./.github/workflows/layer-publish.yml - needs: build-layer - strategy: - matrix: - aws_region: - - af-south-1 - - ap-east-1 - - ap-east-2 - - ap-northeast-1 - - ap-northeast-2 - - ap-south-1 - - ap-south-2 - - ap-southeast-1 - - ap-southeast-2 - - ap-southeast-3 - - ap-southeast-4 - - ap-southeast-5 - - ap-southeast-6 - - ap-southeast-7 - - ca-central-1 - - ca-west-1 - - eu-central-1 - - eu-central-2 - - eu-north-1 - - eu-south-1 - - eu-south-2 - - eu-west-1 - - eu-west-2 - - eu-west-3 - - il-central-1 - - me-central-1 - - me-south-1 - - mx-central-1 - - sa-east-1 - - us-east-1 - - us-east-2 - - us-west-1 - - us-west-2 - with: - artifact-name: opentelemetry-javawrapper-layer.zip - layer-name: opentelemetry-javawrapper - component-version: ${{needs.build-layer.outputs.JAVAWRAPPER_VERSION}} - # architecture: - runtimes: java8.al2 java11 java17 - release-group: prod - aws_region: ${{ matrix.aws_region }} - secrets: inherit - diff --git a/.github/workflows/release-layer-nodejs.yml b/.github/workflows/release-layer-nodejs.yml deleted file mode 100644 index 3df13dfa72..0000000000 --- a/.github/workflows/release-layer-nodejs.yml +++ /dev/null @@ -1,95 +0,0 @@ -name: "Release NodeJS Lambda Layer" - -on: - # (Using tag push instead of release to allow filtering by tag prefix.) - push: - tags: - - layer-nodejs/** - -permissions: - id-token: write - contents: write - -jobs: - create-release: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Create Release - run: gh release create ${{ github.ref_name }} --draft --title ${{ github.ref_name }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - build-layer: - runs-on: ubuntu-latest - needs: create-release - outputs: - NODEJS_VERSION: ${{ steps.save-node-sdk-version.outputs.SDK_VERSION}} - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-node@v4 - with: - node-version: 18 - - - name: Build - run: | - npm install - npm run build - working-directory: nodejs - - - name: Save Node SDK Version - id: save-node-sdk-version - run: | - SDK_VERSION=$(npm list @opentelemetry/core --depth=0 | grep @opentelemetry/core | sed 's/^.*@//') - echo "SDK_VERSION=$SDK_VERSION" >> $GITHUB_OUTPUT - working-directory: nodejs/packages/layer/scripts - - - name: Rename zip file - run: mv layer.zip opentelemetry-nodejs-layer.zip - working-directory: nodejs/packages/layer/build - - - uses: actions/upload-artifact@v4 - name: Save assembled layer to build - with: - name: opentelemetry-nodejs-layer.zip - path: nodejs/packages/layer/build/opentelemetry-nodejs-layer.zip - - - name: Add Binary to Release - run: | - gh release upload ${{github.ref_name}} nodejs/packages/layer/build/opentelemetry-nodejs-layer.zip - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - publish-layer: - uses: ./.github/workflows/layer-publish.yml - needs: build-layer - strategy: - matrix: - aws_region: - - ap-northeast-1 - - ap-northeast-2 - - ap-south-1 - - ap-southeast-1 - - ap-southeast-2 - - ca-central-1 - - eu-central-1 - - eu-north-1 - - eu-west-1 - - eu-west-2 - - eu-west-3 - - sa-east-1 - - us-east-1 - - us-east-2 - - us-west-1 - - us-west-2 - with: - artifact-name: opentelemetry-nodejs-layer.zip - layer-name: opentelemetry-nodejs - component-version: ${{needs.build-layer.outputs.NODEJS_VERSION}} - # architecture: - # If you add a nodejs runtime here, please make sure that the collector/Makefile publish and publish-layer targets - # get updated as well - runtimes: nodejs18.x nodejs20.x nodejs22.x - release-group: prod - aws_region: ${{ matrix.aws_region }} - secrets: inherit diff --git a/.github/workflows/release-layer-python.yml b/.github/workflows/release-layer-python.yml deleted file mode 100644 index 00d939adc3..0000000000 --- a/.github/workflows/release-layer-python.yml +++ /dev/null @@ -1,98 +0,0 @@ -name: "Release Python Lambda Layer" - -on: - # (Using tag push instead of release to allow filtering by tag prefix.) - push: - tags: - - layer-python/** - -permissions: - id-token: write - contents: write - -jobs: - create-release: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Create Release - run: gh release create ${{ github.ref_name }} --draft --title ${{ github.ref_name }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - build-layer: - runs-on: ubuntu-latest - needs: create-release - outputs: - PYTHON_OPENTELEMETRY_SDK_VERSION: ${{ steps.save-python-opentelemetry-sdk-version.outputs.PYTHON_OPENTELEMETRY_SDK_VERSION}} - steps: - - uses: actions/checkout@v4 - - - uses: actions/setup-python@v5 - with: - python-version: '3.9' - - - name: Save PYTHON_OPENTELEMETRY_SDK_VERSION - id: save-python-opentelemetry-sdk-version - run: | - cd python/src - echo "PYTHON_OPENTELEMETRY_SDK_VERSION=$(cat otel/otel_sdk/requirements.txt | grep opentelemetry-sdk | sed 's/.*==\([^ ]*\).*/\1/')" >> $GITHUB_ENV - echo "PYTHON_OPENTELEMETRY_SDK_VERSION=$PYTHON_OPENTELEMETRY_SDK_VERSION" >> $GITHUB_OUTPUT - shell: bash - - - name: Display PYTHON_OPENTELEMETRY_SDK_VERSION - run: | - echo "PYTHON_OPENTELEMETRY_SDK_VERSION=${{ env.PYTHON_OPENTELEMETRY_SDK_VERSION }}" - shell: bash - - - name: Build - run: | - cd python/src - ./build.sh - shell: bash - - - name: Show directory contents - run: | - ls -al - working-directory: python/src/build - - - uses: actions/upload-artifact@v4 - name: Save assembled layer to build - with: - name: opentelemetry-python-layer.zip - path: python/src/build/opentelemetry-python-layer.zip - - - name: Add Binary to Release - run: | - gh release upload ${{github.ref_name}} python/src/build/opentelemetry-python-layer.zip - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - publish-layer: - uses: ./.github/workflows/layer-publish.yml - needs: build-layer - strategy: - matrix: - aws_region: - - ap-northeast-1 - - ap-northeast-2 - - ap-south-1 - - ap-southeast-1 - - ap-southeast-2 - - ca-central-1 - - eu-central-1 - - eu-north-1 - - eu-west-1 - - eu-west-2 - - eu-west-3 - - sa-east-1 - - us-east-1 - - us-east-2 - - us-west-1 - - us-west-2 - with: - artifact-name: opentelemetry-python-layer.zip - layer-name: opentelemetry-python - component-version: ${{needs.build-layer.outputs.PYTHON_OPENTELEMETRY_SDK_VERSION}} - release-group: prod - aws_region: ${{ matrix.aws_region }} - secrets: inherit diff --git a/.github/workflows/release-layer-ruby.yml b/.github/workflows/release-layer-ruby.yml deleted file mode 100644 index 378bd22236..0000000000 --- a/.github/workflows/release-layer-ruby.yml +++ /dev/null @@ -1,91 +0,0 @@ -name: "Release Ruby Lambda Layer" - -on: - # (Using tag push instead of release to allow filtering by tag prefix.) - push: - tags: - - layer-ruby/** - -permissions: - id-token: write - contents: write - -jobs: - create-release: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Create Release - run: gh release create ${{ github.ref_name }} --draft --title ${{ github.ref_name }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - build-layer: - runs-on: ubuntu-latest - needs: create-release - outputs: - RUBY_SDK_VERSION: ${{ steps.save-ruby-sdk-version.outputs.RUBY_SDK_VERSION}} - steps: - - uses: actions/checkout@v4 - - - name: Build - run: | - ./build.sh - shell: bash - working-directory: ruby/src - - - name: Save Ruby SDK Version - id: save-ruby-sdk-version - run: | - unzip -q build/opentelemetry-ruby-layer.zip - export GEM_PATH=$PWD/ruby/gems/3.2.0/ - RUBY_SDK_VERSION=$(ruby -e 'require "opentelemetry-sdk"; puts OpenTelemetry::SDK::VERSION') - echo "RUBY_SDK_VERSION=$RUBY_SDK_VERSION" >> $GITHUB_OUTPUT - working-directory: ruby/src - - - name: Show directory contents - run: | - ls -al - working-directory: ruby/src/build - - - uses: actions/upload-artifact@v4 - name: Save assembled layer to build - with: - name: opentelemetry-ruby-layer.zip - path: ruby/src/build/opentelemetry-ruby-layer.zip - - - name: Add Binary to Release - run: | - gh release upload ${{github.ref_name}} ruby/src/build/opentelemetry-ruby-layer.zip - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - publish-layer: - uses: ./.github/workflows/layer-publish.yml - needs: build-layer - strategy: - matrix: - aws_region: - - ap-northeast-1 - - ap-northeast-2 - - ap-south-1 - - ap-southeast-1 - - ap-southeast-2 - - ca-central-1 - - eu-central-1 - - eu-north-1 - - eu-west-1 - - eu-west-2 - - eu-west-3 - - sa-east-1 - - us-east-1 - - us-east-2 - - us-west-1 - - us-west-2 - with: - artifact-name: opentelemetry-ruby-layer.zip - layer-name: opentelemetry-ruby - component-version: ${{needs.build-layer.outputs.RUBY_SDK_VERSION}} - runtimes: ruby3.2 ruby3.3 - release-group: prod - aws_region: ${{ matrix.aws_region }} - secrets: inherit diff --git a/docs/design_proposal.md b/docs/design_proposal.md deleted file mode 100644 index f7a04bfe22..0000000000 --- a/docs/design_proposal.md +++ /dev/null @@ -1,79 +0,0 @@ -# Design: OpenTelemetry support for Lambda - -## 1. Introduction -AWS Lambda (referred to as Lambda herein) is a compute service that lets the user build serverless applications, where the user’s Lambda code runs in a sandbox environment provisioned and managed by Lambda. Since users do not have full control of the environment, running OpenTelemetry SDKs and Collector in Lambda requires additional setup. For example, launching OpenTelemetry Collector and enabling auto-instrumentation in Lambda are not as straightforward as compared to Linux. That is the motivation for why we created this proposal which aims to provide a seamless OpenTelemetry UX for Lambda users. - -### Some requirements for this proposal: -* ___[Lambda container](https://aws.amazon.com/blogs/compute/container-reuse-in-lambda/):___ -A user’s Lambda function executes in a Linux container (aka sandbox). Lambda provides the user serverless infrastructure by reusing the existing container when there are requests in queue, freezing it when no new requests, thawing the frozen container if new requests come in, and scaling up capacity by expanding the number of containers. - -* ___[Lambda Extension](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-extensions-api.html):___ -The Lambda Extensions API provides a method for launching a standalone program in a Lambda container. Using the Lambda Extensions API, the OpenTelemetry Collector can run in Lambda. - -* ___[Public Lambda layer](https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html):___ -A Lambda layer is a .zip file archive that contains libraries, a custom runtime, or other dependencies. It is natural to package the Collector in a layer and share with users. For some languages like Python, the UX can be improved by the public SDK layer but not for all languages. - -## 2. Technical Challenges -There are additional limitations when running OpenTelemetry in Lambda. Here is a list of some technical challenges we need to address in development. -### 2.1 Lambda freeze -Lambda freezes the container if there are no new requests coming. When it occurs all processes in the container will be frozen. See details in [cgroup freezer](https://www.kernel.org/doc/Documentation/cgroup-v1/freezer-subsystem.txt). If the process uses a timer to flush the buffered data, the timer won’t fire until the container thaws. The interval between the frozen and the thaw state is unpredictable, ranging from seconds to hours. Therefore, the data buffered in the OpenTelemetry SDK and Collector will have unpredictable latency. - -In the long run, we hope Lambda provides an IDLE event callback, which should be around 60 seconds. After Lambda realizes it has frozen for a while, it triggers this callback so the user has a chance to flush the data in the buffer. Lambda does not know if there is a new request coming or that it will freeze or thaw. So, an IDLE event is like a wake-up event once the container has been frozen more than 60 seconds. - -The short term solution is to flush data out before the Lambda function returns, because it ensures that the Lambda container will not be frozen during an invocation. To achieve this solution: -1. The SDK side needs to call [force_flush()](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/sdk.md#forceflush) at the end of Lambda instrumentation. -2. The Collector needs to remove all processors from config to keep one thread only from the receiver to the exporter. In this way, telemetry data is flushed to the backend synchronously at the end of every invocation. The side effect is slightly increased invocation time. - -![Architect](https://user-images.githubusercontent.com/66336933/113330107-3e8b3f80-92d3-11eb-826c-6110773096b5.png) -### 2.2 Memory consumption -For the best performance experience, Lambda provides the memory used metric, which is used as a high-water mark. This metric is equal to cgroup memory.max_usage_in_bytes, including RSS + CACHE. The page CACHE size is approximately equal to the size of dependencies. This means the more dependencies added in Lambda, the higher the memory consumption is in Lambda metrics. Right now the size of OpenTelemetry Collector-contrib is over 100MB and this size can increase as the RSS size (currently at 10MB) grows. - -### 2.3 Layer size limit -The layer size limit is a hard limit specifying that the total unzipped size of the function and all layers can't exceed the unzipped deployment package size limit of 250 MB. Due to this constraint, we have to strip down the size of the Collector layer by removing unnecessary components. - -With the exception of the Lambda layer, we can keep an eye on [Lambda Container Image](https://docs.aws.amazon.com/lambda/latest/dg/images-create.html), a new feature that can package Lambda function code and dependencies as a container image by Docker CLI. It brings benefits such as higher volume of dependencies, but now it still has limits that cannot add/update Lambda functions and layers once the image is built. It is not possible to provide the finished image to the user directly. Lambda Container Image is still not a replacement of Lambda layer. Furthermore, it does not change the way of memory consumption in Lambda, the larger dependencies need users to apply for higher performance Lambda containers. - -### 2.4 Container platform -For programming languages such as Python, building deployment packages in a local development environment is risky. The local environment is often different from the Lambda container environment in meaningful ways. Python wheels with compiled binaries, for example, may work on Mac but fail on Linux (typically with Python gRPC). The solution is building the SDK layer in a Docker Lambda image. Languages which support cross-compiling, such as Java or Go, don't have to be built in docker. -### 2.5 Auto instrumentation -It's important to clarify that auto-instrumentation is not library instrumentation; auto-instrumentation does not require any code changes within the user's application. Refer to the OpenTelemetry doc for [Python](https://opentelemetry-python.readthedocs.io/en/stable/examples/auto-instrumentation/README.html) and [Java](https://opentelemetry.io/docs/languages/java/automatic/). Enabling OpenTelemetry auto-instrumentation in Lambda is non-trivial and is language-specific. For more details, refer to [Lambda runtime modification](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-modify.html). Need to mention is right now not all languages support auto-instrumentation in OpenTelemetry. - -## 3. Implementation -### 3.1 Three wrappers -We can have three layers of wrapper on a user's Lambda function: ___Lambda function instrumentation___, ___execution wrapper___ and ___Lambda EXEC Wrapper___. Each one can add new functionality by wrapping the previous one, to further improve user experience. -![wrappers](https://user-images.githubusercontent.com/66336933/113330096-3af7b880-92d3-11eb-89bf-580ed8614807.png) -1. ___Lambda function instrumentation___: -Lambda function instrumentation is the first step of OpenTelemetry Lambda support, which is wrapping the Lambda handler function with beginSpan() and endSpan(), adding OpenTelemetry attributes by following [trace](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/faas/faas-spans.md) and [resource](https://github.com/open-telemetry/semantic-conventions/blob/main/docs/resource/faas.md) FaaS spec. Java and Python implementations are in place, other languages can refer to the code for them. -2. ___Lambda execution wrapper___: -Lambda execution wrapper uses reflection to dynamically decorate the user’s original Lambda function. It can add functionality to a user's existing Lambda function without changing source code, but the user must change the Lambda handler name and add the original handler path as an environment variable. With OpenTelemetry, the decoration can be anything, such as initializing OpenTelemetry components, calling instrumentation, or even implementing instrumentation directly. If desired, a developer can also merge Lambda function instrumentation and Lambda execution wrapper into one wrapper. -See [Java example](https://github.com/open-telemetry/opentelemetry-java-instrumentation/pull/1471/files) (decorate Lambda instrumentation) and [Python example](https://github.com/open-telemetry/opentelemetry-lambda/blob/main/python/src/otel/otel_sdk/otel_wrapper.py) (initialize OpenTelemetry components for auto-instrumentation). -3. ___Lambda EXEC Wrapper(Lambda native wrapper)___: -Lambda has a native [Wrapper scripts](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-modify.html#runtime-wrapper) feature which is triggered by environment variable AWS_LAMBDA_EXEC_WRAPPER. The Lambda EXEC Wrapper can couple with an execution wrapper to improve the UX, see [an example in Python](https://github.com/open-telemetry/opentelemetry-lambda/blob/main/python/src/otel/otel_sdk/otel-instrument). By it, users no need to change Lambda handler name and add the original handler path as an environment variable - -### 3.2 OpenTelemetry Collector extension Lambda layer -Unless using the SDK in-process exporter, the user must run OpenTelemetry Collector in Lambda sandbox to forward telemetry data to the backend service. Wrapped by Lambda Extensions API, Collector can run in Lambda sandbox independently. We should support that in the OpenTelemetry Lambda Repo. - -In previous technical challenges we mentioned two things: Memory consumption and size limit. Both can be solved by a smaller Collector size. At the moment OpenTelemetry Collector contrib binary is over 100MB, all of OpenTelemetry Collector components are built into it. But in a real case, an user may use only a few components. So, when we develop the OpenTelemetry collector extension layer, an ideal solution is to provide a build the Collector layer on demand functionality, by picking up the components used in Collector config. Or, at least provide an interface for dynamically mounting a cherry-pick of Collector components in Lambda extension layer. For the prototype please refer to [aws-observability/aws-otel-lambda](https://github.com/aws-observability/aws-otel-lambda/) - -### 3.3 OpenTelemetry SDK layer -As a prototype, Python is implemented in [current Repo](https://github.com/open-telemetry/opentelemetry-lambda/tree/main/python). - -We don’t provide SDK public layers for every language. This is required in the following two cases: -Languages with auto-instrumentation support, such as: -* Python -* Java - -Scripting languages such as: -* Python -* Node.js -* Ruby - -At the moment only Python and Java support auto-instrumentation. Other languages such as Go, .Net support library instrumentation only. For these languages, users must explicitly add OpenTelemetry SDK dependencies and instrumentation code, then re-compile the Lambda application to enable library instrumentation. In such cases we would not provide OpenTelemetry SDK layer because it does not help in compilation and deployment. - -Java SDK supports auto-instrumentation through javaagent, which will noticeably increase the program’s start time. In performance testing we see around 40 seconds for Lambda cold start if using OpenTelemetry javaagent. This is a concern in terms of providing a public Lambda layer for Java. We do see some users asking for OpenTelemetry Java auto-instrumentation in Lambda and aren’t concerned about long cold start times. For this reason, we still provide a public Lambda layer for Java and remind users of the impact in documentation. - -Even if we don't provide an SDK layer for a language, we still need to provide a sample demonstrating how to use it. The sample would refer to the OpenTelemetry SDK dependencies directly and consume the public Collector Lambda layer. For example, for time-sensitive users we will provide a sample of Java library instrumentation, as a complement of Java(agent based) auto-instrumentation layer. - -## 4. CI/CD convention -Each sample application and layer source folder must have a one-click script `run.sh`, to build and deploy OpenTelemetry Lambda application in a uniform manner. It is not only providing a good user experience but also for building a generic CI/CD workflow, github action can simply run tests and publish Lambda layer no matter what the stack tool(Terraform, CloudFormation), or language(Java, Python) the sample application is. -See an example for publishing [Python layer](../python/src/). \ No newline at end of file diff --git a/dotnet/README.md b/dotnet/README.md deleted file mode 100644 index 975558b93e..0000000000 --- a/dotnet/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenTelemetry Lambda .NET - -Nuget package for running .NET applications on AWS Lambda with OpenTelemetry. - -## Provided SDK - -[OpenTelemetry Lambda SDK for .NET](https://github.com/open-telemetry/opentelemetry-dotnet-contrib/tree/main/src/OpenTelemetry.Instrumentation.AWSLambda) includes tracing APIs to instrument Lambda handler and is provided on [Nuget](https://www.nuget.org/packages/OpenTelemetry.Instrumentation.AWSLambda/1.1.0-beta2). Follow the instructions on [user guide](https://aws-otel.github.io/docs/getting-started/lambda/lambda-dotnet#instrumentation) to manually instrument the Lambda handler. -For other instrumentations, such as http, you'll need to include the corresponding library instrumentation from the [instrumentation project](https://github.com/open-telemetry/opentelemetry-dotnet) and modify your code to initialize it in your function. - -## Provided Layer - -[OpenTelemetry Lambda Layer for Collector](https://aws-otel.github.io/docs/getting-started/lambda/lambda-dotnet#lambda-layer) includes OpenTelemetry Collector for Lambda components. Follow [user guide](https://aws-otel.github.io/docs/getting-started/lambda/lambda-dotnet#enable-tracing) to apply this layer to your Lambda handler that's already been instrumented with OpenTelemetry Lambda .NET SDK to enable end-to-end tracing. - -## Sample application - -The [sample application](https://github.com/open-telemetry/opentelemetry-lambda/blob/main/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/Function.cs) shows the manual instrumentations of OpenTelemetry Lambda .NET SDK on a Lambda handler that triggers a downstream request to AWS S3. diff --git a/dotnet/sample-apps/aws-sdk/deploy/wrapper/main.tf b/dotnet/sample-apps/aws-sdk/deploy/wrapper/main.tf deleted file mode 100644 index d154f09608..0000000000 --- a/dotnet/sample-apps/aws-sdk/deploy/wrapper/main.tf +++ /dev/null @@ -1,43 +0,0 @@ -module "hello-lambda-function" { - source = "terraform-aws-modules/lambda/aws" - version = ">= 2.24.0" - - architectures = compact([var.architecture]) - function_name = var.name - handler = "AwsSdkSample::AwsSdkSample.Function::TracingFunctionHandler" - runtime = "dotnet6" - - create_package = false - local_existing_package = "${path.module}/../../wrapper/SampleApps/build/function.zip" - - memory_size = 384 - timeout = 20 - - layers = compact([ - var.collector_layer_arn - ]) - - tracing_mode = var.tracing_mode - - attach_policy_statements = true - policy_statements = { - s3 = { - effect = "Allow" - actions = [ - "s3:ListAllMyBuckets" - ] - resources = [ - "*" - ] - } - } -} - -module "api-gateway" { - source = "../../../../../utils/terraform/api-gateway-proxy" - - name = var.name - function_name = module.hello-lambda-function.lambda_function_name - function_invoke_arn = module.hello-lambda-function.lambda_function_invoke_arn - enable_xray_tracing = var.tracing_mode == "Active" -} diff --git a/dotnet/sample-apps/aws-sdk/deploy/wrapper/outputs.tf b/dotnet/sample-apps/aws-sdk/deploy/wrapper/outputs.tf deleted file mode 100644 index 5de8044c90..0000000000 --- a/dotnet/sample-apps/aws-sdk/deploy/wrapper/outputs.tf +++ /dev/null @@ -1,7 +0,0 @@ -output "api-gateway-url" { - value = module.api-gateway.api_gateway_url -} - -output "function_role_name" { - value = module.hello-lambda-function.lambda_role_name -} diff --git a/dotnet/sample-apps/aws-sdk/deploy/wrapper/variables.tf b/dotnet/sample-apps/aws-sdk/deploy/wrapper/variables.tf deleted file mode 100644 index 54aa4f09dc..0000000000 --- a/dotnet/sample-apps/aws-sdk/deploy/wrapper/variables.tf +++ /dev/null @@ -1,22 +0,0 @@ -variable "name" { - type = string - description = "Name of created function and API Gateway" - default = "hello-dotnet-awssdk-wrapper" -} - -variable "collector_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry collector extension" -} - -variable "tracing_mode" { - type = string - description = "Lambda function tracing mode" - default = "PassThrough" -} - -variable "architecture" { - type = string - description = "Lambda function architecture, valid values are arm64 or x86_64" - default = "x86_64" -} diff --git a/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample.sln b/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample.sln deleted file mode 100644 index 4551fc2238..0000000000 --- a/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31112.23 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AwsSdkSample", "AwsSdkSample\AwsSdkSample.csproj", "{5D474E1F-C49C-486D-9398-5D8523D7C722}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5D474E1F-C49C-486D-9398-5D8523D7C722}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5D474E1F-C49C-486D-9398-5D8523D7C722}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D474E1F-C49C-486D-9398-5D8523D7C722}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5D474E1F-C49C-486D-9398-5D8523D7C722}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {EB75E573-89CA-4362-8A48-148AB6295EF8} - EndGlobalSection -EndGlobal diff --git a/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/AwsSdkSample.csproj b/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/AwsSdkSample.csproj deleted file mode 100644 index 6b9704ac45..0000000000 --- a/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/AwsSdkSample.csproj +++ /dev/null @@ -1,20 +0,0 @@ - - - net6.0 - true - Lambda - - - true - - - - - - - - - - - - diff --git a/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/Function.cs b/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/Function.cs deleted file mode 100644 index 4bc095f952..0000000000 --- a/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/Function.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Amazon.Lambda.APIGatewayEvents; -using Amazon.Lambda.Core; -using Amazon.S3; -using OpenTelemetry; -using OpenTelemetry.Contrib.Instrumentation.AWSLambda.Implementation; -using OpenTelemetry.Trace; -using System; - -// Assembly attribute to enable the Lambda function's JSON input to be converted into a .NET class. -[assembly: LambdaSerializer(typeof(Amazon.Lambda.Serialization.Json.JsonSerializer))] - -namespace AwsSdkSample -{ - public class Function - { - public static TracerProvider tracerProvider; - - static Function() - { - AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); - - tracerProvider = Sdk.CreateTracerProviderBuilder() - .AddAWSInstrumentation() - .AddOtlpExporter() - .AddAWSLambdaConfigurations() - .Build(); - } - - // use AwsSdkSample::AwsSdkSample.Function::TracingFunctionHandler as input Lambda handler instead - public APIGatewayProxyResponse TracingFunctionHandler(APIGatewayProxyRequest request, ILambdaContext context) - { - return AWSLambdaWrapper.Trace(tracerProvider, FunctionHandler, request, context); - } - - /// - /// A simple function that takes a APIGatewayProxyRequest and returns a APIGatewayProxyResponse - /// - /// - /// - /// - public APIGatewayProxyResponse FunctionHandler(APIGatewayProxyRequest request, ILambdaContext context) - { - var S3Client = new AmazonS3Client(); - _ = S3Client.ListBucketsAsync().Result; - return new APIGatewayProxyResponse() { StatusCode = 200, Body = "Hello Validator!" }; - } - } -} diff --git a/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/Properties/launchSettings.json b/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/Properties/launchSettings.json deleted file mode 100644 index adec93b9f3..0000000000 --- a/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/AwsSdkSample/Properties/launchSettings.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "profiles": { - "Mock Lambda Test Tool": { - "commandName": "Executable", - "commandLineArgs": "--port 5050", - "workingDirectory": ".\\bin\\$(Configuration)\\net6.0", - "executablePath": "%USERPROFILE%\\.dotnet\\tools\\dotnet-lambda-test-tool-6.0.exe" - } - } -} diff --git a/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/build.sh b/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/build.sh deleted file mode 100755 index 1056d35c3f..0000000000 --- a/dotnet/sample-apps/aws-sdk/wrapper/SampleApps/build.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh -set -e - -GOARCH=${GOARCH-amd64} - -# Chosen from Microsoft's documentation for Runtime Identifier (RIDs) -# See more: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog#linux-rids -if [ "$GOARCH" = "amd64" ]; then - DOTNET_LINUX_ARCH=x64 -elif [ "$GOARCH" = "arm64" ]; then - DOTNET_LINUX_ARCH=arm64 -else - echo "Invalid GOARCH value $(GOARCH) received." - exit 2 -fi - -mkdir -p build/dotnet -dotnet publish \ - --output "./build/dotnet" \ - --configuration "Release" \ - --framework "net6.0" /p:GenerateRuntimeConfigurationFiles=true \ - --runtime linux-$DOTNET_LINUX_ARCH \ - --self-contained false -cd build/dotnet -zip -r ../function.zip ./* diff --git a/go/README.md b/go/README.md deleted file mode 100644 index a44b2ec989..0000000000 --- a/go/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenTelemetry Lambda Go - -Examples of Go applications on AWS Lambda with OpenTelemetry. - -## Provided SDK - -[OpenTelemetry Lambda SDK for Go](https://github.com/open-telemetry/opentelemetry-go-contrib/tree/main/instrumentation/github.com/aws/aws-lambda-go/otellambda) includes tracing APIs to instrument Lambda handler. -For other instrumentations, such as http, you'll need to include the corresponding library instrumentation from the [instrumentation project](https://github.com/open-telemetry/opentelemetry-go) and modify your code to use it in your function. - -## Provided Layer - -[OpenTelemetry Lambda Layer for Collector](https://aws-otel.github.io/docs/getting-started/lambda/lambda-go#lambda-layer) includes OpenTelemetry Collector for Lambda components. Follow [user guide](https://aws-otel.github.io/docs/getting-started/lambda/lambda-go#enable-tracing) to apply this layer to your Lambda handler that's already been instrumented with OpenTelemetry Lambda .NET SDK to enable end-to-end tracing. - -## Sample application - -The [sample application](https://github.com/open-telemetry/opentelemetry-lambda/tree/main/go/sample-apps/function/function.go) shows the manual instrumentations of OpenTelemetry Lambda Go SDK on a Lambda handler that triggers downstream requests to AWS S3 and HTTP. diff --git a/go/sample-apps/aws-sdk/deploy/wrapper/main.tf b/go/sample-apps/aws-sdk/deploy/wrapper/main.tf deleted file mode 100644 index f62c6ba80f..0000000000 --- a/go/sample-apps/aws-sdk/deploy/wrapper/main.tf +++ /dev/null @@ -1,43 +0,0 @@ -module "hello-lambda-function" { - source = "terraform-aws-modules/lambda/aws" - version = ">= 2.24.0" - - architectures = compact([var.architecture]) - function_name = var.name - handler = "bootstrap" - runtime = "provided.al2" - - create_package = false - local_existing_package = "${path.module}/../../../function/build/bootstrap.zip" - - memory_size = 384 - timeout = 20 - - layers = compact([ - var.collector_layer_arn - ]) - - tracing_mode = var.tracing_mode - - attach_policy_statements = true - policy_statements = { - s3 = { - effect = "Allow" - actions = [ - "s3:ListAllMyBuckets" - ] - resources = [ - "*" - ] - } - } -} - -module "api-gateway" { - source = "../../../../../utils/terraform/api-gateway-proxy" - - name = var.name - function_name = module.hello-lambda-function.lambda_function_name - function_invoke_arn = module.hello-lambda-function.lambda_function_invoke_arn - enable_xray_tracing = var.tracing_mode == "Active" -} diff --git a/go/sample-apps/aws-sdk/deploy/wrapper/outputs.tf b/go/sample-apps/aws-sdk/deploy/wrapper/outputs.tf deleted file mode 100644 index 5de8044c90..0000000000 --- a/go/sample-apps/aws-sdk/deploy/wrapper/outputs.tf +++ /dev/null @@ -1,7 +0,0 @@ -output "api-gateway-url" { - value = module.api-gateway.api_gateway_url -} - -output "function_role_name" { - value = module.hello-lambda-function.lambda_role_name -} diff --git a/go/sample-apps/aws-sdk/deploy/wrapper/variables.tf b/go/sample-apps/aws-sdk/deploy/wrapper/variables.tf deleted file mode 100644 index d7b3f5ad3b..0000000000 --- a/go/sample-apps/aws-sdk/deploy/wrapper/variables.tf +++ /dev/null @@ -1,22 +0,0 @@ -variable "name" { - type = string - description = "Name of created function and API Gateway" - default = "hello-go-awssdk-wrapper" -} - -variable "collector_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry collector extension" -} - -variable "tracing_mode" { - type = string - description = "Lambda function tracing mode" - default = "PassThrough" -} - -variable "architecture" { - type = string - description = "Lambda function architecture, valid values are arm64 or x86_64" - default = "x86_64" -} diff --git a/go/sample-apps/function/build.sh b/go/sample-apps/function/build.sh deleted file mode 100755 index 14557b7f61..0000000000 --- a/go/sample-apps/function/build.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -set -e - -GOARCH=${GOARCH-amd64} - -mkdir -p build -CGO_ENABLED=0 GOOS=linux go build -o ./build/bootstrap . -cd build -zip bootstrap.zip bootstrap diff --git a/go/sample-apps/function/function.go b/go/sample-apps/function/function.go deleted file mode 100644 index e63da85c3d..0000000000 --- a/go/sample-apps/function/function.go +++ /dev/null @@ -1,104 +0,0 @@ -package main - -import ( - "context" - "encoding/json" - "fmt" - "io" - "net/http" - "os" - - "github.com/aws/aws-lambda-go/events" - "github.com/aws/aws-lambda-go/lambda" - awsconfig "github.com/aws/aws-sdk-go-v2/config" - "github.com/aws/aws-sdk-go-v2/service/s3" - - "go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda" - "go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda/xrayconfig" - "go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws" - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" - "go.opentelemetry.io/contrib/propagators/aws/xray" - "go.opentelemetry.io/otel" -) - -func lambdaHandler(ctx context.Context) func(ctx context.Context) (interface{}, error) { - // Initialize AWS config. - cfg, err := awsconfig.LoadDefaultConfig(ctx) - if err != nil { - panic("configuration error, " + err.Error()) - } - - // Instrument all AWS clients. - otelaws.AppendMiddlewares(&cfg.APIOptions) - // Create an instrumented S3 client from the config. - s3Client := s3.NewFromConfig(cfg) - - // Create an instrumented HTTP client. - httpClient := &http.Client{ - Transport: otelhttp.NewTransport( - http.DefaultTransport, - ), - } - - return func(ctx context.Context) (interface{}, error) { - input := &s3.ListBucketsInput{} - result, err := s3Client.ListBuckets(ctx, input) - if err != nil { - fmt.Printf("Got an error retrieving buckets, %v", err) - } - - fmt.Println("Buckets:") - for _, bucket := range result.Buckets { - fmt.Println(*bucket.Name + ": " + bucket.CreationDate.Format("2006-01-02 15:04:05 Monday")) - } - fmt.Println("End Buckets.") - - req, err := http.NewRequestWithContext(ctx, http.MethodGet, "https://api.github.com/repos/open-telemetry/opentelemetry-go/releases/latest", nil) - if err != nil { - fmt.Printf("failed to create http request, %v\n", err) - } - res, err := httpClient.Do(req) - if err != nil { - fmt.Printf("failed to make http request, %v\n", err) - } - defer func(Body io.ReadCloser) { - err := Body.Close() - if err != nil { - fmt.Printf("failed to close http response body, %v\n", err) - } - }(res.Body) - - var data map[string]interface{} - err = json.NewDecoder(res.Body).Decode(&data) - if err != nil { - fmt.Printf("failed to read http response body, %v\n", err) - } - fmt.Printf("Latest OTel Go Release is '%s'\n", data["name"]) - - return events.APIGatewayProxyResponse{ - StatusCode: http.StatusOK, - Body: os.Getenv("_X_AMZN_TRACE_ID"), - }, nil - } -} - -func main() { - ctx := context.Background() - - tp, err := xrayconfig.NewTracerProvider(ctx) - if err != nil { - fmt.Printf("error creating tracer provider: %v", err) - } - - defer func(ctx context.Context) { - err := tp.Shutdown(ctx) - if err != nil { - fmt.Printf("error shutting down tracer provider: %v", err) - } - }(ctx) - - otel.SetTracerProvider(tp) - otel.SetTextMapPropagator(xray.Propagator{}) - - lambda.Start(otellambda.InstrumentHandler(lambdaHandler(ctx), xrayconfig.WithRecommendedOptions(tp)... )) -} diff --git a/go/sample-apps/function/go.mod b/go/sample-apps/function/go.mod deleted file mode 100644 index 8b9edd28a3..0000000000 --- a/go/sample-apps/function/go.mod +++ /dev/null @@ -1,60 +0,0 @@ -module github.com/open-telemetry/opentelemetry-lambda/go/sample-apps/function - -go 1.26.1 - -require ( - github.com/aws/aws-lambda-go v1.54.0 - github.com/aws/aws-sdk-go-v2/config v1.32.14 - github.com/aws/aws-sdk-go-v2/service/s3 v1.98.0 - go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda v0.67.0 - go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda/xrayconfig v0.67.0 - go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.67.0 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 - go.opentelemetry.io/contrib/propagators/aws v1.42.0 - go.opentelemetry.io/otel v1.43.0 -) - -require ( - github.com/aws/aws-sdk-go-v2 v1.41.5 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.14 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22 // indirect - github.com/aws/aws-sdk-go-v2/service/dynamodb v1.56.1 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.11.19 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.9 // indirect - github.com/aws/aws-sdk-go-v2/service/sns v1.39.13 // indirect - github.com/aws/aws-sdk-go-v2/service/sqs v1.42.23 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.15 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 // indirect - github.com/aws/smithy-go v1.24.2 // indirect - github.com/cenkalti/backoff/v5 v5.0.3 // indirect - github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/go-logr/logr v1.4.3 // indirect - github.com/go-logr/stdr v1.2.2 // indirect - github.com/google/uuid v1.6.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0 // indirect - go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/detectors/aws/lambda v0.67.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0 // indirect - go.opentelemetry.io/otel/metric v1.43.0 // indirect - go.opentelemetry.io/otel/sdk v1.43.0 // indirect - go.opentelemetry.io/otel/trace v1.43.0 // indirect - go.opentelemetry.io/proto/otlp v1.9.0 // indirect - golang.org/x/net v0.51.0 // indirect - golang.org/x/sys v0.42.0 // indirect - golang.org/x/text v0.34.0 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect - google.golang.org/grpc v1.79.3 // indirect - google.golang.org/protobuf v1.36.11 // indirect -) diff --git a/go/sample-apps/function/go.sum b/go/sample-apps/function/go.sum deleted file mode 100644 index d37411f277..0000000000 --- a/go/sample-apps/function/go.sum +++ /dev/null @@ -1,204 +0,0 @@ -github.com/aws/aws-lambda-go v1.48.0 h1:1aZUYsrJu0yo5fC4z+Rba1KhNImXcJcvHu763BxoyIo= -github.com/aws/aws-lambda-go v1.48.0/go.mod h1:dpMpZgvWx5vuQJfBt0zqBha60q7Dd7RfgJv23DymV8A= -github.com/aws/aws-lambda-go v1.52.0/go.mod h1:dpMpZgvWx5vuQJfBt0zqBha60q7Dd7RfgJv23DymV8A= -github.com/aws/aws-lambda-go v1.54.0/go.mod h1:dpMpZgvWx5vuQJfBt0zqBha60q7Dd7RfgJv23DymV8A= -github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM= -github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= -github.com/aws/aws-sdk-go-v2 v1.41.1/go.mod h1:MayyLB8y+buD9hZqkCW3kX1AKq07Y5pXxtgB+rRFhz0= -github.com/aws/aws-sdk-go-v2 v1.41.5/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.4/go.mod h1:IOAPF6oT9KCsceNTvvYMNHy0+kMF8akOjeDvPENWxp4= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.8/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= -github.com/aws/aws-sdk-go-v2/config v1.29.14 h1:f+eEi/2cKCg9pqKBoAIwRGzVb70MRKqWX4dg1BDcSJM= -github.com/aws/aws-sdk-go-v2/config v1.29.14/go.mod h1:wVPHWcIFv3WO89w0rE10gzf17ZYy+UVS1Geq8Iei34g= -github.com/aws/aws-sdk-go-v2/config v1.32.7/go.mod h1:2/Qm5vKUU/r7Y+zUk/Ptt2MDAEKAfUtKc1+3U1Mo3oY= -github.com/aws/aws-sdk-go-v2/config v1.32.14/go.mod h1:U4/V0uKxh0Tl5sxmCBZ3AecYny4UNlVmObYjKuuaiOo= -github.com/aws/aws-sdk-go-v2/credentials v1.17.67 h1:9KxtdcIA/5xPNQyZRgUSpYOE6j9Bc4+D7nZua0KGYOM= -github.com/aws/aws-sdk-go-v2/credentials v1.17.67/go.mod h1:p3C44m+cfnbv763s52gCqrjaqyPikj9Sg47kUVaNZQQ= -github.com/aws/aws-sdk-go-v2/credentials v1.19.7/go.mod h1:qOZk8sPDrxhf+4Wf4oT2urYJrYt3RejHSzgAquYeppw= -github.com/aws/aws-sdk-go-v2/credentials v1.19.14/go.mod h1:cJKuyWB59Mqi0jM3nFYQRmnHVQIcgoxjEMAbLkpr62w= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.17/go.mod h1:tyw7BOl5bBe/oqvoIeECFJjMdzXoa/dfVz3QQ5lgHGA= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.21/go.mod h1:YWNWJQNjKigKY1RHVJCuupeWDrrHjRqHm0N9rdrWzYI= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.17/go.mod h1:5M5CI3D12dNOtH3/mk6minaRwI2/37ifCURZISxA/IQ= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.21/go.mod h1:A/kJFst/nm//cyqonihbdpQZwiUhhzpqTsdbhDdRF9c= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34/go.mod h1:dFZsC0BLo346mvKQLWmoJxT+Sjp+qcVR1tRVHQGOH9Q= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.17/go.mod h1:EhG22vHRrvF8oXSTYStZhJc1aUgKtnJe+aOiFEV90cM= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.21/go.mod h1:p+hz+PRAYlY3zcpJhPwXlLC4C+kqn70WIHwnzAfs6ps= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.17/go.mod h1:CO+WeGmIdj/MlPel2KwID9Gt7CNq4M65HUfBW97liM0= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.22/go.mod h1:zd/JsJ4P7oGfUhXn1VyLqaRZwPmZwg44Jf2dS84Dm3Y= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.41.1 h1:DEys4E5Q2p735j56lteNVyByIBDAlMrO5VIEd9RC0/4= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.41.1/go.mod h1:yYaWRnVSPyAmexW5t7G3TcuYoalYfT+xQwzWsvtUQ7M= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.53.3/go.mod h1:WEsxUgfGPWPlFv6MzEqAOZnQubdUHIR7RWSxs1P3/5c= -github.com/aws/aws-sdk-go-v2/service/dynamodb v1.56.1/go.mod h1:OQp5333OH1IjmJmJpTU4IwoaOoCMnDrThg0zIx169rE= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.4/go.mod h1:HQ4qwNZh32C3CBeO6iJLQlgtMzqeG17ziAA/3KDJFow= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1 h1:4nm2G6A4pV9rdlWzGMPv4BNtQp22v1hg3yrtkYpeLl8= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.8/go.mod h1:FsTpJtvC4U1fyDXk7c71XoDv3HlRm8V3NiYLeYLh5YE= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.13/go.mod h1:CEuVn5WqOMilYl+tbccq8+N2ieCy0gVn3OtRb0vBNNM= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.15 h1:M1R1rud7HzDrfCdlBQ7NjnRsDNEhXO/vGhuD189Ggmk= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.10.15/go.mod h1:uvFKBSq9yMPV4LGAi7N4awn4tLY+hKE35f8THes2mzQ= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.11.15/go.mod h1:kePbIvbXUXhddSN7CQ4OW8l9mpI611/4iqDdhF6UNkw= -github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.11.19/go.mod h1:Dgg2d5WGRr7YB8JJsELskBxLUhgwWppXPwlvmuQKhbc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.17/go.mod h1:F2xxQ9TZz5gDWsclCtPQscGpP0VUOc8RqgFM3vDENmU= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.21/go.mod h1:r6+pf23ouCB718FUxaqzZdbpYFyDtehyZcmP5KL9FkA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.17/go.mod h1:dcW24lbU0CzHusTE8LLHhRLI42ejmINN8Lcr22bwh/g= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.21/go.mod h1:cv3TNhVrssKR0O/xxLJVRfd2oazSnZnkUeTf6ctUwfQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 h1:BRXS0U76Z8wfF+bnkilA2QwpIch6URlm++yPUt9QPmQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3/go.mod h1:bNXKFFyaiVvWuR6O16h/I1724+aXe/tAkA9/QS01t5k= -github.com/aws/aws-sdk-go-v2/service/s3 v1.95.1/go.mod h1:5jggDlZ2CLQhwJBiZJb4vfk4f0GxWdEDruWKEJ1xOdo= -github.com/aws/aws-sdk-go-v2/service/s3 v1.98.0/go.mod h1:uoA43SdFwacedBfSgfFSjjCvYe8aYBS7EnU5GZ/YKMM= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.5/go.mod h1:k029+U8SY30/3/ras4G/Fnv/b88N4mAfliNn08Dem4M= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.9/go.mod h1:7yuQJoT+OoH8aqIxw9vwF+8KpvLZ8AWmvmUWHsGQZvI= -github.com/aws/aws-sdk-go-v2/service/sns v1.34.1 h1:dorU2TjYGV8plbMxNNMMKC3IhMG6FdrMkVTdW92iXWM= -github.com/aws/aws-sdk-go-v2/service/sns v1.34.1/go.mod h1:PJtxxMdj747j8DeZENRTTYAz/lx/pADn/U0k7YNNiUY= -github.com/aws/aws-sdk-go-v2/service/sns v1.39.8/go.mod h1:3aOzyhwa/mXPZYLwGaALfl88GFRXHQKXdyQSq2L/Y4g= -github.com/aws/aws-sdk-go-v2/service/sns v1.39.13/go.mod h1:RwF6Xnba8PlINxJUQq1IAWeon6IglvqsnhNqV8QsQjk= -github.com/aws/aws-sdk-go-v2/service/sqs v1.38.1 h1:ZtgZeMPJH8+/vNs9vJFFLI0QEzYbcN0p7x1/FFwyROc= -github.com/aws/aws-sdk-go-v2/service/sqs v1.38.1/go.mod h1:Bar4MrRxeqdn6XIh8JGfiXuFRmyrrsZNTJotxEJmWW0= -github.com/aws/aws-sdk-go-v2/service/sqs v1.42.18/go.mod h1:Ii4ZZhKuXo8+is8A+9AZo2vXeCfFJyR+pXHUromSz+U= -github.com/aws/aws-sdk-go-v2/service/sqs v1.42.23/go.mod h1:MdjRkQEd2EUOiifYnkg/6f1NGtZSN3dFOLNByzufXok= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.9/go.mod h1:yifAsgBxgJWn3ggx70A3urX2AN49Y5sJTD1UQFlfqBw= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.15/go.mod h1:WSvS1NLr7JaPunCXqpJnWk1Bjo7IxzZXrZi1QQCkuqM= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.13/go.mod h1:sTGThjphYE4Ohw8vJiRStAcu3rbjtXRsdNB0TvZ5wwo= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19/go.mod h1:YO8TrYtFdl5w/4vmjL8zaBSsiNp3w0L1FfKVKenZT7w= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 h1:1XuUZ8mYJw9B6lzAkXhqHlJd/XvaX32evhproijJEZY= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.19/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.6/go.mod h1:qgFDZQSD/Kys7nJnVqYlWKnh0SSdMjAi0uSwON4wgYQ= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.10/go.mod h1:60dv0eZJfeVXfbT1tFJinbHrDfSJ2GZl4Q//OSSNAVw= -github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= -github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= -github.com/aws/smithy-go v1.24.0/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= -github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= -github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= -github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= -github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= -github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= -github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= -github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 h1:e9Rjr40Z98/clHv5Yg79Is0NtosR5LXRvdr7o/6NwbA= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1/go.mod h1:tIxuGz/9mpox++sgp9fJjHO0+q1X9/UOWd798aAm22M= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.28.0/go.mod h1:JfhWUomR1baixubs02l85lZYYOm7LV6om4ceouMv45c= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/detectors/aws/lambda v0.60.0 h1:Om6pskLDlk/7z2GnEd5EPKicRyHDxAllB/blwBtRUGs= -go.opentelemetry.io/contrib/detectors/aws/lambda v0.60.0/go.mod h1:nBBYZA5XJqgevAUMvhvmnFmRDRZDy6eNmoYzLEDJAVQ= -go.opentelemetry.io/contrib/detectors/aws/lambda v0.64.0/go.mod h1:sRXgZQ1m7fZlyTPJQeNkScMlhySpHqvRIq0+UwZ5ofA= -go.opentelemetry.io/contrib/detectors/aws/lambda v0.67.0/go.mod h1:0L6WcImiS7RhA4efv73oeb9L3h4VaHISUanB26kGU8M= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda v0.60.0 h1:pUL0uJo/nr07jm4rmgWpXmPoWGg3ufJo07uQdwIr1Ic= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda v0.60.0/go.mod h1:8vxU8w5vU1dq46EtJ6VuL3fQh7Zoxnz2hzSSn7mfkb8= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda v0.64.0/go.mod h1:iLhDTlzTiMAMo+w9hesBfNW5LXJRgC5igBT/672q6yA= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda v0.67.0/go.mod h1:ueV0rM1bkwyftjkj9OsH/bLiIOlTZJBBukIqwr8TNbo= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda/xrayconfig v0.60.0 h1:QpJGbx2YZDhrQs+aALs5FswaWMQgdsz41kgBipDT8RU= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda/xrayconfig v0.60.0/go.mod h1:trx2Ge8m+3F9SX8CyNNgciApOBivS5SrdDsXz8PnZPg= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda/xrayconfig v0.64.0/go.mod h1:MVrsOs3VAo5TvS6qmVw0eyyIEleQm8Nt5JOK1wGPnKQ= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda/xrayconfig v0.67.0/go.mod h1:YCruOZhOhgPCoZ5dYJkREKgthoZyfyZMqbxT6jTM9S0= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.60.0 h1:QYOihN1vm5VfwcOIJnjW0NyYvH0dc+2TweGdhcLafww= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.60.0/go.mod h1:2BuYX+IdOOB7buxg7p2OJArUPbLp564rIYMGdFJytPk= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.64.0/go.mod h1:LgtjWWXo7OpbSMkXnTlT2jrGtdI6Fmipn8UJCIgbqzg= -go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-sdk-go-v2/otelaws v0.67.0/go.mod h1:xOd0/OgHjAtW47zPn48sC7n/pUxunDQfDc9qG3ZtSn0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0/go.mod h1:GQ/474YrbE4Jx8gZ4q5I4hrhUzM6UPzyrqJYV2AqPoQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= -go.opentelemetry.io/contrib/propagators/aws v1.35.0 h1:xoXA+5dVwsf5uE5GvSJ3lKiapyMFuIzbEmJwQ0JP+QU= -go.opentelemetry.io/contrib/propagators/aws v1.35.0/go.mod h1:s11Orts/IzEgw9Srw5iRXtk2kM2j3jt/45noUWyf60E= -go.opentelemetry.io/contrib/propagators/aws v1.39.0/go.mod h1:TUsFCERuGM4IGhJG9w+9l0nzmHUKHuaDYYNF6mtNgjY= -go.opentelemetry.io/contrib/propagators/aws v1.42.0/go.mod h1:Jzw9hZHtxdpCN7x8S17UH59X/EiFivp6VXLs9bdM1OQ= -go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= -go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= -go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= -go.opentelemetry.io/otel v1.43.0/go.mod h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 h1:1fTNlAIJZGWLP5FVu0fikVry1IsiUnXjf7QFvoNN3Xw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0/go.mod h1:zjPK58DtkqQFn+YUMbx0M2XV3QgKU0gS9LeGohREyK4= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.42.0/go.mod h1:J2pvYM5NGHofZ2/Ru6zw/TNWnEQp5crgyDeSrYpXkAw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 h1:m639+BofXTvcY1q8CGs4ItwQarYtJPOWmVobfM1HpVI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0/go.mod h1:LjReUci/F4BUyv+y4dwnq3h/26iNOeC3wAIqgvTIZVo= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0/go.mod h1:Rp0EXBm5tfnv0WL+ARyO/PHBEaEAT8UUHQ6AGJcSq6c= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.42.0/go.mod h1:2qXPNBX1OVRC0IwOnfo1ljoid+RD0QK3443EaqVlsOU= -go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= -go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= -go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= -go.opentelemetry.io/otel/metric v1.43.0/go.mod h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY= -go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= -go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= -go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o= -go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w= -go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= -go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= -go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= -go.opentelemetry.io/otel/trace v1.43.0/go.mod h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0= -go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4= -go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4= -go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= -go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= -go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= -golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= -golang.org/x/net v0.51.0/go.mod h1:aamm+2QF5ogm02fjy5Bb7CQ0WMt1/WVM7FtyaTLlA9Y= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= -golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= -google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= -google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= -google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= -gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/java/README.md b/java/README.md deleted file mode 100644 index 402d306d9f..0000000000 --- a/java/README.md +++ /dev/null @@ -1,102 +0,0 @@ -# OpenTelemetry Lambda Java - -Layers for running Java applications on AWS Lambda with OpenTelemetry. - -## Prerequisites - -- Supports Lambda functions using Java 8 (java8.al2) and later -- The deprecated runtime Java 8 (java8) is not supported as it does not support [exec wrappers](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-modify.html#runtime-wrapper). - -## Provided layers - -Two types of layers are provided - -### Java agent - -The [OpenTelemetry Java Agent](https://github.com/open-telemetry/opentelemetry-java-instrumentation) -is bundled into the base of the layer and can be loaded into a Lambda function by specifying the -`AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler` in your Lambda configuration. The agent will be automatically -loaded and instrument your application for all supported libraries. - -Note, automatic instrumentation has a notable impact on startup time on AWS Lambda and you will -generally need to use this along with provisioned concurrency and warmup requests to serve production -requests without causing timeouts on initial requests while it initializes. - -#### Fast startup for Java agent - -Fast startup mode is disabled by default but can be enabled by specifying the `OTEL_JAVA_AGENT_FAST_STARTUP_ENABLED=true` -in your Lambda configuration. - -When fast startup mode is enabled, **JIT** (Just-In-Time) **Tiered compilation** is configured to stop at level 1 -and bytecode verification is disabled. So, the JVM uses the **C1** compiler which is optimized for fast start-up time. -This compiler (**C1**) quickly produces optimized native code -but it does not generate any profiling data and never uses the **C2** compiler -which optimized for the best overall performance but uses more memory and takes a longer time to achieve it. -Therefore, this option is not enabled by default and needs to be enabled by the user explicitly -by taking care of the behavioural change mentioned above. - -For more information about the idea behind this optimization, you can check the following resources: -- https://aws.amazon.com/tr/blogs/compute/optimizing-aws-lambda-function-performance-for-java/ -- https://aws.amazon.com/tr/blogs/compute/increasing-performance-of-java-aws-lambda-functions-using-tiered-compilation/ - -### Wrapper - -[OpenTelemetry Lambda Instrumentation](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/aws-lambda) -and [OpenTelemetry SDK](https://github.com/open-telemetry/opentelemetry-java) are bundled into the -`java/lib` directory to be available on the classpath of the Lambda function. No code change is -needed to instrument the execution of your function, but you will need to set the `AWS_LAMBDA_EXEC_WRAPPER` -environment variable pointing to the appropriate wrapper for the type of handler. - -- `/opt/otel-handler` - for wrapping regular handlers (implementing RequestHandler) -- `/opt/otel-sqs-handler` - for wrapping SQS-triggered function handlers (implementing RequestHandler) -- `/opt/otel-proxy-handler` - for wrapping regular handlers (implementing RequestHandler) proxied through API Gateway, enabling HTTP context propagation -- `/opt/otel-stream-handler` - for wrapping streaming handlers (implementing RequestStreamHandler), enabling HTTP context propagation for HTTP requests - -[AWS SDK instrumentation](https://github.com/open-telemetry/opentelemetry-java-instrumentation/tree/main/instrumentation/aws-sdk/aws-sdk-2.2/library) is also -included and loaded automatically if you use the AWS SDK. - -For any other library, such as OkHttp, you will need to include the corresponding library instrumentation -from the [instrumentation project](https://github.com/open-telemetry/opentelemetry-java-instrumentation) and -modify your code to initialize it in your function. - -## Configuring Context Propagators - -### If you emit your traces to AWS X-Ray (instead of a third-party service) and have enabled X-Ray Active Tracing -Please use the following environment variable for your lambda: -`OTEL_PROPAGATORS=tracecontext,baggage,xray-lambda` - -### If you emit your traces to another system besides AWS X-Ray (Default Setting) -The following propagators are configured by default, but you can use this environment variable to customize it: -`OTEL_PROPAGATORS=tracecontext,baggage,xray` - - -For more information please read: https://opentelemetry.io/docs/specs/semconv/faas/aws-lambda - -## Building - -To build the Java Agent layer, run - -``` -./gradlew :layer-javaagent:build -``` - -The layer zip file will be present at `./layer-javaagent/build/distributions/opentelemetry-javaagent-layer.zip`. - -To build the wrapper layer, run - -``` -./gradlew :layer-wrapper:build -``` - -The layer zip file will be present at `./layer-wrapper/build/distributions/opentelemetry-javawrapper-layer.zip`. - -## Sample applications - -Sample applications are provided to show usage the above layers. - -- [Application using AWS SDK](./sample-apps/aws-sdk) - shows how both the wrapper and agent can be used - with an application using AWS SDK without code change. - -- [Application using OkHttp](./sample-apps/okhttp) - shows the manual initialization of OkHttp - library instrumentation for use with the wrapper. The agent would be usable without such a code change - at the expense of the cold start overhead it introduces. diff --git a/java/awssdk-autoconfigure/build.gradle.kts b/java/awssdk-autoconfigure/build.gradle.kts deleted file mode 100644 index ec0d651df4..0000000000 --- a/java/awssdk-autoconfigure/build.gradle.kts +++ /dev/null @@ -1,14 +0,0 @@ -// TODO(anuraaga): Move this into instrumentation repo - -plugins { - `java-library` -} - -base.archivesName = "opentelemetry-lambda-awsdk-autoconfigure" - -dependencies { - compileOnly("io.opentelemetry:opentelemetry-api") - compileOnly("software.amazon.awssdk:aws-core") - - implementation("io.opentelemetry.instrumentation:opentelemetry-aws-sdk-2.2") -} diff --git a/java/awssdk-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/autoconfigure/AutoconfiguredTracingExecutionInterceptor.java b/java/awssdk-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/autoconfigure/AutoconfiguredTracingExecutionInterceptor.java deleted file mode 100644 index 0b8477f9f8..0000000000 --- a/java/awssdk-autoconfigure/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/autoconfigure/AutoconfiguredTracingExecutionInterceptor.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.awssdk.v2_2.autoconfigure; - -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.api.internal.ConfigPropertiesUtil; -import io.opentelemetry.instrumentation.awssdk.v2_2.AwsSdkTelemetry; -import java.io.InputStream; -import java.nio.ByteBuffer; -import java.util.Optional; -import org.reactivestreams.Publisher; -import software.amazon.awssdk.core.SdkRequest; -import software.amazon.awssdk.core.SdkResponse; -import software.amazon.awssdk.core.async.AsyncRequestBody; -import software.amazon.awssdk.core.interceptor.Context; -import software.amazon.awssdk.core.interceptor.ExecutionAttributes; -import software.amazon.awssdk.core.interceptor.ExecutionInterceptor; -import software.amazon.awssdk.core.sync.RequestBody; -import software.amazon.awssdk.http.SdkHttpRequest; -import software.amazon.awssdk.http.SdkHttpResponse; - -/** - * A {@link ExecutionInterceptor} for use as an SPI by the AWS SDK to automatically trace all - * requests. - */ -public class AutoconfiguredTracingExecutionInterceptor implements ExecutionInterceptor { - - private static final boolean CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES = - ConfigPropertiesUtil.getBoolean( - "otel.instrumentation.aws-sdk.experimental-span-attributes", false); - - private final ExecutionInterceptor delegate = - AwsSdkTelemetry.builder(GlobalOpenTelemetry.get()) - .setCaptureExperimentalSpanAttributes(CAPTURE_EXPERIMENTAL_SPAN_ATTRIBUTES) - .build() - .createExecutionInterceptor(); - - @Override - public void beforeExecution( - Context.BeforeExecution context, ExecutionAttributes executionAttributes) { - delegate.beforeExecution(context, executionAttributes); - } - - @Override - public SdkRequest modifyRequest( - Context.ModifyRequest context, ExecutionAttributes executionAttributes) { - return delegate.modifyRequest(context, executionAttributes); - } - - @Override - public void beforeMarshalling( - Context.BeforeMarshalling context, ExecutionAttributes executionAttributes) { - delegate.beforeMarshalling(context, executionAttributes); - } - - @Override - public void afterMarshalling( - Context.AfterMarshalling context, ExecutionAttributes executionAttributes) { - delegate.afterMarshalling(context, executionAttributes); - } - - @Override - public SdkHttpRequest modifyHttpRequest( - Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) { - return delegate.modifyHttpRequest(context, executionAttributes); - } - - @Override - public Optional modifyHttpContent( - Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) { - return delegate.modifyHttpContent(context, executionAttributes); - } - - @Override - public Optional modifyAsyncHttpContent( - Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) { - return delegate.modifyAsyncHttpContent(context, executionAttributes); - } - - @Override - public void beforeTransmission( - Context.BeforeTransmission context, ExecutionAttributes executionAttributes) { - delegate.beforeTransmission(context, executionAttributes); - } - - @Override - public void afterTransmission( - Context.AfterTransmission context, ExecutionAttributes executionAttributes) { - delegate.afterTransmission(context, executionAttributes); - } - - @Override - public SdkHttpResponse modifyHttpResponse( - Context.ModifyHttpResponse context, ExecutionAttributes executionAttributes) { - return delegate.modifyHttpResponse(context, executionAttributes); - } - - @Override - public Optional> modifyAsyncHttpResponseContent( - Context.ModifyHttpResponse context, ExecutionAttributes executionAttributes) { - return delegate.modifyAsyncHttpResponseContent(context, executionAttributes); - } - - @Override - public Optional modifyHttpResponseContent( - Context.ModifyHttpResponse context, ExecutionAttributes executionAttributes) { - return delegate.modifyHttpResponseContent(context, executionAttributes); - } - - @Override - public void beforeUnmarshalling( - Context.BeforeUnmarshalling context, ExecutionAttributes executionAttributes) { - delegate.beforeUnmarshalling(context, executionAttributes); - } - - @Override - public void afterUnmarshalling( - Context.AfterUnmarshalling context, ExecutionAttributes executionAttributes) { - delegate.afterUnmarshalling(context, executionAttributes); - } - - @Override - public SdkResponse modifyResponse( - Context.ModifyResponse context, ExecutionAttributes executionAttributes) { - return delegate.modifyResponse(context, executionAttributes); - } - - @Override - public void afterExecution( - Context.AfterExecution context, ExecutionAttributes executionAttributes) { - delegate.afterExecution(context, executionAttributes); - } - - @Override - public Throwable modifyException( - Context.FailedExecution context, ExecutionAttributes executionAttributes) { - return delegate.modifyException(context, executionAttributes); - } - - @Override - public void onExecutionFailure( - Context.FailedExecution context, ExecutionAttributes executionAttributes) { - delegate.onExecutionFailure(context, executionAttributes); - } -} diff --git a/java/awssdk-autoconfigure/src/main/resources/software/amazon/awssdk/global/handlers/execution.interceptors b/java/awssdk-autoconfigure/src/main/resources/software/amazon/awssdk/global/handlers/execution.interceptors deleted file mode 100644 index 13d283db43..0000000000 --- a/java/awssdk-autoconfigure/src/main/resources/software/amazon/awssdk/global/handlers/execution.interceptors +++ /dev/null @@ -1 +0,0 @@ -io.opentelemetry.instrumentation.awssdk.v2_2.autoconfigure.AutoconfiguredTracingExecutionInterceptor diff --git a/java/build.gradle.kts b/java/build.gradle.kts deleted file mode 100644 index 7693c66f43..0000000000 --- a/java/build.gradle.kts +++ /dev/null @@ -1,32 +0,0 @@ -plugins { - id("com.diffplug.spotless") -} - -allprojects { - group = "io.opentelemetry.lambda" - - plugins.apply("com.diffplug.spotless") - - plugins.withId("java") { - configure { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - spotless { - java { - googleJavaFormat() - } - } - - dependencies { - afterEvaluate { - configurations.configureEach { - if (!isCanBeResolved && !isCanBeConsumed) { - add(name, enforcedPlatform(project(":dependencyManagement"))) - } - } - } - } - } -} diff --git a/java/dependencyManagement/build.gradle.kts b/java/dependencyManagement/build.gradle.kts deleted file mode 100644 index c6ff1c9014..0000000000 --- a/java/dependencyManagement/build.gradle.kts +++ /dev/null @@ -1,58 +0,0 @@ -import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask - -plugins { - `java-platform` - - id("com.github.ben-manes.versions") -} - -data class DependencySet(val group: String, val version: String, val modules: List) - -val DEPENDENCY_BOMS = listOf( - "io.opentelemetry.instrumentation:opentelemetry-instrumentation-bom-alpha:2.26.1-alpha", - "org.apache.logging.log4j:log4j-bom:2.25.4", - "software.amazon.awssdk:bom:2.42.33" -) - -val DEPENDENCIES = listOf( - "com.amazonaws:aws-lambda-java-core:1.4.0", - "com.amazonaws:aws-lambda-java-events:3.16.1", - "com.squareup.okhttp3:okhttp:5.3.2", - "io.opentelemetry.javaagent:opentelemetry-javaagent:2.26.1", - "io.opentelemetry:opentelemetry-sdk-extension-aws:1.19.0", - "io.opentelemetry.contrib:opentelemetry-aws-resources:1.55.0-alpha", -) - -javaPlatform { - allowDependencies() -} - -dependencies { - for (bom in DEPENDENCY_BOMS) { - api(platform(bom)) - } - constraints { - for (dependency in DEPENDENCIES) { - api(dependency) - } - } -} - -fun isNonStable(version: String): Boolean { - val stableKeyword = listOf("RELEASE", "FINAL", "GA").any { version.uppercase().contains(it) } - val regex = "^[0-9,.v-]+(-r)?$".toRegex() - val isGuava = version.endsWith("-jre") - val isStable = stableKeyword || regex.matches(version) || isGuava - return isStable.not() -} - -tasks { - named("dependencyUpdates") { - revision = "release" - checkConstraints = true - - rejectVersionIf { - isNonStable(candidate.version) - } - } -} diff --git a/java/gradle.properties b/java/gradle.properties deleted file mode 100644 index 9b59242411..0000000000 --- a/java/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -org.gradle.parallel=true -org.gradle.caching=true -org.gradle.vfs.watch=true - -org.gradle.warning.mode=fail diff --git a/java/gradle/wrapper/gradle-wrapper.jar b/java/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index d997cfc60f4cff0e7451d19d49a82fa986695d07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48966 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

`Lem|V$A>eR0uN8Y&sdjtu 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

1bvi{DS7E@q1{$_8->K{_OWv2 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 diff --git a/java/gradle/wrapper/gradle-wrapper.properties b/java/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 8e61ef1259..0000000000 --- a/java/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,8 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionSha256Sum=2ab2958f2a1e51120c326cad6f385153bb11ee93b3c216c5fccebfdfbb7ec6cb -distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/java/gradlew b/java/gradlew deleted file mode 100755 index 739907dfd1..0000000000 --- a/java/gradlew +++ /dev/null @@ -1,248 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015 the original 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. -# -# SPDX-License-Identifier: Apache-2.0 -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/2d6327017519d23b96af35865dc997fcb544fb40/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/java/gradlew.bat b/java/gradlew.bat deleted file mode 100644 index e509b2dd8f..0000000000 --- a/java/gradlew.bat +++ /dev/null @@ -1,93 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/java/layer-javaagent/build.gradle.kts b/java/layer-javaagent/build.gradle.kts deleted file mode 100644 index edb557c84b..0000000000 --- a/java/layer-javaagent/build.gradle.kts +++ /dev/null @@ -1,34 +0,0 @@ -plugins { - `java-library` -} - -val agentClasspath by configurations.creating { - extendsFrom(configurations["implementation"]) - isCanBeConsumed = false - isCanBeResolved = true - attributes { - attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling::class.java, Bundling.SHADOWED)) - } -} - -dependencies { - // version set in dependencyManagement/build.gradle.kts - implementation("io.opentelemetry.javaagent:opentelemetry-javaagent") -} - -tasks { - val createLayer by registering(Zip::class) { - archiveFileName.set("opentelemetry-javaagent-layer.zip") - destinationDirectory.set(file("$buildDir/distributions")) - - from(agentClasspath) { - rename(".*.jar", "opentelemetry-javaagent.jar") - } - - from("scripts") - } - - named("assemble") { - dependsOn(createLayer) - } -} diff --git a/java/layer-javaagent/scripts/otel-handler b/java/layer-javaagent/scripts/otel-handler deleted file mode 100755 index adb31a263e..0000000000 --- a/java/layer-javaagent/scripts/otel-handler +++ /dev/null @@ -1,40 +0,0 @@ -#!/bin/bash - -set -ef -o pipefail - -export JAVA_TOOL_OPTIONS="-javaagent:/opt/opentelemetry-javaagent.jar ${JAVA_TOOL_OPTIONS}" - -if [[ $OTEL_RESOURCE_ATTRIBUTES != *"service.name="* ]]; then - export OTEL_RESOURCE_ATTRIBUTES="service.name=${AWS_LAMBDA_FUNCTION_NAME},${OTEL_RESOURCE_ATTRIBUTES}" -fi - -if [[ -z "$OTEL_PROPAGATORS" ]]; then - export OTEL_PROPAGATORS="tracecontext,baggage,xray" -fi - -export OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT=10000 - -######################################## - -ARGS=("$@") -EXTRA_ARGS=() - -if [ "${OTEL_JAVA_AGENT_FAST_STARTUP_ENABLED}" == "true" ]; then - echo "[OTEL] Enabling fast startup mode ..." - # Disable bytecode verification - EXTRA_ARGS+=("-Xverify:none") - # Be sure that tiered compilation is enabled - EXTRA_ARGS+=("-XX:+TieredCompilation") - # Stop tiered compilation at level 1 - EXTRA_ARGS+=("-XX:TieredStopAtLevel=1") - for i in "${!ARGS[@]}"; do - # If tiered compilation is disabled, ignore it as we enable it at level 1 for fast startup - if [[ ${ARGS[i]} = "-XX:-TieredCompilation" ]]; then - unset 'ARGS[i]' - fi - done -fi - -ARGS=("${ARGS[0]}" "${EXTRA_ARGS[@]}" "${ARGS[@]:1}") - -exec "${ARGS[@]}" diff --git a/java/layer-wrapper/build.gradle.kts b/java/layer-wrapper/build.gradle.kts deleted file mode 100644 index 971207ed5e..0000000000 --- a/java/layer-wrapper/build.gradle.kts +++ /dev/null @@ -1,42 +0,0 @@ -plugins { - `java-library` -} - -dependencies { - runtimeOnly(project(":awssdk-autoconfigure")) - - runtimeOnly("io.opentelemetry.instrumentation:opentelemetry-aws-lambda-events-3.11") - runtimeOnly("io.opentelemetry:opentelemetry-exporter-logging") - runtimeOnly("io.opentelemetry:opentelemetry-exporter-otlp") - runtimeOnly("io.opentelemetry:opentelemetry-extension-trace-propagators") - runtimeOnly("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure") - runtimeOnly("io.opentelemetry.contrib:opentelemetry-aws-resources") -} - -tasks { - val createLayer by registering(Zip::class) { - archiveFileName.set("opentelemetry-javawrapper-layer.zip") - destinationDirectory.set(file("$buildDir/distributions")) - - from(configurations["runtimeClasspath"]) { - into("java/lib") - } - - // Can be used by redistributions of the wrapper to add more libraries. - from("build/extensions") { - into("java/lib") - } - - from("scripts") - } - - named("assemble") { - dependsOn(createLayer) - } -} - -tasks.register("printOtelJavaInstrumentationVersion") { - doLast { - println(configurations.named("runtimeClasspath").get().resolvedConfiguration.resolvedArtifacts.find { it.name == "opentelemetry-aws-lambda-events-3.11" }?.moduleVersion?.id?.version) - } -} diff --git a/java/layer-wrapper/scripts/otel-handler b/java/layer-wrapper/scripts/otel-handler deleted file mode 100755 index 27401f10fb..0000000000 --- a/java/layer-wrapper/scripts/otel-handler +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -set -ef -o pipefail - -export OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER="$_HANDLER" -export _HANDLER="io.opentelemetry.instrumentation.awslambdaevents.v3_11.TracingRequestWrapper" - -if [[ $OTEL_RESOURCE_ATTRIBUTES != *"service.name="* ]]; then - export OTEL_RESOURCE_ATTRIBUTES="service.name=${AWS_LAMBDA_FUNCTION_NAME},${OTEL_RESOURCE_ATTRIBUTES}" -fi - -if [[ -z "$OTEL_PROPAGATORS" ]]; then - export OTEL_PROPAGATORS="tracecontext,baggage,xray" -fi - -export OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT=10000 - -# java17 runtime puts the handler to run as a command line argument and seems to prefer -# this over _HANDLER, so apply a regex to replace the original handler name with our wrapper -exec "${@//$OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER/$_HANDLER}" diff --git a/java/layer-wrapper/scripts/otel-proxy-handler b/java/layer-wrapper/scripts/otel-proxy-handler deleted file mode 100755 index 8444e666ec..0000000000 --- a/java/layer-wrapper/scripts/otel-proxy-handler +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -set -ef -o pipefail - -export OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER="$_HANDLER" -export _HANDLER="io.opentelemetry.instrumentation.awslambdaevents.v3_11.TracingRequestApiGatewayWrapper" - -if [[ $OTEL_RESOURCE_ATTRIBUTES != *"service.name="* ]]; then - export OTEL_RESOURCE_ATTRIBUTES="service.name=${AWS_LAMBDA_FUNCTION_NAME},${OTEL_RESOURCE_ATTRIBUTES}" -fi - -if [[ -z "$OTEL_PROPAGATORS" ]]; then - export OTEL_PROPAGATORS="tracecontext,baggage,xray" -fi - -export OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT=10000 - -# java17 runtime puts the handler to run as a command line argument and seems to prefer -# this over _HANDLER, so apply a regex to replace the original handler name with our wrapper -exec "${@//$OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER/$_HANDLER}" diff --git a/java/layer-wrapper/scripts/otel-sqs-handler b/java/layer-wrapper/scripts/otel-sqs-handler deleted file mode 100755 index 784fd5a550..0000000000 --- a/java/layer-wrapper/scripts/otel-sqs-handler +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -set -ef -o pipefail - -export OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER="$_HANDLER" -export _HANDLER="io.opentelemetry.instrumentation.awslambdaevents.v3_11.TracingSqsEventWrapper" - -if [[ $OTEL_RESOURCE_ATTRIBUTES != *"service.name="* ]]; then - export OTEL_RESOURCE_ATTRIBUTES="service.name=${AWS_LAMBDA_FUNCTION_NAME},${OTEL_RESOURCE_ATTRIBUTES}" -fi - -if [[ -z "$OTEL_PROPAGATORS" ]]; then - export OTEL_PROPAGATORS="tracecontext,baggage,xray" -fi - -export OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT=10000 - -# java17 runtime puts the handler to run as a command line argument and seems to prefer -# this over _HANDLER, so apply a regex to replace the original handler name with our wrapper -exec "${@//$OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER/$_HANDLER}" diff --git a/java/layer-wrapper/scripts/otel-stream-handler b/java/layer-wrapper/scripts/otel-stream-handler deleted file mode 100755 index c48263b87a..0000000000 --- a/java/layer-wrapper/scripts/otel-stream-handler +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -set -ef -o pipefail - -export OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER="$_HANDLER" -export _HANDLER="io.opentelemetry.instrumentation.awslambdacore.v1_0.TracingRequestStreamWrapper" - -if [[ $OTEL_RESOURCE_ATTRIBUTES != *"service.name="* ]]; then - export OTEL_RESOURCE_ATTRIBUTES="service.name=${AWS_LAMBDA_FUNCTION_NAME},${OTEL_RESOURCE_ATTRIBUTES}" -fi - -if [[ -z "$OTEL_PROPAGATORS" ]]; then - export OTEL_PROPAGATORS="tracecontext,baggage,xray" -fi - -export OTEL_INSTRUMENTATION_AWS_LAMBDA_FLUSH_TIMEOUT=10000 - -# java17 runtime puts the handler to run as a command line argument and seems to prefer -# this over _HANDLER, so apply a regex to replace the original handler name with our wrapper -exec "${@//$OTEL_INSTRUMENTATION_AWS_LAMBDA_HANDLER/$_HANDLER}" diff --git a/java/sample-apps/aws-sdk/README.md b/java/sample-apps/aws-sdk/README.md deleted file mode 100644 index 3d33a36d0c..0000000000 --- a/java/sample-apps/aws-sdk/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# AWS SDK Sample App - -This application makes a simple request to `S3.ListBuckets` using the AWS SDK v2. You can find -deployment scripts using Terraform that are configured to deploy this sample app to AWS Lambda and -API Gateway while publishing and using the OpenTelemetry layers. - -## Requirements - -- Java for building this repository -- [Terraform](https://www.terraform.io/downloads.html) -- AWS credentials, either using environment variables or via the CLI and `aws configure` - -First, in the `java` subfolder of this repository, build all the artifacts. - -``` -./gradlew build -``` - -Then, decide if you want to try the wrapper or the agent version. Navigate to the appropriate -subfolder of [deploy](./deploy) and deploy with Terraform. - -``` -terraform init -terraform apply -``` - -Use the following command to configure runtime and architecture - -``` -TF_VAR_architecture=x86_64 \ -TF_VAR_runtime=java11 \ -terraform apply -auto-approve -``` - -For the agent version, to change the configuration of the OpenTelemetry collector, you can provide the ARN of a Lambda layer with a custom collector configuration in a file named `config.yaml` when prompted after running the `terraform apply` command. - -After deployment, a URL which can be used to invoke the function via API Gateway will be displayed. The agent version -tends to take 10-20s for the first request, while the wrapper version tends to take 5-10s. Confirm -that spans are logged in the CloudWatch logs for the function on the AWS Console either for the -[wrapper](https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/$252Faws$252Flambda$252Fhello-awssdk-java-wrapper) -or for the [agent](https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/$252Faws$252Flambda$252Fhello-awssdk-javaagent). diff --git a/java/sample-apps/aws-sdk/build.gradle.kts b/java/sample-apps/aws-sdk/build.gradle.kts deleted file mode 100644 index 7660207e9d..0000000000 --- a/java/sample-apps/aws-sdk/build.gradle.kts +++ /dev/null @@ -1,20 +0,0 @@ -plugins { - java - id("com.gradleup.shadow") -} - -dependencies { - implementation("io.opentelemetry:opentelemetry-api") - implementation("com.amazonaws:aws-lambda-java-core") - implementation("com.amazonaws:aws-lambda-java-events") - implementation("org.apache.logging.log4j:log4j-core") - implementation("software.amazon.awssdk:s3") - - runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl") -} - -tasks { - assemble { - dependsOn("shadowJar") - } -} diff --git a/java/sample-apps/aws-sdk/deploy/agent/main.tf b/java/sample-apps/aws-sdk/deploy/agent/main.tf deleted file mode 100644 index a9515cda4c..0000000000 --- a/java/sample-apps/aws-sdk/deploy/agent/main.tf +++ /dev/null @@ -1,70 +0,0 @@ -module "hello-lambda-function" { - source = "terraform-aws-modules/lambda/aws" - version = ">= 2.24.0" - - architectures = compact([var.architecture]) - function_name = var.name - handler = "io.opentelemetry.lambda.sampleapps.awssdk.AwsSdkRequestHandler::handleRequest" - runtime = var.runtime - - create_package = false - local_existing_package = "${path.module}/../../build/libs/aws-sdk-all.jar" - - memory_size = 512 - timeout = 120 - publish = true - - layers = compact([ - var.collector_layer_arn, - var.sdk_layer_arn, - var.collector_config_layer_arn, - ]) - - environment_variables = (var.collector_config_layer_arn == null ? - { - AWS_LAMBDA_EXEC_WRAPPER = "/opt/otel-handler", - OTEL_METRICS_EXPORTER = "otlp", - } : - { - AWS_LAMBDA_EXEC_WRAPPER = "/opt/otel-handler", - OTEL_METRICS_EXPORTER = "otlp", - OPENTELEMETRY_COLLECTOR_CONFIG_URI = "/opt/config.yaml" - }) - - tracing_mode = var.tracing_mode - - attach_policy_statements = true - policy_statements = { - s3 = { - effect = "Allow" - actions = [ - "s3:ListAllMyBuckets" - ] - resources = [ - "*" - ] - } - } -} - -resource "aws_lambda_alias" "provisioned" { - name = "provisioned" - function_name = module.hello-lambda-function.lambda_function_name - function_version = module.hello-lambda-function.lambda_function_version -} - -resource "aws_lambda_provisioned_concurrency_config" "lambda_api" { - function_name = aws_lambda_alias.provisioned.function_name - provisioned_concurrent_executions = 2 - qualifier = aws_lambda_alias.provisioned.name -} - -module "api-gateway" { - source = "../../../../../utils/terraform/api-gateway-proxy" - - name = var.name - function_name = aws_lambda_alias.provisioned.function_name - function_qualifier = aws_lambda_alias.provisioned.name - function_invoke_arn = aws_lambda_alias.provisioned.invoke_arn - enable_xray_tracing = var.tracing_mode == "Active" -} diff --git a/java/sample-apps/aws-sdk/deploy/agent/outputs.tf b/java/sample-apps/aws-sdk/deploy/agent/outputs.tf deleted file mode 100644 index 5de8044c90..0000000000 --- a/java/sample-apps/aws-sdk/deploy/agent/outputs.tf +++ /dev/null @@ -1,7 +0,0 @@ -output "api-gateway-url" { - value = module.api-gateway.api_gateway_url -} - -output "function_role_name" { - value = module.hello-lambda-function.lambda_role_name -} diff --git a/java/sample-apps/aws-sdk/deploy/agent/variables.tf b/java/sample-apps/aws-sdk/deploy/agent/variables.tf deleted file mode 100644 index e2a6073a15..0000000000 --- a/java/sample-apps/aws-sdk/deploy/agent/variables.tf +++ /dev/null @@ -1,40 +0,0 @@ -variable "name" { - type = string - description = "Name of created function and API Gateway" - default = "hello-java-awssdk-agent" -} - -variable "collector_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry collector extension" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "collector_config_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry collector configuration file" -} - -variable "sdk_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry Java Agent" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "tracing_mode" { - type = string - description = "Lambda function tracing mode" - default = "PassThrough" -} - -variable "architecture" { - type = string - description = "Lambda function architecture, valid values are arm64 or x86_64" - default = "x86_64" -} - -variable "runtime" { - type = string - description = "java agent runtime used for sample Lambda Function" - default = "java11" -} diff --git a/java/sample-apps/aws-sdk/deploy/wrapper/main.tf b/java/sample-apps/aws-sdk/deploy/wrapper/main.tf deleted file mode 100644 index 28b2b8800b..0000000000 --- a/java/sample-apps/aws-sdk/deploy/wrapper/main.tf +++ /dev/null @@ -1,48 +0,0 @@ -module "hello-lambda-function" { - source = "terraform-aws-modules/lambda/aws" - version = ">= 2.24.0" - - architectures = compact([var.architecture]) - function_name = var.name - handler = "io.opentelemetry.lambda.sampleapps.awssdk.AwsSdkRequestHandler::handleRequest" - runtime = var.runtime - - create_package = false - local_existing_package = "${path.module}/../../build/libs/aws-sdk-all.jar" - - memory_size = 384 - timeout = 20 - - layers = compact([ - var.collector_layer_arn, - var.sdk_layer_arn - ]) - - environment_variables = { - AWS_LAMBDA_EXEC_WRAPPER = "/opt/otel-proxy-handler" - } - - tracing_mode = var.tracing_mode - - attach_policy_statements = true - policy_statements = { - s3 = { - effect = "Allow" - actions = [ - "s3:ListAllMyBuckets" - ] - resources = [ - "*" - ] - } - } -} - -module "api-gateway" { - source = "../../../../../utils/terraform/api-gateway-proxy" - - name = var.name - function_name = module.hello-lambda-function.lambda_function_name - function_invoke_arn = module.hello-lambda-function.lambda_function_invoke_arn - enable_xray_tracing = var.tracing_mode == "Active" -} diff --git a/java/sample-apps/aws-sdk/deploy/wrapper/outputs.tf b/java/sample-apps/aws-sdk/deploy/wrapper/outputs.tf deleted file mode 100644 index 5de8044c90..0000000000 --- a/java/sample-apps/aws-sdk/deploy/wrapper/outputs.tf +++ /dev/null @@ -1,7 +0,0 @@ -output "api-gateway-url" { - value = module.api-gateway.api_gateway_url -} - -output "function_role_name" { - value = module.hello-lambda-function.lambda_role_name -} diff --git a/java/sample-apps/aws-sdk/deploy/wrapper/variables.tf b/java/sample-apps/aws-sdk/deploy/wrapper/variables.tf deleted file mode 100644 index 3505ae54ba..0000000000 --- a/java/sample-apps/aws-sdk/deploy/wrapper/variables.tf +++ /dev/null @@ -1,35 +0,0 @@ -variable "name" { - type = string - description = "Name of created function and API Gateway" - default = "hello-java-awssdk-wrapper" -} - -variable "collector_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry collector extension" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "sdk_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry Java Wrapper" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "tracing_mode" { - type = string - description = "Lambda function tracing mode" - default = "PassThrough" -} - -variable "architecture" { - type = string - description = "Lambda function architecture, valid values are arm64 or x86_64" - default = "x86_64" -} - -variable "runtime" { - type = string - description = "java wrapper runtime used for sample Lambda Function" - default = "java11" -} diff --git a/java/sample-apps/aws-sdk/src/main/java/io/opentelemetry/lambda/sampleapps/awssdk/AwsSdkRequestHandler.java b/java/sample-apps/aws-sdk/src/main/java/io/opentelemetry/lambda/sampleapps/awssdk/AwsSdkRequestHandler.java deleted file mode 100644 index 5ce1883490..0000000000 --- a/java/sample-apps/aws-sdk/src/main/java/io/opentelemetry/lambda/sampleapps/awssdk/AwsSdkRequestHandler.java +++ /dev/null @@ -1,55 +0,0 @@ -package io.opentelemetry.lambda.sampleapps.awssdk; - -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; -import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.api.common.AttributeKey; -import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.api.metrics.LongUpDownCounter; -import io.opentelemetry.api.metrics.Meter; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import software.amazon.awssdk.services.s3.S3Client; -import software.amazon.awssdk.services.s3.model.ListBucketsResponse; - -public class AwsSdkRequestHandler - implements RequestHandler { - - private static final Logger logger = LogManager.getLogger(AwsSdkRequestHandler.class); - private static final Meter sampleMeter = - GlobalOpenTelemetry.getMeterProvider() - .meterBuilder("aws-otel") - .setInstrumentationVersion("1.0") - .build(); - private static final LongUpDownCounter queueSizeCounter = - sampleMeter - .upDownCounterBuilder("queueSizeChange") - .setDescription("Queue Size change") - .setUnit("one") - .build(); - - private static final AttributeKey API_NAME = AttributeKey.stringKey("apiName"); - private static final AttributeKey STATUS_CODE = AttributeKey.stringKey("statuscode"); - private static final Attributes METRIC_ATTRIBUTES = - Attributes.builder().put(API_NAME, "apiName").put(STATUS_CODE, "200").build(); - - @Override - public APIGatewayProxyResponseEvent handleRequest( - APIGatewayProxyRequestEvent input, Context context) { - logger.info("Serving lambda request."); - - APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent(); - try (S3Client s3 = S3Client.create()) { - ListBucketsResponse listBucketsResponse = s3.listBuckets(); - response.setBody( - "Hello lambda - found " + listBucketsResponse.buckets().size() + " buckets."); - } - - // Generate a sample counter metric using the OpenTelemetry Java Metrics API - queueSizeCounter.add(2, METRIC_ATTRIBUTES); - - return response; - } -} diff --git a/java/sample-apps/aws-sdk/src/main/resources/log4j2.xml b/java/sample-apps/aws-sdk/src/main/resources/log4j2.xml deleted file mode 100644 index c52aaeaf2d..0000000000 --- a/java/sample-apps/aws-sdk/src/main/resources/log4j2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/java/sample-apps/okhttp/README.md b/java/sample-apps/okhttp/README.md deleted file mode 100644 index 592e152dca..0000000000 --- a/java/sample-apps/okhttp/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# OkHttp Sample App - -This application makes a simple request to `https://aws.amazon.com` using OkHttp. You can find -deployment scripts using Terraform that are configured to deploy this sample app to AWS Lambda and -API Gateway while publishing and using the OpenTelemetry layers. - -Notice that we initialize the library instrumentation for OkHttp provided by the -`io.opentelemetry.instrumentation:opentelemetry-okhttp-3.0` artifact using our own code, - -```java -OkHttpClient client = - new OkHttpClient.Builder() - .addInterceptor(OkHttpTracing.create(GlobalOpenTelemetry.get()).newInterceptor()) - .build(); -``` - -This is to allow the application to be deployed with the wrapper and still trace the OkHttp client. -If using the agent, this is unnecessary. - -## Requirements - -- Java for building this repository -- [Terraform](https://www.terraform.io/downloads.html) -- AWS credentials, either using environment variables or via the CLI and `aws configure` - -First, in the `java` subfolder of this repository, build all the artifacts. - -``` -./gradlew build -``` - -Then, navigate to [deploy/wrapper](./deploy/wrapper) and deploy with Terraform. - -``` -terraform init -terraform apply -``` - -Use the following command to configure runtime and architecture - -``` -TF_VAR_architecture=x86_64 \ -TF_VAR_runtime=java11 \ -terraform apply -auto-approve -``` - -After deployment, a URL which can be used to invoke the function via API Gateway will be displayed. As it uses the -wrapper, it tends to take 5-10s. Confirm that spans are logged in the CloudWatch logs for the function on the AWS Console for the -[wrapper](https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/$252Faws$252Flambda$252Fhello-awssdk-java-wrapper).n - -Note that this example cannot currently be used with the agent because it does not behave correctly -with applications that manually initialize library instrumentation. This issue will be fixed in a -future version. diff --git a/java/sample-apps/okhttp/build.gradle.kts b/java/sample-apps/okhttp/build.gradle.kts deleted file mode 100644 index ad85c26178..0000000000 --- a/java/sample-apps/okhttp/build.gradle.kts +++ /dev/null @@ -1,20 +0,0 @@ -plugins { - java - id("com.gradleup.shadow") -} - -dependencies { - implementation("com.amazonaws:aws-lambda-java-core") - implementation("com.amazonaws:aws-lambda-java-events") - implementation("com.squareup.okhttp3:okhttp") - implementation("io.opentelemetry.instrumentation:opentelemetry-okhttp-3.0") - implementation("org.apache.logging.log4j:log4j-core") - - runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl") -} - -tasks { - assemble { - dependsOn("shadowJar") - } -} diff --git a/java/sample-apps/okhttp/deploy/wrapper/main.tf b/java/sample-apps/okhttp/deploy/wrapper/main.tf deleted file mode 100644 index f1d6918b1a..0000000000 --- a/java/sample-apps/okhttp/deploy/wrapper/main.tf +++ /dev/null @@ -1,48 +0,0 @@ -module "hello-lambda-function" { - source = "terraform-aws-modules/lambda/aws" - version = ">= 2.24.0" - - architectures = compact([var.architecture]) - function_name = var.name - handler = "io.opentelemetry.lambda.sampleapps.okhttp.OkHttpRequestHandler::handleRequest" - runtime = var.runtime - - create_package = false - local_existing_package = "${path.module}/../../build/libs/okhttp-all.jar" - - memory_size = 384 - timeout = 20 - - layers = compact([ - var.collector_layer_arn, - var.sdk_layer_arn - ]) - - environment_variables = { - AWS_LAMBDA_EXEC_WRAPPER = "/opt/otel-proxy-handler" - } - - tracing_mode = var.tracing_mode - - attach_policy_statements = true - policy_statements = { - s3 = { - effect = "Allow" - actions = [ - "s3:ListAllMyBuckets" - ] - resources = [ - "*" - ] - } - } -} - -module "api-gateway" { - source = "../../../../../utils/terraform/api-gateway-proxy" - - name = var.name - function_name = module.hello-lambda-function.lambda_function_name - function_invoke_arn = module.hello-lambda-function.lambda_function_invoke_arn - enable_xray_tracing = var.tracing_mode == "Active" -} diff --git a/java/sample-apps/okhttp/deploy/wrapper/outputs.tf b/java/sample-apps/okhttp/deploy/wrapper/outputs.tf deleted file mode 100644 index 5de8044c90..0000000000 --- a/java/sample-apps/okhttp/deploy/wrapper/outputs.tf +++ /dev/null @@ -1,7 +0,0 @@ -output "api-gateway-url" { - value = module.api-gateway.api_gateway_url -} - -output "function_role_name" { - value = module.hello-lambda-function.lambda_role_name -} diff --git a/java/sample-apps/okhttp/deploy/wrapper/variables.tf b/java/sample-apps/okhttp/deploy/wrapper/variables.tf deleted file mode 100644 index a6ca0a92f9..0000000000 --- a/java/sample-apps/okhttp/deploy/wrapper/variables.tf +++ /dev/null @@ -1,35 +0,0 @@ -variable "name" { - type = string - description = "Name of created function and API Gateway" - default = "hello-java-okhttp-wrapper" -} - -variable "collector_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry collector extension" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "sdk_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry Java Wrapper" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "tracing_mode" { - type = string - description = "Lambda function tracing mode" - default = "PassThrough" -} - -variable "architecture" { - type = string - description = "Lambda function architecture, valid values are arm64 or x86_64" - default = "x86_64" -} - -variable "runtime" { - type = string - description = "java runtime used for sample Lambda Function" - default = "java11" -} diff --git a/java/sample-apps/okhttp/src/main/java/io/opentelemetry/lambda/sampleapps/okhttp/OkHttpRequestHandler.java b/java/sample-apps/okhttp/src/main/java/io/opentelemetry/lambda/sampleapps/okhttp/OkHttpRequestHandler.java deleted file mode 100644 index d46a9359ee..0000000000 --- a/java/sample-apps/okhttp/src/main/java/io/opentelemetry/lambda/sampleapps/okhttp/OkHttpRequestHandler.java +++ /dev/null @@ -1,43 +0,0 @@ -package io.opentelemetry.lambda.sampleapps.okhttp; - -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; -import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent; -import io.opentelemetry.api.GlobalOpenTelemetry; -import io.opentelemetry.instrumentation.okhttp.v3_0.OkHttpTelemetry; -import java.io.IOException; -import java.io.UncheckedIOException; -import okhttp3.Call; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -public class OkHttpRequestHandler - implements RequestHandler { - - private static final Logger logger = LogManager.getLogger(OkHttpRequestHandler.class); - - @Override - public APIGatewayProxyResponseEvent handleRequest( - APIGatewayProxyRequestEvent input, Context context) { - logger.info("Serving lambda request."); - - OkHttpClient baseClient = new OkHttpClient(); - Call.Factory callFactory = - OkHttpTelemetry.create(GlobalOpenTelemetry.get()).createCallFactory(baseClient); - - APIGatewayProxyResponseEvent response = new APIGatewayProxyResponseEvent(); - - Request request = new Request.Builder().url("https://aws.amazon.com/").build(); - try (Response okhttpResponse = callFactory.newCall(request).execute()) { - response.setBody( - "Hello lambda - fetched " + okhttpResponse.body().string().length() + " bytes."); - } catch (IOException e) { - throw new UncheckedIOException("Could not fetch with okhttp", e); - } - return response; - } -} diff --git a/java/sample-apps/okhttp/src/main/resources/log4j2.xml b/java/sample-apps/okhttp/src/main/resources/log4j2.xml deleted file mode 100644 index c52aaeaf2d..0000000000 --- a/java/sample-apps/okhttp/src/main/resources/log4j2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/java/sample-apps/sqs/README.md b/java/sample-apps/sqs/README.md deleted file mode 100644 index afeb5c24c2..0000000000 --- a/java/sample-apps/sqs/README.md +++ /dev/null @@ -1,41 +0,0 @@ -# Amazon SQS Sample App - -This application includes a Lambda with an SQS queue as an event source. You can find -deployment scripts using Terraform that are configured to deploy this sample app to AWS Lambda while publishing and using the OpenTelemetry layers. - -## Requirements - -- Java for building this repository -- [Terraform](https://www.terraform.io/downloads.html) -- AWS credentials, either using environment variables or via the CLI and `aws configure` - -First, in the `java` subfolder of this repository, build all the artifacts. - -``` -./gradlew build -``` - -Then, decide if you want to try the wrapper or the agent version. Navigate to the appropriate -subfolder of [deploy](./deploy) and deploy with Terraform. - -``` -terraform init -terraform apply -``` - -Use the following command to configure runtime and architecture - -``` -TF_VAR_architecture=x86_64 \ -TF_VAR_runtime=java11 \ -terraform apply -auto-approve -``` - -For the agent version, to change the configuration of the OpenTelemetry collector, you can provide the ARN of a Lambda layer with a custom collector configuration in a file named `config.yaml` when prompted after running the `terraform apply` command. - -After deployment, login to AWS and test the Lambda function using the predefined SQS test payload. The agent version tends to take 10-20s for the first request, while the wrapper version tends to take 5-10s. Confirm -that spans are logged in the CloudWatch logs for the function on the AWS Console either for the -[wrapper](https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/$252Faws$252Flambda$252Fhello-awssdk-java-wrapper) -or for the [agent](https://console.aws.amazon.com/cloudwatch/home?region=us-east-1#logsV2:log-groups/log-group/$252Faws$252Flambda$252Fhello-awssdk-javaagent). - -If you already have an SQS queue to test with, uncomment the commented sections at the bottom of the `main.tf` and `variables.tf` files and then provide the ARN for your queue when running `terraform apply`. You will then need to publish a message to the queue to test the Lambda function. diff --git a/java/sample-apps/sqs/build.gradle.kts b/java/sample-apps/sqs/build.gradle.kts deleted file mode 100644 index f5044d35f0..0000000000 --- a/java/sample-apps/sqs/build.gradle.kts +++ /dev/null @@ -1,18 +0,0 @@ -plugins { - java - id("com.gradleup.shadow") -} - -dependencies { - implementation("com.amazonaws:aws-lambda-java-core") - implementation("com.amazonaws:aws-lambda-java-events") - implementation("org.apache.logging.log4j:log4j-core") - - runtimeOnly("org.apache.logging.log4j:log4j-slf4j-impl") -} - -tasks { - assemble { - dependsOn("shadowJar") - } -} diff --git a/java/sample-apps/sqs/deploy/agent/main.tf b/java/sample-apps/sqs/deploy/agent/main.tf deleted file mode 100644 index c8984576ac..0000000000 --- a/java/sample-apps/sqs/deploy/agent/main.tf +++ /dev/null @@ -1,57 +0,0 @@ -module "hello-lambda-function" { - source = "terraform-aws-modules/lambda/aws" - version = ">= 2.24.0" - - architectures = compact([var.architecture]) - function_name = var.name - handler = "io.opentelemetry.lambda.sampleapps.sqs.SqsRequestHandler::handleRequest" - runtime = var.runtime - - create_package = false - local_existing_package = "${path.module}/../../build/libs/sqs-all.jar" - - memory_size = 512 - timeout = 120 - publish = true - - layers = compact([ - var.collector_layer_arn, - var.sdk_layer_arn, - var.collector_config_layer_arn, - ]) - - environment_variables = (var.collector_config_layer_arn == null ? - { - AWS_LAMBDA_EXEC_WRAPPER = "/opt/otel-handler", - OTEL_METRICS_EXPORTER = "otlp", - } : - { - AWS_LAMBDA_EXEC_WRAPPER = "/opt/otel-handler", - OTEL_METRICS_EXPORTER = "otlp", - OPENTELEMETRY_COLLECTOR_CONFIG_URI = "/opt/config.yaml" - }) - - tracing_mode = var.tracing_mode - - # UNCOMMENT BELOW TO TEST WITH YOUR SQS QUEUE - # policy_statements = { - # sqs_read = { - # effect = "Allow", - # actions = ["sqs:ReceiveMessage", "sqs:DeleteMessage", "sqs:GetQueueAttributes"] - # resources = [var.sqs_queue_arn] - # } - # } - - # event_source_mapping = { - # sqs_queue = { - # event_source_arn = var.sqs_queue_arn - # } - # } - - # allowed_triggers = { - # sqs_queue = { - # principal = "sqs.amazonaws.com" - # source_arn = "${var.sqs_queue_arn}" - # } - # } -} diff --git a/java/sample-apps/sqs/deploy/agent/outputs.tf b/java/sample-apps/sqs/deploy/agent/outputs.tf deleted file mode 100644 index 25ee79d741..0000000000 --- a/java/sample-apps/sqs/deploy/agent/outputs.tf +++ /dev/null @@ -1,3 +0,0 @@ -output "function_role_name" { - value = module.hello-lambda-function.lambda_role_name -} diff --git a/java/sample-apps/sqs/deploy/agent/variables.tf b/java/sample-apps/sqs/deploy/agent/variables.tf deleted file mode 100644 index cccd38b18e..0000000000 --- a/java/sample-apps/sqs/deploy/agent/variables.tf +++ /dev/null @@ -1,46 +0,0 @@ -variable "name" { - type = string - description = "Name of created function and API Gateway" - default = "hello-java-awssdk-agent" -} - -variable "collector_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry collector extension" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "collector_config_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry collector configuration file" -} - -variable "sdk_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry Java Agent" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "tracing_mode" { - type = string - description = "Lambda function tracing mode" - default = "PassThrough" -} - -variable "architecture" { - type = string - description = "Lambda function architecture, valid values are arm64 or x86_64" - default = "x86_64" -} - -# UNCOMMENT BELOW TO TEST WITH YOUR SQS QUEUE -# variable "sqs_queue_arn" { -# type = string -# description = "ARN for the SQS queue to use an event source for the Lambda" -# } - -variable "runtime" { - type = string - description = "java runtime used for sample Lambda Function" - default = "java11" -} diff --git a/java/sample-apps/sqs/deploy/wrapper/main.tf b/java/sample-apps/sqs/deploy/wrapper/main.tf deleted file mode 100644 index 354fa72452..0000000000 --- a/java/sample-apps/sqs/deploy/wrapper/main.tf +++ /dev/null @@ -1,48 +0,0 @@ -module "hello-lambda-function" { - source = "terraform-aws-modules/lambda/aws" - version = ">= 2.24.0" - - architectures = compact([var.architecture]) - function_name = var.name - handler = "io.opentelemetry.lambda.sampleapps.sqs.SqsRequestHandler::handleRequest" - runtime = var.runtime - - create_package = false - local_existing_package = "${path.module}/../../build/libs/sqs-all.jar" - - memory_size = 384 - timeout = 20 - - layers = compact([ - var.collector_layer_arn, - var.sdk_layer_arn - ]) - - environment_variables = { - AWS_LAMBDA_EXEC_WRAPPER = "/opt/otel-sqs-handler" - } - - tracing_mode = var.tracing_mode - - # UNCOMMENT BELOW TO TEST WITH YOUR SQS QUEUE - # policy_statements = { - # sqs_read = { - # effect = "Allow", - # actions = ["sqs:ReceiveMessage", "sqs:DeleteMessage", "sqs:GetQueueAttributes"] - # resources = [var.sqs_queue_arn] - # } - # } - - # event_source_mapping = { - # sqs_queue = { - # event_source_arn = var.sqs_queue_arn - # } - # } - - # allowed_triggers = { - # sqs_queue = { - # principal = "sqs.amazonaws.com" - # source_arn = "${var.sqs_queue_arn}" - # } - # } -} diff --git a/java/sample-apps/sqs/deploy/wrapper/outputs.tf b/java/sample-apps/sqs/deploy/wrapper/outputs.tf deleted file mode 100644 index 25ee79d741..0000000000 --- a/java/sample-apps/sqs/deploy/wrapper/outputs.tf +++ /dev/null @@ -1,3 +0,0 @@ -output "function_role_name" { - value = module.hello-lambda-function.lambda_role_name -} diff --git a/java/sample-apps/sqs/deploy/wrapper/variables.tf b/java/sample-apps/sqs/deploy/wrapper/variables.tf deleted file mode 100644 index 7b59367d53..0000000000 --- a/java/sample-apps/sqs/deploy/wrapper/variables.tf +++ /dev/null @@ -1,41 +0,0 @@ -variable "name" { - type = string - description = "Name of created function and API Gateway" - default = "hello-java-awssdk-wrapper" -} - -variable "collector_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry collector extension" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "sdk_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry Java Wrapper" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "tracing_mode" { - type = string - description = "Lambda function tracing mode" - default = "PassThrough" -} - -variable "architecture" { - type = string - description = "Lambda function architecture, valid values are arm64 or x86_64" - default = "x86_64" -} - -# UNCOMMENT BELOW TO TEST WITH YOUR SQS QUEUE -# variable "sqs_queue_arn" { -# type = string -# description = "ARN for the SQS queue to use an event source for the Lambda" -# } - -variable "runtime" { - type = string - description = "java runtime used for sample Lambda Function" - default = "java11" -} diff --git a/java/sample-apps/sqs/src/main/java/io/opentelemetry/lambda/sampleapps/sqs/SqsRequestHandler.java b/java/sample-apps/sqs/src/main/java/io/opentelemetry/lambda/sampleapps/sqs/SqsRequestHandler.java deleted file mode 100644 index 036ca7e761..0000000000 --- a/java/sample-apps/sqs/src/main/java/io/opentelemetry/lambda/sampleapps/sqs/SqsRequestHandler.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.opentelemetry.lambda.sampleapps.sqs; - -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestHandler; -import com.amazonaws.services.lambda.runtime.events.SQSEvent; -import com.amazonaws.services.lambda.runtime.events.SQSEvent.SQSMessage; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -public class SqsRequestHandler implements RequestHandler { - - private static final Logger logger = LogManager.getLogger(SqsRequestHandler.class); - - @Override - public Void handleRequest(SQSEvent event, Context context) { - logger.info("Processing message(s) from SQS"); - - for (SQSMessage msg : event.getRecords()) { - logger.info("SOURCE QUEUE: " + msg.getEventSourceArn()); - logger.info("MESSAGE: " + msg.getBody()); - } - - return null; - } -} diff --git a/java/sample-apps/sqs/src/main/resources/log4j2.xml b/java/sample-apps/sqs/src/main/resources/log4j2.xml deleted file mode 100644 index c52aaeaf2d..0000000000 --- a/java/sample-apps/sqs/src/main/resources/log4j2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/java/settings.gradle.kts b/java/settings.gradle.kts deleted file mode 100644 index 82ee417c4c..0000000000 --- a/java/settings.gradle.kts +++ /dev/null @@ -1,24 +0,0 @@ -pluginManagement { - plugins { - id("com.diffplug.spotless") version "8.4.0" - id("com.github.ben-manes.versions") version "0.53.0" - id("com.gradleup.shadow") version "9.4.1" - } -} - -dependencyResolutionManagement { - repositories { - mavenCentral() - mavenLocal() - } -} - -include(":awssdk-autoconfigure") -include(":dependencyManagement") -include(":layer-javaagent") -include(":layer-wrapper") -include(":sample-apps:aws-sdk") -include(":sample-apps:okhttp") -include(":sample-apps:sqs") - -rootProject.name = "opentelemetry-lambda-java" diff --git a/nodejs/.commitlintrc.yml b/nodejs/.commitlintrc.yml deleted file mode 100644 index 1a5e5ac793..0000000000 --- a/nodejs/.commitlintrc.yml +++ /dev/null @@ -1,29 +0,0 @@ -extends: - - '@commitlint/config-conventional' -rules: - header-max-length: [1, 'always', 72] - type-enum: - - 2 - - always - - - ci - - feat - - fix - - docs - - style - - refactor - - perf - - test - - revert - - chore -help: | - **Possible types**: - `ci`: Changes to our CI configuration files and scripts (example scopes: Travis, Circle CI, BrowserStack, SauceLabs) - `feat`: Adds a new feature. - `fix`: Solves a bug. - `docs`: Adds or alters documentation. (example scopes: readme, worker, code_of_conduct, contributors) - `style`: Improves formatting, white-space. - `refactor`: Rewrites code without feature, performance or bug changes. - `perf`: Improves performance. - `test`: Adds or modifies tests. (example scopes: functionals, unit-tests) - `revert`: Changes that reverting other changes - `chore`: No production code change. Updating grunt tasks etc; diff --git a/nodejs/.editorconfig b/nodejs/.editorconfig deleted file mode 100644 index f68e97b033..0000000000 --- a/nodejs/.editorconfig +++ /dev/null @@ -1,11 +0,0 @@ -# http://editorconfig.org - -root = true - -[*] -indent_style = space -indent_size = 2 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true diff --git a/nodejs/.gitattributes b/nodejs/.gitattributes deleted file mode 100644 index 7d65e84970..0000000000 --- a/nodejs/.gitattributes +++ /dev/null @@ -1,39 +0,0 @@ -## This .gitattributes file automatically formats the EOL character in certain filetypes within the repository - -## Source code -# JavaScript, TypeScript, c, and h source files -*.js text eol=lf -*.ts text eol=lf -*.h text eol=lf diff=cpp -*.c text eol=lf diff=cpp - -# Shell scripts -*.sh text eol=lf -*.bash text eol=lf - -# Windows batch and PowerShell scripts -*.bat text eol=crlf -*.cmd text eol=crlf -*.ps1 text eol=crlf - -##### Other file types ##### - -## Text files and documentation -*.txt text -README* text -RELEASING* text -CHANGELOG* text -CONTRIBUTING* text -INSTALL* text -LICENSE* text - -## Non-text documentation -*.html text diff=html -*.pdf binary -*.json text -*.rtf binary - -## Git Properties -.gitignore text -.gitmodules text -.gitattributes text diff --git a/nodejs/.gitignore b/nodejs/.gitignore deleted file mode 100644 index 7ad873dc5f..0000000000 --- a/nodejs/.gitignore +++ /dev/null @@ -1,73 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage - -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ -build/ - -# TypeScript v1 declaration files -typings/ - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variables file -.env - -# next.js build output -.next - -# docs files -docs - -.nyc_output - -# OS generated files -.DS_Store - -# VsCode configs -.vscode/ - -*.iml -.idea diff --git a/nodejs/.npmignore b/nodejs/.npmignore deleted file mode 100644 index 9505ba9450..0000000000 --- a/nodejs/.npmignore +++ /dev/null @@ -1,4 +0,0 @@ -/bin -/coverage -/doc -/test diff --git a/nodejs/README.md b/nodejs/README.md deleted file mode 100644 index 6430c88c11..0000000000 --- a/nodejs/README.md +++ /dev/null @@ -1,87 +0,0 @@ -# OpenTelemetry Lambda NodeJS - -Layer for running NodeJS applications on AWS Lambda with OpenTelemetry. Adding the layer and pointing to it with -the `AWS_LAMBDA_EXEC_WRAPPER` environment variable will initialize OpenTelemetry, enabling tracing with no code change. - -To use, add the layer to your function configuration and then set `AWS_LAMBDA_EXEC_WRAPPER` to `/opt/otel-handler`. - -## Configuring auto instrumentation - -[AWS SDK v3 instrumentation](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/instrumentation-aws-sdk) -is included and loaded automatically by default. -A subset of instrumentations from the [OTEL auto-instrumentations-node metapackage](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/packages/auto-instrumentations-node) -are also included. - -Following instrumentations from the metapackage are included: -- `amqplib` -- `bunyan` -- `cassandra-driver` -- `connect` -- `dataloader` -- `dns` *- default* -- `express` *- default* -- `fs` -- `graphql` *- default* -- `grpc` *- default* -- `hapi` *- default* -- `http` *- default* -- `ioredis` *- default* -- `kafkajs` -- `knex` -- `koa` *- default* -- `memcached` -- `mongodb` *- default* -- `mongoose` -- `mysql` *- default* -- `mysql2` -- `nestjs-core` -- `net` *- default* -- `pg` *- default* -- `pino` -- `redis` *- default* -- `restify` -- `socket.io` -- `undici` -- `winston` - -Instrumentations annotated with "*- default*" are loaded by default. - -To only load specific instrumentations, specify the `OTEL_NODE_ENABLED_INSTRUMENTATIONS` environment variable in the lambda configuration. -This disables all the defaults, and only enables the ones you specify. Selectively disabling instrumentations from the defaults is also possible with the `OTEL_NODE_DISABLED_INSTRUMENTATIONS` environment variable. - -The environment variables should be set to a comma-separated list of the instrumentation package names without the -`@opentelemetry/instrumentation-` prefix. - -For example, to enable only `@opentelemetry/instrumentation-http` and `@opentelemetry/instrumentation-undici`: -```shell -OTEL_NODE_ENABLED_INSTRUMENTATIONS="http,undici" -``` -To disable only `@opentelemetry/instrumentation-net`: -```shell -OTEL_NODE_DISABLED_INSTRUMENTATIONS="net" -``` - -## Building - -To build the layer and sample applications in this `nodejs` folder: - -First install dependencies: - -``` -npm install -``` - -Then build the project: - -``` -npm run build -``` - -You'll find the generated layer zip file at `./packages/layer/build/layer.zip`. - -## Sample applications - -Sample applications are provided to show usage of the above layer. - -- Application using AWS SDK - shows using the wrapper with an application using AWS SDK without code change. - - [WIP] [Using OTel Public Layer](./sample-apps/aws-sdk) diff --git a/nodejs/eslint.config.js b/nodejs/eslint.config.js deleted file mode 100644 index e97ae8b6cb..0000000000 --- a/nodejs/eslint.config.js +++ /dev/null @@ -1,44 +0,0 @@ -module.exports = { - plugins: [ - "@typescript-eslint", - "header" - ], - extends: [ - "../../node_modules/gts", - ], - parser: "@typescript-eslint/parser", - parserOptions: { - "project": "./tsconfig.json" - }, - rules: { - "@typescript-eslint/no-this-alias": "off", - "eqeqeq": "off", - "prefer-rest-params": "off", - "@typescript-eslint/naming-convention": [ - "error", - { - "selector": "memberLike", - "modifiers": ["private", "protected"], - "format": ["camelCase"], - "leadingUnderscore": "require" - } - ], - "@typescript-eslint/no-inferrable-types": ["error", { ignoreProperties: true }], - "arrow-parens": ["error", "as-needed"], - "prettier/prettier": ["error", { "singleQuote": true, "arrowParens": "avoid" }], - "@typescript-eslint/no-require-imports": "off", - }, - overrides: [ - { - "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" - } - } - ] -}; diff --git a/nodejs/lerna.json b/nodejs/lerna.json deleted file mode 100644 index 9906366991..0000000000 --- a/nodejs/lerna.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": "0.0.0", - "changelog": { - "repo": "open-telemetry/opentelemetry-lambda", - "labels": { - "breaking": ":boom: Breaking Change", - "bug": ":bug: (Bug Fix)", - "core": ":wrench: Core", - "document": ":books: (Refine Doc)", - "enhancement": ":rocket: (Enhancement)", - "feature-request": ":sparkles: (Feature)", - "internal": ":house: Internal" - }, - "cacheDir": ".changelog", - "ignoreCommitters": ["github-actions"] - } -} diff --git a/nodejs/package-lock.json b/nodejs/package-lock.json deleted file mode 100644 index 9a2693c777..0000000000 --- a/nodejs/package-lock.json +++ /dev/null @@ -1,15447 +0,0 @@ -{ - "name": "opentelemetry-lambda", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "opentelemetry-lambda", - "version": "0.0.0", - "license": "Apache-2.0", - "workspaces": [ - "packages/*", - "sample-apps/*" - ], - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^8.29.0", - "@typescript-eslint/parser": "^8.29.0", - "aws-sdk": "2.1692.0", - "bestzip": "2.2.1", - "copyfiles": "2.4.1", - "eslint": "^8.57.0", - "eslint-plugin-header": "3.1.1", - "eslint-plugin-import": "2.31.0", - "gts": "6.0.2", - "lerna": "^8.1.8", - "lerna-changelog": "2.2.0", - "rimraf": "6.0.1", - "typescript": "5.8.3" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", - "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", - "dev": true, - "engines": { - "node": ">=14.17.0" - } - }, - "node_modules/@emnapi/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", - "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", - "dev": true, - "dependencies": { - "@emnapi/wasi-threads": "1.0.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", - "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@lerna/create": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.9.tgz", - "integrity": "sha512-DPnl5lPX4v49eVxEbJnAizrpMdMTBz1qykZrAbBul9rfgk531v8oAt+Pm6O/rpAleRombNM7FJb5rYGzBJatOQ==", - "dev": true, - "dependencies": { - "@npmcli/arborist": "7.5.4", - "@npmcli/package-json": "5.2.0", - "@npmcli/run-script": "8.1.0", - "@nx/devkit": ">=17.1.2 < 21", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.11", - "aproba": "2.0.0", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "clone-deep": "4.0.1", - "cmd-shim": "6.0.3", - "color-support": "1.1.3", - "columnify": "1.6.0", - "console-control-strings": "^1.1.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "9.0.0", - "dedent": "1.5.3", - "execa": "5.0.0", - "fs-extra": "^11.2.0", - "get-stream": "6.0.0", - "git-url-parse": "14.0.0", - "glob-parent": "6.0.2", - "globby": "11.1.0", - "graceful-fs": "4.2.11", - "has-unicode": "2.0.1", - "ini": "^1.3.8", - "init-package-json": "6.0.3", - "inquirer": "^8.2.4", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "js-yaml": "4.1.0", - "libnpmpublish": "9.0.9", - "load-json-file": "6.2.0", - "lodash": "^4.17.21", - "make-dir": "4.0.0", - "minimatch": "3.0.5", - "multimatch": "5.0.0", - "node-fetch": "2.6.7", - "npm-package-arg": "11.0.2", - "npm-packlist": "8.0.2", - "npm-registry-fetch": "^17.1.0", - "nx": ">=17.1.2 < 21", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-queue": "6.6.2", - "p-reduce": "^2.1.0", - "pacote": "^18.0.6", - "pify": "5.0.0", - "read-cmd-shim": "4.0.0", - "resolve-from": "5.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.4", - "set-blocking": "^2.0.0", - "signal-exit": "3.0.7", - "slash": "^3.0.0", - "ssri": "^10.0.6", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "strong-log-transformer": "2.1.0", - "tar": "6.2.1", - "temp-dir": "1.0.0", - "upath": "2.0.1", - "uuid": "^10.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "5.0.1", - "wide-align": "1.1.5", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "17.7.2", - "yargs-parser": "21.1.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@lerna/create/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@lerna/create/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@lerna/create/node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@lerna/create/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@lerna/create/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@lerna/create/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "dev": true, - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/@lerna/create/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@lerna/create/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@lerna/create/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@lerna/create/node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@lerna/create/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", - "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", - "dev": true, - "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/agent/node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/agent/node_modules/socks-proxy-agent": { - "version": "8.0.5", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", - "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", - "dev": true, - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@npmcli/arborist": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.5.4.tgz", - "integrity": "sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==", - "dev": true, - "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.1", - "@npmcli/installed-package-contents": "^2.1.0", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.1.1", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.1.0", - "@npmcli/query": "^3.1.0", - "@npmcli/redact": "^2.0.0", - "@npmcli/run-script": "^8.1.0", - "bin-links": "^4.0.4", - "cacache": "^18.0.3", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.2", - "json-parse-even-better-errors": "^3.0.2", - "json-stringify-nice": "^1.1.4", - "lru-cache": "^10.2.2", - "minimatch": "^9.0.4", - "nopt": "^7.2.1", - "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.2", - "npm-pick-manifest": "^9.0.1", - "npm-registry-fetch": "^17.0.1", - "pacote": "^18.0.6", - "parse-conflict-json": "^3.0.0", - "proc-log": "^4.2.0", - "proggy": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^3.0.1", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.6", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", - "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", - "dev": true, - "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "ini": "^4.1.3", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/ini": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", - "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", - "dev": true, - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/map-workspaces": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", - "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", - "dev": true, - "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/metavuln-calculator": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz", - "integrity": "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==", - "dev": true, - "dependencies": { - "cacache": "^18.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^18.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "deprecated": "This functionality has been moved to @npmcli/fs", - "dev": true, - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@npmcli/move-file/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", - "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", - "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", - "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", - "dev": true, - "dependencies": { - "@npmcli/git": "^5.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", - "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", - "dev": true, - "dependencies": { - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/query": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.1.0.tgz", - "integrity": "sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", - "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", - "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", - "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", - "which": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/@nx/devkit": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.4.0.tgz", - "integrity": "sha512-qog9oGbuz7DDoXH5k+19tTI3WtaR1p9G5NobiDPfcWmsr1BTK2WH2V2/vVYFAfAcM/DEFgK3ITC5L3PSaJvMmw==", - "dev": true, - "dependencies": { - "ejs": "^3.1.7", - "enquirer": "~2.3.6", - "ignore": "^5.0.4", - "minimatch": "9.0.3", - "semver": "^7.5.3", - "tmp": "~0.2.1", - "tslib": "^2.3.0", - "yargs-parser": "21.1.1" - }, - "peerDependencies": { - "nx": ">= 19 <= 21" - } - }, - "node_modules/@nx/devkit/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@nx/devkit/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/@nx/nx-darwin-arm64": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.4.0.tgz", - "integrity": "sha512-w07StYKNUIiH1koqBZY9Ew57d0wACyNdKpX96og4oiuSFYTTb+QhL4+vX2GOIYyEDfX7A97mA4lXcYUvN6R4zQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-darwin-x64": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.4.0.tgz", - "integrity": "sha512-HS9SfQs9BKZm3mXnOggmDrsVPTdJOr4RYa0k8zhXd0GKOdAOmgvWYsCAFxHB1BV4FGq7wfc4YskXRYHra4Ornw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-freebsd-x64": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.4.0.tgz", - "integrity": "sha512-5Ex4dV9YKbmO+4ZNI7qXOPvVD7A0t/guPUMcye/Rk/vJVx3Ixr/PZlc2SpBDXDLXye4quiTqICV92VrOrVBj8Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.4.0.tgz", - "integrity": "sha512-mWu0QPZ4WQS39NuFOhbKy6Dwiytgn4SCzadZs/raXs/Sl9A1JtXIojMe5vy49rZocjhbpDuXCuKzHeFOi24TpA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.4.0.tgz", - "integrity": "sha512-5ZOMKtEPoAQfSXgWYgQvMt+8JreWfnHC1rHBhQznb/66DyimKlPFv5TprzKCTqg2ElrYMe5NT5usU5fO94NDnA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-musl": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.4.0.tgz", - "integrity": "sha512-RBF3KoBYEs0q9YZ1yBidKhcszI8x4znAfcZI+RQ1zWa/kT/GlnQKamdxinri4ov8/bEo9E4YTx4ITLg4RuVHLg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.4.0.tgz", - "integrity": "sha512-RSYAfAmulCatDIKXXbWDhLU/fm03YrAMTD5FtS5IeEvMGEHkQ3scmXEXTxkOF4q5LuqSrutjdb3s8wHkbFRVqw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.4.0.tgz", - "integrity": "sha512-0eup79jxSzHoYEGl6OU3wb02wWQbEt4ZfOA58fiZ7c5mvCpKXQV9kg7Tu38zIA8nkcEXGb8JaR1R9TgMiAIZsw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.4.0.tgz", - "integrity": "sha512-EeHJL9YPVqi3ad9hXVCr1xDM2/PNgZIJvOlJ/ND6r9dVZ+UWw2Kk7G2r13zz4j4QAhrhQJ+kzrvXYkQlhiSH6g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-win32-x64-msvc": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.4.0.tgz", - "integrity": "sha512-IUeCeLdehVocLML6Wub7OZVM96Sk97AshiWmeNnozI6/OYdS34hQ2+thH7ETUZas9nkC2nNkJ5jLwuAHm+5/vw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@octokit/auth-token": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", - "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", - "dev": true, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/core": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", - "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", - "dev": true, - "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "dev": true, - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/graphql": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", - "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", - "dev": true, - "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "18.1.1", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", - "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", - "dev": true - }, - "node_modules/@octokit/plugin-enterprise-rest": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", - "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", - "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", - "dev": true, - "dependencies": { - "@octokit/tsconfig": "^1.0.2", - "@octokit/types": "^9.2.3" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=4" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", - "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", - "dev": true, - "dependencies": { - "@octokit/types": "^10.0.0" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", - "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "dev": true, - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dev": true, - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/rest": { - "version": "19.0.11", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", - "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", - "dev": true, - "dependencies": { - "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^6.1.2", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^7.1.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/tsconfig": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", - "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", - "dev": true - }, - "node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@opentelemetry-lambda/sdk-layer": { - "resolved": "packages/layer", - "link": true - }, - "node_modules/@opentelemetry-samples/lambda-awssdk": { - "resolved": "sample-apps/aws-sdk", - "link": true - }, - "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/api-logs": { - "version": "0.201.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.201.1.tgz", - "integrity": "sha512-IxcFDP1IGMDemVFG2by/AMK+/o6EuBQ8idUq3xZ6MxgQGeumYZuX5OwR0h9HuvcUc/JPjQGfU5OHKIKYDJcXeA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.3.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/context-async-hooks": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.0.1.tgz", - "integrity": "sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw==", - "license": "Apache-2.0", - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", - "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/exporter-logs-otlp-http": { - "version": "0.201.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.201.1.tgz", - "integrity": "sha512-flYr1tr/wlUxsVc2ZYt/seNLgp3uagyUg9MtjiHYyaMQcN4XuEuI4UjUFwXAGQjd2khmXeie5YnTmO8gzyzemw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.201.1", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/otlp-exporter-base": "0.201.1", - "@opentelemetry/otlp-transformer": "0.201.1", - "@opentelemetry/sdk-logs": "0.201.1" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http": { - "version": "0.201.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.201.1.tgz", - "integrity": "sha512-LMRVg2yTev28L51RLLUK3gY0avMa1RVBq7IkYNtXDBxJRcd0TGGq/0rqfk7Y4UIM9NCJhDIUFHeGg8NpSgSWcw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/otlp-exporter-base": "0.201.1", - "@opentelemetry/otlp-transformer": "0.201.1", - "@opentelemetry/resources": "2.0.1", - "@opentelemetry/sdk-metrics": "2.0.1" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/exporter-trace-otlp-http": { - "version": "0.201.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.201.1.tgz", - "integrity": "sha512-Nw3pIqATC/9LfSGrMiQeeMQ7/z7W2D0wKPxtXwAcr7P64JW7KSH4YSX7Ji8Ti3MmB79NQg6imdagfegJDB0rng==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/otlp-exporter-base": "0.201.1", - "@opentelemetry/otlp-transformer": "0.201.1", - "@opentelemetry/resources": "2.0.1", - "@opentelemetry/sdk-trace-base": "2.0.1" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation": { - "version": "0.201.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.201.1.tgz", - "integrity": "sha512-6EOSoT2zcyBM3VryAzn35ytjRrOMeaWZyzQ/PHVfxoXp5rMf7UUgVToqxOhQffKOHtC7Dma4bHt+DuwIBBZyZA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.201.1", - "@types/shimmer": "^1.2.0", - "import-in-the-middle": "^1.8.1", - "require-in-the-middle": "^7.1.1", - "shimmer": "^1.2.1" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-amqplib": { - "version": "0.48.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.48.0.tgz", - "integrity": "sha512-zXcClQX3sttvBih1CjdPbvve/If1lCHPFK41fDpJE5NYjK38dwTMOUEV0+/ulfq4iU4oEV+ReCA+ZaXAm/uYdw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-aws-lambda": { - "version": "0.52.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.52.0.tgz", - "integrity": "sha512-xGVhBxxO7OuOl72XNwt1MOgaA6d3pSKI2Y5r3OfGNkx602KzW1t2vBHzJf8s4DAJYdMd5/RJLRi1z87CBu7yyg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0", - "@types/aws-lambda": "8.10.147" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-aws-lambda/node_modules/@types/aws-lambda": { - "version": "8.10.147", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.147.tgz", - "integrity": "sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==", - "license": "MIT" - }, - "node_modules/@opentelemetry/instrumentation-aws-sdk": { - "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.53.0.tgz", - "integrity": "sha512-CXB2cu0qnp5lHtNZRpvz0oOZrIKiWfHOiNVGWln9KY0m9sBheEqc58x3Ptpi5lMyso67heVCGDAc9+KbLAZwTQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/propagation-utils": "^0.31.1", - "@opentelemetry/semantic-conventions": "^1.31.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-bunyan": { - "version": "0.47.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.47.0.tgz", - "integrity": "sha512-Sux5us8fkBLO/z+H8P2fSu+fRIm1xTeUHlwtM/E4CNZS9W/sAYrc8djZVa2JrwNXj/tE6U5vRJVObGekIkULow==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "^0.201.0", - "@opentelemetry/instrumentation": "^0.201.0", - "@types/bunyan": "1.8.11" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-cassandra-driver": { - "version": "0.47.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.47.0.tgz", - "integrity": "sha512-MMn/Y2ErClGe7fmzTfR3iJcbEIspAn9hxbnj8oH7bVpPHcWbPphYICkNfLqah4tKVd+zazhs1agCiHL8y/e12g==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-connect": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.45.0.tgz", - "integrity": "sha512-OHdp71gsRnm0lVD7SEtYSJFfvq4r6QN/5lgRK+Vrife1DHy+Insm66JJZN2Frt1waIzmDNn3VLCCafTnItfVcA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0", - "@types/connect": "3.4.38" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-dataloader": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.18.0.tgz", - "integrity": "sha512-egPb8OcGZP6GUU/dbB8NnVgnSIqlM0nHS8KkADq51rVaMkzBcevtinYDFYTQu9tuQ6GEwaSdiQxiQORpYaVeQw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-dns": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.45.0.tgz", - "integrity": "sha512-gE02Jj97aaYUdZIvp2RwWPy3DLN86k15YvPRzkMaPWZKVwsKrHcA+xVX8k3rh9o0g64PC/U2f+LXiJr14PyVLg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-express": { - "version": "0.50.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.50.0.tgz", - "integrity": "sha512-0VF7HM8hTe0B5oXqCfBljMYFeQ3WKKqs0kCTRT02/Pjnmj5bOmR62r2dstjxbxnGKoeFRUHD/QAown9gyf659A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-fs": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.21.0.tgz", - "integrity": "sha512-p2Fn78KSSbSSIJOOTn9FbxEzNRIIsYn9KTemKhABuunVqHixIqQ3hUjChbR+RbjPNZQthDC/0GHDeihRoyLdLQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-graphql": { - "version": "0.49.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.49.0.tgz", - "integrity": "sha512-FZaOS/BmE5npzk95X3Iqfo80a6wEJlkAtk7wLUJG/VZaB8RbBjJow4g0YdtvK8GNGEQW02KiQ+VtzdPGRemlwg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-grpc": { - "version": "0.201.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.201.1.tgz", - "integrity": "sha512-OIkXkVnilh8E6YKz/PiQtWeERqbcbjtVppMc7A2h39eaoaKnckXxom3YXhX+/PMhfmjbUnqw6k/KvmUr9zig1Q==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "0.201.1", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-hapi": { - "version": "0.47.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.47.0.tgz", - "integrity": "sha512-0BCiQl2+oAuhSzbZrgpZgRvg7PclTfb7GxuBqWmWj9XkRk6cKla18S0pBqRCtl+qluRIaZ7tyXKmdtlsXj0QIw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-http": { - "version": "0.201.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.201.1.tgz", - "integrity": "sha512-xhkL/eOntScSLS8C2/LHKZ9Z9MEyGB9Yil7lF3JV0+YBeLXHQUIw2xPD7T0qw0DnqlrN8c/gi8hb5BEXZcyHRg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/instrumentation": "0.201.1", - "@opentelemetry/semantic-conventions": "^1.29.0", - "forwarded-parse": "2.1.2" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-ioredis": { - "version": "0.49.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.49.0.tgz", - "integrity": "sha512-CcbA9ylntqK7/lo7NUD/I+Uj6xcIiFFk1O2RnY23MugJunqZIFufvYkdh1mdG2bvBKdIVvA2nkVVt1Igw0uw1A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/redis-common": "^0.37.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-kafkajs": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.10.0.tgz", - "integrity": "sha512-0roBjhMaW5li1gXVqrBRjzeLPWUiym8TPQi3iXqMA3GizPzilE4hwhIVI7GxtMHAdS15TgkUce6WVYVOBFrrbg==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.30.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-knex": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.46.0.tgz", - "integrity": "sha512-+AxDwDdLJB467mEPOQKHod/1NDzX8msUAOEiViMkM7xAJoUsHTrP6EKlbjrCKkK+X2Eqh2pTO0ibeLkhG96oNA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-koa": { - "version": "0.49.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.49.0.tgz", - "integrity": "sha512-LO2pdZ5SF2LzWZLwrPTja/sQN8Kl4Wu5QvWSFJJLLGpeVKQWC4n41qjPUAAu668w43s42xqfs9bC4hWmQe7o8g==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-memcached": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.45.0.tgz", - "integrity": "sha512-9NjbvCBM7p+wh/sHfSGDvrtinFYqIr6qunL9nN3e86eIQh3WyE9YdnlFGRbBR+MOzTCwSzrKAvY+J0fQe91VHA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0", - "@types/memcached": "^2.2.6" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-mongodb": { - "version": "0.54.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.54.0.tgz", - "integrity": "sha512-xTECmvFNfavpNz7btxmmvkCZKdHphQSSf0J4tSw4OOT0CSTythB/IWo41mYBd6GIutkmeA12dkKPd8zAU7zzyA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-mongoose": { - "version": "0.48.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.48.0.tgz", - "integrity": "sha512-kvopwp/kb1wN8jd0HhIBx/ZxbSmwqhN7LLvl9a7fXYACYlewUtCnVJLG80kwuG+rexRZlxeDfjoacFRDQSf9XA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-mysql": { - "version": "0.47.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.47.0.tgz", - "integrity": "sha512-QWJNDNW0JyHj3cGtQOeNBcrDeOY35yX/JnDg8jEvxzmoEABHyj0EqI8fHPdOQmdctTjKTjzbqwtuAzLYIfkdAA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0", - "@types/mysql": "2.15.26" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-mysql2": { - "version": "0.47.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.47.0.tgz", - "integrity": "sha512-rVKuKJ6HFVTNXNo8WuC3lBL/9zQ0OZfga/2dLseg/jlQZzUlWijsA57trnA92pcYxs32HBPSfKpuA88ZAVBFpA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0", - "@opentelemetry/sql-common": "^0.41.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-nestjs-core": { - "version": "0.47.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.47.0.tgz", - "integrity": "sha512-xTtWbqdvlxRfhYidLEq0XvQUGqqgT4Fom21nxJ7XYvOoUJ4KNOxFBnfGW9RcXtFHDkux6rIjNP5CiPCYMZ007g==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.30.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-net": { - "version": "0.45.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.45.0.tgz", - "integrity": "sha512-kFdY4IMth8obBPXoAlpLkea7l85Joe+p7oep+BexrHQ0iX+0cvnfoYBMMSE/vAp6T1N3Nu6RDT2Wzf3mqkHxjw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-pg": { - "version": "0.53.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.53.0.tgz", - "integrity": "sha512-riWbJvSviTAsjeuq8fn7Y7+CXEYf3sGR18WfLeM7GgSnptTOur1++SLTN7XogqiwP3LFFQ0GLoYe+hxVOEyEpw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0", - "@opentelemetry/sql-common": "^0.41.0", - "@types/pg": "8.6.1", - "@types/pg-pool": "2.0.6" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-pino": { - "version": "0.48.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.48.0.tgz", - "integrity": "sha512-+X+GTaXFuExrmQ3XS1HH8E+4KkKQ1HPzjNGnckuW/SQVOxRGeZMwJu1s60lx4eLpQuXXRh9nJaCAqMi/As347w==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "^0.201.0", - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-redis": { - "version": "0.48.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.48.0.tgz", - "integrity": "sha512-bp82CqAcBNk0+nneAX2L+wbCKiNHTnTEJlppOEjxESIR8AocSKO7gnWpotTh5Bki2UULUn62MBXJmRnIzj0ikw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/redis-common": "^0.37.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-restify": { - "version": "0.47.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.47.0.tgz", - "integrity": "sha512-A1VixeXnRAQQfWidjnNqOwqGp1K5/r6fIyCdL+1Yvde11HiruMQOf6B71D7wWJHRtNKpLhq3o8JzeNGJoBEMpA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-socket.io": { - "version": "0.48.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.48.0.tgz", - "integrity": "sha512-bVFiRvQnAW9hT+8FZVuhhybAvopAShLGm6LYz8raNZokxEw2FzGDVXONWaAM5D2/RbCbMl7R+PLN//3SEU/k0g==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/instrumentation": "^0.201.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-undici": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.12.0.tgz", - "integrity": "sha512-SLqTWPWWwqSZVYZw3a9sdcNXsahJfimvDpYaoDd6ryvQGDlOrHVKr56gL5qD3XDVa67DmV5ZQrxRrnYUdlp3BQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.201.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.7.0" - } - }, - "node_modules/@opentelemetry/instrumentation-winston": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.46.0.tgz", - "integrity": "sha512-/nvmsLSON9Ki8C32kOMAkzsCpFfpjI2Fvr51uAY8/8bwG258MUUN8fCbAOMaiaPEKiB807wsE/aym83LYiB0ng==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "^0.201.0", - "@opentelemetry/instrumentation": "^0.201.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.201.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.201.1.tgz", - "integrity": "sha512-FiS/mIWmZXyRxYGyXPHY+I/4+XrYVTD7Fz/zwOHkVPQsA1JTakAOP9fAi6trXMio0dIpzvQujLNiBqGM7ExrQw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/otlp-transformer": "0.201.1" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.201.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.201.1.tgz", - "integrity": "sha512-+q/8Yuhtu9QxCcjEAXEO8fXLjlSnrnVwfzi9jiWaMAppQp69MoagHHomQj02V2WnGjvBod5ajgkbK4IoWab50A==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.201.1", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1", - "@opentelemetry/sdk-logs": "0.201.1", - "@opentelemetry/sdk-metrics": "2.0.1", - "@opentelemetry/sdk-trace-base": "2.0.1", - "protobufjs": "^7.3.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/propagation-utils": { - "version": "0.31.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagation-utils/-/propagation-utils-0.31.1.tgz", - "integrity": "sha512-YLNt7SWy4HZwI9d+4+OevQs2Gmof27TkjR3v029UGw8zFOcyONyIQhHHx7doyRbrLpWZtUc91cnCA4mKhArCXw==", - "license": "Apache-2.0", - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" - } - }, - "node_modules/@opentelemetry/propagator-aws-xray": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray/-/propagator-aws-xray-2.1.0.tgz", - "integrity": "sha512-msfgWJwK3rqGBHgPnY0qclJCT1pJq1Vv08cq8utM3KUBBqjKWX2o9zav9Sv/lkPqx1Zbl3cPGkb6eN+sITjg+g==", - "license": "Apache-2.0", - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/propagator-aws-xray-lambda": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-aws-xray-lambda/-/propagator-aws-xray-lambda-0.55.0.tgz", - "integrity": "sha512-sfHaupLWYnGpXBvc98SXdX6xGNAc3QLt+Qxrgslo3fE523DbumHCYBZp/ja23a8ZTG6jU3EuoaBekBl6xUSATQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/propagator-aws-xray": "^2.1.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/redis-common": { - "version": "0.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.37.0.tgz", - "integrity": "sha512-tJwgE6jt32bLs/9J6jhQRKU2EZnsD8qaO13aoFyXwF6s4LhpT7YFHf3Z03MqdILk6BA2BFUhoyh7k9fj9i032A==", - "engines": { - "node": "^18.19.0 || >=20.6.0" - } - }, - "node_modules/@opentelemetry/resource-detector-aws": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resource-detector-aws/-/resource-detector-aws-2.1.0.tgz", - "integrity": "sha512-7QG5wQXMiHseKIyU69m8vfZgLhrxFx48DdyaQEYj6GXjE/Xrv1nS3bUwhICjb6+4NorB9+1pFCvJ/4S01CCCjQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/resources": "^2.0.0", - "@opentelemetry/semantic-conventions": "^1.27.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" - } - }, - "node_modules/@opentelemetry/resources": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", - "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-logs": { - "version": "0.201.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.201.1.tgz", - "integrity": "sha512-Ug8gtpssUNUnfpotB9ZhnSsPSGDu+7LngTMgKl31mmVJwLAKyl6jC8diZrMcGkSgBh0o5dbg9puvLyR25buZfw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api-logs": "0.201.1", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", - "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.9.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", - "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "2.0.1", - "@opentelemetry/resources": "2.0.1", - "@opentelemetry/semantic-conventions": "^1.29.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/sdk-trace-node": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.0.1.tgz", - "integrity": "sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/context-async-hooks": "2.0.1", - "@opentelemetry/core": "2.0.1", - "@opentelemetry/sdk-trace-base": "2.0.1" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.32.0.tgz", - "integrity": "sha512-s0OpmpQFSfMrmedAn9Lhg4KWJELHCU6uU9dtIJ28N8UGhf9Y55im5X8fEzwhwDwiSqN+ZPSNrDJF7ivf/AuRPQ==", - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/sql-common": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sql-common/-/sql-common-0.41.0.tgz", - "integrity": "sha512-pmzXctVbEERbqSfiAgdes9Y63xjoOyXcD7B6IXBkVb+vbM7M9U98mn33nGXxPf4dfYR0M+vhcKRZmbSJ7HfqFA==", - "dependencies": { - "@opentelemetry/core": "^2.0.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.1.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", - "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true - }, - "node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.3.tgz", - "integrity": "sha512-RpacQhBlwpBWd7KEJsRKcBQalbV28fvkxwTOJIqhIuDysMMaJW47V4OqW30iJB9uRpqOSxxEAQFdr8tTattReQ==", - "dev": true, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", - "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", - "dev": true, - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", - "dev": true, - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/sign/node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/@sigstore/tuf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", - "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", - "dev": true, - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", - "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.2.tgz", - "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "lodash.get": "^4.4.2", - "type-detect": "^4.1.0" - } - }, - "node_modules/@sinonjs/samsam/node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", - "dev": true, - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "dev": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/aws-lambda": { - "version": "8.10.149", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.149.tgz", - "integrity": "sha512-NXSZIhfJjnXqJgtS7IwutqIF/SOy1Wz5Px4gUY1RWITp3AYTyuJS4xaXr/bIJY1v15XMzrJ5soGnPM+7uigZjA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/bunyan": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.11.tgz", - "integrity": "sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/memcached": { - "version": "2.2.10", - "resolved": "https://registry.npmjs.org/@types/memcached/-/memcached-2.2.10.tgz", - "integrity": "sha512-AM9smvZN55Gzs2wRrqeMHVP7KE8KWgCJO/XL5yCly2xF6EKa4YlbpK+cLSAH4NG/Ah64HrlegmGqW8kYws7Vxg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, - "node_modules/@types/mocha": { - "version": "10.0.10", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.10.tgz", - "integrity": "sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==", - "dev": true - }, - "node_modules/@types/mysql": { - "version": "2.15.26", - "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", - "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "22.15.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.19.tgz", - "integrity": "sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true - }, - "node_modules/@types/pg": { - "version": "8.6.1", - "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.6.1.tgz", - "integrity": "sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==", - "dependencies": { - "@types/node": "*", - "pg-protocol": "*", - "pg-types": "^2.2.0" - } - }, - "node_modules/@types/pg-pool": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pg-pool/-/pg-pool-2.0.6.tgz", - "integrity": "sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==", - "dependencies": { - "@types/pg": "*" - } - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@types/shimmer": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", - "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==" - }, - "node_modules/@types/sinon": { - "version": "17.0.4", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.4.tgz", - "integrity": "sha512-RHnIrhfPO3+tJT0s7cFaXGZvsL4bbR3/k7z3P312qMS4JaS2Tk+KiwiLx1S0rQ56ERj00u1/BtdyVd0FY+Pdew==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "8.1.5", - "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.5.tgz", - "integrity": "sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz", - "integrity": "sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.29.1", - "@typescript-eslint/type-utils": "8.29.1", - "@typescript-eslint/utils": "8.29.1", - "@typescript-eslint/visitor-keys": "8.29.1", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.0.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.1.tgz", - "integrity": "sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "8.29.1", - "@typescript-eslint/types": "8.29.1", - "@typescript-eslint/typescript-estree": "8.29.1", - "@typescript-eslint/visitor-keys": "8.29.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz", - "integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "8.29.1", - "@typescript-eslint/visitor-keys": "8.29.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz", - "integrity": "sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "8.29.1", - "@typescript-eslint/utils": "8.29.1", - "debug": "^4.3.4", - "ts-api-utils": "^2.0.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz", - "integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz", - "integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "8.29.1", - "@typescript-eslint/visitor-keys": "8.29.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^2.0.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.1.tgz", - "integrity": "sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.29.1", - "@typescript-eslint/types": "8.29.1", - "@typescript-eslint/typescript-estree": "8.29.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0", - "typescript": ">=4.8.4 <5.9.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.29.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz", - "integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "8.29.1", - "eslint-visitor-keys": "^4.2.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", - "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", - "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", - "dev": true, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", - "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", - "dev": true, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", - "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", - "dev": true, - "engines": { - "node": ">=18.12.0" - }, - "peerDependencies": { - "webpack": "^5.82.0", - "webpack-cli": "6.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true - }, - "node_modules/@yarnpkg/parsers": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", - "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", - "dev": true, - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=18.12.0" - } - }, - "node_modules/@yarnpkg/parsers/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@yarnpkg/parsers/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/@zkochan/js-yaml": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", - "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/add-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", - "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "dev": true, - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/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==", - "dev": true - }, - "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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "dev": true - }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - }, - "node_modules/archiver": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", - "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.4", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", - "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", - "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "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", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sdk": { - "version": "2.1692.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1692.0.tgz", - "integrity": "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==", - "hasInstallScript": true, - "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/axios": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.8.3.tgz", - "integrity": "sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true - }, - "node_modules/bestzip": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bestzip/-/bestzip-2.2.1.tgz", - "integrity": "sha512-XdAb87RXqOqF7C6UgQG9IqpEHJvS6IOUo0bXWEAebjSSdhDjsbcqFKdHpn5Q7QHz2pGr3Zmw4wgG3LlzdyDz7w==", - "dev": true, - "dependencies": { - "archiver": "^5.3.0", - "async": "^3.2.0", - "glob": "^7.1.6", - "which": "^2.0.2", - "yargs": "^16.2.0" - }, - "bin": { - "bestzip": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/bin-links": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz", - "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==", - "dev": true, - "dependencies": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/bin-links/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/bin-links/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtins": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", - "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/byte-size": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", - "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", - "dev": true, - "engines": { - "node": ">=12.17" - } - }, - "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001697", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001697.tgz", - "integrity": "sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", - "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", - "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-highlight": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", - "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "highlight.js": "^10.7.1", - "mz": "^2.4.0", - "parse5": "^5.1.1", - "parse5-htmlparser2-tree-adapter": "^6.0.0", - "yargs": "^16.0.0" - }, - "bin": { - "highlight": "bin/highlight" - }, - "engines": { - "node": ">=8.0.0", - "npm": ">=5.0.0" - } - }, - "node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cmd-shim": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", - "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true - }, - "node_modules/columnify": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", - "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", - "dev": true, - "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true - }, - "node_modules/compare-func": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", - "dev": true, - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" - } - }, - "node_modules/compress-commons": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", - "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", - "dev": true, - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concat-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", - "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", - "dev": true, - "engines": [ - "node >= 6.0" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true - }, - "node_modules/conventional-changelog-angular": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", - "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", - "dev": true, - "dependencies": { - "compare-func": "^2.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/conventional-changelog-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", - "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", - "dev": true, - "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^6.0.0", - "conventional-commits-parser": "^4.0.0", - "dateformat": "^3.0.3", - "get-pkg-repo": "^4.2.1", - "git-raw-commits": "^3.0.0", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^5.0.0", - "normalize-package-data": "^3.0.3", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-preset-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", - "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-changelog-writer": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", - "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", - "dev": true, - "dependencies": { - "conventional-commits-filter": "^3.0.0", - "dateformat": "^3.0.3", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "meow": "^8.1.2", - "semver": "^7.0.0", - "split": "^1.0.1" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-changelog-writer/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==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-writer/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer/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==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-writer/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-writer/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer/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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-writer/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==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/conventional-changelog-writer/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-changelog-writer/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-changelog-writer/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-commits-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", - "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", - "dev": true, - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.1" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-commits-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", - "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", - "dev": true, - "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" - }, - "bin": { - "conventional-commits-parser": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-commits-parser/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==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-commits-parser/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-commits-parser/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==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-commits-parser/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-commits-parser/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-commits-parser/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-commits-parser/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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-commits-parser/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==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-commits-parser/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-commits-parser/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-commits-parser/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-commits-parser/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/conventional-commits-parser/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/conventional-commits-parser/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/conventional-commits-parser/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-commits-parser/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-commits-parser/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-recommended-bump": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", - "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", - "dev": true, - "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^3.0.0", - "conventional-commits-filter": "^3.0.0", - "conventional-commits-parser": "^4.0.0", - "git-raw-commits": "^3.0.0", - "git-semver-tags": "^5.0.0", - "meow": "^8.1.2" - }, - "bin": { - "conventional-recommended-bump": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/conventional-recommended-bump/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==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-recommended-bump/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-recommended-bump/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==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-recommended-bump/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-recommended-bump/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-recommended-bump/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-recommended-bump/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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-recommended-bump/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==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/conventional-recommended-bump/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/conventional-recommended-bump/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/conventional-recommended-bump/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/copyfiles": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", - "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", - "dev": true, - "dependencies": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^1.0.4", - "noms": "0.0.0", - "through2": "^2.0.1", - "untildify": "^4.0.0", - "yargs": "^16.1.0" - }, - "bin": { - "copyfiles": "copyfiles", - "copyup": "copyfiles" - } - }, - "node_modules/copyfiles/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/copyfiles/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", - "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/dargs": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", - "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dedent": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", - "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", - "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "node_modules/detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dotenv-expand": { - "version": "11.0.7", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", - "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", - "dev": true, - "dependencies": { - "dotenv": "^16.4.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.91", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.91.tgz", - "integrity": "sha512-sNSHHyq048PFmZY4S90ax61q+gLCs0X0YmcOII9wG9S2XwbVr+h4VW2wWhnbp/Eys3cCwTxVF292W3qPaxIapQ==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "dev": true, - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.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==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-regex": "^1.2.1", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", - "dev": true - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "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.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", - "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "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==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-es": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz", - "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==", - "dev": true, - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "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==", - "dev": true, - "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==", - "dev": true, - "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", - "integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==", - "dev": true, - "peerDependencies": { - "eslint": ">=7.7.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", - "dev": true, - "dependencies": { - "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", - "hasown": "^2.0.2", - "is-core-module": "^2.15.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.8", - "object.groupby": "^1.0.3", - "object.values": "^1.2.0", - "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", - "tsconfig-paths": "^3.15.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" - } - }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-n": { - "version": "15.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.7.0.tgz", - "integrity": "sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.1", - "eslint-plugin-es": "^4.1.0", - "eslint-utils": "^3.0.0", - "ignore": "^5.1.1", - "is-core-module": "^2.11.0", - "minimatch": "^3.1.2", - "resolve": "^1.22.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-n/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-n/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", - "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.9.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "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==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "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==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "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==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.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/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", - "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true - }, - "node_modules/external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/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==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ] - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.0.tgz", - "integrity": "sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flatted": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", - "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.4.tgz", - "integrity": "sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded-parse": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", - "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==" - }, - "node_modules/front-matter": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", - "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", - "dev": true, - "dependencies": { - "js-yaml": "^3.13.1" - } - }, - "node_modules/front-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/front-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/front-matter/node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", - "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", - "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", - "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", - "dev": true, - "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "get-pkg-repo": "src/cli.js" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-pkg-repo/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-pkg-repo/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/get-port": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", - "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/git-raw-commits": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", - "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", - "dev": true, - "dependencies": { - "dargs": "^7.0.0", - "meow": "^8.1.2", - "split2": "^3.2.2" - }, - "bin": { - "git-raw-commits": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/git-raw-commits/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==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-raw-commits/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==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-raw-commits/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-raw-commits/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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/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==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/git-raw-commits/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/git-raw-commits/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/git-raw-commits/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-raw-commits/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-raw-commits/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", - "dev": true, - "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/git-semver-tags": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", - "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", - "dev": true, - "dependencies": { - "meow": "^8.1.2", - "semver": "^7.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/git-semver-tags/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==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-semver-tags/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-semver-tags/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==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-semver-tags/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-semver-tags/node_modules/meow": { - "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-semver-tags/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-semver-tags/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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-semver-tags/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==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/git-semver-tags/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/git-semver-tags/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/git-semver-tags/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/git-up": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", - "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", - "dev": true, - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" - } - }, - "node_modules/git-url-parse": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", - "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", - "dev": true, - "dependencies": { - "git-up": "^7.0.0" - } - }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", - "dev": true, - "dependencies": { - "ini": "^1.3.2" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/gts": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/gts/-/gts-6.0.2.tgz", - "integrity": "sha512-lp9+eDzzm6TYqiBpgGY00EInxBHFTJiU5brsVp11qXCJEw7Q6WNNngja0spZeqSFWSquaRuHQUuWxdZLaxnKmw==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "5.62.0", - "@typescript-eslint/parser": "5.62.0", - "chalk": "^4.1.2", - "eslint": "8.57.1", - "eslint-config-prettier": "9.1.0", - "eslint-plugin-n": "15.7.0", - "eslint-plugin-prettier": "5.2.1", - "execa": "^5.0.0", - "inquirer": "^7.3.3", - "json5": "^2.1.3", - "meow": "^9.0.0", - "ncp": "^2.0.0", - "prettier": "3.3.3", - "rimraf": "3.0.2", - "write-file-atomic": "^4.0.0" - }, - "bin": { - "gts": "build/src/cli.js" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "typescript": ">=5" - } - }, - "node_modules/gts/node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/gts/node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "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" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/gts/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/gts/node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/gts/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/gts/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/gts/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "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/gts/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/gts/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/gts/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/gts/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/handlebars": { - "version": "4.7.8", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", - "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/highlight.js": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", - "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", - "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", - "dev": true, - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "dev": true, - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", - "dev": true, - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-in-the-middle": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.12.0.tgz", - "integrity": "sha512-yAgSE7GmtRcu4ZUSFX/4v69UGXwugFFSdIQJ14LHPOPPQrWv8Y7O9PHsw8Ovk7bKCLe4sjXMbZFqGFcLHpZ89w==", - "dependencies": { - "acorn": "^8.8.2", - "acorn-import-attributes": "^1.9.5", - "cjs-module-lexer": "^1.2.2", - "module-details-from-path": "^1.0.3" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/init-package-json": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz", - "integrity": "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==", - "dev": true, - "dependencies": { - "@npmcli/package-json": "^5.0.0", - "npm-package-arg": "^11.0.0", - "promzard": "^1.0.0", - "read": "^3.0.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dev": true, - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/is-arguments": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", - "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", - "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ssh": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", - "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", - "dev": true, - "dependencies": { - "protocols": "^2.0.1" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", - "dev": true, - "dependencies": { - "text-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", - "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", - "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", - "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json-stringify-nice": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", - "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "dev": true, - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "dev": true, - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/just-diff": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", - "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", - "dev": true - }, - "node_modules/just-diff-apply": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", - "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", - "dev": true - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/lerna": { - "version": "8.1.9", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.1.9.tgz", - "integrity": "sha512-ZRFlRUBB2obm+GkbTR7EbgTMuAdni6iwtTQTMy7LIrQ4UInG44LyfRepljtgUxh4HA0ltzsvWfPkd5J1DKGCeQ==", - "dev": true, - "dependencies": { - "@lerna/create": "8.1.9", - "@npmcli/arborist": "7.5.4", - "@npmcli/package-json": "5.2.0", - "@npmcli/run-script": "8.1.0", - "@nx/devkit": ">=17.1.2 < 21", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.11", - "aproba": "2.0.0", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "clone-deep": "4.0.1", - "cmd-shim": "6.0.3", - "color-support": "1.1.3", - "columnify": "1.6.0", - "console-control-strings": "^1.1.0", - "conventional-changelog-angular": "7.0.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "9.0.0", - "dedent": "1.5.3", - "envinfo": "7.13.0", - "execa": "5.0.0", - "fs-extra": "^11.2.0", - "get-port": "5.1.1", - "get-stream": "6.0.0", - "git-url-parse": "14.0.0", - "glob-parent": "6.0.2", - "globby": "11.1.0", - "graceful-fs": "4.2.11", - "has-unicode": "2.0.1", - "import-local": "3.1.0", - "ini": "^1.3.8", - "init-package-json": "6.0.3", - "inquirer": "^8.2.4", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "jest-diff": ">=29.4.3 < 30", - "js-yaml": "4.1.0", - "libnpmaccess": "8.0.6", - "libnpmpublish": "9.0.9", - "load-json-file": "6.2.0", - "lodash": "^4.17.21", - "make-dir": "4.0.0", - "minimatch": "3.0.5", - "multimatch": "5.0.0", - "node-fetch": "2.6.7", - "npm-package-arg": "11.0.2", - "npm-packlist": "8.0.2", - "npm-registry-fetch": "^17.1.0", - "nx": ">=17.1.2 < 21", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-pipe": "3.1.0", - "p-queue": "6.6.2", - "p-reduce": "2.1.0", - "p-waterfall": "2.1.1", - "pacote": "^18.0.6", - "pify": "5.0.0", - "read-cmd-shim": "4.0.0", - "resolve-from": "5.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.8", - "set-blocking": "^2.0.0", - "signal-exit": "3.0.7", - "slash": "3.0.0", - "ssri": "^10.0.6", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "strong-log-transformer": "2.1.0", - "tar": "6.2.1", - "temp-dir": "1.0.0", - "typescript": ">=3 < 6", - "upath": "2.0.1", - "uuid": "^10.0.0", - "validate-npm-package-license": "3.0.4", - "validate-npm-package-name": "5.0.1", - "wide-align": "1.1.5", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "17.7.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "lerna": "dist/cli.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/lerna-changelog": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/lerna-changelog/-/lerna-changelog-2.2.0.tgz", - "integrity": "sha512-yjYNAHrbnw8xYFKmYWJEP52Tk4xSdlNmzpYr26+3glbSGDmpe8UMo8f9DlEntjGufL+opup421oVTXcLshwAaQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "cli-highlight": "^2.1.11", - "execa": "^5.0.0", - "hosted-git-info": "^4.0.0", - "make-fetch-happen": "^9.0.0", - "p-map": "^3.0.0", - "progress": "^2.0.0", - "yargs": "^17.1.0" - }, - "bin": { - "lerna-changelog": "bin/cli.js" - }, - "engines": { - "node": "12.* || 14.* || >= 16" - } - }, - "node_modules/lerna-changelog/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lerna-changelog/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/lerna-changelog/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna-changelog/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/lerna/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/lerna/node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lerna/node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/lerna/node_modules/get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/lerna/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/inquirer": { - "version": "8.2.6", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", - "integrity": "sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/lerna/node_modules/inquirer/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/lerna/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/lerna/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lerna/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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", - "dev": true, - "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/lerna/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/lerna/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lerna/node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/lerna/node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/lerna/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/libnpmaccess": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz", - "integrity": "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==", - "dev": true, - "dependencies": { - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/libnpmpublish": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.9.tgz", - "integrity": "sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==", - "dev": true, - "dependencies": { - "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.1", - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.2.0", - "semver": "^7.3.7", - "sigstore": "^2.2.0", - "ssri": "^10.0.6" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/libnpmpublish/node_modules/ci-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", - "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/load-json-file/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "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==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", - "dev": true - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/long": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.4.tgz", - "integrity": "sha512-qtzLbJE8hq7VabR3mISmVGtoXP8KGc2Z/AT8OuqlYD7JTR3oqrgwdjnk07wpj1twXxYmgDXgoKVWUG/fReSzHg==" - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/make-fetch-happen/node_modules/cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-fetch-happen/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/make-fetch-happen/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/make-fetch-happen/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/make-fetch-happen/node_modules/unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "dependencies": { - "unique-slug": "^2.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/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==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/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==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/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==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", - "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "dev": true, - "dependencies": { - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "optionalDependencies": { - "encoding": "^0.1.12" - } - }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha": { - "version": "11.3.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.3.0.tgz", - "integrity": "sha512-J0RLIM89xi8y6l77bgbX+03PeBRDQCOVQpnwOcCN7b8hCmbh6JvGI2ZDJ5WMoHz+IaPU+S4lvTd0j51GmBAdgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "browser-stdout": "^1.3.1", - "chokidar": "^4.0.1", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^10.4.5", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "picocolors": "^1.1.1", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/module-details-from-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/multimatch": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", - "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", - "dev": true, - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/multimatch/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/multimatch/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/multimatch/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0", - "object-assign": "^4.0.1", - "thenify-all": "^1.0.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "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==", - "dev": true - }, - "node_modules/ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", - "dev": true, - "bin": { - "ncp": "bin/ncp" - } - }, - "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", - "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", - "dev": true, - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", - "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/node-gyp/node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", - "dev": true, - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/node-gyp/node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^16.13.0 || >=18.0.0" - } - }, - "node_modules/node-machine-id": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", - "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true - }, - "node_modules/noms": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", - "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" - } - }, - "node_modules/noms/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/noms/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/noms/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", - "dev": true, - "dependencies": { - "abbrev": "^2.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", - "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", - "dev": true, - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", - "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-install-checks": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", - "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", - "dev": true, - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-packlist": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", - "dev": true, - "dependencies": { - "ignore-walk": "^6.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", - "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", - "dev": true, - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", - "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", - "dev": true, - "dependencies": { - "@npmcli/redact": "^2.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", - "dev": true, - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nx": { - "version": "20.4.0", - "resolved": "https://registry.npmjs.org/nx/-/nx-20.4.0.tgz", - "integrity": "sha512-barpwhq8noc30U0d5j2bSp9x/HDL33TCYsP2fl6FvpssbL64PwLOSBqIdZ9ATxVxAE/xAc/s+z72cYDkaYouPA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@napi-rs/wasm-runtime": "0.2.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.2", - "@zkochan/js-yaml": "0.0.7", - "axios": "^1.7.4", - "chalk": "^4.1.0", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^8.0.1", - "dotenv": "~16.4.5", - "dotenv-expand": "~11.0.6", - "enquirer": "~2.3.6", - "figures": "3.2.0", - "flat": "^5.0.2", - "front-matter": "^4.0.2", - "ignore": "^5.0.4", - "jest-diff": "^29.4.1", - "jsonc-parser": "3.2.0", - "lines-and-columns": "2.0.3", - "minimatch": "9.0.3", - "node-machine-id": "1.1.12", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "ora": "5.3.0", - "resolve.exports": "2.0.3", - "semver": "^7.5.3", - "string-width": "^4.2.3", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^4.1.2", - "tslib": "^2.3.0", - "yaml": "^2.6.0", - "yargs": "^17.6.2", - "yargs-parser": "21.1.1" - }, - "bin": { - "nx": "bin/nx.js", - "nx-cloud": "bin/nx-cloud.js" - }, - "optionalDependencies": { - "@nx/nx-darwin-arm64": "20.4.0", - "@nx/nx-darwin-x64": "20.4.0", - "@nx/nx-freebsd-x64": "20.4.0", - "@nx/nx-linux-arm-gnueabihf": "20.4.0", - "@nx/nx-linux-arm64-gnu": "20.4.0", - "@nx/nx-linux-arm64-musl": "20.4.0", - "@nx/nx-linux-x64-gnu": "20.4.0", - "@nx/nx-linux-x64-musl": "20.4.0", - "@nx/nx-win32-arm64-msvc": "20.4.0", - "@nx/nx-win32-x64-msvc": "20.4.0" - }, - "peerDependencies": { - "@swc-node/register": "^1.8.0", - "@swc/core": "^1.3.85" - }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } - } - }, - "node_modules/nx/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/nx/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nx/node_modules/tmp": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/nx/node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/nx/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", - "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", - "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "log-symbols": "^4.0.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "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==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map-series": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", - "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-pipe": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", - "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-reduce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/p-waterfall": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", - "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", - "dev": true, - "dependencies": { - "p-reduce": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true - }, - "node_modules/pacote": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", - "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", - "dev": true, - "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", - "cacache": "^18.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-conflict-json": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", - "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "just-diff": "^6.0.0", - "just-diff-apply": "^5.2.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/parse-json/node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/parse-path": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", - "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", - "dev": true, - "dependencies": { - "protocols": "^2.0.0" - } - }, - "node_modules/parse-url": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", - "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", - "dev": true, - "dependencies": { - "parse-path": "^7.0.0" - } - }, - "node_modules/parse5": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", - "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", - "dev": true - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "dev": true, - "dependencies": { - "parse5": "^6.0.1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pg-int8": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", - "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/pg-protocol": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", - "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==" - }, - "node_modules/pg-types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", - "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", - "dependencies": { - "pg-int8": "1.0.1", - "postgres-array": "~2.0.0", - "postgres-bytea": "~1.0.0", - "postgres-date": "~1.0.4", - "postgres-interval": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "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==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-array": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", - "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postgres-bytea": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", - "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-date": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", - "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postgres-interval": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", - "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", - "dependencies": { - "xtend": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/proggy": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/proggy/-/proggy-2.0.0.tgz", - "integrity": "sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/promise-all-reject-late": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", - "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/promise-call-limit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", - "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/promzard": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz", - "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==", - "dev": true, - "dependencies": { - "read": "^3.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/protobufjs": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", - "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/protocols": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", - "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, - "node_modules/read": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", - "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", - "dev": true, - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-cmd-shim": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", - "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", - "dev": true, - "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/read-pkg/node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/read/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/readdirp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", - "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-in-the-middle": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.0.tgz", - "integrity": "sha512-/Tvpny/RVVicqlYTKwt/GtpZRsPG1CmJNhxVKGz+Sy/4MONfXCVNK69MFgGKdUt0/324q3ClI2dICcPgISrC8g==", - "dependencies": { - "debug": "^4.3.5", - "module-details-from-path": "^1.0.3", - "resolve": "^1.22.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/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==", - "dev": true, - "engines": { - "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==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", - "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", - "dev": true, - "dependencies": { - "glob": "^11.0.0", - "package-json-from-dist": "^1.0.0" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", - "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/jackspeak": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", - "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/lru-cache": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", - "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", - "dev": true, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "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==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-push-apply/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" - }, - "node_modules/schema-utils": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", - "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/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==", - "dev": true, - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sigstore": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", - "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", - "dev": true, - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/sinon": { - "version": "20.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-20.0.0.tgz", - "integrity": "sha512-+FXOAbdnj94AQIxH0w1v8gzNxkawVvNqE3jUzRLptR71Oykeu2RrQXXl/VQjKay+Qnh73fDt/oDfMo6xMeDQbQ==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.5", - "@sinonjs/samsam": "^8.0.1", - "diff": "^7.0.0", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/sinon/node_modules/diff": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", - "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "dev": true, - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", - "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", - "dev": true, - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", - "dev": true - }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "dev": true - }, - "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", - "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/synckit": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", - "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", - "dev": true, - "dependencies": { - "@pkgr/core": "^0.1.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/terser": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", - "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.11", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", - "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/thenify": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", - "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", - "dev": true, - "dependencies": { - "any-promise": "^1.0.0" - } - }, - "node_modules/thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", - "dev": true, - "dependencies": { - "thenify": ">= 3.1.0 < 4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/treeverse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", - "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-api-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.0.1.tgz", - "integrity": "sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==", - "dev": true, - "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" - } - }, - "node_modules/ts-loader": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", - "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/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==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tuf-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", - "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", - "dev": true, - "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", - "dev": true, - "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", - "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uglify-js": { - "version": "3.19.3", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", - "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, - "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, - "dependencies": { - "unique-slug": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/upath": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", - "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz", - "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", - "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/walk-up-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", - "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", - "dev": true - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/webpack": { - "version": "5.99.8", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.8.tgz", - "integrity": "sha512-lQ3CPiSTpfOnrEGeXDwoq5hIGzSjmwD72GdfVzF7CQAI7t47rJG9eDWvcEkEn3CUQymAElVvDg3YNTlCYj+qUQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.2", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", - "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.6.1", - "@webpack-cli/configtest": "^3.0.1", - "@webpack-cli/info": "^3.0.1", - "@webpack-cli/serve": "^3.0.1", - "colorette": "^2.0.14", - "commander": "^12.1.0", - "cross-spawn": "^7.0.3", - "envinfo": "^7.14.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^3.1.1", - "rechoir": "^0.8.0", - "webpack-merge": "^6.0.1" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.82.0" - }, - "peerDependenciesMeta": { - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", - "dev": true, - "engines": { - "node": ">=18" - } - }, - "node_modules/webpack-cli/node_modules/envinfo": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", - "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-node-externals": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", - "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/webpack/node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/webpack/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/write-json-file": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", - "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", - "dev": true, - "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/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==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-json-file/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/write-pkg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", - "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", - "dev": true, - "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", - "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", - "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yargs-unparser/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zip-stream": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", - "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", - "dev": true, - "dependencies": { - "archiver-utils": "^3.0.4", - "compress-commons": "^4.1.2", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/zip-stream/node_modules/archiver-utils": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", - "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", - "dev": true, - "dependencies": { - "glob": "^7.2.3", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "packages/layer": { - "name": "@opentelemetry-lambda/sdk-layer", - "version": "0.0.1", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.201.1", - "@opentelemetry/context-async-hooks": "^2.0.0", - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.201.1", - "@opentelemetry/exporter-metrics-otlp-http": "^0.201.1", - "@opentelemetry/exporter-trace-otlp-http": "^0.201.1", - "@opentelemetry/instrumentation": "^0.201.1", - "@opentelemetry/instrumentation-amqplib": "^0.48.0", - "@opentelemetry/instrumentation-aws-lambda": "^0.52.0", - "@opentelemetry/instrumentation-aws-sdk": "^0.53.0", - "@opentelemetry/instrumentation-bunyan": "^0.47.0", - "@opentelemetry/instrumentation-cassandra-driver": "^0.47.0", - "@opentelemetry/instrumentation-connect": "^0.45.0", - "@opentelemetry/instrumentation-dataloader": "^0.18.0", - "@opentelemetry/instrumentation-dns": "^0.45.0", - "@opentelemetry/instrumentation-express": "^0.50.0", - "@opentelemetry/instrumentation-fs": "^0.21.0", - "@opentelemetry/instrumentation-graphql": "^0.49.0", - "@opentelemetry/instrumentation-grpc": "^0.201.1", - "@opentelemetry/instrumentation-hapi": "^0.47.0", - "@opentelemetry/instrumentation-http": "^0.201.1", - "@opentelemetry/instrumentation-ioredis": "^0.49.0", - "@opentelemetry/instrumentation-kafkajs": "^0.10.0", - "@opentelemetry/instrumentation-knex": "^0.46.0", - "@opentelemetry/instrumentation-koa": "^0.49.0", - "@opentelemetry/instrumentation-memcached": "^0.45.0", - "@opentelemetry/instrumentation-mongodb": "^0.54.0", - "@opentelemetry/instrumentation-mongoose": "^0.48.0", - "@opentelemetry/instrumentation-mysql": "^0.47.0", - "@opentelemetry/instrumentation-mysql2": "^0.47.0", - "@opentelemetry/instrumentation-nestjs-core": "^0.47.0", - "@opentelemetry/instrumentation-net": "^0.45.0", - "@opentelemetry/instrumentation-pg": "^0.53.0", - "@opentelemetry/instrumentation-pino": "^0.48.0", - "@opentelemetry/instrumentation-redis": "^0.48.0", - "@opentelemetry/instrumentation-restify": "^0.47.0", - "@opentelemetry/instrumentation-socket.io": "^0.48.0", - "@opentelemetry/instrumentation-undici": "^0.12.0", - "@opentelemetry/instrumentation-winston": "^0.46.0", - "@opentelemetry/propagator-aws-xray": "^2.0.0", - "@opentelemetry/propagator-aws-xray-lambda": "^0.55.0", - "@opentelemetry/resource-detector-aws": "^2.0.0", - "@opentelemetry/resources": "^2.0.0", - "@opentelemetry/sdk-logs": "^0.201.1", - "@opentelemetry/sdk-metrics": "^2.0.0", - "@opentelemetry/sdk-trace-node": "^2.0.0" - }, - "devDependencies": { - "@types/mocha": "^10.0.9", - "@types/sinon": "^17.0.4", - "mocha": "^11.0.1", - "sinon": "^20.0.0", - "ts-loader": "^9.5.2", - "ts-node": "^10.9.2", - "webpack": "^5.98.0", - "webpack-cli": "^6.0.1", - "webpack-node-externals": "^3.0.0" - }, - "engines": { - "node": ">=18.19.0" - } - }, - "sample-apps/aws-sdk": { - "name": "@opentelemetry-samples/lambda-awssdk", - "version": "0.0.0", - "license": "Apache-2.0", - "dependencies": { - "aws-sdk": "2.1692.0" - }, - "devDependencies": { - "@types/aws-lambda": "8.10.149", - "@types/node": "22.15.19", - "bestzip": "2.2.1", - "copyfiles": "2.4.1", - "rimraf": "6.0.1", - "ts-node": "10.9.2", - "typescript": "5.8.3" - }, - "engines": { - "node": ">=16.0.0" - } - } - } -} diff --git a/nodejs/package.json b/nodejs/package.json deleted file mode 100644 index 45f0c4cd49..0000000000 --- a/nodejs/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "opentelemetry-lambda", - "version": "0.0.0", - "private": true, - "description": "This is a repository for AWS Lambda integration with OpenTelemetry.", - "repository": { - "type": "git", - "url": "https://github.com/open-telemetry/opentelemetry-lambda.git" - }, - "main": "build/src/index.js", - "types": "build/src/index.d.ts", - "scripts": { - "build": "lerna run build", - "test": "lerna run test", - "lint": "lerna run lint", - "lint:fix": "lerna run lint:fix" - }, - "workspaces": [ - "packages/*", - "sample-apps/*" - ], - "keywords": [ - "opentelemetry", - "nodejs", - "profiling", - "metrics", - "stats", - "plugins" - ], - "author": "OpenTelemetry Authors", - "license": "Apache-2.0", - "devDependencies": { - "@typescript-eslint/eslint-plugin": "^8.29.0", - "@typescript-eslint/parser": "^8.29.0", - "aws-sdk": "2.1692.0", - "bestzip": "2.2.1", - "copyfiles": "2.4.1", - "eslint": "^8.57.0", - "eslint-plugin-header": "3.1.1", - "eslint-plugin-import": "2.31.0", - "gts": "6.0.2", - "lerna": "^8.1.8", - "lerna-changelog": "2.2.0", - "rimraf": "6.0.1", - "typescript": "5.8.3" - }, - "changelog": { - "labels": { - "breaking": ":boom: Breaking Change", - "bug": ":bug: Bug Fix", - "plugin-request": ":tada: New Plugins", - "enhancement": ":rocket: Enhancement", - "internal": ":house: Internal", - "documentation": ":memo: Documentation" - }, - "ignoreCommitters": [ - "renovate-bot", - "dependabot" - ] - } -} diff --git a/nodejs/packages/layer/.gitignore b/nodejs/packages/layer/.gitignore deleted file mode 100644 index 35140ee750..0000000000 --- a/nodejs/packages/layer/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Workspaces root package-lock.json should be used -package-lock.json diff --git a/nodejs/packages/layer/.mocharc.json b/nodejs/packages/layer/.mocharc.json deleted file mode 100644 index 4ddf3176c9..0000000000 --- a/nodejs/packages/layer/.mocharc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "require": "ts-node/register", - "spec": ["test/**/*.spec.ts"] -} diff --git a/nodejs/packages/layer/install-externals.sh b/nodejs/packages/layer/install-externals.sh deleted file mode 100755 index 47440b51e0..0000000000 --- a/nodejs/packages/layer/install-externals.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash - -set -euf -o pipefail - -rm -rf ./build/workspace/node_modules - -# Space separated list of external NPM packages -EXTERNAL_PACKAGES=( "import-in-the-middle" ) - -for EXTERNAL_PACKAGE in "${EXTERNAL_PACKAGES[@]}" -do - echo "Installing external package $EXTERNAL_PACKAGE ..." - - PACKAGE_VERSION=$(npm query "#$EXTERNAL_PACKAGE" \ - | grep version \ - | head -1 \ - | awk -F: '{ print $2 }' \ - | sed 's/[",]//g') - - echo "Resolved version of the external package $EXTERNAL_PACKAGE: $PACKAGE_VERSION" - - npm install "$EXTERNAL_PACKAGE@$PACKAGE_VERSION" --prefix ./build/workspace --production --ignore-scripts - - echo "Installed external package $EXTERNAL_PACKAGE" -done diff --git a/nodejs/packages/layer/package.json b/nodejs/packages/layer/package.json deleted file mode 100644 index 6baf29424c..0000000000 --- a/nodejs/packages/layer/package.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "name": "@opentelemetry-lambda/sdk-layer", - "version": "0.0.1", - "private": true, - "description": "Layer including OpenTelemetry SDK for use with AWS Lambda.", - "repository": "open-telemetry/opentelemetry-lambda", - "scripts": { - "build": "npm run clean && npm run compile && npm run install-externals && npm run package", - "clean": "rimraf build/*", - "compile:tsc": "tsc --build tsconfig.json", - "compile:webpack": "webpack", - "compile": "npm run compile:webpack", - "copy-js-files": "copyfiles -f 'src/**/*.js' build/workspace && copyfiles 'test/**/*.js' build", - "copy-esm-files": "copyfiles -f 'src/**/*.mjs' build/workspace && copyfiles 'test/**/*.mjs' build", - "install-externals": "./install-externals.sh", - "lint": "ESLINT_USE_FLAT_CONFIG=false eslint . --ext .ts", - "lint:fix": "ESLINT_USE_FLAT_CONFIG=false eslint . --ext .ts --fix", - "package": "cd build/workspace && bestzip ../layer.zip *", - "postcompile": "npm run copy-js-files && npm run copy-esm-files && copyfiles -f 'scripts/*' build/workspace && copyfiles -f 'build/src/*.js' build/workspace && copyfiles -f 'build/src/*.mjs' build/workspace", - "pretest": "npm run compile:tsc", - "test:cjs": "mocha 'test/**/*.spec.ts' --exclude 'test/**/*.spec.mjs' --timeout 10000", - "test:esm": "mocha 'test/**/*.spec.mjs' --exclude 'test/**/*.spec.ts' --timeout 10000", - "test": "npm run test:cjs && npm run test:esm" - }, - "keywords": [ - "opentelemetry", - "awslambda", - "nodejs", - "tracing", - "profiling", - "instrumentation" - ], - "author": "OpenTelemetry Authors", - "license": "Apache-2.0", - "engines": { - "node": ">=18.19.0" - }, - "dependencies": { - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/api-logs": "^0.201.1", - "@opentelemetry/context-async-hooks": "^2.0.0", - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.201.1", - "@opentelemetry/exporter-metrics-otlp-http": "^0.201.1", - "@opentelemetry/exporter-trace-otlp-http": "^0.201.1", - "@opentelemetry/instrumentation": "^0.201.1", - "@opentelemetry/instrumentation-amqplib": "^0.48.0", - "@opentelemetry/instrumentation-aws-lambda": "^0.52.0", - "@opentelemetry/instrumentation-aws-sdk": "^0.53.0", - "@opentelemetry/instrumentation-bunyan": "^0.47.0", - "@opentelemetry/instrumentation-cassandra-driver": "^0.47.0", - "@opentelemetry/instrumentation-connect": "^0.45.0", - "@opentelemetry/instrumentation-dataloader": "^0.18.0", - "@opentelemetry/instrumentation-dns": "^0.45.0", - "@opentelemetry/instrumentation-express": "^0.50.0", - "@opentelemetry/instrumentation-fs": "^0.21.0", - "@opentelemetry/instrumentation-graphql": "^0.49.0", - "@opentelemetry/instrumentation-grpc": "^0.201.1", - "@opentelemetry/instrumentation-hapi": "^0.47.0", - "@opentelemetry/instrumentation-http": "^0.201.1", - "@opentelemetry/instrumentation-ioredis": "^0.49.0", - "@opentelemetry/instrumentation-kafkajs": "^0.10.0", - "@opentelemetry/instrumentation-knex": "^0.46.0", - "@opentelemetry/instrumentation-koa": "^0.49.0", - "@opentelemetry/instrumentation-memcached": "^0.45.0", - "@opentelemetry/instrumentation-mongodb": "^0.54.0", - "@opentelemetry/instrumentation-mongoose": "^0.48.0", - "@opentelemetry/instrumentation-mysql": "^0.47.0", - "@opentelemetry/instrumentation-mysql2": "^0.47.0", - "@opentelemetry/instrumentation-nestjs-core": "^0.47.0", - "@opentelemetry/instrumentation-net": "^0.45.0", - "@opentelemetry/instrumentation-pg": "^0.53.0", - "@opentelemetry/instrumentation-pino": "^0.48.0", - "@opentelemetry/instrumentation-redis": "^0.48.0", - "@opentelemetry/instrumentation-restify": "^0.47.0", - "@opentelemetry/instrumentation-socket.io": "^0.48.0", - "@opentelemetry/instrumentation-undici": "^0.12.0", - "@opentelemetry/instrumentation-winston": "^0.46.0", - "@opentelemetry/propagator-aws-xray": "^2.0.0", - "@opentelemetry/propagator-aws-xray-lambda": "^0.55.0", - "@opentelemetry/resource-detector-aws": "^2.0.0", - "@opentelemetry/resources": "^2.0.0", - "@opentelemetry/sdk-logs": "^0.201.1", - "@opentelemetry/sdk-metrics": "^2.0.0", - "@opentelemetry/sdk-trace-node": "^2.0.0" - }, - "devDependencies": { - "@types/mocha": "^10.0.9", - "@types/sinon": "^17.0.4", - "mocha": "^11.0.1", - "sinon": "^20.0.0", - "ts-loader": "^9.5.2", - "ts-node": "^10.9.2", - "webpack": "^5.98.0", - "webpack-cli": "^6.0.1", - "webpack-node-externals": "^3.0.0" - }, - "sideEffects": false -} diff --git a/nodejs/packages/layer/scripts/otel-handler b/nodejs/packages/layer/scripts/otel-handler deleted file mode 100755 index b3c615e6d3..0000000000 --- a/nodejs/packages/layer/scripts/otel-handler +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -set -ef -o pipefail - -export NODE_OPTIONS="${NODE_OPTIONS} --import /opt/init.mjs" - -if [[ $OTEL_RESOURCE_ATTRIBUTES != *"service.name="* ]]; then - if [[ -n "$OTEL_RESOURCE_ATTRIBUTES" ]]; then - export OTEL_RESOURCE_ATTRIBUTES="service.name=${AWS_LAMBDA_FUNCTION_NAME},${OTEL_RESOURCE_ATTRIBUTES}" - else - export OTEL_RESOURCE_ATTRIBUTES="service.name=${AWS_LAMBDA_FUNCTION_NAME}" - fi -fi - -if [[ -z "$OTEL_PROPAGATORS" ]]; then - export OTEL_PROPAGATORS="tracecontext,baggage,xray" -fi - -exec "$@" diff --git a/nodejs/packages/layer/src/init.mjs b/nodejs/packages/layer/src/init.mjs deleted file mode 100644 index 7b1b1b5f8b..0000000000 --- a/nodejs/packages/layer/src/init.mjs +++ /dev/null @@ -1,9 +0,0 @@ -const WRAPPER_INIT_START_TIME = Date.now(); -const { default: wrapper } = await import('./wrapper.js'); -await wrapper.init(); -await wrapper.wrap(); -console.log('OpenTelemetry wrapper init completed in', Date.now() - WRAPPER_INIT_START_TIME, 'ms'); - -const LOADER_INIT_START_TIME = Date.now(); -await import('./loader.mjs'); -console.log('OpenTelemetry loader init completed in', Date.now() - LOADER_INIT_START_TIME, 'ms'); diff --git a/nodejs/packages/layer/src/loader.mjs b/nodejs/packages/layer/src/loader.mjs deleted file mode 100644 index 300ddf184e..0000000000 --- a/nodejs/packages/layer/src/loader.mjs +++ /dev/null @@ -1,91 +0,0 @@ -import { register } from 'module'; -import * as path from 'path'; -import * as fs from 'fs'; - -function _hasFolderPackageJsonTypeModule(folder) { - if (folder.endsWith('/node_modules')) { - return false; - } - let pj = path.join(folder, '/package.json'); - if (fs.existsSync(pj)) { - try { - let pkg = JSON.parse(fs.readFileSync(pj).toString()); - if (pkg) { - if (pkg.type === 'module') { - return true; - } else { - return false; - } - } - } catch (e) { - console.warn(`${pj} cannot be read, it will be ignored for ES module detection purposes.`, e); - return false; - } - } - if (folder === '/') { - return false; - } - return _hasFolderPackageJsonTypeModule(path.resolve(folder, '..')); -} - -function _hasPackageJsonTypeModule(file) { - let jsPath = file + '.js'; - if (fs.existsSync(jsPath)) { - return _hasFolderPackageJsonTypeModule(path.resolve(path.dirname(jsPath))); - } - return false; -} - -function _resolveHandlerFileName() { - const taskRoot = process.env.LAMBDA_TASK_ROOT; - const handlerDef = process.env._HANDLER; - if (!taskRoot || !handlerDef) { - return null; - } - const handler = path.basename(handlerDef); - const moduleRoot = handlerDef.substr(0, handlerDef.length - handler.length); - const [module, _] = handler.split('.', 2); - return path.resolve(taskRoot, moduleRoot, module); -} - -function _isHandlerAnESModule() { - try { - const handlerFileName = _resolveHandlerFileName(); - if (!handlerFileName) { - return false; - } - if (fs.existsSync(handlerFileName + '.mjs')) { - return true; - } else if (fs.existsSync(handlerFileName + '.cjs')) { - return false; - } else { - return _hasPackageJsonTypeModule(handlerFileName); - } - } catch (e) { - console.error('Unknown error occurred while checking whether handler is an ES module', e); - return false; - } -} - -let registered = false; - -export function registerLoader() { - if (!registered) { - register('import-in-the-middle/hook.mjs', import.meta.url); - registered = true; - } -} - -if (_isHandlerAnESModule()) { - /* - We could activate ESM loader hook of the "import-in-the-middle" library, - - by "--loader=import-in-the-middle/hook.mjs" Node CLI option, but "--loader" option has been deprecated - - or by "--import=import-in-the-middle/hook.mjs" Node CLI option, but in this case, - there will always be "import-in-the-middle" hook initialization overhead even for non-ESM (CommonJS) modules - - Hence, instead, we initialize "import-in-the-middle" hook only for ES (EcmaScript) based user handlers - to prevent redundant "import-in-the-middle" hook initialization overhead during coldstart - of the CommonJS based user handlers. - */ - registerLoader(); -} diff --git a/nodejs/packages/layer/src/wrapper.ts b/nodejs/packages/layer/src/wrapper.ts deleted file mode 100644 index ecbd5b07dc..0000000000 --- a/nodejs/packages/layer/src/wrapper.ts +++ /dev/null @@ -1,623 +0,0 @@ -import { - context, - diag, - DiagConsoleLogger, - DiagLogLevel, - propagation, - TextMapPropagator, - trace, - TracerProvider, -} from '@opentelemetry/api'; -import { - CompositePropagator, - diagLogLevelFromString, - getStringFromEnv, - W3CBaggagePropagator, - W3CTraceContextPropagator, -} from '@opentelemetry/core'; -import { - BatchSpanProcessor, - ConsoleSpanExporter, - NodeTracerProvider, - SDKRegistrationConfig, - SimpleSpanProcessor, - SpanExporter, - TracerConfig, -} from '@opentelemetry/sdk-trace-node'; -import { - detectResources, - envDetector, - Resource, - processDetector, -} from '@opentelemetry/resources'; -import { awsLambdaDetector } from '@opentelemetry/resource-detector-aws'; -import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; -import { - Instrumentation, - registerInstrumentations, -} from '@opentelemetry/instrumentation'; -import { - AwsInstrumentation, - AwsSdkInstrumentationConfig, -} from '@opentelemetry/instrumentation-aws-sdk'; -import { - AwsLambdaInstrumentation, - AwsLambdaInstrumentationConfig, -} from '@opentelemetry/instrumentation-aws-lambda'; -import { AWSXRayPropagator } from '@opentelemetry/propagator-aws-xray'; -import { AWSXRayLambdaPropagator } from '@opentelemetry/propagator-aws-xray-lambda'; - -const defaultInstrumentationList = [ - 'dns', - 'express', - 'graphql', - 'grpc', - 'hapi', - 'http', - 'ioredis', - 'koa', - 'mongodb', - 'mysql', - 'net', - 'pg', - 'redis', -]; - -const propagatorMap = new Map TextMapPropagator>([ - ['tracecontext', () => new W3CTraceContextPropagator()], - ['baggage', () => new W3CBaggagePropagator()], - ['xray', () => new AWSXRayPropagator()], - ['xray-lambda', () => new AWSXRayLambdaPropagator()], -]); - -declare global { - // In case of downstream configuring span processors etc - function configureLambdaInstrumentation( - config: AwsLambdaInstrumentationConfig, - ): AwsLambdaInstrumentationConfig; - function configureAwsInstrumentation( - defaultConfig: AwsSdkInstrumentationConfig, - ): AwsSdkInstrumentationConfig; - function configureInstrumentations(): Instrumentation[]; - function configureSdkRegistration( - defaultSdkRegistration: SDKRegistrationConfig, - ): SDKRegistrationConfig; - function configureTracer(defaultConfig: TracerConfig): TracerConfig; - - // No explicit metric type here, but "unknown" type. - // Because metric packages are important dynamically. - function configureMeter(defaultConfig: unknown): unknown; - function configureMeterProvider(meterProvider: unknown): void; - - // No explicit log type here, but "unknown" type. - // Because log packages are important dynamically. - function configureLoggerProvider(loggerProvider: unknown): void; -} - -function getActiveInstumentations(): Set { - let enabledInstrumentations: string[] = defaultInstrumentationList; - if (process.env.OTEL_NODE_ENABLED_INSTRUMENTATIONS) { - enabledInstrumentations = - process.env.OTEL_NODE_ENABLED_INSTRUMENTATIONS.split(',').map(i => - i.trim(), - ); - } - const instrumentationSet = new Set(enabledInstrumentations); - if (process.env.OTEL_NODE_DISABLED_INSTRUMENTATIONS) { - const disableInstrumentations = - process.env.OTEL_NODE_DISABLED_INSTRUMENTATIONS.split(',').map(i => - i.trim(), - ); - disableInstrumentations.forEach(di => instrumentationSet.delete(di)); - } - return instrumentationSet; -} - -async function defaultConfigureInstrumentations() { - const instrumentations = []; - const activeInstrumentations = getActiveInstumentations(); - if (activeInstrumentations.has('amqplib')) { - const { AmqplibInstrumentation } = await import( - '@opentelemetry/instrumentation-amqplib' - ); - instrumentations.push(new AmqplibInstrumentation()); - } - if (activeInstrumentations.has('bunyan')) { - const { BunyanInstrumentation } = await import( - '@opentelemetry/instrumentation-bunyan' - ); - instrumentations.push(new BunyanInstrumentation()); - } - if (activeInstrumentations.has('cassandra-driver')) { - const { CassandraDriverInstrumentation } = await import( - '@opentelemetry/instrumentation-cassandra-driver' - ); - instrumentations.push(new CassandraDriverInstrumentation()); - } - if (activeInstrumentations.has('connect')) { - const { ConnectInstrumentation } = await import( - '@opentelemetry/instrumentation-connect' - ); - instrumentations.push(new ConnectInstrumentation()); - } - if (activeInstrumentations.has('dataloader')) { - const { DataloaderInstrumentation } = await import( - '@opentelemetry/instrumentation-dataloader' - ); - instrumentations.push(new DataloaderInstrumentation()); - } - if (activeInstrumentations.has('dns')) { - const { DnsInstrumentation } = await import( - '@opentelemetry/instrumentation-dns' - ); - instrumentations.push(new DnsInstrumentation()); - } - if (activeInstrumentations.has('express')) { - const { ExpressInstrumentation } = await import( - '@opentelemetry/instrumentation-express' - ); - instrumentations.push(new ExpressInstrumentation()); - } - if (activeInstrumentations.has('fs')) { - const { FsInstrumentation } = await import( - '@opentelemetry/instrumentation-fs' - ); - instrumentations.push(new FsInstrumentation()); - } - if (activeInstrumentations.has('graphql')) { - const { GraphQLInstrumentation } = await import( - '@opentelemetry/instrumentation-graphql' - ); - instrumentations.push(new GraphQLInstrumentation()); - } - if (activeInstrumentations.has('grpc')) { - const { GrpcInstrumentation } = await import( - '@opentelemetry/instrumentation-grpc' - ); - instrumentations.push(new GrpcInstrumentation()); - } - if (activeInstrumentations.has('hapi')) { - const { HapiInstrumentation } = await import( - '@opentelemetry/instrumentation-hapi' - ); - instrumentations.push(new HapiInstrumentation()); - } - if (activeInstrumentations.has('http')) { - const { HttpInstrumentation } = await import( - '@opentelemetry/instrumentation-http' - ); - instrumentations.push(new HttpInstrumentation()); - } - if (activeInstrumentations.has('ioredis')) { - const { IORedisInstrumentation } = await import( - '@opentelemetry/instrumentation-ioredis' - ); - instrumentations.push(new IORedisInstrumentation()); - } - if (activeInstrumentations.has('kafkajs')) { - const { KafkaJsInstrumentation } = await import( - '@opentelemetry/instrumentation-kafkajs' - ); - instrumentations.push(new KafkaJsInstrumentation()); - } - if (activeInstrumentations.has('knex')) { - const { KnexInstrumentation } = await import( - '@opentelemetry/instrumentation-knex' - ); - instrumentations.push(new KnexInstrumentation()); - } - if (activeInstrumentations.has('koa')) { - const { KoaInstrumentation } = await import( - '@opentelemetry/instrumentation-koa' - ); - instrumentations.push(new KoaInstrumentation()); - } - if (activeInstrumentations.has('memcached')) { - const { MemcachedInstrumentation } = await import( - '@opentelemetry/instrumentation-memcached' - ); - instrumentations.push(new MemcachedInstrumentation()); - } - if (activeInstrumentations.has('mongodb')) { - const { MongoDBInstrumentation } = await import( - '@opentelemetry/instrumentation-mongodb' - ); - instrumentations.push(new MongoDBInstrumentation()); - } - if (activeInstrumentations.has('mongoose')) { - const { MongooseInstrumentation } = await import( - '@opentelemetry/instrumentation-mongoose' - ); - instrumentations.push(new MongooseInstrumentation()); - } - if (activeInstrumentations.has('mysql')) { - const { MySQLInstrumentation } = await import( - '@opentelemetry/instrumentation-mysql' - ); - instrumentations.push(new MySQLInstrumentation()); - } - if (activeInstrumentations.has('mysql2')) { - const { MySQL2Instrumentation } = await import( - '@opentelemetry/instrumentation-mysql2' - ); - instrumentations.push(new MySQL2Instrumentation()); - } - if (activeInstrumentations.has('nestjs-core')) { - const { NestInstrumentation } = await import( - '@opentelemetry/instrumentation-nestjs-core' - ); - instrumentations.push(new NestInstrumentation()); - } - if (activeInstrumentations.has('net')) { - const { NetInstrumentation } = await import( - '@opentelemetry/instrumentation-net' - ); - instrumentations.push(new NetInstrumentation()); - } - if (activeInstrumentations.has('pg')) { - const { PgInstrumentation } = await import( - '@opentelemetry/instrumentation-pg' - ); - instrumentations.push(new PgInstrumentation()); - } - if (activeInstrumentations.has('pino')) { - const { PinoInstrumentation } = await import( - '@opentelemetry/instrumentation-pino' - ); - instrumentations.push(new PinoInstrumentation()); - } - if (activeInstrumentations.has('redis')) { - const { RedisInstrumentation } = await import( - '@opentelemetry/instrumentation-redis' - ); - instrumentations.push(new RedisInstrumentation()); - } - if (activeInstrumentations.has('restify')) { - const { RestifyInstrumentation } = await import( - '@opentelemetry/instrumentation-restify' - ); - instrumentations.push(new RestifyInstrumentation()); - } - if (activeInstrumentations.has('socket.io')) { - const { SocketIoInstrumentation } = await import( - '@opentelemetry/instrumentation-socket.io' - ); - instrumentations.push(new SocketIoInstrumentation()); - } - if (activeInstrumentations.has('undici')) { - const { UndiciInstrumentation } = await import( - '@opentelemetry/instrumentation-undici' - ); - instrumentations.push(new UndiciInstrumentation()); - } - if (activeInstrumentations.has('winston')) { - const { WinstonInstrumentation } = await import( - '@opentelemetry/instrumentation-winston' - ); - instrumentations.push(new WinstonInstrumentation()); - } - return instrumentations; -} - -async function createInstrumentations() { - return [ - new AwsInstrumentation( - typeof configureAwsInstrumentation === 'function' - ? configureAwsInstrumentation({ suppressInternalInstrumentation: true }) - : { suppressInternalInstrumentation: true }, - ), - new AwsLambdaInstrumentation( - typeof configureLambdaInstrumentation === 'function' - ? configureLambdaInstrumentation({}) - : {}, - ), - ...(typeof configureInstrumentations === 'function' - ? configureInstrumentations() - : await defaultConfigureInstrumentations()), - ]; -} - -function getPropagator(): TextMapPropagator { - if ( - process.env.OTEL_PROPAGATORS == null || - process.env.OTEL_PROPAGATORS.trim() === '' - ) { - return new CompositePropagator({ - propagators: [ - new W3CTraceContextPropagator(), - new W3CBaggagePropagator(), - ], - }); - } - const propagatorsFromEnv = Array.from( - new Set( - process.env.OTEL_PROPAGATORS?.split(',').map(value => - value.toLowerCase().trim(), - ), - ), - ); - const propagators = propagatorsFromEnv.flatMap(propagatorName => { - if (propagatorName === 'none') { - diag.info( - 'Not selecting any propagator for value "none" specified in the environment variable OTEL_PROPAGATORS', - ); - return []; - } - const propagatorFactoryFunction = propagatorMap.get(propagatorName); - if (propagatorFactoryFunction == null) { - diag.warn( - `Invalid propagator "${propagatorName}" specified in the environment variable OTEL_PROPAGATORS`, - ); - return []; - } - return propagatorFactoryFunction(); - }); - return new CompositePropagator({ propagators }); -} - -function getExportersFromEnv(): SpanExporter[] | null { - if ( - process.env.OTEL_TRACES_EXPORTER == null || - process.env.OTEL_TRACES_EXPORTER.trim() === '' - ) { - return []; - } - if (process.env.OTEL_TRACES_EXPORTER.includes('none')) { - return null; - } - - const stringToExporter = new Map SpanExporter>([ - ['otlp', () => new OTLPTraceExporter()], - ['console', () => new ConsoleSpanExporter()], - ]); - const exporters: SpanExporter[] = []; - process.env.OTEL_TRACES_EXPORTER.split(',').map(exporterName => { - exporterName = exporterName.toLowerCase().trim(); - const exporter = stringToExporter.get(exporterName); - if (exporter) { - exporters.push(exporter()); - } else { - diag.warn( - `Invalid exporter "${exporterName}" specified in the environment variable OTEL_TRACES_EXPORTER`, - ); - } - }); - return exporters; -} - -async function initializeTracerProvider( - resource: Resource, -): Promise { - let config: TracerConfig = { - resource, - spanProcessors: [], - }; - - const exporters = getExportersFromEnv(); - if (!exporters) { - return; - } - - if (typeof configureTracer === 'function') { - config = configureTracer(config); - } - - if (exporters.length) { - config.spanProcessors = []; - exporters.map(exporter => { - if (exporter instanceof ConsoleSpanExporter) { - config.spanProcessors?.push(new SimpleSpanProcessor(exporter)); - } else { - config.spanProcessors?.push(new BatchSpanProcessor(exporter)); - } - }); - } - - config.spanProcessors = config.spanProcessors || []; - if (config.spanProcessors.length === 0) { - // Default - config.spanProcessors.push(new BatchSpanProcessor(new OTLPTraceExporter())); - } - - // Logging for debug - if (logLevel === DiagLogLevel.DEBUG) { - config.spanProcessors.push( - new SimpleSpanProcessor(new ConsoleSpanExporter()), - ); - } - - const tracerProvider = new NodeTracerProvider(config); - - let sdkRegistrationConfig: SDKRegistrationConfig = {}; - if (typeof configureSdkRegistration === 'function') { - sdkRegistrationConfig = configureSdkRegistration(sdkRegistrationConfig); - } - // Auto-configure propagator if not provided - if (!sdkRegistrationConfig.propagator) { - sdkRegistrationConfig.propagator = getPropagator(); - } - tracerProvider.register(sdkRegistrationConfig); - - return tracerProvider; -} - -async function initializeMeterProvider( - resource: Resource, -): Promise { - if (process.env.OTEL_METRICS_EXPORTER === 'none') { - return; - } - - const { metrics } = await import('@opentelemetry/api'); - const { MeterProvider, PeriodicExportingMetricReader } = await import( - '@opentelemetry/sdk-metrics' - ); - const { OTLPMetricExporter } = await import( - '@opentelemetry/exporter-metrics-otlp-http' - ); - - // Configure default meter provider (doesn't export metrics) - const metricExporter = new OTLPMetricExporter(); - let meterConfig: unknown = { - resource, - readers: [ - new PeriodicExportingMetricReader({ - exporter: metricExporter, - }), - ], - }; - if (typeof configureMeter === 'function') { - meterConfig = configureMeter(meterConfig); - } - - const meterProvider = new MeterProvider(meterConfig as object); - if (typeof configureMeterProvider === 'function') { - configureMeterProvider(meterProvider); - } else { - metrics.setGlobalMeterProvider(meterProvider); - } - - metricsDisableFunction = () => { - metrics.disable(); - }; - - return meterProvider; -} - -async function initializeLoggerProvider( - resource: Resource, -): Promise { - if (process.env.OTEL_LOGS_EXPORTER === 'none') { - return; - } - - const { logs } = await import('@opentelemetry/api-logs'); - const { - LoggerProvider, - BatchLogRecordProcessor, - SimpleLogRecordProcessor, - ConsoleLogRecordExporter, - } = await import('@opentelemetry/sdk-logs'); - const { OTLPLogExporter } = await import( - '@opentelemetry/exporter-logs-otlp-http' - ); - - const logExporter = new OTLPLogExporter(); - const loggerConfig = { - resource, - }; - const loggerProvider = new LoggerProvider(loggerConfig); - if (typeof configureLoggerProvider === 'function') { - configureLoggerProvider(loggerProvider); - } else { - loggerProvider.addLogRecordProcessor( - new BatchLogRecordProcessor(logExporter), - ); - logs.setGlobalLoggerProvider(loggerProvider); - } - - // Logging for debug - if (logLevel === DiagLogLevel.DEBUG) { - loggerProvider.addLogRecordProcessor( - new SimpleLogRecordProcessor(new ConsoleLogRecordExporter()), - ); - } - - logsDisableFunction = () => { - logs.disable(); - }; - - return loggerProvider; -} - -async function initializeProvider() { - const resource = detectResources({ - detectors: [awsLambdaDetector, envDetector, processDetector], - }); - - const tracerProvider: TracerProvider | undefined = - await initializeTracerProvider(resource); - const meterProvider: unknown | undefined = - await initializeMeterProvider(resource); - const loggerProvider: unknown | undefined = - await initializeLoggerProvider(resource); - - // Create instrumentations if they have not been created before - // to prevent additional coldstart overhead - // caused by creations and initializations of instrumentations. - if (!instrumentations || !instrumentations.length) { - instrumentations = await createInstrumentations(); - } - - // Re-register instrumentation with initialized provider. Patched code will see the update. - - disableInstrumentations = registerInstrumentations({ - instrumentations, - tracerProvider, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - meterProvider: meterProvider as any, - // eslint-disable-next-line @typescript-eslint/no-explicit-any - loggerProvider: loggerProvider as any, - }); -} - -export async function wrap() { - if (!initialized) { - throw new Error('Not initialized yet'); - } - - await initializeProvider(); -} - -export async function unwrap() { - if (!initialized) { - throw new Error('Not initialized yet'); - } - - if (disableInstrumentations) { - disableInstrumentations(); - disableInstrumentations = () => {}; - } - instrumentations = []; - - context.disable(); - propagation.disable(); - trace.disable(); - - if (metricsDisableFunction) { - metricsDisableFunction(); - metricsDisableFunction = () => {}; - } - - if (logsDisableFunction) { - logsDisableFunction(); - logsDisableFunction = () => {}; - } -} - -export async function init() { - if (initialized) { - return; - } - - instrumentations = await createInstrumentations(); - - // Register instrumentations synchronously to ensure code is patched even before provider is ready. - disableInstrumentations = registerInstrumentations({ - instrumentations, - }); - - initialized = true; -} - -console.log('Registering OpenTelemetry'); - -let initialized = false; -let instrumentations: Instrumentation[]; -let disableInstrumentations: () => void; -let metricsDisableFunction: () => void; -let logsDisableFunction: () => void; - -// Configure lambda logging -const logLevel = diagLogLevelFromString(getStringFromEnv('OTEL_LOG_LEVEL')); -diag.setLogger(new DiagConsoleLogger(), logLevel); diff --git a/nodejs/packages/layer/test/handler.spec.mjs b/nodejs/packages/layer/test/handler.spec.mjs deleted file mode 100644 index f2bc263a39..0000000000 --- a/nodejs/packages/layer/test/handler.spec.mjs +++ /dev/null @@ -1,105 +0,0 @@ -import path from 'path'; -import url from 'url'; - -import assert from 'assert'; - -import { - SpanKind, - SpanStatusCode -} from '@opentelemetry/api'; -import { - BatchSpanProcessor, - InMemorySpanExporter -} from '@opentelemetry/sdk-trace-node'; - -import { registerLoader } from '../src/loader.mjs'; -import { init, wrap, unwrap } from '../build/src/wrapper.js'; - -const DIR_NAME = path.dirname(url.fileURLToPath(import.meta.url)); - -const assertHandlerSpan = (span) => { - assert.strictEqual(span.kind, SpanKind.SERVER); - assert.strictEqual(span.name, 'my_function'); - assert.strictEqual(span.attributes['faas.id'], 'my_arn'); - assert.strictEqual(span.status.code, SpanStatusCode.UNSET); - assert.strictEqual(span.status.message, undefined); -}; - -describe('when loading ESM module', async () => { - let oldEnv; - const memoryExporter = new InMemorySpanExporter(); - - const ctx = { - functionName: 'my_function', - invokedFunctionArn: 'my_arn', - awsRequestId: 'aws_request_id', - }; - - await init(); - - const initializeHandler = async (handler) => { - process.env._HANDLER = handler; - - global.configureTracer = (_) => { - return { - spanProcessors: [new BatchSpanProcessor(memoryExporter)], - }; - }; - global.configureMeter = (_) => { {} }; - global.configureMeterProvider = (_) => {}; - global.configureLoggerProvider = (_) => {}; - - await wrap(); - }; - - const loadHandler = async (handler) => { - return await import(path.join(DIR_NAME, handler)); - }; - - const initializeAndLoadHandler = async (handler, handlerFileName) => { - await initializeHandler(handler); - return await loadHandler(handlerFileName); - }; - - before(() => { - registerLoader(); - }); - - beforeEach(async () => { - oldEnv = { ...process.env }; - process.env.LAMBDA_TASK_ROOT = DIR_NAME; - - await unwrap(); - }); - - afterEach(async () => { - process.env = oldEnv; - memoryExporter.reset(); - - await unwrap(); - }); - - it('should wrap ESM file handler with .mjs extension', async () => { - const lambdaModule = await initializeAndLoadHandler('./handler/esm/index_esm.handler', './handler/esm/index_esm.mjs'); - const result = await lambdaModule.handler('arg', ctx); - - assert.strictEqual(result, 'ok'); - - const spans = memoryExporter.getFinishedSpans(); - assert.strictEqual(spans.length, 1); - const [span] = spans; - assertHandlerSpan(span); - }); - - it('should wrap ESM module handler with .js extension', async () => { - const lambdaModule = await initializeAndLoadHandler('./handler/esm/index.handler', './handler/esm/index.js'); - const result = await lambdaModule.handler('arg', ctx); - - assert.strictEqual(result, 'ok'); - - const spans = memoryExporter.getFinishedSpans(); - assert.strictEqual(spans.length, 1); - const [span] = spans; - assertHandlerSpan(span); - }); -}); diff --git a/nodejs/packages/layer/test/handler.spec.ts b/nodejs/packages/layer/test/handler.spec.ts deleted file mode 100644 index a867b7279e..0000000000 --- a/nodejs/packages/layer/test/handler.spec.ts +++ /dev/null @@ -1,107 +0,0 @@ -import path from 'path'; - -import assert from 'assert'; - -import { SpanKind, SpanStatusCode } from '@opentelemetry/api'; -import { - BatchSpanProcessor, - InMemorySpanExporter, - ReadableSpan, -} from '@opentelemetry/sdk-trace-node'; -import { Context } from 'aws-lambda'; - -import { init, wrap, unwrap } from '../src/wrapper'; - -const assertHandlerSpan = (span: ReadableSpan) => { - assert.strictEqual(span.kind, SpanKind.SERVER); - assert.strictEqual(span.name, 'my_function'); - assert.strictEqual(span.attributes['faas.id'], 'my_arn'); - assert.strictEqual(span.status.code, SpanStatusCode.UNSET); - assert.strictEqual(span.status.message, undefined); -}; - -describe('when loading ESM module', async () => { - let oldEnv: NodeJS.ProcessEnv; - const memoryExporter = new InMemorySpanExporter(); - - const ctx = { - functionName: 'my_function', - invokedFunctionArn: 'my_arn', - awsRequestId: 'aws_request_id', - } as Context; - - await init(); - - const initializeHandler = async (handler: string) => { - process.env._HANDLER = handler; - - global.configureTracer = _ => { - return { - spanProcessors: [new BatchSpanProcessor(memoryExporter)], - }; - }; - global.configureMeter = _ => { - return {} as any; - }; - global.configureMeterProvider = _ => {}; - global.configureLoggerProvider = _ => {}; - - await wrap(); - }; - - const loadHandler = async (handler: string) => { - return await import(path.join(__dirname, handler)); - }; - - const initializeAndLoadHandler = async ( - handler: string, - handlerFileName: string, - ) => { - await initializeHandler(handler); - return await loadHandler(handlerFileName); - }; - - beforeEach(async () => { - oldEnv = { ...process.env }; - process.env.LAMBDA_TASK_ROOT = __dirname; - - await unwrap(); - }); - - afterEach(async () => { - process.env = oldEnv; - memoryExporter.reset(); - - await unwrap(); - }); - - it('should wrap CommonJS file handler with .cjs extension', async () => { - const lambdaModule = await initializeAndLoadHandler( - './handler/cjs/index_commonjs.handler', - './handler/cjs/index_commonjs.cjs', - ); - const result = await lambdaModule.handler('arg', ctx); - - assert.strictEqual(result, 'ok'); - - const spans = memoryExporter.getFinishedSpans(); - assert.strictEqual(spans.length, 1); - const [span] = spans; - assertHandlerSpan(span); - }); - - it('should wrap CommonJS module handler with .js extension', async () => { - const lambdaModule = await initializeAndLoadHandler( - './handler/cjs/index.handler', - './handler/cjs/index.js', - ); - const result = await lambdaModule.handler('arg', ctx); - - assert.strictEqual(result, 'ok'); - - const spans = memoryExporter.getFinishedSpans(); - assert.strictEqual(spans.length, 1); - const [span] = spans; - assertHandlerSpan(span); - }); -}); diff --git a/nodejs/packages/layer/test/handler/cjs/index.js b/nodejs/packages/layer/test/handler/cjs/index.js deleted file mode 100644 index fcf8219ac5..0000000000 --- a/nodejs/packages/layer/test/handler/cjs/index.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports.handler = async function() { - console.log("I am a CommonJS module"); - return 'ok'; -} diff --git a/nodejs/packages/layer/test/handler/cjs/index_commonjs.cjs b/nodejs/packages/layer/test/handler/cjs/index_commonjs.cjs deleted file mode 100644 index fcf8219ac5..0000000000 --- a/nodejs/packages/layer/test/handler/cjs/index_commonjs.cjs +++ /dev/null @@ -1,4 +0,0 @@ -module.exports.handler = async function() { - console.log("I am a CommonJS module"); - return 'ok'; -} diff --git a/nodejs/packages/layer/test/handler/cjs/package.json b/nodejs/packages/layer/test/handler/cjs/package.json deleted file mode 100644 index 5a48ce2412..0000000000 --- a/nodejs/packages/layer/test/handler/cjs/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "test-cjs-module", - "version": "0.1.0", - "main": "./index.js" -} diff --git a/nodejs/packages/layer/test/handler/esm/index.js b/nodejs/packages/layer/test/handler/esm/index.js deleted file mode 100644 index 8e99af1469..0000000000 --- a/nodejs/packages/layer/test/handler/esm/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export async function handler() { - console.log("I am a CommonJS module"); - return 'ok'; -} diff --git a/nodejs/packages/layer/test/handler/esm/index_esm.mjs b/nodejs/packages/layer/test/handler/esm/index_esm.mjs deleted file mode 100644 index 7044de3710..0000000000 --- a/nodejs/packages/layer/test/handler/esm/index_esm.mjs +++ /dev/null @@ -1,5 +0,0 @@ -export async function handler() { - console.log("I am a ES module"); - return 'ok'; -} - diff --git a/nodejs/packages/layer/test/handler/esm/package.json b/nodejs/packages/layer/test/handler/esm/package.json deleted file mode 100644 index c5916a0329..0000000000 --- a/nodejs/packages/layer/test/handler/esm/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "test-esm-module", - "version": "0.1.0", - "main": "./index.js", - "type": "module" -} diff --git a/nodejs/packages/layer/test/wrapper.spec.ts b/nodejs/packages/layer/test/wrapper.spec.ts deleted file mode 100644 index 5c9960d466..0000000000 --- a/nodejs/packages/layer/test/wrapper.spec.ts +++ /dev/null @@ -1,241 +0,0 @@ -import { init, wrap, unwrap } from '../src/wrapper'; - -import { - defaultTextMapGetter, - ROOT_CONTEXT, - TextMapPropagator, - trace, - TraceFlags, -} from '@opentelemetry/api'; -import type { AwsSdkInstrumentationConfig } from '@opentelemetry/instrumentation-aws-sdk'; -import { TRACE_PARENT_HEADER } from '@opentelemetry/core'; -import { AWSXRAY_TRACE_ID_HEADER } from '@opentelemetry/propagator-aws-xray'; -import { - ConsoleSpanExporter, - NodeTracerProvider, - SDKRegistrationConfig, -} from '@opentelemetry/sdk-trace-node'; -import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http'; - -import { SinonSpy, spy, stub } from 'sinon'; -import assert from 'assert'; - -declare global { - function configureAwsInstrumentation( - defaultConfig: AwsSdkInstrumentationConfig, - ): AwsSdkInstrumentationConfig; - function configureSdkRegistration( - defaultSdkRegistration: SDKRegistrationConfig, - ): SDKRegistrationConfig; -} - -describe('wrapper', async () => { - let oldEnv: NodeJS.ProcessEnv; - - await init(); - - beforeEach(async () => { - oldEnv = { ...process.env }; - - await unwrap(); - }); - - afterEach(async () => { - process.env = oldEnv; - - await unwrap(); - }); - - describe('configureAwsInstrumentation', () => { - it('is used if defined', async () => { - const configureAwsInstrumentationStub = stub().returns({ - suppressInternalInstrumentation: true, - }); - global.configureAwsInstrumentation = configureAwsInstrumentationStub; - await wrap(); - assert(configureAwsInstrumentationStub.calledOnce); - }); - }); - - describe('getPropagator', () => { - const testConfiguredPropagator = async ( - propagatorNames: string[], - expectedPropagatorFields: string[], - ) => { - if (propagatorNames && propagatorNames.length) { - process.env.OTEL_PROPAGATORS = propagatorNames.join(','); - } - - const configureSdkRegistrationStub = stub().returnsArg(0); - global.configureSdkRegistration = configureSdkRegistrationStub; - await wrap(); - assert(configureSdkRegistrationStub.calledOnce); - - const sdkRegistrationConfig: SDKRegistrationConfig = - configureSdkRegistrationStub.getCall(0).firstArg; - assert.notEqual(sdkRegistrationConfig, null); - - const propagator: TextMapPropagator | null | undefined = - sdkRegistrationConfig.propagator; - assert.notEqual(propagator, null); - - const actualPropagatorFields: string[] | undefined = propagator?.fields(); - assert.notEqual(actualPropagatorFields, null); - assert.deepEqual(actualPropagatorFields, expectedPropagatorFields); - }; - - const setAndGetConfiguredPropagator = async ( - propagatorNames: string[], - ): Promise => { - if (propagatorNames && propagatorNames.length) { - process.env.OTEL_PROPAGATORS = propagatorNames.join(','); - } - - const configureSdkRegistrationStub = stub().returnsArg(0); - global.configureSdkRegistration = configureSdkRegistrationStub; - await wrap(); - assert(configureSdkRegistrationStub.calledOnce); - - const sdkRegistrationConfig: SDKRegistrationConfig = - configureSdkRegistrationStub.getCall(0).firstArg; - assert.notEqual(sdkRegistrationConfig, null); - - const propagator: TextMapPropagator | null | undefined = - sdkRegistrationConfig.propagator; - assert.notEqual(propagator, null); - - return propagator!; - }; - - it('is configured by default', async () => { - // by default, 'W3CTraceContextPropagator' and 'W3CBaggagePropagator' propagators are added. - // - 'traceparent' and 'tracestate' fields are used by the 'W3CTraceContextPropagator' - // - 'baggage' field is used by the 'W3CBaggagePropagator' - await testConfiguredPropagator( - [], - ['traceparent', 'tracestate', 'baggage'], - ); - }); - - it('is configured to w3c-trace-context by env var', async () => { - // 'traceparent' and 'tracestate' fields are used by the 'W3CTraceContextPropagator' - await testConfiguredPropagator( - ['tracecontext'], - ['traceparent', 'tracestate'], - ); - }); - - it('is configured to w3c-baggage by env var', async () => { - // 'baggage' field is used by the 'W3CBaggagePropagator' - await testConfiguredPropagator(['baggage'], ['baggage']); - }); - - it('is configured to xray by env var', async () => { - // 'x-amzn-trace-id' field is used by the 'AWSXRayPropagator' - await testConfiguredPropagator(['xray'], ['x-amzn-trace-id']); - }); - - it('is configured to xray-lambda by env var', async () => { - // 'x-amzn-trace-id' field is used by the 'AWSXRayLambdaPropagator' - await testConfiguredPropagator(['xray'], ['x-amzn-trace-id']); - }); - - it('is configured by unsupported propagator', async () => { - // in case of unsupported propagator, warning log is printed and empty propagator array is returned - await testConfiguredPropagator(['jaeger'], []); - }); - - it('is configured in correct order', async () => { - const W3C_TRACE_ID = '5b8aa5a2d2c872e8321cf37308d69df2'; - const W3C_SPAN_ID = '051581bf3cb55c13'; - const AWS_XRAY_TRACE_ID = '8a3c60f7-d188f8fa79d48a391a778fa6'; - const AWS_XRAY_SPAN_ID = '53995c3f42cd8ad8'; - const carrier = { - [TRACE_PARENT_HEADER]: `00-${W3C_TRACE_ID}-${W3C_SPAN_ID}-01`, - [AWSXRAY_TRACE_ID_HEADER]: `Root=1-${AWS_XRAY_TRACE_ID};Parent=${AWS_XRAY_SPAN_ID};Sampled=1`, - }; - - const propagator1: TextMapPropagator = - await setAndGetConfiguredPropagator(['tracecontext', 'xray']); - const extractedSpanContext1 = trace - .getSpan( - propagator1.extract(ROOT_CONTEXT, carrier, defaultTextMapGetter), - ) - ?.spanContext(); - // Last one overwrites, so we will see the context extracted from the last propagator (xray) - assert.deepStrictEqual(extractedSpanContext1, { - traceId: AWS_XRAY_TRACE_ID.replace('-', ''), - spanId: AWS_XRAY_SPAN_ID, - isRemote: true, - traceFlags: TraceFlags.SAMPLED, - }); - - await unwrap(); - - const propagator2: TextMapPropagator = - await setAndGetConfiguredPropagator(['xray', 'tracecontext']); - const extractedSpanContext2 = trace - .getSpan( - propagator2.extract(ROOT_CONTEXT, carrier, defaultTextMapGetter), - ) - ?.spanContext(); - // Last one overwrites, so we will see the context extracted from the last propagator (tracecontext) - assert.deepStrictEqual(extractedSpanContext2, { - traceId: W3C_TRACE_ID, - spanId: W3C_SPAN_ID, - isRemote: true, - traceFlags: TraceFlags.SAMPLED, - }); - }); - }); - - describe('exporters', () => { - let providerSpy: SinonSpy; - - before(() => { - // TODO: Does this belong here - delete (global as any).configureTracer; - }); - - beforeEach(() => { - providerSpy = spy(NodeTracerProvider.prototype, 'register'); - }); - - afterEach(() => { - providerSpy.restore(); - }); - - const testConfiguredExporter = async ( - exporterNames: string[] | undefined, - expectedExporters: any[], - ) => { - if (exporterNames) { - process.env.OTEL_TRACES_EXPORTER = exporterNames.join(','); - } - - await wrap(); - assert(providerSpy.calledOnce); - const tracer = providerSpy.getCall(0).thisValue; - const spanProcessors = tracer._config.spanProcessors; - - for (const [i, processor] of spanProcessors.entries()) { - assert.ok(processor._exporter instanceof expectedExporters[i]); - } - }; - - it('is configured to OTLP by default', async () => { - await testConfiguredExporter(undefined, [OTLPTraceExporter]); - }); - - it('is configured to console by env var', async () => { - await testConfiguredExporter(['console'], [ConsoleSpanExporter]); - }); - - it('is configured to both console and otlp by env var', async () => { - await testConfiguredExporter( - ['console', 'otlp'], - [ConsoleSpanExporter, OTLPTraceExporter], - ); - }); - }); -}); diff --git a/nodejs/packages/layer/tsconfig.json b/nodejs/packages/layer/tsconfig.json deleted file mode 100644 index 4e7dcd2f29..0000000000 --- a/nodejs/packages/layer/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "rootDir": ".", - "outDir": "build", - "types": ["node", "mocha", "sinon"] - }, - "include": [ - "src/**/*.ts", - "test/**/*.ts" - ] -} diff --git a/nodejs/packages/layer/tsconfig.webpack.json b/nodejs/packages/layer/tsconfig.webpack.json deleted file mode 100644 index 0c4710928d..0000000000 --- a/nodejs/packages/layer/tsconfig.webpack.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../tsconfig.esm", - "compilerOptions": { - "rootDir": ".", - "outDir": "build" - }, - "include": [ - "src/**/*.ts", - "test/**/*.ts" - ] -} diff --git a/nodejs/packages/layer/webpack.config.js b/nodejs/packages/layer/webpack.config.js deleted file mode 100644 index ebdff0bee6..0000000000 --- a/nodejs/packages/layer/webpack.config.js +++ /dev/null @@ -1,47 +0,0 @@ -const path = require('path'); - -module.exports = { - entry: './src/wrapper.ts', - target: 'node', - mode: 'production', - externalsPresets: { node: true }, // in order to ignore built-in modules like path, fs, etc. - externals: [ - 'import-in-the-middle', - '@aws-sdk', - ], - output: { - path: path.resolve('./build/src'), - filename: 'wrapper.js', - library: { - type: 'commonjs2', - } - }, - resolve: { - extensions: ['.ts', '.js', '.mjs'], - modules: [ - path.resolve('./src'), - 'node_modules', - ], - }, - module: { - rules: [ - { - test: /\.ts$/, - use: [ - { - loader: 'ts-loader', - options: { - configFile: "tsconfig.webpack.json" - } - } - ], - exclude: /node_modules/, - } - ], - }, - optimization: { - minimize: true, - providedExports: true, - usedExports: true, - }, -}; diff --git a/nodejs/sample-apps/aws-sdk/.eslintignore b/nodejs/sample-apps/aws-sdk/.eslintignore deleted file mode 100644 index 8cc5286096..0000000000 --- a/nodejs/sample-apps/aws-sdk/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -build -cdk.out -bin -lib \ No newline at end of file diff --git a/nodejs/sample-apps/aws-sdk/.eslintrc.js b/nodejs/sample-apps/aws-sdk/.eslintrc.js deleted file mode 100644 index 2416b303b5..0000000000 --- a/nodejs/sample-apps/aws-sdk/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - "env": { - "mocha": true, - "node": true - }, - ...require('../../eslint.config.js') -} \ No newline at end of file diff --git a/nodejs/sample-apps/aws-sdk/.gitignore b/nodejs/sample-apps/aws-sdk/.gitignore deleted file mode 100644 index ab429fc72f..0000000000 --- a/nodejs/sample-apps/aws-sdk/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -cdk.out -build \ No newline at end of file diff --git a/nodejs/sample-apps/aws-sdk/README.md b/nodejs/sample-apps/aws-sdk/README.md deleted file mode 100644 index e8c00be22a..0000000000 --- a/nodejs/sample-apps/aws-sdk/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# 🧪 AWS SDK Sample Application with OpenTelemetry - -This sample demonstrates how to use the **AWS SDK** within a Lambda function with **OpenTelemetry (OTel)** capabilities. It performs a simple `STS GetCallerIdentity` call for demonstration purposes and outputs Otel telemetry data to logs. - -Example log output: -![Sample Log Output](./sampleLogOutput.png) - ---- - -## 🚀 Deploy Using AWS CDK - -Follow these steps to deploy the demo stack via CDK: - -1. **Install dependencies** - `npm install` - -2. **Bootstrap your AWS environment (if not done already)** - `npx cdk bootstrap` - -3. **Deploy the stack** - `npx cdk deploy OtelSampleLambdaStack` - ---- - -## 🚀 Deploy Using Terraform - -Follow these steps to deploy the demo stack via Terraform: - -1. **Install dependencies** - `npm install` - -2. **Build the Lambda function artifact** - `npm run build` - -3. **Move to deploy/wrapper folder** - `cd deploy/wrapper` - -4. **Terraform init** - `terraform init` - -5. **Terraform apply** - `terraform apply` - ---- - -## 🛠️ Manual Deployment via AWS Console - -If you'd prefer to deploy manually: - -1. **Install dependencies** - `npm install` - -2. **Build the Lambda function artifact** - `npm run build` - -3. **Create a new AWS Lambda function** - - Runtime: Select the latest `nodejs.x` - -4. **Upload the artifact** - - File location: `build/function.zip` - -5. **Set the following environment variables** -``` - OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318/ - OTEL_TRACES_EXPORTER=console - OTEL_METRICS_EXPORTER=console - OTEL_LOG_LEVEL=INFO - OTEL_TRACES_SAMPLER=always_on - AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler -``` -6. **Attach the Node.js instrumentation layer** - - Refer to the latest ARN in the OpenTelemetry Lambda releases, ie: - https://github.com/open-telemetry/opentelemetry-lambda/releases/tag/layer-nodejs%2F0.14.0 - -7. **Attach the OpenTelemetry Collector layer** - - Refer to the ARN in the release notes, ie: - https://github.com/open-telemetry/opentelemetry-lambda/releases/tag/layer-collector%2F0.15.0 \ No newline at end of file diff --git a/nodejs/sample-apps/aws-sdk/bin/app.ts b/nodejs/sample-apps/aws-sdk/bin/app.ts deleted file mode 100644 index 564fb39d2e..0000000000 --- a/nodejs/sample-apps/aws-sdk/bin/app.ts +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env node -import * as cdk from 'aws-cdk-lib'; -import { OtelSampleLambdaStack } from '../lib/otel-sample-lambda-stack'; - -const app = new cdk.App(); -new OtelSampleLambdaStack(app, 'OtelSampleLambdaStack'); \ No newline at end of file diff --git a/nodejs/sample-apps/aws-sdk/cdk.json b/nodejs/sample-apps/aws-sdk/cdk.json deleted file mode 100644 index 032f9e503a..0000000000 --- a/nodejs/sample-apps/aws-sdk/cdk.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "app": "npm run build" -} \ No newline at end of file diff --git a/nodejs/sample-apps/aws-sdk/deploy/wrapper/main.tf b/nodejs/sample-apps/aws-sdk/deploy/wrapper/main.tf deleted file mode 100644 index 6423389357..0000000000 --- a/nodejs/sample-apps/aws-sdk/deploy/wrapper/main.tf +++ /dev/null @@ -1,47 +0,0 @@ -locals { - collector_layer_arn = "arn:aws:lambda:${data.aws_region.current.name}:${var.account_id}:layer:opentelemetry-collector-arm64-${var.collector_layer_version}:1" - sdk_layer_arn = "arn:aws:lambda:${data.aws_region.current.name}:${var.account_id}:layer:opentelemetry-nodejs-${var.nodejs_layer_version}:1" -} - -data "aws_region" "current" {} - -module "hello-lambda-function" { - source = "terraform-aws-modules/lambda/aws" - version = "7.21.0" - - architectures = compact([var.architecture]) - function_name = var.name - handler = "index.handler" - runtime = var.runtime - - create_package = false - local_existing_package = "${path.module}/../../build/function.zip" - - memory_size = 384 - timeout = 20 - - layers = compact([ - local.collector_layer_arn, - local.sdk_layer_arn - ]) - - environment_variables = { - AWS_LAMBDA_EXEC_WRAPPER = "/opt/otel-handler" - OTEL_TRACES_EXPORTER = "console" - OTEL_METRICS_EXPORTER = "console" - OTEL_LOG_LEVEL = "DEBUG" - OTEL_EXPORTER_OTLP_ENDPOINT = "http://localhost:4318/" - OTEL_TRACES_SAMPLER = "always_on" - } - - tracing_mode = var.tracing_mode -} - -module "api-gateway" { - source = "../../../../../utils/terraform/api-gateway-proxy" - - name = var.name - function_name = module.hello-lambda-function.lambda_function_name - function_invoke_arn = module.hello-lambda-function.lambda_function_invoke_arn - enable_xray_tracing = var.tracing_mode == "Active" -} diff --git a/nodejs/sample-apps/aws-sdk/deploy/wrapper/outputs.tf b/nodejs/sample-apps/aws-sdk/deploy/wrapper/outputs.tf deleted file mode 100644 index 5de8044c90..0000000000 --- a/nodejs/sample-apps/aws-sdk/deploy/wrapper/outputs.tf +++ /dev/null @@ -1,7 +0,0 @@ -output "api-gateway-url" { - value = module.api-gateway.api_gateway_url -} - -output "function_role_name" { - value = module.hello-lambda-function.lambda_role_name -} diff --git a/nodejs/sample-apps/aws-sdk/deploy/wrapper/variables.tf b/nodejs/sample-apps/aws-sdk/deploy/wrapper/variables.tf deleted file mode 100644 index 0346444cf9..0000000000 --- a/nodejs/sample-apps/aws-sdk/deploy/wrapper/variables.tf +++ /dev/null @@ -1,36 +0,0 @@ -variable "name" { - type = string - description = "Name of created function and API Gateway" - default = "hello-nodejs-awssdk" -} - -variable "collector_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry collector extension" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "sdk_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry NodeJS Wrapper" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "tracing_mode" { - type = string - description = "Lambda function tracing mode" - default = "PassThrough" -} - -variable "architecture" { - type = string - description = "Lambda function architecture, valid values are arm64 or x86_64" - default = "x86_64" -} - -variable "runtime" { - type = string - description = "NodeJS runtime version used for sample Lambda Function" - default = "nodejs18.x" -} - diff --git a/nodejs/sample-apps/aws-sdk/lambda/index.ts b/nodejs/sample-apps/aws-sdk/lambda/index.ts deleted file mode 100644 index 09250e7e4c..0000000000 --- a/nodejs/sample-apps/aws-sdk/lambda/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { - APIGatewayProxyEvent, - APIGatewayProxyResult, - Context, -} from 'aws-lambda'; - -import { STSClient, GetCallerIdentityCommand } from '@aws-sdk/client-sts'; - -const sts = new STSClient({}); - -export const handler = async ( - event: APIGatewayProxyEvent, - _context: Context, -): Promise => { - console.log('Received event:', JSON.stringify(event, null, 2)); - console.log('Received context:', JSON.stringify(_context, null, 2)); - - try { - const result = await sts.send(new GetCallerIdentityCommand({})); - - const response: APIGatewayProxyResult = { - statusCode: 200, - body: JSON.stringify({ - message: 'Caller identity retrieved successfully', - identity: { - Account: result.Account, - Arn: result.Arn, - UserId: result.UserId, - }, - }), - }; - return response; - } catch (error) { - console.error('Error retrieving caller identity:', error); - return { - statusCode: 500, - body: 'Internal Server Error', - }; - } -}; diff --git a/nodejs/sample-apps/aws-sdk/lib/otel-sample-lambda-stack.ts b/nodejs/sample-apps/aws-sdk/lib/otel-sample-lambda-stack.ts deleted file mode 100644 index fe5c92dadf..0000000000 --- a/nodejs/sample-apps/aws-sdk/lib/otel-sample-lambda-stack.ts +++ /dev/null @@ -1,40 +0,0 @@ -import * as cdk from 'aws-cdk-lib'; -import { Construct } from 'constructs'; -import * as lambda from 'aws-cdk-lib/aws-lambda'; -import * as path from 'path'; - -const AWS_ACCOUNT_ID = '184161586896'; // Replace with your AWS account ID if you want to use a specific layer -const NODEJS_LAYER_VERSION = '0_14_0'; // Update with the latest version if needed -const COLLECTOR_LAYER_VERSION = '0_15_0'; // Update with the latest version if needed - -export class OtelSampleLambdaStack extends cdk.Stack { - constructor(scope: Construct, id: string, props?: cdk.StackProps) { - super(scope, id, props); - - const region = cdk.Stack.of(this).region; - const architecture = lambda.Architecture.ARM_64; - const collectorLayerArn = `arn:aws:lambda:${region}:${AWS_ACCOUNT_ID}:layer:opentelemetry-collector-${architecture}-${COLLECTOR_LAYER_VERSION}:1`; - const nodejsInstrumentationLayerArn = `arn:aws:lambda:${region}:${AWS_ACCOUNT_ID}:layer:opentelemetry-nodejs-${NODEJS_LAYER_VERSION}:1`; - - new lambda.Function(this, 'MyLambdaFunction', { - runtime: lambda.Runtime.NODEJS_22_X, - handler: 'index.handler', - code: lambda.Code.fromAsset(path.join(__dirname, '../build/lambda')), - layers: [ - lambda.LayerVersion.fromLayerVersionArn(this, 'OtelCollectorLayer', collectorLayerArn), - lambda.LayerVersion.fromLayerVersionArn(this, 'NodeJsInstrumentationLayer', nodejsInstrumentationLayerArn) - ], - timeout: cdk.Duration.seconds(30), - memorySize: 256, - architecture, - environment: { - OTEL_EXPORTER_OTLP_ENDPOINT: 'http://localhost:4318/', - OTEL_TRACES_EXPORTER: 'console', - OTEL_METRICS_EXPORTER: 'console', - OTEL_LOG_LEVEL: 'DEBUG', - OTEL_TRACES_SAMPLER: 'always_on', - AWS_LAMBDA_EXEC_WRAPPER: '/opt/otel-handler', - }, - }); - } -} \ No newline at end of file diff --git a/nodejs/sample-apps/aws-sdk/package-lock.json b/nodejs/sample-apps/aws-sdk/package-lock.json deleted file mode 100644 index 920fc3ee2e..0000000000 --- a/nodejs/sample-apps/aws-sdk/package-lock.json +++ /dev/null @@ -1,1841 +0,0 @@ -{ - "name": "@opentelemetry-samples/lambda-awssdk", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@opentelemetry-samples/lambda-awssdk", - "version": "0.0.0", - "license": "Apache-2.0", - "dependencies": { - "aws-sdk": "2.1692.0" - }, - "devDependencies": { - "@types/aws-lambda": "8.10.149", - "@types/node": "22.15.19", - "bestzip": "2.2.1", - "copyfiles": "2.4.1", - "rimraf": "6.0.1", - "ts-node": "10.9.2", - "typescript": "5.8.3" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/aws-lambda": { - "version": "8.10.149", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.149.tgz", - "integrity": "sha512-NXSZIhfJjnXqJgtS7IwutqIF/SOy1Wz5Px4gUY1RWITp3AYTyuJS4xaXr/bIJY1v15XMzrJ5soGnPM+7uigZjA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.15.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.19.tgz", - "integrity": "sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/archiver": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", - "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", - "dev": true, - "dependencies": { - "archiver-utils": "^2.1.0", - "async": "^3.2.4", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^2.2.0", - "zip-stream": "^4.1.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/archiver-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", - "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", - "dev": true, - "dependencies": { - "glob": "^7.1.4", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/archiver-utils/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/archiver-utils/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/archiver-utils/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-sdk": { - "version": "2.1692.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1692.0.tgz", - "integrity": "sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==", - "hasInstallScript": true, - "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bestzip": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bestzip/-/bestzip-2.2.1.tgz", - "integrity": "sha512-XdAb87RXqOqF7C6UgQG9IqpEHJvS6IOUo0bXWEAebjSSdhDjsbcqFKdHpn5Q7QHz2pGr3Zmw4wgG3LlzdyDz7w==", - "dev": true, - "dependencies": { - "archiver": "^5.3.0", - "async": "^3.2.0", - "glob": "^7.1.6", - "which": "^2.0.2", - "yargs": "^16.2.0" - }, - "bin": { - "bestzip": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "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==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "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==", - "dev": true - }, - "node_modules/compress-commons": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", - "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", - "dev": true, - "dependencies": { - "buffer-crc32": "^0.2.13", - "crc32-stream": "^4.0.2", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/copyfiles": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/copyfiles/-/copyfiles-2.4.1.tgz", - "integrity": "sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==", - "dev": true, - "dependencies": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^1.0.4", - "noms": "0.0.0", - "through2": "^2.0.1", - "untildify": "^4.0.0", - "yargs": "^16.1.0" - }, - "bin": { - "copyfiles": "copyfiles", - "copyup": "copyfiles" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/crc32-stream": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", - "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "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==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/foreground-child": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", - "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/jackspeak": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", - "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", - "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", - "dev": true - }, - "node_modules/lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", - "dev": true - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", - "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", - "dev": true, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/noms": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/noms/-/noms-0.0.0.tgz", - "integrity": "sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" - } - }, - "node_modules/noms/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/noms/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/noms/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", - "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", - "dev": true, - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", - "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", - "dev": true, - "dependencies": { - "minimatch": "^5.1.0" - } - }, - "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", - "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", - "dev": true, - "dependencies": { - "glob": "^11.0.0", - "package-json-from-dist": "^1.0.0" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", - "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", - "dev": true, - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^4.0.1", - "minimatch": "^10.0.0", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/minimatch": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", - "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sax": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", - "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "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==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/zip-stream": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", - "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", - "dev": true, - "dependencies": { - "archiver-utils": "^3.0.4", - "compress-commons": "^4.1.2", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/zip-stream/node_modules/archiver-utils": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", - "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", - "dev": true, - "dependencies": { - "glob": "^7.2.3", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">= 10" - } - } - } -} diff --git a/nodejs/sample-apps/aws-sdk/package.json b/nodejs/sample-apps/aws-sdk/package.json deleted file mode 100644 index 8bc7abd77e..0000000000 --- a/nodejs/sample-apps/aws-sdk/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "@opentelemetry-samples/lambda-awssdk", - "version": "0.0.0", - "private": true, - "description": "Sample application for AWS Lambda using AWS SDK v2.", - "main": "build/src/index.js", - "types": "build/src/index.d.ts", - "repository": "open-telemetry/opentelemetry-lambda", - "scripts": { - "clean": "rimraf build/*", - "lint": "ESLINT_USE_FLAT_CONFIG=false eslint . --ext .ts", - "lint:fix": "ESLINT_USE_FLAT_CONFIG=false eslint . --ext .ts --fix", - "build": "npm run clean && npm run compile && npm run postcompile", - "compile": "tsc -p .", - "postcompile": "copyfiles 'package*.json' build/src/ && npm install --production --ignore-scripts --prefix build/src/ && cd build/src && bestzip ../function.zip *" - }, - "keywords": [ - "opentelemetry", - "awslambda", - "nodejs", - "tracing", - "profiling", - "instrumentation" - ], - "author": "OpenTelemetry Authors", - "license": "Apache-2.0", - "engines": { - "node": ">=16.0.0" - }, - "files": [ - "build/src/**/*.js", - "build/src/**/*.d.ts", - "doc", - "LICENSE", - "README.md" - ], - "devDependencies": { - "@types/aws-lambda": "8.10.149", - "@types/node": "22.15.19", - "bestzip": "2.2.1", - "copyfiles": "2.4.1", - "rimraf": "6.0.1", - "ts-node": "10.9.2", - "typescript": "5.8.3" - }, - "dependencies": { - "aws-sdk": "2.1692.0" - } -} diff --git a/nodejs/sample-apps/aws-sdk/sampleLogOutput.png b/nodejs/sample-apps/aws-sdk/sampleLogOutput.png deleted file mode 100644 index 6bcfefce974ca52e5acda4f90838345911cff7dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206594 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

r+qAMW)R$WT7 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

  • -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 h2=tIh6o=vNo=kZ=K3AfW+m+pd# { - console.info('Serving lambda request.'); - - const result = await s3.listBuckets().promise(); - - const response: APIGatewayProxyResult = { - statusCode: 200, - body: `Hello lambda - found ${result.Buckets?.length || 0} buckets`, - }; - return response; -}; diff --git a/nodejs/sample-apps/aws-sdk/tsconfig.json b/nodejs/sample-apps/aws-sdk/tsconfig.json deleted file mode 100644 index d84b0209f8..0000000000 --- a/nodejs/sample-apps/aws-sdk/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.base", - "compilerOptions": { - "rootDir": ".", - "outDir": "build" - }, - "include": [ - "lambda/**/*.ts", - ] -} diff --git a/nodejs/tsconfig.base.json b/nodejs/tsconfig.base.json deleted file mode 100644 index e51f055529..0000000000 --- a/nodejs/tsconfig.base.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "compilerOptions": { - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "declaration": true, - "declarationMap": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "module": "commonjs", - "noEmitOnError": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noUnusedLocals": true, - "pretty": true, - "sourceMap": true, - "strict": true, - "strictNullChecks": true, - "target": "es2022", - "incremental": true, - "newLine": "LF", - "typeRoots": [ - "node_modules/@types" - ] - }, - "exclude": [ - "node_modules" - ] -} diff --git a/nodejs/tsconfig.esm.json b/nodejs/tsconfig.esm.json deleted file mode 100644 index a1115cabe4..0000000000 --- a/nodejs/tsconfig.esm.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compilerOptions": { - "moduleResolution": "node", - "module": "es2022", - "target": "es2022", - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "declaration": true, - "declarationMap": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "noEmitOnError": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noUnusedLocals": true, - "pretty": true, - "sourceMap": true, - "strict": true, - "strictNullChecks": true, - "incremental": true, - "newLine": "LF" - }, - "exclude": [ - "node_modules" - ] -} diff --git a/python/README.md b/python/README.md deleted file mode 100644 index c5189d4a99..0000000000 --- a/python/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# OpenTelemetry Lambda Python - -Scripts and files used to build AWS Lambda Layers for running OpenTelemetry on AWS Lambda for Python. - -### Sample App - -1. Install - * [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) - * [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) - * [Go](https://go.dev/doc/install) - * [Docker](https://docs.docker.com/get-docker) -2. Run aws configure to [set aws credential(with administrator permissions)](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install-mac.html#serverless-sam-cli-install-mac-iam-permissions) and default region. -3. Download a local copy of this repository from Github. -4. Navigate to the path `cd python/src` -5. If you just want to create a zip file with the OpenTelemetry Python AWS Lambda layer, then use the `-b true` option: `bash run.sh -n -b true` -6. If you want to create the layer and automatically publish it, use no options: `bash run.sh` diff --git a/python/sample-apps/aws-sdk/deploy/wrapper/main.tf b/python/sample-apps/aws-sdk/deploy/wrapper/main.tf deleted file mode 100644 index 47a2097456..0000000000 --- a/python/sample-apps/aws-sdk/deploy/wrapper/main.tf +++ /dev/null @@ -1,48 +0,0 @@ -module "hello-lambda-function" { - source = "terraform-aws-modules/lambda/aws" - version = ">= 2.24.0" - - architectures = compact([var.architecture]) - function_name = var.name - handler = "lambda_function.lambda_handler" - runtime = var.runtime - - create_package = false - local_existing_package = "${path.module}/../../../build/function.zip" - - memory_size = 384 - timeout = 20 - - layers = compact([ - var.collector_layer_arn, - var.sdk_layer_arn - ]) - - environment_variables = { - AWS_LAMBDA_EXEC_WRAPPER = "/opt/otel-handler" - } - - tracing_mode = var.tracing_mode - - attach_policy_statements = true - policy_statements = { - s3 = { - effect = "Allow" - actions = [ - "s3:ListAllMyBuckets" - ] - resources = [ - "*" - ] - } - } -} - -module "api-gateway" { - source = "../../../../../utils/terraform/api-gateway-proxy" - - name = var.name - function_name = module.hello-lambda-function.lambda_function_name - function_invoke_arn = module.hello-lambda-function.lambda_function_invoke_arn - enable_xray_tracing = var.tracing_mode == "Active" -} diff --git a/python/sample-apps/aws-sdk/deploy/wrapper/outputs.tf b/python/sample-apps/aws-sdk/deploy/wrapper/outputs.tf deleted file mode 100644 index 5de8044c90..0000000000 --- a/python/sample-apps/aws-sdk/deploy/wrapper/outputs.tf +++ /dev/null @@ -1,7 +0,0 @@ -output "api-gateway-url" { - value = module.api-gateway.api_gateway_url -} - -output "function_role_name" { - value = module.hello-lambda-function.lambda_role_name -} diff --git a/python/sample-apps/aws-sdk/deploy/wrapper/variables.tf b/python/sample-apps/aws-sdk/deploy/wrapper/variables.tf deleted file mode 100644 index 8c23537ef9..0000000000 --- a/python/sample-apps/aws-sdk/deploy/wrapper/variables.tf +++ /dev/null @@ -1,35 +0,0 @@ -variable "name" { - type = string - description = "Name of created function and API Gateway" - default = "hello-python" -} - -variable "collector_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry collector extension" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "sdk_layer_arn" { - type = string - description = "ARN for the Lambda layer containing the OpenTelemetry Python Wrapper" - // TODO(anuraaga): Add default when a public layer is published. -} - -variable "tracing_mode" { - type = string - description = "Lambda function tracing mode" - default = "PassThrough" -} - -variable "architecture" { - type = string - description = "Lambda function architecture, valid values are arm64 or x86_64" - default = "x86_64" -} - -variable "runtime" { - type = string - description = "Python runtime version used for sample Lambda Function" - default = "python3.9" -} diff --git a/python/sample-apps/build.sh b/python/sample-apps/build.sh deleted file mode 100755 index e2be3fe07e..0000000000 --- a/python/sample-apps/build.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -e - -mkdir -p build/python -python3 -m pip install -r function/requirements.txt -t build/python -cp function/lambda_function.py build/python -cd build/python -zip -r ../function.zip ./* diff --git a/python/sample-apps/function/lambda_function.py b/python/sample-apps/function/lambda_function.py deleted file mode 100644 index a43ef3fbfd..0000000000 --- a/python/sample-apps/function/lambda_function.py +++ /dev/null @@ -1,16 +0,0 @@ -import os -import json -import boto3 -import requests - -s3 = boto3.resource("s3") - -# lambda function -def lambda_handler(event, context): - - requests.get("http://httpbin.org/") - - for bucket in s3.buckets.all(): - print(bucket.name) - - return {"statusCode": 200, "body": json.dumps(os.environ.get("_X_AMZN_TRACE_ID"))} diff --git a/python/sample-apps/function/requirements.txt b/python/sample-apps/function/requirements.txt deleted file mode 100644 index cdb77fdfde..0000000000 --- a/python/sample-apps/function/requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -requests -boto3 \ No newline at end of file diff --git a/python/sample-apps/run.sh b/python/sample-apps/run.sh deleted file mode 100755 index 5306886809..0000000000 --- a/python/sample-apps/run.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -set -euf -o pipefail - -cp -r ../src/otel . -cp ../src/run.sh layer.sh -./layer.sh "$@" -rm -rf .aws-sam -rm -rf otel -rm -r layer.sh diff --git a/python/sample-apps/template.yml b/python/sample-apps/template.yml deleted file mode 100644 index f162eda09e..0000000000 --- a/python/sample-apps/template.yml +++ /dev/null @@ -1,51 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Transform: 'AWS::Serverless-2016-10-31' -Description: OpenTelemetry Python Lambda layer for Python -Resources: - api: - Type: AWS::Serverless::Api - Properties: - StageName: api - TracingEnabled: true - OpenApiVersion: 3.0.2 - function: - Type: AWS::Serverless::Function - Properties: - Handler: lambda_function.lambda_handler - Runtime: python3.9 - CodeUri: ./function - Description: Build OTel Python Lambda Sample from scratch - MemorySize: 512 - Timeout: 15 - Policies: - - AWSLambdaBasicExecutionRole - - AWSLambda_ReadOnlyAccess - - AWSXrayWriteOnlyAccess - - AmazonS3FullAccess - Environment: - Variables: - AWS_LAMBDA_EXEC_WRAPPER: /opt/python/otel-handler - Tracing: Active - Layers: - - !Ref OTelLayer - Events: - getEndpoint: - Type: Api - Properties: - RestApiId: !Ref api - Path: / - Method: GET - OTelLayer: - Type: AWS::Serverless::LayerVersion - Properties: - LayerName: opentelemetry-python - Description: Opentelemetry Python layer - ContentUri: ./otel - CompatibleRuntimes: - - python3.9 - - python3.10 - - python3.11 - - python3.12 - - python3.13 - Metadata: - BuildMethod: makefile diff --git a/python/src/build.sh b/python/src/build.sh deleted file mode 100755 index ced5cf7dad..0000000000 --- a/python/src/build.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -set -e - -mkdir -p build -docker build --progress plain -t aws-otel-lambda-python-layer otel -docker run --rm -v "$(pwd)/build:/out" aws-otel-lambda-python-layer diff --git a/python/src/otel/Dockerfile b/python/src/otel/Dockerfile deleted file mode 100644 index 9e5b16b4ac..0000000000 --- a/python/src/otel/Dockerfile +++ /dev/null @@ -1,26 +0,0 @@ -ARG runtime=python3.14 - -FROM public.ecr.aws/sam/build-${runtime} - -ADD . /workspace - -WORKDIR /workspace - -RUN mkdir -p /build && \ - python3 -m pip install -r otel_sdk/requirements.txt -t /build/python && \ - python3 -m pip install -r otel_sdk/nodeps-requirements.txt -t /build/tmp --no-deps && \ - # We need to use a `/build/tmp/` folder otherwise the instrumentation packages - # do not get fully downloaded to the `opentelemetry/instrumentation/` path. - cp -r /build/tmp/* /build/python/ && \ - rm -rf /build/tmp && \ - mv otel_sdk/otel_wrapper.py /build/python && \ - mv otel_sdk/otel-instrument /build && \ - mv otel_sdk/otel-handler /build && \ - chmod 755 /build/otel-instrument && \ - chmod 755 /build/otel-handler && \ - rm -rf /build/python/boto* && \ - rm -rf /build/python/urllib3* && \ - cd /build && \ - zip -r opentelemetry-python-layer.zip otel-handler otel-instrument python - -CMD cp /build/opentelemetry-python-layer.zip /out/opentelemetry-python-layer.zip diff --git a/python/src/otel/Makefile b/python/src/otel/Makefile deleted file mode 100644 index bdb34e793e..0000000000 --- a/python/src/otel/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -export SDK=$(shell pwd)/otel_sdk - -build-OTelLayer: - mkdir -p $(ARTIFACTS_DIR)/python - python3 -m pip install -r $(SDK)/requirements.txt -t $(ARTIFACTS_DIR)/python - python3 -m pip install -r $(SDK)/nodeps-requirements.txt -t $(ARTIFACTS_DIR)/tmp --no-deps - python3 -m pip freeze --path $(ARTIFACTS_DIR)/python - cp -r $(ARTIFACTS_DIR)/tmp/* $(ARTIFACTS_DIR)/python/ - rm -rf $(ARTIFACTS_DIR)/tmp - cp -r $(SDK)/* $(ARTIFACTS_DIR)/python - chmod 755 $(ARTIFACTS_DIR)/python/otel-instrument - chmod 755 $(ARTIFACTS_DIR)/python/otel-handler - rm -rf $(ARTIFACTS_DIR)/python/boto* - rm -rf $(ARTIFACTS_DIR)/python/urllib3* diff --git a/python/src/otel/otel_sdk/nodeps-requirements.txt b/python/src/otel/otel_sdk/nodeps-requirements.txt deleted file mode 100644 index 8c50e29a37..0000000000 --- a/python/src/otel/otel_sdk/nodeps-requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -# TODO: move these dependencies to requirements.txt when they stopped relying on a pinned version of -# opentelemetry-propagator-aws-xray -opentelemetry-instrumentation-aws-lambda==0.54b0 -opentelemetry-instrumentation-botocore==0.54b0 diff --git a/python/src/otel/otel_sdk/otel-handler b/python/src/otel/otel_sdk/otel-handler deleted file mode 100755 index 364fc27af1..0000000000 --- a/python/src/otel/otel_sdk/otel-handler +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -set -ef -o pipefail - -# 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 -# -# 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. - -: <<'END_DOCUMENTATION' -`otel-handler` - -This script is a wrapper around the existing `otel-instrument` script to maintain -backward compatibility while providing a more descriptive name. - -It simply forwards all arguments to the `otel-instrument` script. - -Usage ------ -Use this script exactly as you would use `otel-instrument`: - -.. code:: - - AWS_LAMBDA_EXEC_WRAPPER = /opt/otel-handler - -END_DOCUMENTATION - -# Get the directory where this script is located -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" - -# Call the original otel-instrument script with all passed arguments -exec "${SCRIPT_DIR}/otel-instrument" "$@" diff --git a/python/src/otel/otel_sdk/otel-instrument b/python/src/otel/otel_sdk/otel-instrument deleted file mode 100755 index 9d89c96b62..0000000000 --- a/python/src/otel/otel_sdk/otel-instrument +++ /dev/null @@ -1,166 +0,0 @@ -#!/bin/bash - -set -ef -o pipefail - -# 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 -# -# 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. - -: <<'END_DOCUMENTATION' -`otel-instrument` - -This script configures and sets up OpenTelemetry Python with the values we -expect will be used by the common user. It does this by setting the environment -variables OpenTelemetry uses, and then initializing OpenTelemetry using the -`opentelemetry-instrument` auto instrumentation script from the -`opentelemetry-instrumentation` package. - -All other runtimes use the `otel-handler` script which is the equivalent of this. -In the next major version, the contents of this script will be moved to the -`otel-handler` script. - -Additionally, this configuration assumes the user is using packages conforming -to the `opentelemetry-instrumentation` and `opentelemetry-sdk` specifications. - -DO NOT use this script for anything else besides SETTING ENVIRONMENT VARIABLES. - -See more: -https://docs.aws.amazon.com/lambda/latest/dg/runtimes-modify.html#runtime-wrapper - -Usage ------ -We expect this file to be at the root of a Lambda Layer. Having it anywhere else -seems to mean AWS Lambda cannot find it. - -In the configuration of an AWS Lambda function with this file at the -root level of a Lambda Layer: - -.. code:: - - AWS_LAMBDA_EXEC_WRAPPER = /opt/otel-instrument - -END_DOCUMENTATION - -# Use constants to access the environment variables we want to use in this -# script. - -# See more: -# https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-runtime - -# - Reserved environment variables - -# - - $AWS_LAMBDA_FUNCTION_NAME -# - - $LAMBDA_RUNTIME_DIR - -# - Unreserved environment variables - -# - - $PYTHONPATH - -# Update the python paths for packages with `sys.path` and `PYTHONPATH` - -# - We know that the path to the Lambda Layer OpenTelemetry Python packages are -# well defined, so we can add them to the PYTHONPATH. -# -# See more: -# https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html#configuration-layers-path - -export LAMBDA_LAYER_PKGS_DIR="/opt/python"; - -# - Set Lambda Layer python packages in PYTHONPATH so `opentelemetry-instrument` -# script can find them (it needs to find `opentelemetry` to find the auto -# instrumentation `run()` method later) - -export PYTHONPATH="$LAMBDA_LAYER_PKGS_DIR:$PYTHONPATH"; - -# - Set Lambda runtime python packages in PYTHONPATH so -# `opentelemetry-instrument` script can find them during auto instrumentation -# and instrument them. - -export PYTHONPATH="$LAMBDA_RUNTIME_DIR:$PYTHONPATH"; - -# Configure OpenTelemetry Python with environment variables - -# - We leave `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT` to its default. This is -# `http://localhost:4318/v1/traces` because we are using the HTTP exporter - -# - If OTEL_EXPORTER_OTLP_PROTOCOL is not set by user, the default exporting protocol is http/protobuf. -if [ -z "${OTEL_EXPORTER_OTLP_PROTOCOL}" ]; then - export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf -fi - -# - Set the service name - -if [ -z "${OTEL_SERVICE_NAME}" ]; then - export OTEL_SERVICE_NAME=$AWS_LAMBDA_FUNCTION_NAME; -fi - -# - Set the propagators - -if [[ -z "$OTEL_PROPAGATORS" ]]; then - export OTEL_PROPAGATORS="tracecontext,baggage,xray" -fi - -# - Set the Resource Detectors (Resource Attributes) -# -# TODO: waiting on OTel Python support for configuring Resource Detectors from -# an environment variable. Replace the bottom code with the following when -# this is possible. We will have to download `opentelemetry-sdk-extension-aws` -# when that happens to get the resource detector. -# -# export OTEL_RESOURCE_DETECTORS="aws_lambda"; -# -# In the meantime, if doing manual instrumentation, (which means we CANNOT use -# this script) we could do the following: -# -# import opentelemetry.trace as trace -# from opentelemetry.sdk.trace import TracerProvider -# from opentelemetry.sdk.extension.aws.resource._lambda import ( -# AwsLambdaResourceDetector, -# ) -# from opentelemetry.sdk.resources import get_aggregated_resources -# trace.set_tracer_provider( -# TracerProvider( -# resource=get_aggregated_resources( -# [ -# AwsLambdaResourceDetector(), -# ] -# ), -# ) -# ) - -export LAMBDA_RESOURCE_ATTRIBUTES="cloud.region=$AWS_REGION,cloud.provider=aws,faas.name=$AWS_LAMBDA_FUNCTION_NAME,faas.version=$AWS_LAMBDA_FUNCTION_VERSION,faas.instance=$AWS_LAMBDA_LOG_STREAM_NAME"; - -if [ -z "${OTEL_RESOURCE_ATTRIBUTES}" ]; then - export OTEL_RESOURCE_ATTRIBUTES=$LAMBDA_RESOURCE_ATTRIBUTES; -else - export OTEL_RESOURCE_ATTRIBUTES="$LAMBDA_RESOURCE_ATTRIBUTES,$OTEL_RESOURCE_ATTRIBUTES"; -fi - - -# - Uses the default `OTEL_PROPAGATORS` which is set to `tracecontext,baggage` - -# - Use a wrapper because AWS Lambda's `python3 /var/runtime/bootstrap.py` will -# use `imp.load_module` to load the function from the `_HANDLER` environment -# variable. This RELOADS the module and REMOVES any instrumentation patching -# done earlier. So we delay instrumentation until `bootstrap.py` imports -# `otel_wrapper.py` at which we know the patching will be picked up. -# -# See more: -# https://docs.python.org/3/library/imp.html#imp.load_module - -export ORIG_HANDLER=$_HANDLER; -export _HANDLER="otel_wrapper.lambda_handler"; - -# - Call the upstream auto instrumentation script - -exec python3 $LAMBDA_LAYER_PKGS_DIR/bin/opentelemetry-instrument "$@" diff --git a/python/src/otel/otel_sdk/otel_wrapper.py b/python/src/otel/otel_sdk/otel_wrapper.py deleted file mode 100644 index 907d5abe02..0000000000 --- a/python/src/otel/otel_sdk/otel_wrapper.py +++ /dev/null @@ -1,62 +0,0 @@ -# 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 -# -# 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. - -""" -`otel_wrapper.py` - -This file serves as a wrapper over the user's Lambda function. - -Usage ------ -Patch the reserved `_HANDLER` Lambda environment variable to point to this -file's `otel_wrapper.lambda_handler` property. Do this having saved the original -`_HANDLER` in the `ORIG_HANDLER` environment variable. Doing this makes it so -that **on import of this file, the handler is instrumented**. - -Instrumenting any earlier will cause the instrumentation to be lost because the -AWS Service uses `imp.load_module` to import the handler which RELOADS the -module. This is why AwsLambdaInstrumentor cannot be instrumented with the -`opentelemetry-instrument` script. - -See more: -https://docs.python.org/3/library/imp.html#imp.load_module - -""" - -import os -from importlib import import_module - - - -def modify_module_name(module_name): - """Returns a valid modified module to get imported""" - return ".".join(module_name.split("/")) - - -class HandlerError(Exception): - pass - -path = os.environ.get("ORIG_HANDLER") - -if path is None: - raise HandlerError("ORIG_HANDLER is not defined.") - -try: - (mod_name, handler_name) = path.rsplit(".", 1) -except ValueError as e: - raise HandlerError("Bad path '{}' for ORIG_HANDLER: {}".format(path, str(e))) - -modified_mod_name = modify_module_name(mod_name) -handler_module = import_module(modified_mod_name) -lambda_handler = getattr(handler_module, handler_name) diff --git a/python/src/otel/otel_sdk/requirements.txt b/python/src/otel/otel_sdk/requirements.txt deleted file mode 100644 index 42ff133e8e..0000000000 --- a/python/src/otel/otel_sdk/requirements.txt +++ /dev/null @@ -1,36 +0,0 @@ -opentelemetry-sdk==1.33.0 -opentelemetry-exporter-otlp-proto-http==1.33.0 -opentelemetry-distro==0.54b0 -opentelemetry-instrumentation==0.54b0 -opentelemetry-semantic-conventions==0.54b0 -opentelemetry-propagator-aws-xray==1.0.2 - -# Instrumentation dependencies -opentelemetry-instrumentation-aiohttp-client==0.54b0 -opentelemetry-util-http==0.54b0 -opentelemetry-instrumentation-asgi==0.54b0 -opentelemetry-instrumentation-asyncpg==0.54b0 -opentelemetry-instrumentation-boto==0.54b0 -opentelemetry-instrumentation-boto3sqs==0.54b0 -opentelemetry-instrumentation-celery==0.54b0 -opentelemetry-instrumentation-dbapi==0.54b0 -opentelemetry-instrumentation-django==0.54b0 -opentelemetry-instrumentation-elasticsearch==0.54b0 -opentelemetry-instrumentation-fastapi==0.54b0 -opentelemetry-instrumentation-falcon==0.54b0 -opentelemetry-instrumentation-flask==0.54b0 -opentelemetry-instrumentation-grpc==0.54b0 -opentelemetry-instrumentation-jinja2==0.54b0 -opentelemetry-instrumentation-mysql==0.54b0 -opentelemetry-instrumentation-psycopg2==0.54b0 -opentelemetry-instrumentation-pymemcache==0.54b0 -opentelemetry-instrumentation-pymongo==0.54b0 -opentelemetry-instrumentation-pymysql==0.54b0 -opentelemetry-instrumentation-pyramid==0.54b0 -opentelemetry-instrumentation-redis==0.54b0 -opentelemetry-instrumentation-requests==0.54b0 -opentelemetry-instrumentation-sqlalchemy==0.54b0 -opentelemetry-instrumentation-sqlite3==0.54b0 -opentelemetry-instrumentation-starlette==0.54b0 -opentelemetry-instrumentation-tornado==0.54b0 -opentelemetry-instrumentation-wsgi==0.54b0 diff --git a/python/src/otel/tests/mocks/lambda_function.py b/python/src/otel/tests/mocks/lambda_function.py deleted file mode 100644 index c292575651..0000000000 --- a/python/src/otel/tests/mocks/lambda_function.py +++ /dev/null @@ -1,17 +0,0 @@ -# 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 -# -# 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. - - -def handler(event, context): - return "200 ok" diff --git a/python/src/otel/tests/nodeps-requirements.txt b/python/src/otel/tests/nodeps-requirements.txt deleted file mode 100644 index d3a7b5b3b3..0000000000 --- a/python/src/otel/tests/nodeps-requirements.txt +++ /dev/null @@ -1 +0,0 @@ -opentelemetry-instrumentation-aws-lambda==0.54b0 diff --git a/python/src/otel/tests/requirements.txt b/python/src/otel/tests/requirements.txt deleted file mode 100644 index 38673fdf78..0000000000 --- a/python/src/otel/tests/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -# Dependencies used in tests only -opentelemetry-test-utils==0.54b0 -opentelemetry-instrumentation == 0.54b0 -opentelemetry-semantic-conventions == 0.54b0 -opentelemetry-propagator-aws-xray == 1.0.2 diff --git a/python/src/otel/tests/test_otel.py b/python/src/otel/tests/test_otel.py deleted file mode 100644 index c59c99015a..0000000000 --- a/python/src/otel/tests/test_otel.py +++ /dev/null @@ -1,317 +0,0 @@ -# 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 -# -# 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. - -""" -This file tests that the `otel-handler` script included in this repository -successfully instruments OTel Python in a mock Lambda environment. -""" - -import fileinput -import os -import subprocess -import sys -from importlib import import_module, reload -from shutil import which -from unittest import mock -from opentelemetry import propagate -from opentelemetry.environment_variables import OTEL_PROPAGATORS -from opentelemetry.instrumentation.aws_lambda import ( - _HANDLER, - _X_AMZN_TRACE_ID, - ORIG_HANDLER, - AwsLambdaInstrumentor, -) -from opentelemetry.propagators.aws.aws_xray_propagator import ( - TRACE_ID_FIRST_PART_LENGTH, - TRACE_ID_VERSION, -) -from opentelemetry.semconv.resource import ResourceAttributes -from opentelemetry.semconv.trace import SpanAttributes -from opentelemetry.test.test_base import TestBase -from opentelemetry.trace import SpanKind -from opentelemetry.trace.propagation.tracecontext import ( - TraceContextTextMapPropagator, -) - -AWS_LAMBDA_EXEC_WRAPPER = "AWS_LAMBDA_EXEC_WRAPPER" -AWS_LAMBDA_FUNCTION_NAME = "AWS_LAMBDA_FUNCTION_NAME" -INIT_OTEL_SCRIPTS_DIR = os.path.join( - *(os.path.dirname(__file__), "..", "otel_sdk") -) -TOX_PYTHON_DIRECTORY = os.path.dirname(os.path.dirname(which("python3"))) - - -class MockLambdaContext: - def __init__(self, aws_request_id, invoked_function_arn): - self.invoked_function_arn = invoked_function_arn - self.aws_request_id = aws_request_id - - -MOCK_LAMBDA_CONTEXT = MockLambdaContext( - aws_request_id="mock_aws_request_id", - invoked_function_arn="arn:aws:lambda:us-west-2:123456789012:function:my-function", -) - -MOCK_XRAY_TRACE_ID = 0x5FB7331105E8BB83207FA31D4D9CDB4C -MOCK_XRAY_TRACE_ID_STR = f"{MOCK_XRAY_TRACE_ID:x}" -MOCK_XRAY_PARENT_SPAN_ID = 0x3328B8445A6DBAD2 -MOCK_XRAY_TRACE_CONTEXT_COMMON = f"Root={TRACE_ID_VERSION}-{MOCK_XRAY_TRACE_ID_STR[:TRACE_ID_FIRST_PART_LENGTH]}-{MOCK_XRAY_TRACE_ID_STR[TRACE_ID_FIRST_PART_LENGTH:]};Parent={MOCK_XRAY_PARENT_SPAN_ID:x}" -MOCK_XRAY_TRACE_CONTEXT_SAMPLED = f"{MOCK_XRAY_TRACE_CONTEXT_COMMON};Sampled=1" -MOCK_XRAY_TRACE_CONTEXT_NOT_SAMPLED = ( - f"{MOCK_XRAY_TRACE_CONTEXT_COMMON};Sampled=0" -) - -# See more: -# https://www.w3.org/TR/trace-context/#examples-of-http-traceparent-headers - -MOCK_W3C_TRACE_ID = 0x5CE0E9A56015FEC5AADFA328AE398115 -MOCK_W3C_PARENT_SPAN_ID = 0xAB54A98CEB1F0AD2 -MOCK_W3C_TRACE_CONTEXT_SAMPLED = ( - f"00-{MOCK_W3C_TRACE_ID:x}-{MOCK_W3C_PARENT_SPAN_ID:x}-01" -) - -MOCK_W3C_TRACE_STATE_KEY = "vendor_specific_key" -MOCK_W3C_TRACE_STATE_VALUE = "test_value" - - -def replace_in_file(filename, old_text, new_text): - with fileinput.FileInput(filename, inplace=True) as file_object: - for line in file_object: - # This directs the output to the file, not the console - print(line.replace(old_text, new_text), end="") - - -def mock_aws_lambda_exec_wrapper(): - """Mocks automatically instrumenting user Lambda function by pointing - `AWS_LAMBDA_EXEC_WRAPPER` to the `otel-handler` script. - - TODO: It would be better if `moto`'s `mock_lambda` supported setting - AWS_LAMBDA_EXEC_WRAPPER so we could make the call to Lambda instead. - - See more: - https://aws-otel.github.io/docs/getting-started/lambda/lambda-python - """ - - # NOTE: Because we run as a subprocess, the python packages are NOT patched - # with instrumentation. In this test we just make sure we can complete auto - # instrumentation without error and the correct environment variabels are - # set. A future improvement might have us run `opentelemetry-instrument` in - # this process to imitate `otel-handler`, but our lambda handler does not - # call other instrumented libraries so we have no use for it for now. - - print_environ_program = ( - "import os;" - f"print(f\"{ORIG_HANDLER}={{os.environ['{ORIG_HANDLER}']}}\");" - f"print(f\"{_HANDLER}={{os.environ['{_HANDLER}']}}\");" - ) - - completed_subprocess = subprocess.run( - [ - os.path.join(INIT_OTEL_SCRIPTS_DIR, "otel-handler"), - "python3", - "-c", - print_environ_program, - ], - check=True, - stdout=subprocess.PIPE, - text=True, - ) - - # NOTE: Because `otel-handler` cannot affect this python environment, we - # parse the stdout produced by our test python program to update the - # environment in this parent python process. - - for env_var_line in completed_subprocess.stdout.split("\n"): - if env_var_line: - env_key, env_value = env_var_line.split("=") - os.environ[env_key] = env_value - - -def mock_execute_lambda(event=None): - """Mocks the AWS Lambda execution. Mocks importing and then calling the - method at the current `_HANDLER` environment variable. Like the real Lambda, - if `AWS_LAMBDA_EXEC_WRAPPER` is defined, it executes that before `_HANDLER`. - - NOTE: We don't use `moto`'s `mock_lambda` because we are not instrumenting - calls to AWS Lambda using the AWS SDK. Instead, we are instrumenting AWS - Lambda itself. - - See more: - https://docs.aws.amazon.com/lambda/latest/dg/runtimes-modify.html#runtime-wrapper - - Args: - event: The Lambda event which may or may not be used by instrumentation. - """ - - # The point of the repo is to test using the script, so we can count on it - # being here for every test and do not check for its existence. - # if os.environ[AWS_LAMBDA_EXEC_WRAPPER]: - globals()[os.environ[AWS_LAMBDA_EXEC_WRAPPER]]() - - module_name, handler_name = os.environ[_HANDLER].rsplit(".", 1) - handler_module = import_module(module_name.replace("/", ".")) - getattr(handler_module, handler_name)(event, MOCK_LAMBDA_CONTEXT) - - -class TestAwsLambdaInstrumentor(TestBase): - """AWS Lambda Instrumentation Testsuite""" - - @classmethod - def setUpClass(cls): - super().setUpClass() - sys.path.append(INIT_OTEL_SCRIPTS_DIR) - replace_in_file( - os.path.join(INIT_OTEL_SCRIPTS_DIR, "otel-handler"), - 'export LAMBDA_LAYER_PKGS_DIR="/opt/python"', - f'export LAMBDA_LAYER_PKGS_DIR="{TOX_PYTHON_DIRECTORY}"', - ) - replace_in_file( - os.path.join(INIT_OTEL_SCRIPTS_DIR, "otel-instrument"), - 'export LAMBDA_LAYER_PKGS_DIR="/opt/python"', - f'export LAMBDA_LAYER_PKGS_DIR="{TOX_PYTHON_DIRECTORY}"', - ) - - def setUp(self): - super().setUp() - self.common_env_patch = mock.patch.dict( - "os.environ", - { - AWS_LAMBDA_EXEC_WRAPPER: "mock_aws_lambda_exec_wrapper", - AWS_LAMBDA_FUNCTION_NAME: "test-func", - _HANDLER: "mocks.lambda_function.handler", - }, - ) - self.common_env_patch.start() - - def tearDown(self): - super().tearDown() - self.common_env_patch.stop() - AwsLambdaInstrumentor().uninstrument() - - @classmethod - def tearDownClass(cls): - super().tearDownClass() - sys.path.remove(INIT_OTEL_SCRIPTS_DIR) - replace_in_file( - os.path.join(INIT_OTEL_SCRIPTS_DIR, "otel-handler"), - f'export LAMBDA_LAYER_PKGS_DIR="{TOX_PYTHON_DIRECTORY}"', - 'export LAMBDA_LAYER_PKGS_DIR="/opt/python"', - ) - replace_in_file( - os.path.join(INIT_OTEL_SCRIPTS_DIR, "otel-instrument"), - f'export LAMBDA_LAYER_PKGS_DIR="{TOX_PYTHON_DIRECTORY}"', - 'export LAMBDA_LAYER_PKGS_DIR="/opt/python"', - ) - - def test_active_tracing(self): - test_env_patch = mock.patch.dict( - "os.environ", - { - **os.environ, - # Using Active tracing - _X_AMZN_TRACE_ID: MOCK_XRAY_TRACE_CONTEXT_SAMPLED, - OTEL_PROPAGATORS: "xray-lambda" - }, - ) - test_env_patch.start() - - # try to load propagators based on the OTEL_PROPAGATORS env var - reload(propagate) - - mock_execute_lambda() - - spans = self.memory_exporter.get_finished_spans() - - assert spans - - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual(span.name, os.environ[ORIG_HANDLER]) - self.assertEqual(span.get_span_context().trace_id, MOCK_XRAY_TRACE_ID) - self.assertEqual(span.kind, SpanKind.SERVER) - self.assertSpanHasAttributes( - span, - { - ResourceAttributes.CLOUD_RESOURCE_ID: MOCK_LAMBDA_CONTEXT.invoked_function_arn, - SpanAttributes.FAAS_INVOCATION_ID: MOCK_LAMBDA_CONTEXT.aws_request_id, - }, - ) - - # TODO: Waiting on OTel Python support for setting Resource Detectors - # using environment variables. Auto Instrumentation (used by this Lambda - # Instrumentation) sets up the global TracerProvider which is the only - # time Resource Detectors can be configured. - # - # resource_atts = span.resource.attributes - # self.assertEqual(resource_atts[ResourceAttributes.CLOUD_PLATFORM], CloudPlatformValues.AWS_LAMBDA.value) - # self.assertEqual(resource_atts[ResourceAttributes.CLOUD_PROVIDER], CloudProviderValues.AWS.value) - # self.assertEqual(resource_atts[ResourceAttributes.CLOUD_REGION], os.environ["AWS_REGION"]) - # self.assertEqual(resource_atts[ResourceAttributes.FAAS_NAME], os.environ["AWS_LAMBDA_FUNCTION_NAME"]) - # self.assertEqual(resource_atts[ResourceAttributes.FAAS_VERSION], os.environ["AWS_LAMBDA_FUNCTION_VERSION"]) - - parent_context = span.parent - self.assertEqual( - parent_context.trace_id, span.get_span_context().trace_id - ) - self.assertEqual(parent_context.span_id, MOCK_XRAY_PARENT_SPAN_ID) - self.assertTrue(parent_context.is_remote) - - test_env_patch.stop() - - def test_parent_context_from_lambda_event(self): - test_env_patch = mock.patch.dict( - "os.environ", - { - **os.environ, - # NOT Active Tracing - _X_AMZN_TRACE_ID: MOCK_XRAY_TRACE_CONTEXT_NOT_SAMPLED, - # NOT using the X-Ray Propagator - OTEL_PROPAGATORS: "tracecontext", - }, - ) - test_env_patch.start() - - # try to load propagators based on the OTEL_PROPAGATORS env var - reload(propagate) - - mock_execute_lambda( - { - "headers": { - TraceContextTextMapPropagator._TRACEPARENT_HEADER_NAME: MOCK_W3C_TRACE_CONTEXT_SAMPLED, - TraceContextTextMapPropagator._TRACESTATE_HEADER_NAME: f"{MOCK_W3C_TRACE_STATE_KEY}={MOCK_W3C_TRACE_STATE_VALUE},foo=1,bar=2", - } - } - ) - - spans = self.memory_exporter.get_finished_spans() - - assert spans - - self.assertEqual(len(spans), 1) - span = spans[0] - self.assertEqual(span.get_span_context().trace_id, MOCK_W3C_TRACE_ID) - - parent_context = span.parent - self.assertEqual( - parent_context.trace_id, span.get_span_context().trace_id - ) - self.assertEqual(parent_context.span_id, MOCK_W3C_PARENT_SPAN_ID) - self.assertEqual(len(parent_context.trace_state), 3) - self.assertEqual( - parent_context.trace_state.get(MOCK_W3C_TRACE_STATE_KEY), - MOCK_W3C_TRACE_STATE_VALUE, - ) - self.assertTrue(parent_context.is_remote) - - test_env_patch.stop() diff --git a/python/src/run.sh b/python/src/run.sh deleted file mode 120000 index e0cd9a6b84..0000000000 --- a/python/src/run.sh +++ /dev/null @@ -1 +0,0 @@ -../../utils/sam/run.sh \ No newline at end of file diff --git a/python/src/template.yml b/python/src/template.yml deleted file mode 100644 index 499eb85c93..0000000000 --- a/python/src/template.yml +++ /dev/null @@ -1,23 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Transform: 'AWS::Serverless-2016-10-31' -Description: OpenTelemetry Python Lambda layer for Python -Parameters: - LayerName: - Type: String - Description: Lambda layer name to be published - Default: opentelemetry-python -Resources: - OTelLayer: - Type: AWS::Serverless::LayerVersion - Properties: - LayerName: !Ref LayerName - Description: Opentelemetry Python layer - ContentUri: ./otel - CompatibleRuntimes: - - python3.9 - - python3.10 - - python3.11 - - python3.12 - - python3.13 - Metadata: - BuildMethod: makefile diff --git a/python/src/tox.ini b/python/src/tox.ini deleted file mode 100644 index 6714863739..0000000000 --- a/python/src/tox.ini +++ /dev/null @@ -1,29 +0,0 @@ -[tox] -envlist = - ; opentelemetry-instrumentation-aws-lambda - py3{8,9,10,11,12}-test-instrumentation-aws-lambda - -minversion = 3.8 - -skip_missing_interpreters = True - -skipsdist = True - -[testenv] -passenv = TOXENV - -setenv = - OTEL_PYTHON_TRACER_PROVIDER=sdk_tracer_provider - -changedir = - test-instrumentation-aws-lambda: {toxinidir}/otel/tests - -commands_pre = - pip install -r requirements.txt - pip install --no-deps -r nodeps-requirements.txt - -deps = - pytest - -commands = - pytest {posargs} diff --git a/ruby/README.md b/ruby/README.md deleted file mode 100644 index 926a245f59..0000000000 --- a/ruby/README.md +++ /dev/null @@ -1,104 +0,0 @@ -# OpenTelemetry Lambda Ruby - -Scripts and files used to build AWS Lambda Layers for running OpenTelemetry on AWS Lambda for Ruby. - -**Requirement** -* Ruby 3.2.0/3.3.0/3.4.0 -* [SAM CLI](https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html) -* [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) -* [Go](https://go.dev/doc/install) -* [Docker](https://docs.docker.com/get-docker) - -**Building Lambda Ruby Layer With OpenTelemetry Ruby Dependencies** - -1. Run build script - -```bash -./build.sh -``` - -Layer is stored in `src/build` folder - -**Default GEM_PATH** - -The [default GEM_PATH](https://docs.aws.amazon.com/lambda/latest/dg/ruby-package.html#ruby-package-dependencies-layers) for aws lambda ruby is `/opt/ruby/gems/` after lambda function loads this layer. - -**Define AWS_LAMBDA_EXEC_WRAPPER** - -Point `AWS_LAMBDA_EXEC_WRAPPER` to `/opt/otel-handler` to take advantage of layer wrapper that load all opentelemetry ruby components -e.g. -``` -AWS_LAMBDA_EXEC_WRAPPER: /opt/otel-handler -``` - -#### There are two ways to define the AWS_LAMBDA_EXEC_WRAPPER that point to either binary executable or script (normally bash). - -Method 1: define the AWS_LAMBDA_EXEC_WRAPPER in function from template.yml -```yaml -AWSTemplateFormatVersion: '2010-09-09' -Transform: 'AWS::Serverless-2016-10-31' -Description: OpenTelemetry Ruby Lambda layer for Ruby -Parameters: - LayerName: - ... -Resources: - OTelLayer: - ... - api: - ... - function: - Type: AWS::Serverless::Function - Properties: - ... - Environment: - Variables: - AWS_LAMBDA_EXEC_WRAPPER: /opt/otel-handler # this is an example of the path - -``` - -Method 2: directly update the environmental variable in lambda console: Configuration -> Environemntal variables - -For more information about aws lambda wrapper and wrapper layer, check [aws lambda runtime-wrapper](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-modify.html#runtime-wrapper). We provide a sample wrapper file in `src/layer/otel-handler` as reference. - -### Sample App - -1. Make sure the requirements are met (e.g. sam, aws, docker, ruby version.). Current sample app only support testing Ruby 3.2.0. If you wish to play with other ruby version, please modify ruby version from Runtime in sample-apps/template.yml and src/otel/layer/Makefile. - -2. Navigate to the path `cd ruby/src` to build layer - -```bash -sam build -u -t template.yml -``` - -3. Navigate to the path `cd ruby/sample-apps` -4. Build the layer and function based on template.yml. You will see .aws-sam folder after executed the command -```bash -sam build -u -t template.yml -# for different arch, define it in properties from template.yml - # Architectures: - # - arm64 -``` -5. Test with local simulation -```bash -sam local start-api --skip-pull-image -``` - -6. curl the lambda function -```bash -curl http://127.0.0.1:3000 -# you should expect: Hello 1.4.1 -``` -In this sample-apps, we use `src/layer/otel-handler` as default `AWS_LAMBDA_EXEC_WRAPPER`; to change it, please edit in `sample-apps/template.yml` - -In `ruby/sample-apps/template.yml`, the OTelLayer -> Properties -> ContentUri is pointing to `ruby/src/layer/`. This is for local testing purpose. If you wish to deploy (e.g. `sam deploy`), please point it to correct location or zip file. - -### Test with Jaeger Endpoint - -Assume you have a lambda function with current [released layer](https://github.com/open-telemetry/opentelemetry-lambda/releases/tag/layer-ruby%2F0.1.0), and you want to test it out that send trace to jaeger endpoint, below should be your environmental variable. -``` -AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler -OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http:///v1/traces -``` -Try with `jaeger-all-in-one` at [Jaeger](https://www.jaegertracing.io/docs/1.57/getting-started/) - - diff --git a/ruby/sample-apps/function/Gemfile b/ruby/sample-apps/function/Gemfile deleted file mode 100644 index 4d8ee8b0aa..0000000000 --- a/ruby/sample-apps/function/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source 'https://rubygems.org' - -# need this empty gemfile for success build diff --git a/ruby/sample-apps/function/lambda_function.rb b/ruby/sample-apps/function/lambda_function.rb deleted file mode 100644 index b1e97ad188..0000000000 --- a/ruby/sample-apps/function/lambda_function.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'json' - -def lambda_handler(event:, context:) - if defined?(::OpenTelemetry::SDK) - { statusCode: 200, body: "Hello #{::OpenTelemetry::SDK::VERSION}" } - else - { statusCode: 200, body: "Missing OpenTelemetry" } - end -end diff --git a/ruby/sample-apps/template.yml b/ruby/sample-apps/template.yml deleted file mode 100644 index 41c94623a8..0000000000 --- a/ruby/sample-apps/template.yml +++ /dev/null @@ -1,46 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Transform: 'AWS::Serverless-2016-10-31' -Description: OpenTelemetry Ruby Lambda layer for Ruby -Parameters: - LayerName: - Type: String - Description: Lambda layer name to be published - Default: opentelemetry-ruby -Resources: - OTelLayer: - Type: AWS::Serverless::LayerVersion - Properties: - LayerName: !Ref LayerName - Description: Opentelemetry Ruby layer - ContentUri: ./../src/otel/layer - CompatibleRuntimes: - - ruby3.2 - Metadata: - BuildMethod: makefile - api: - Type: AWS::Serverless::Api - Properties: - StageName: api - OpenApiVersion: 3.0.2 - function: - Type: AWS::Serverless::Function - Properties: - CodeUri: ./function - Handler: lambda_function.lambda_handler - Runtime: ruby3.2 - Description: Build OTel Ruby Lambda layer and sample app from scratch - Policies: - - AmazonS3ReadOnlyAccess - Layers: - - !Ref OTelLayer - Events: - getEndpoint: - Type: Api - Properties: - RestApiId: !Ref api - Path: / - Method: GET - Timeout: 60 - Environment: - Variables: - AWS_LAMBDA_EXEC_WRAPPER: /opt/otel-handler diff --git a/ruby/src/build.sh b/ruby/src/build.sh deleted file mode 100755 index 01503ee944..0000000000 --- a/ruby/src/build.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -set -e - -mkdir -p build - -docker build --progress plain -t aws-otel-lambda-ruby-layer otel -docker run --rm -v "$(pwd)/build:/out" aws-otel-lambda-ruby-layer diff --git a/ruby/src/otel/Dockerfile b/ruby/src/otel/Dockerfile deleted file mode 100644 index c6d0b38f1f..0000000000 --- a/ruby/src/otel/Dockerfile +++ /dev/null @@ -1,67 +0,0 @@ -FROM ubuntu:latest - -RUN mkdir /build - -COPY . /build - -RUN apt-get update && apt-get install -y git curl libssl-dev libreadline-dev zlib1g-dev autoconf bison build-essential libyaml-dev libreadline-dev libncurses5-dev libffi-dev libgdbm-dev zip - -RUN git clone https://github.com/rbenv/rbenv.git ~/.rbenv \ - && git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build \ - && git clone https://github.com/rbenv/rbenv-default-gems.git ~/.rbenv/plugins/rbenv-default-gems \ - && echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile \ - && echo 'eval "$(rbenv init -)"' >> ~/.profile \ - && echo 'eval "$(rbenv init -)"' >> ~/.bashrc \ - && echo 'bundler' > ~/.rbenv/default-gems - -RUN echo 'alias be="bundle exec"' >> ~/.bashrc -RUN echo 'alias be="bundle exec"' >> ~/.profile - -# install rubies to build our gem against Gemfile -RUN . ~/.profile \ - && cd /root/.rbenv/plugins/ruby-build && git pull && cd - \ - && rbenv install 3.2.0 \ - && rbenv install 3.3.0 \ - && rbenv install 3.4.0 - -WORKDIR /build/layer - -RUN . ~/.profile && rbenv local 3.2.0 && bundle install -RUN . ~/.profile && rbenv local 3.3.0 && bundle install -RUN . ~/.profile && rbenv local 3.4.0 && bundle install - -WORKDIR /root/.rbenv/versions/3.2.0/lib/ruby/gems/ -RUN zip -r gems-3.2.0.zip 3.2.0/ - -WORKDIR /root/.rbenv/versions/3.3.0/lib/ruby/gems/ -RUN zip -r gems-3.3.0.zip 3.3.0/ - -WORKDIR /root/.rbenv/versions/3.4.0/lib/ruby/gems/ - -# rbenv install 3.4.0 get 3.4.0+1/, so need to change back to 3.4.0+1 -RUN mv 3.4.0+1/ 3.4.0/ -RUN set -e && \ - dir=$(find /root/.rbenv/versions/3.4.0/lib/ruby/gems/ -type d -name '3.4.0+1' | head -n 1) && \ - target=$(echo "$dir" | sed 's/3\.4\.0+1/3.4.0/') && \ - mv "$dir" "$target" -RUN zip -r gems-3.4.0.zip 3.4.0/ - -# copy gems to /build/ruby/gems for zipping -RUN mkdir /build/ruby && mkdir /build/ruby/gems -WORKDIR /build/ruby/gems -RUN cp /root/.rbenv/versions/3.2.0/lib/ruby/gems/gems-3.2.0.zip . && unzip gems-3.2.0.zip && rm gems-3.2.0.zip -RUN cp /root/.rbenv/versions/3.3.0/lib/ruby/gems/gems-3.3.0.zip . && unzip gems-3.3.0.zip && rm gems-3.3.0.zip -RUN cp /root/.rbenv/versions/3.4.0/lib/ruby/gems/gems-3.4.0.zip . && unzip gems-3.4.0.zip && rm gems-3.4.0.zip -RUN ls -al /build/ruby/gems - -# rm gem cache -RUN rm /root/.rbenv/versions/3.2.0/lib/ruby/gems/3.2.0/cache/* \ - && rm /root/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/cache/* \ - && rm /root/.rbenv/versions/3.4.0/lib/ruby/gems/3.4.0/cache/* - -# zip all the gems -WORKDIR /build -RUN cp layer/otel-handler . && cp layer/wrapper.rb . -RUN zip -r opentelemetry-ruby-layer.zip ruby/ otel-handler wrapper.rb - -CMD cp /build/opentelemetry-ruby-layer.zip /out/opentelemetry-ruby-layer.zip diff --git a/ruby/src/otel/layer/Gemfile b/ruby/src/otel/layer/Gemfile deleted file mode 100644 index b470b79f42..0000000000 --- a/ruby/src/otel/layer/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://rubygems.org' - -gem 'opentelemetry-sdk', '~> 1.10.0' -gem 'opentelemetry-exporter-otlp', '~> 0.31.0' -gem 'opentelemetry-instrumentation-all', '~> 0.90.1' diff --git a/ruby/src/otel/layer/Makefile b/ruby/src/otel/layer/Makefile deleted file mode 100644 index 6a12b1e47e..0000000000 --- a/ruby/src/otel/layer/Makefile +++ /dev/null @@ -1,10 +0,0 @@ - -build-OTelLayer: - mkdir -p $(ARTIFACTS_DIR)/ruby/gems/3.2.0 - bundle config set --global silence_root_warning 1 - bundle config set --local path 'ruby' - bundle install - cp -r ruby/ruby/3.2.0/* $(ARTIFACTS_DIR)/ruby/gems/3.2.0 - cp otel-handler $(ARTIFACTS_DIR)/otel-handler - cp wrapper.rb $(ARTIFACTS_DIR)/wrapper.rb - rm -rf $(ARTIFACTS_DIR)/ruby/gems/3.2.0/cache diff --git a/ruby/src/otel/layer/otel-handler b/ruby/src/otel/layer/otel-handler deleted file mode 100755 index a7994f48ed..0000000000 --- a/ruby/src/otel/layer/otel-handler +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh - -export ORIG_HANDLER="$_HANDLER"; -export _HANDLER="/opt/wrapper.otel_wrapper"; - -if [ -z "${OTEL_SERVICE_NAME}" ]; then - export OTEL_SERVICE_NAME="$AWS_LAMBDA_FUNCTION_NAME"; -fi - -# disable HTTP NET by default - otherwise, lambda runtime gets instrumented yielding noise -if [ -z "${OTEL_RUBY_INSTRUMENTATION_NET_HTTP_ENABLED}" ]; then - export OTEL_RUBY_INSTRUMENTATION_NET_HTTP_ENABLED=false; -fi - -export LAMBDA_RESOURCE_ATTRIBUTES="cloud.region=$AWS_REGION,cloud.provider=aws,faas.name=$AWS_LAMBDA_FUNCTION_NAME,faas.version=$AWS_LAMBDA_FUNCTION_VERSION,faas.instance=$AWS_LAMBDA_LOG_STREAM_NAME"; -if [ -z "${OTEL_RESOURCE_ATTRIBUTES}" ]; then - export OTEL_RESOURCE_ATTRIBUTES="$LAMBDA_RESOURCE_ATTRIBUTES"; -else - export OTEL_RESOURCE_ATTRIBUTES="$LAMBDA_RESOURCE_ATTRIBUTES,$OTEL_RESOURCE_ATTRIBUTES"; -fi - -exec "$@" diff --git a/ruby/src/otel/layer/wrapper.rb b/ruby/src/otel/layer/wrapper.rb deleted file mode 100644 index 59f9a19384..0000000000 --- a/ruby/src/otel/layer/wrapper.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'opentelemetry-sdk' -require 'opentelemetry-exporter-otlp' -require 'opentelemetry-instrumentation-all' - -# We need to load the function code's dependencies, and _before_ any dependencies might -# be initialized outside of the function handler, bootstrap instrumentation. -def preload_function_dependencies - default_task_location = '/var/task' - - handler_file = ENV.values_at('ORIG_HANDLER', '_HANDLER').compact.first&.split('.')&.first - - unless handler_file && File.exist?("#{default_task_location}/#{handler_file}.rb") - OpenTelemetry.logger.warn { 'Could not find the original handler file to preload libraries.' } - return nil - end - - libraries = File.read("#{default_task_location}/#{handler_file}.rb") - .scan(/^\s*require\s+['"]([^'"]+)['"]/) - .flatten - - libraries.each do |lib| - require lib - rescue StandardError => e - OpenTelemetry.logger.warn { "Could not load library #{lib}: #{e.message}" } - end - handler_file -end - -handler_file = preload_function_dependencies - -OpenTelemetry.logger.info { "Libraries in #{handler_file} have been preloaded." } if handler_file - -OpenTelemetry::SDK.configure do |c| - c.use_all() -end - -def otel_wrapper(event:, context:) - otel_wrapper = OpenTelemetry::Instrumentation::AwsLambda::Handler.new - otel_wrapper.call_wrapped(event: event, context: context) -end diff --git a/ruby/src/template.yml b/ruby/src/template.yml deleted file mode 100644 index adfb9535af..0000000000 --- a/ruby/src/template.yml +++ /dev/null @@ -1,19 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Transform: 'AWS::Serverless-2016-10-31' -Description: OpenTelemetry Ruby Lambda layer for Ruby -Parameters: - LayerName: - Type: String - Description: Lambda layer name to be published - Default: opentelemetry-ruby -Resources: - OTelLayer: - Type: AWS::Serverless::LayerVersion - Properties: - LayerName: !Ref LayerName - Description: Opentelemetry Ruby layer - ContentUri: ./otel/layer - CompatibleRuntimes: - - ruby3.2 - Metadata: - BuildMethod: makefile diff --git a/ruby/src/zip_ruby_layer.sh b/ruby/src/zip_ruby_layer.sh deleted file mode 100755 index 4bdd466328..0000000000 --- a/ruby/src/zip_ruby_layer.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh - -set -e -set -u - -echo_usage() { - echo "usage: Build Lambda layer/application by SAM" - echo " -n " -} - -main() { - echo "running..." - layerName="opentelemetry-ruby-layer" - - while getopts "n:h" opt; do - case "${opt}" in - h) - echo_usage - exit 0 - ;; - n) - layerName="${OPTARG}" - ;; - \?) - exit 1 - ;; - :) - echo "Option -${OPTARG} requires an argument" >&2 - exit 1 - ;; - esac - done - - (cd .aws-sam/build/OTelLayer/ && zip -qr ../"$layerName".zip .) - mv .aws-sam/build/"$layerName".zip . - echo "Finished" -} - -main "$@" diff --git a/utils/aws-cloudformation/aws-cf-stack-for-layer-publish.yml b/utils/aws-cloudformation/aws-cf-stack-for-layer-publish.yml deleted file mode 100644 index 10fe13d6d7..0000000000 --- a/utils/aws-cloudformation/aws-cf-stack-for-layer-publish.yml +++ /dev/null @@ -1,53 +0,0 @@ -Parameters: - GitHubOrgName: - Description: Name of the GitHub organization/user - Type: String - RepositoryName: - Description: Name of the GitHub repository - Type: String - Default: "opentelemetry-lambda" - -Resources: - Role: - Type: AWS::IAM::Role - Properties: - RoleName: "github-otel-lambda-layer-publish-role" - AssumeRolePolicyDocument: - Statement: - - Effect: Allow - Action: sts:AssumeRoleWithWebIdentity - Principal: - Federated: !Ref GithubOIDC - Condition: - StringEquals: - token.actions.githubusercontent.com:aud: "sts.amazonaws.com" - StringLike: - token.actions.githubusercontent.com:sub: !Sub "repo:${GitHubOrgName}/${RepositoryName}:*" - Policies: - - PolicyName: "github-otel-lambda-layer-publish-policy" - PolicyDocument: - Version: "2012-10-17" - Statement: - - Effect: Allow - Action: - - "lambda:GetLayer*" - - "lambda:ListLayer*" - - "lambda:AddLayer*" - - "lambda:PublishLayer*" - Resource: - - !Sub "arn:aws:lambda:*:${AWS::AccountId}:layer:opentelemetry-*" - - !Sub "arn:aws:lambda:*:${AWS::AccountId}:layer:opentelemetry-*:*" - - GithubOIDC: - Type: AWS::IAM::OIDCProvider - Properties: - Url: "https://token.actions.githubusercontent.com" - ClientIdList: - - "sts.amazonaws.com" - ThumbprintList: - - "ffffffffffffffffffffffffffffffffffffffff" - -Outputs: - RoleARN: - Description: "ARN of the AWS IAM role to be assumed by Github for the OpenTelemetry Layer publishing" - Value: !GetAtt Role.Arn diff --git a/utils/sam/run.sh b/utils/sam/run.sh deleted file mode 100755 index 37c5b30996..0000000000 --- a/utils/sam/run.sh +++ /dev/null @@ -1,108 +0,0 @@ -#!/bin/bash - -set -euf -o pipefail - -echo_usage() { - echo "usage: Deploy Lambda layer/application by SAM" - echo " -r " - echo " -t " - echo " -b " - echo " -d " - echo " -n " - echo " -l " - echo " -s " -} - -is_sample() { - if [[ $(pwd) == *"sample"* ]]; then - echo 1 - else - echo 0 - fi -} - -main() { - echo "running..." - saved_args="$*" - template='template.yml' - build=false - deploy=false - layer=false - - stack=${OTEL_LAMBDA_STACK-"otel-stack"} - layerName=${OTEL_LAMBDA_LAYER-"otel-layer"} - - while getopts "hbdlr:t:s:n:" opt; do - case "${opt}" in - h) - echo_usage - exit 0 - ;; - b) - build=true - ;; - d) - deploy=true - ;; - n) - layerName="${OPTARG}" - ;; - l) - layer=true - ;; - r) - region="${OPTARG}" - ;; - t) - template="${OPTARG}" - ;; - s) - stack="${OPTARG}" - ;; - \?) - echo "Invalid option: -${OPTARG}" >&2 - exit 1 - ;; - :) - echo "Option -${OPTARG} requires an argument" >&2 - exit 1 - ;; - esac - done - - if [[ $deploy == true && $region == "" ]]; then - region=${AWS_REGION-$(aws configure get region)} - fi - - echo "Invoked with: ${saved_args}" - - if [[ $build == false && $deploy == false && $layer == false ]]; then - build=true - deploy=true - layer=true - fi - - if [[ $build == true ]]; then - echo "sam building..." - - echo "run.sh: Starting sam build." - sam build -u -t "$template" - zip -qr "$layerName".zip .aws-sam/build - fi - - if [[ $deploy == true ]]; then - sam deploy --stack-name "$stack" --region "$region" --capabilities CAPABILITY_NAMED_IAM --resolve-s3 --parameter-overrides LayerName="$layerName" - rm -rf otel/otel_collector - rm -f "$layerName".zip - fi - - if [[ $layer == true ]]; then - echo -e "\nOTel Lambda layer ARN:" - arn=$(aws lambda list-layer-versions --layer-name "$layerName" --region "$region" --query 'max_by(LayerVersions, &Version).LayerVersionArn') - echo "${arn//\"/}" - fi -} - -rm -rf .aws-sam - -main "$@" diff --git a/utils/terraform/api-gateway-proxy/main.tf b/utils/terraform/api-gateway-proxy/main.tf deleted file mode 100644 index 4bd8afbe14..0000000000 --- a/utils/terraform/api-gateway-proxy/main.tf +++ /dev/null @@ -1,67 +0,0 @@ -resource "aws_api_gateway_rest_api" "lambda_api_proxy" { - name = var.name -} - -resource "aws_api_gateway_resource" "lambda_api_proxy" { - rest_api_id = aws_api_gateway_rest_api.lambda_api_proxy.id - parent_id = aws_api_gateway_rest_api.lambda_api_proxy.root_resource_id - path_part = "{proxy+}" -} - -resource "aws_api_gateway_method" "lambda_api_proxy" { - rest_api_id = aws_api_gateway_rest_api.lambda_api_proxy.id - resource_id = aws_api_gateway_resource.lambda_api_proxy.id - http_method = "ANY" - authorization = "NONE" -} - -resource "aws_api_gateway_integration" "lambda_api" { - rest_api_id = aws_api_gateway_rest_api.lambda_api_proxy.id - resource_id = aws_api_gateway_method.lambda_api_proxy.resource_id - http_method = aws_api_gateway_method.lambda_api_proxy.http_method - - integration_http_method = "POST" - type = "AWS_PROXY" - uri = var.function_invoke_arn -} - -resource "aws_api_gateway_method" "lambda_api_proxy_root_nodejs" { - rest_api_id = aws_api_gateway_rest_api.lambda_api_proxy.id - resource_id = aws_api_gateway_rest_api.lambda_api_proxy.root_resource_id - http_method = "ANY" - authorization = "NONE" -} - -resource "aws_api_gateway_integration" "lambda_api_root_nodejs" { - rest_api_id = aws_api_gateway_rest_api.lambda_api_proxy.id - resource_id = aws_api_gateway_method.lambda_api_proxy_root_nodejs.resource_id - http_method = aws_api_gateway_method.lambda_api_proxy_root_nodejs.http_method - - integration_http_method = "POST" - type = "AWS_PROXY" - uri = var.function_invoke_arn -} - -resource "aws_api_gateway_deployment" "lambda_api_proxy" { - depends_on = [ - aws_api_gateway_integration.lambda_api, - aws_api_gateway_integration.lambda_api_root_nodejs, - ] - - rest_api_id = aws_api_gateway_rest_api.lambda_api_proxy.id -} - -resource "aws_api_gateway_stage" "test" { - stage_name = "default" - rest_api_id = aws_api_gateway_rest_api.lambda_api_proxy.id - deployment_id = aws_api_gateway_deployment.lambda_api_proxy.id - xray_tracing_enabled = var.enable_xray_tracing -} - -resource "aws_lambda_permission" "lambda_api_allow_gateway_nodejs" { - action = "lambda:InvokeFunction" - function_name = var.function_name - qualifier = var.function_qualifier - principal = "apigateway.amazonaws.com" - source_arn = "${aws_api_gateway_rest_api.lambda_api_proxy.execution_arn}/*/*" -} diff --git a/utils/terraform/api-gateway-proxy/outputs.tf b/utils/terraform/api-gateway-proxy/outputs.tf deleted file mode 100644 index 646329f4d1..0000000000 --- a/utils/terraform/api-gateway-proxy/outputs.tf +++ /dev/null @@ -1,3 +0,0 @@ -output "api_gateway_url" { - value = aws_api_gateway_stage.test.invoke_url -} diff --git a/utils/terraform/api-gateway-proxy/variables.tf b/utils/terraform/api-gateway-proxy/variables.tf deleted file mode 100644 index dbae1946b6..0000000000 --- a/utils/terraform/api-gateway-proxy/variables.tf +++ /dev/null @@ -1,26 +0,0 @@ -variable "name" { - type = string - description = "Name of API gateway to create" -} - -variable "function_name" { - type = string - description = "Name of function to proxy to" -} - -variable "function_qualifier" { - type = string - default = null - description = "Qualifier of function to proxy to" -} - -variable "function_invoke_arn" { - type = string - description = "Invoke ARN of function to proxy to" -} - -variable "enable_xray_tracing" { - type = bool - description = "Whether to enable xray tracing of the API gateway" - default = false -} From a8d7dfb87ad5b7ca5f32f0f661c7e98829f90047 Mon Sep 17 00:00:00 2001 From: Jerry Leung Date: Wed, 15 Apr 2026 14:26:39 -0700 Subject: [PATCH 2/9] No shell script to check --- .github/workflows/ci-shellcheck.yml | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 .github/workflows/ci-shellcheck.yml diff --git a/.github/workflows/ci-shellcheck.yml b/.github/workflows/ci-shellcheck.yml deleted file mode 100644 index 58d4fab7c9..0000000000 --- a/.github/workflows/ci-shellcheck.yml +++ /dev/null @@ -1,25 +0,0 @@ -name: "Continuous Build (shellcheck)" - -on: [push, pull_request] - -permissions: - contents: read - -jobs: - shellcheck: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - - - name: Install shell check - run: sudo apt update && sudo apt install --assume-yes shellcheck - - - name: Run shellcheck - run: >- - find . -type f | - grep -v '.git' | - xargs -n 30 file | - grep -i shell | - awk -F':' '{print $1}' | - xargs shellcheck - From ed1217bb0bea6bf6a9ae207cbb97b5be15272a19 Mon Sep 17 00:00:00 2001 From: Jerry Leung Date: Wed, 15 Apr 2026 14:30:10 -0700 Subject: [PATCH 3/9] Updated codeql --- .github/workflows/codeql.yml | 46 +----------------------------------- 1 file changed, 1 insertion(+), 45 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 6bf9db2cdb..fe9f228bfd 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -46,17 +46,7 @@ jobs: # containing source code for that language. target: - language: 'go' - directory: 'go' - - language: 'javascript' - directory: 'nodejs' - - language: 'python' - directory: 'python' - - language: 'ruby' - directory: 'ruby' - - language: 'java' - directory: 'java' - - language: 'csharp' - directory: 'dotnet' + directory: 'collector' # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby', 'swift' ] # Use only 'java' to analyze code written in Java, Kotlin or both # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both @@ -97,37 +87,3 @@ jobs: # - run: | # echo "Run, Build Application using script" # ./location_of_script_within_repo/buildscript.sh - - - name: Set up Java - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 - with: - distribution: corretto - java-version: '17' - if: ${{ matrix.target.language == 'java' }} - - - name: Setup Gradle - uses: gradle/actions/setup-gradle@50e97c2cd7a37755bbfafc9c5b7cafaece252f6e # v6.1.0 - with: - cache-provider: basic # MIT licensed (see https://github.com/gradle/actions/releases/tag/v6.1.0) - - - name: build Java - run: ./gradlew build --no-build-cache - working-directory: ${{ matrix.target.directory }} - if: ${{ matrix.target.language == 'java' }} - - - name: setup dotnet - uses: actions/setup-dotnet@c2fa09f4bde5ebb9d1777cf28262a3eb3db3ced7 # v5.2.0 - with: - dotnet-version: 6.x - if: ${{ matrix.target.language == 'csharp' }} - - - name: build dotnet - # Build all dotnet applications from this directory - run: find . -name '*.sln' -exec dotnet build '{}' \; - working-directory: ${{ matrix.target.directory }} - if: ${{ matrix.target.language == 'csharp' }} - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13 # v3.29.5 - with: - category: "/language:${{matrix.target.language}}" From b8c76948d94d2af8f36e7326520112379d2fb310 Mon Sep 17 00:00:00 2001 From: Jerry Leung Date: Wed, 15 Apr 2026 14:37:02 -0700 Subject: [PATCH 4/9] Unlink unreferenced links --- CONTRIBUTING.md | 58 --------------------------------------------- README.md | 12 +--------- collector/README.md | 2 +- 3 files changed, 2 insertions(+), 70 deletions(-) delete mode 100644 CONTRIBUTING.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index a62aeff286..0000000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,58 +0,0 @@ -# OpenTelemetry Contributor Guide - -Welcome to OpenTelemetry! This document provides general guidance for contributing to -this codebase. This is a multi-lingual codebase, so sub-directories like `collector` may -provide additional guidance in a CONTRIBUTING.md. -contribute to the code base. Feel free to browse the [open -issues](https://github.com/open-telemetry/opentelemetry-lambda/issues?q=is%3Aissue+is%3Aopen) -and file new ones, all feedback welcome! - -## Before you get started - -### Code of Conduct - -Please make sure to read and observe our [Code of -Conduct](https://github.com/open-telemetry/community/blob/master/code-of-conduct.md). - -### Sign the CLA - -Before you can contribute, you will need to sign the [Contributor License -Agreement](https://docs.linuxfoundation.org/lfx/easycla/contributors). - -### Code attribution - -[License information](README.md#License) should be included in all source files where applicable. -Either full or short version of the header should be used as described at [apache.org](http://www.apache.org/foundation/license-faq.html#Apply-My-Software). -It is OK to exclude the year from the copyright notice. For the details on how to apply the copyright, -see the next section. - -### Copyright Notices - -OpenTelemetry follows [CNCF recommendations](https://github.com/cncf/foundation/blob/master/copyright-notices.md) -for copyright notices. We use "Copyright The OpenTelemetry Authors" notice form. - -According to CNCF recommendations if you are contributing third-party code -you will need to [retain the original copyright notice](https://github.com/cncf/foundation/blob/master/copyright-notices.md#dont-change-someone-elses-notice-without-their-permission). - -Any contributed third-party code must originally be Apache 2.0-Licensed or must -carry a permisive software license that is compatible when combining with -Apache 2.0 License. At this moment, BSD and MIT are the only -[OSI-approved licenses](https://opensource.org/licenses/alphabetical) known to be compatible. - -If you make substantial changes to the third-party code, _prepend_ the contributed -third party file with OpenTelemetry's copyright notice. - -If the contributed code is not third-party code and you are the author we -strongly encourage to avoid including your name in the notice and use the -generic "Copyright The OpenTelemetry Authors" notice. See rationale for this -recommendation [here](https://github.com/cncf/foundation/blob/master/copyright-notices.md#why-not-list-every-copyright-holder). - -## Community Expectations and Roles - -OpenTelemetry is a community project. Consequently, it is wholly dependent on -its community to provide a productive, friendly, and collaborative environment. - -- See [Community - Membership](https://github.com/open-telemetry/community/blob/master/community-membership.md) - for a list the various responsibilities of contributor roles. You are - encouraged to move up this contributor ladder as you gain experience. diff --git a/README.md b/README.md index 541d8bf531..71e5cf6b9a 100644 --- a/README.md +++ b/README.md @@ -20,16 +20,6 @@ These 2 layers are meant to be used in conjunction to instrument your lambda fun ## Collector Layer * ### [Collector Lambda Layer](collector/README.md) -## Extension Layer Language Support -* ### [Python Lambda Layer](python/README.md) -* ### [Java Lambda Layer](java/README.md) -* ### [NodeJS Lambda Layer](nodejs/README.md) -* ### [Ruby Lambda Layer](ruby/README.md) - -## Additional language tooling not currently supported -* ### [Go Lambda Library](go/README.md) -* ### [.NET Lambda Layer](dotnet/README.md) - ## Latest Layer Versions | Name | ARN | Version | |--------------|:-----------------------------------------------------------------------------------------------------------------------|:--------| @@ -51,7 +41,7 @@ These 2 layers are meant to be used in conjunction to instrument your lambda fun ## Design Proposal -To get a better understanding of the proposed design for the OpenTelemetry Lambda extension, you can see the [Design Proposal here.](docs/design_proposal.md) +To get a better understanding of the proposed design for the OpenTelemetry Lambda extension, you can see the Design Proposal here. ## Features diff --git a/collector/README.md b/collector/README.md index 43ca2d8f64..fcd7a8d640 100644 --- a/collector/README.md +++ b/collector/README.md @@ -62,7 +62,7 @@ To do that, first you need to - Create Github's OIDC provider in your (or target) AWS account (for more details, you can check [here](https://github.com/aws-actions/configure-aws-credentials?oidc)) - Create an AWS IAM Role in the AWS account to be assumed by the `Publish Collector Lambda Layer` workflow from your forked OpenTelemetry Lambda repository. -To setup those, you can use (copy or load) the AWS CloudFormation template [here](../utils/aws-cloudformation/aws-cf-stack-for-layer-publish.yml). +To setup those, you can use (copy or load) the AWS CloudFormation template here. Once AWS CloudFormation stack is created from the given template, ARN of the created AWS IAM Role to be assumed will be shown as `RoleARN` in the output of the stack, so note it to be used later. From 26921e465af3c30fc9e7006608bc05cc5de858d5 Mon Sep 17 00:00:00 2001 From: Jerry Leung Date: Wed, 15 Apr 2026 14:40:05 -0700 Subject: [PATCH 5/9] unlinked --- README.md | 4 ---- collector/README.md | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/README.md b/README.md index 71e5cf6b9a..d92cefaf0a 100644 --- a/README.md +++ b/README.md @@ -110,10 +110,6 @@ The following are runtimes which are no longer or not yet supported by this repo [3]: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/faas/faas-spans.md#outgoing-invocations [4]: https://github.com/open-telemetry/semantic-conventions/blob/main/docs/faas/faas-metrics.md -## Contributing - -See the [Contributing Guide](CONTRIBUTING.md) for details. - ### Maintainers - [Serkan Özal](https://github.com/serkan-ozal), Catchpoint diff --git a/collector/README.md b/collector/README.md index fcd7a8d640..52548ab839 100644 --- a/collector/README.md +++ b/collector/README.md @@ -50,7 +50,7 @@ For example, if you want to add the extension `foo`, the file providing this ext //go:build lambdacomponents.custom && (lambdacomponents.all || lambdacomponents.extension.all || lambdacomponents.extension.foo) ``` -You can provide your addition as a pull-request to this repository. Before doing so, please also read through the details of [Contributing](../CONTRIBUTING.md) to this project. +You can provide your addition as a pull-request to this repository. Before doing so, please also read through the details of Contributing to this project. ## Build and publish your own OpenTelemetry Collector Lambda layer From 07f9e0b18d8d55be38265c3c6f3783acb59064a7 Mon Sep 17 00:00:00 2001 From: Jerry Leung Date: Wed, 15 Apr 2026 15:03:02 -0700 Subject: [PATCH 6/9] Update collector/README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- collector/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collector/README.md b/collector/README.md index 52548ab839..7a6612b112 100644 --- a/collector/README.md +++ b/collector/README.md @@ -50,7 +50,7 @@ For example, if you want to add the extension `foo`, the file providing this ext //go:build lambdacomponents.custom && (lambdacomponents.all || lambdacomponents.extension.all || lambdacomponents.extension.foo) ``` -You can provide your addition as a pull-request to this repository. Before doing so, please also read through the details of Contributing to this project. +You can provide your addition as a pull-request to this repository. Before doing so, please also read through the details of [contributing to the OpenTelemetry project](https://opentelemetry.io/docs/community/contributing/). ## Build and publish your own OpenTelemetry Collector Lambda layer From c72b4e1cc6388c3ac9a6f57b88088a05abc38494 Mon Sep 17 00:00:00 2001 From: Jerry Leung Date: Wed, 15 Apr 2026 15:14:29 -0700 Subject: [PATCH 7/9] Removed cloudformation publish doc which is not used by us --- collector/README.md | 34 ---------------------------------- 1 file changed, 34 deletions(-) diff --git a/collector/README.md b/collector/README.md index 7a6612b112..57b68a0e0c 100644 --- a/collector/README.md +++ b/collector/README.md @@ -52,40 +52,6 @@ For example, if you want to add the extension `foo`, the file providing this ext You can provide your addition as a pull-request to this repository. Before doing so, please also read through the details of [contributing to the OpenTelemetry project](https://opentelemetry.io/docs/community/contributing/). -## Build and publish your own OpenTelemetry Collector Lambda layer - -To build and publish collector Lambda layer from your own fork into your own AWS account, -you can use the `Publish Collector Lambda Layer` workflow which can only be triggered manually. - - -To do that, first you need to -- Create Github's OIDC provider in your (or target) AWS account (for more details, you can check [here](https://github.com/aws-actions/configure-aws-credentials?oidc)) -- Create an AWS IAM Role in the AWS account to be assumed by the `Publish Collector Lambda Layer` workflow from your forked OpenTelemetry Lambda repository. - -To setup those, you can use (copy or load) the AWS CloudFormation template here. -Once AWS CloudFormation stack is created from the given template, -ARN of the created AWS IAM Role to be assumed will be shown as `RoleARN` in the output of the stack, so note it to be used later. - -After that, you can run the `Publish Collector Lambda Layer` workflow to build the Lambda collector and publish it to the target AWS account as Lambda layer: -- Specify the architecture of the collector Lambda layer to be published via the `Architecture of the layer to be published` input. - Available options are `all`, `amd64` and `arm64`. - The default value is `all` which builds and publishes layer for both of the `amd64` and `arm64` architectures. -- Specify the AWS region(s) where the collector Lambda layer will be published to via the `AWS Region(s) where layer will be published` input. - Available options are `all`, `af-south-1`, `ap-east-1`, `ap-east-2`, `ap-northeast-1`, `ap-northeast-2`, `ap-south-1`, `ap-south-2`, `ap-southeast-1`, `ap-southeast-2`, `ap-southeast-3`, `ap-southeast-4`, `ap-southeast-5`, `ap-southeast-6`, `ap-southeast-7`, `ca-central-1`, `ca-west-1`, `eu-central-1`, `eu-central-2`, `eu-north-1`, `eu-south-1`, `eu-south-2`, `eu-west-1`, `eu-west-2`, `eu-west-3`, `il-central-1`, `me-central-1`, `me-south-1`, `mx-central-1`, `sa-east-1`, `us-east-1`, `us-east-2`, `us-west-1`, `us-west-2`. - The default value is `all` which publishes layer to all the defined AWS regions mentioned above. -- Specify the AWS IAM Role ARN to be assumed for publishing layer via the `AWS IAM Role ARN to be assumed for publishing layer` input. - This is the ARN of the AWS IAM Role you have taken from the `RoleARN` output variable of the created AWS CloudFormation stack above. - This input is **optional** and if not specified, AWS IAM Role ARN to be assumed is tried to be resolved from `OTEL_LAMBDA_LAYER_PUBLISH_ROLE_ARN` secret. - If it is still not able to resolved (neither this input is specified, nor `OTEL_LAMBDA_LAYER_PUBLISH_ROLE_ARN` secret is defined), - layer publish job will fail due to missing AWS credentials. -- Specify the layer version to be appended into layer name via the `Layer version to be appended into the layer name` input - to be used in the following format: `opentelemetry-lambda-collector-${architecture}-${layer-version}`. - This input is **optional** and if not specified, layer name is generated in the `opentelemetry-lambda-collector-${architecture}` format without layer version postfix. -- Specify the build tags to build the collector with a customized set of connectors/exporters/receivers/processors - via the `Build tags to customize collector build` input. - This input is **optional** and if not specified, collector is built with the default set of connectors/exporters/receivers/processors. - Check the [Build Tags](#build-tags) section for the details. - ## Installing To install the OpenTelemetry Collector Lambda layer to an existing Lambda function using the `aws` CLI: From 58c7b6d7dae2f84896599d50ca9de407053940eb Mon Sep 17 00:00:00 2001 From: Jerry Leung Date: Wed, 15 Apr 2026 15:21:56 -0700 Subject: [PATCH 8/9] Reverted --- .github/workflows/codeql.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index fe9f228bfd..10fffc5555 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -87,3 +87,8 @@ jobs: # - run: | # echo "Run, Build Application using script" # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13 # v3.29.5 + with: + category: "/language:${{matrix.target.language}}" From 920efc9d469bd797a097a47a7c9559fdbe04fc6e Mon Sep 17 00:00:00 2001 From: Jerry Leung Date: Wed, 15 Apr 2026 15:24:30 -0700 Subject: [PATCH 9/9] Fixed doc links --- collector/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/collector/README.md b/collector/README.md index 57b68a0e0c..c8177d82b6 100644 --- a/collector/README.md +++ b/collector/README.md @@ -50,7 +50,7 @@ For example, if you want to add the extension `foo`, the file providing this ext //go:build lambdacomponents.custom && (lambdacomponents.all || lambdacomponents.extension.all || lambdacomponents.extension.foo) ``` -You can provide your addition as a pull-request to this repository. Before doing so, please also read through the details of [contributing to the OpenTelemetry project](https://opentelemetry.io/docs/community/contributing/). +You can provide your addition as a pull-request to this repository. Before doing so, please also read through the details of [Contributing](https://github.com/open-telemetry/opentelemetry-lambda/blob/main/CONTRIBUTING.md) to this project. ## Installing To install the OpenTelemetry Collector Lambda layer to an existing Lambda function using the `aws` CLI: