From bd11686d236902d0b05dcc5040a0b8a8fd24c16f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 10:29:18 -0500 Subject: [PATCH 001/240] repo: port profiling-node --- .craft.yml | 3 + .github/workflows/build.yml | 239 +- .vscode/settings.json | 5 +- package.json | 2 + packages/profiling-node/.eslintrc.js | 18 + packages/profiling-node/.gitignore | 6 + packages/profiling-node/CHANGES | 500 ++ packages/profiling-node/CONTRIBUTING.md | 57 + packages/profiling-node/LICENSE | 21 + packages/profiling-node/README.md | 268 + packages/profiling-node/WORKERS.md | 42 + packages/profiling-node/binding.gyp | 10 + .../profiling-node/bindings/cpu_profiler.cc | 1118 ++++ packages/profiling-node/clang-format.mjs | 21 + packages/profiling-node/demo_app/esbuild.mjs | 19 + packages/profiling-node/demo_app/index.js | 25 + packages/profiling-node/demo_app/package.json | 14 + .../profiling-node/demo_app/rollup.config.js | 28 + .../profiling-node/demo_app/webpack.config.js | 25 + packages/profiling-node/esbuild.mjs | 23 + packages/profiling-node/jest.config.js | 20 + packages/profiling-node/package.json | 112 + packages/profiling-node/scripts/binaries.js | 31 + .../profiling-node/scripts/bump-version.sh | 14 + .../profiling-node/scripts/check-build.js | 64 + .../profiling-node/scripts/copy-target.js | 27 + .../scripts/prune-profiler-binaries.js | 192 + packages/profiling-node/src/cpu_profiler.ts | 157 + packages/profiling-node/src/env.ts | 17 + packages/profiling-node/src/hubextensions.ts | 260 + packages/profiling-node/src/index.ts | 1 + packages/profiling-node/src/integration.ts | 247 + packages/profiling-node/src/sdk_version.ts | 3 + packages/profiling-node/src/types.ts | 105 + packages/profiling-node/src/utils.ts | 514 ++ .../profiling-node/test-binaries.entry.js | 19 + .../profiling-node/test-binaries.esbuild.js | 20 + packages/profiling-node/test/bindings.test.ts | 30 + .../profiling-node/test/cpu_profiler.test.ts | 302 + .../test/hubextensions.hub.test.ts | 424 ++ .../profiling-node/test/hubextensions.test.ts | 240 + packages/profiling-node/test/index.test.ts | 144 + .../profiling-node/test/integration.test.ts | 269 + packages/profiling-node/test/utils.test.ts | 361 ++ packages/profiling-node/tsconfig.json | 17 + packages/profiling-node/tsconfig.test.json | 9 + packages/profiling-node/tsconfig.types.json | 11 + packages/profiling-node/yarn.lock | 5661 +++++++++++++++++ 48 files changed, 11711 insertions(+), 4 deletions(-) create mode 100644 packages/profiling-node/.eslintrc.js create mode 100644 packages/profiling-node/.gitignore create mode 100644 packages/profiling-node/CHANGES create mode 100644 packages/profiling-node/CONTRIBUTING.md create mode 100644 packages/profiling-node/LICENSE create mode 100644 packages/profiling-node/README.md create mode 100644 packages/profiling-node/WORKERS.md create mode 100644 packages/profiling-node/binding.gyp create mode 100644 packages/profiling-node/bindings/cpu_profiler.cc create mode 100644 packages/profiling-node/clang-format.mjs create mode 100644 packages/profiling-node/demo_app/esbuild.mjs create mode 100644 packages/profiling-node/demo_app/index.js create mode 100644 packages/profiling-node/demo_app/package.json create mode 100644 packages/profiling-node/demo_app/rollup.config.js create mode 100644 packages/profiling-node/demo_app/webpack.config.js create mode 100644 packages/profiling-node/esbuild.mjs create mode 100644 packages/profiling-node/jest.config.js create mode 100644 packages/profiling-node/package.json create mode 100644 packages/profiling-node/scripts/binaries.js create mode 100755 packages/profiling-node/scripts/bump-version.sh create mode 100644 packages/profiling-node/scripts/check-build.js create mode 100644 packages/profiling-node/scripts/copy-target.js create mode 100755 packages/profiling-node/scripts/prune-profiler-binaries.js create mode 100644 packages/profiling-node/src/cpu_profiler.ts create mode 100644 packages/profiling-node/src/env.ts create mode 100644 packages/profiling-node/src/hubextensions.ts create mode 100644 packages/profiling-node/src/index.ts create mode 100644 packages/profiling-node/src/integration.ts create mode 100644 packages/profiling-node/src/sdk_version.ts create mode 100644 packages/profiling-node/src/types.ts create mode 100644 packages/profiling-node/src/utils.ts create mode 100644 packages/profiling-node/test-binaries.entry.js create mode 100644 packages/profiling-node/test-binaries.esbuild.js create mode 100644 packages/profiling-node/test/bindings.test.ts create mode 100644 packages/profiling-node/test/cpu_profiler.test.ts create mode 100644 packages/profiling-node/test/hubextensions.hub.test.ts create mode 100644 packages/profiling-node/test/hubextensions.test.ts create mode 100644 packages/profiling-node/test/index.test.ts create mode 100644 packages/profiling-node/test/integration.test.ts create mode 100644 packages/profiling-node/test/utils.test.ts create mode 100644 packages/profiling-node/tsconfig.json create mode 100644 packages/profiling-node/tsconfig.test.json create mode 100644 packages/profiling-node/tsconfig.types.json create mode 100644 packages/profiling-node/yarn.lock diff --git a/.craft.yml b/.craft.yml index 7c09cb4ddd4c..99efaf3d095e 100644 --- a/.craft.yml +++ b/.craft.yml @@ -44,6 +44,9 @@ targets: - name: npm id: '@sentry/node' includeNames: /^sentry-node-\d.*\.tgz$/ + - name: npm + id: '@sentry/profiling-node' + includeNames: /^sentry-profiling-node-\d.*\.tgz$/ ## 3 Browser-based Packages - name: npm diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 905053d45622..2e013b32140e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -267,9 +267,222 @@ jobs: # `job_build` can't see `job_install_deps` and what it returned) dependency_cache_key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} + job_build_bindings_profiling_node: + name: ${{ matrix.os }} (${{ matrix.target_platform }} node=${{ matrix.node || matrix.container }}, arch=${{ matrix.arch || matrix.container }}, compiler=${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) + needs: [job_get_metadata, job_install_deps] + runs-on: ${{ matrix.os }} + container: ${{ matrix.container }} + strategy: + fail-fast: false + matrix: + include: + # x64 glibc + - os: ubuntu-20.04 + node: 16 + - os: ubuntu-20.04 + node: 18 + - os: ubuntu-20.04 + node: 20 + + # x64 musl + - os: ubuntu-20.04 + container: node:16-alpine3.16 + node: 16 + - os: ubuntu-20.04 + container: node:18-alpine3.17 + node: 18 + - os: ubuntu-20.04 + container: node:20-alpine3.17 + node: 20 + + # arm64 glibc + - os: ubuntu-20.04 + arch: arm64 + node: 16 + - os: ubuntu-20.04 + arch: arm64 + node: 18 + - os: ubuntu-20.04 + arch: arm64 + node: 20 + + # arm64 musl + - os: ubuntu-20.04 + container: node:16-alpine3.16 + arch: arm64 + node: 16 + - os: ubuntu-20.04 + arch: arm64 + container: node:18-alpine3.17 + node: 18 + - os: ubuntu-20.04 + arch: arm64 + container: node:20-alpine3.17 + node: 20 + + # macos x64 + - os: macos-11 + node: 16 + arch: x64 + - os: macos-11 + node: 18 + arch: x64 + - os: macos-11 + node: 20 + arch: x64 + + # macos arm64 + - os: macos-12 + arch: arm64 + node: 16 + target_platform: darwin + + - os: macos-12 + arch: arm64 + node: 18 + target_platform: darwin + + - os: macos-12 + arch: arm64 + node: 20 + target_platform: darwin + + # windows x64 + - os: windows-2019 + node: 16 + arch: x64 + + - os: windows-2019 + node: 18 + arch: x64 + + - os: windows-2019 + node: 20 + arch: x64 + steps: + - name: setup (alpine) + if: contains(matrix.container, 'alpine') + run: apk add --no-cache build-base python3 g++ make curl + + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + + - uses: actions/setup-python@v4 + name: Setup python + + - name: Install dependencies + run: | + cd packages/profiling-node + yarn install --ignore-scripts --frozen-lockfile + + # configure build test copy x64 + - name: Configure gyp + if: matrix.arch != 'arm64' + run: | + cd packages/profiling-node + yarn build:bindings:configure + + - name: Build bindings + if: matrix.arch != 'arm64' + run: | + cd packages/profiling-node + yarn build:bindings + + - name: setup (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) + if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' + run: | + sudo apt-get update + sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu + + - name: "Configure gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' + run: | + cd packages/profiling-node + yarn build:bindings:configure:arm64 + + - name: Setup musl cross compiler + if: contains(matrix.container, 'alpine') + run: | + cd packages/profiling-node + curl -OL https://musl.cc/aarch64-linux-musl-cross.tgz + tar -xzvf aarch64-linux-musl-cross.tgz + $(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc --version + + - name: "Build bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + if: matrix.arch == 'arm64' && contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' + run: | + cd packages/profiling-node + CC=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc \ + CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ + BUILD_ARCH=arm64 yarn build:bindings + + - name: "Build bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' + run: | + cd packages/profiling-node + CC=aarch64-linux-gnu-gcc \ + CXX=aarch64-linux-gnu-g++ \ + BUILD_ARCH=arm64 yarn build:bindings:arm64 + + - name: "Configure gyp (arm64, darwin)" + if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' + run: | + cd packages/profiling-node + yarn build:bindings:configure:arm64 + + - name: "Build bindings (arm64, darwin)" + if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' + run: | + cd packages/profiling-node + BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 + + - name: Archive binary + uses: actions/upload-artifact@v4.0.0 + with: + name: profiling-node-binaries-${{ github.sha }} + path: | + ${{ github.workspace }}/packages/profiling-node/lib/*.node + + job_pack_profiling_node: + runs-on: ubuntu-latest + needs: [job_get_metadata, job_build_bindings_profiling_node] + timeout-minutes: 5 + steps: + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + + - uses: actions/setup-node@v4 + with: + node-version-file: 'package.json' + + - run: | + cd packages/profiling-node + yarn install --frozen-lockfile + + - run: | + cd packages/profiling-node + yarn build:lib + + - uses: actions/download-artifact@v4.0.0 + with: + name: profiling-node-binaries-${{ github.sha }} + path: packages/profiling-node/lib/ + + - run: | + cd packages/profiling-node + yarn pack + job_size_check: name: Size Check - needs: [job_get_metadata, job_build] + needs: [job_get_metadata, job_build, job_build_bindings_profiling_node] timeout-minutes: 15 runs-on: ubuntu-20.04 if: @@ -304,7 +517,7 @@ jobs: name: Lint # Even though the linter only checks source code, not built code, it needs the built code in order check that all # inter-package dependencies resolve cleanly. - needs: [job_get_metadata, job_build] + needs: [job_get_metadata, job_build, job_build_bindings_profiling_node] timeout-minutes: 10 runs-on: ubuntu-20.04 steps: @@ -322,6 +535,8 @@ jobs: DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - name: Lint source files run: yarn lint:lerna + - name: Lint C++ files + run: yarn lint:clang - name: Validate ES5 builds run: yarn validate:es5 @@ -371,7 +586,7 @@ jobs: job_artifacts: name: Upload Artifacts - needs: [job_get_metadata, job_build] + needs: [job_get_metadata, job_build, job_build_bindings_profiling_node] runs-on: ubuntu-20.04 # Build artifacts are only needed for releasing workflow. if: needs.job_get_metadata.outputs.is_release == 'true' @@ -427,6 +642,24 @@ jobs: - name: Compute test coverage uses: codecov/codecov-action@v4 + job_profiling_node_unit_tests: + name: Profiling Node Unit Tests + needs: [job_get_metadata, job_build] + runs-on: ubuntu-latest + steps: + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + - uses: actions/setup-node@v4 + with: + node-version: 'package.json' + - uses: actions/setup-python@v4 + - run: yarn install --frozen-lockfile + - run: yarn build:bindings:configure + - run: yarn build + - run: yarn test + job_bun_unit_tests: name: Bun Unit Tests needs: [job_get_metadata, job_build] diff --git a/.vscode/settings.json b/.vscode/settings.json index 2950621966b9..49517b7d8194 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -38,5 +38,8 @@ "editor.codeActionsOnSave": { "source.organizeImports.biome": "explicit", }, - "editor.defaultFormatter": "biomejs.biome" + "editor.defaultFormatter": "biomejs.biome", + "files.associations": { + "functional": "cpp" + } } diff --git a/package.json b/package.json index 9a226b3d8408..b20ca9230ae0 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "link:yarn": "lerna exec yarn link", "lint": "run-s lint:lerna lint:biome lint:prettier", "lint:lerna": "lerna run lint", + "lint:clang": "lerna run lint:clang", "lint:biome": "biome check .", "lint:prettier": "prettier **/*.md *.md **/*.css --check", "validate:es5": "lerna run validate:es5", @@ -64,6 +65,7 @@ "packages/node-experimental", "packages/opentelemetry-node", "packages/opentelemetry", + "packages/profiling-node", "packages/react", "packages/remix", "packages/replay", diff --git a/packages/profiling-node/.eslintrc.js b/packages/profiling-node/.eslintrc.js new file mode 100644 index 000000000000..97f6e64fc978 --- /dev/null +++ b/packages/profiling-node/.eslintrc.js @@ -0,0 +1,18 @@ +module.exports = { + env: { + node: true, + }, + extends: ['../../.eslintrc.js'], + + ignorePatterns: [ + 'lib/**/*', + 'demo_app/**/*', + 'jest.co' + ], + rules: { + '@sentry-internal/sdk/no-optional-chaining': 'off', + '@sentry-internal/sdk/no-nullish-coalescing': 'off', + '@sentry-internal/sdk/no-unsupported-es6-methods': 'off', + '@sentry-internal/sdk/no-class-field-initializers': 'off', + }, +}; diff --git a/packages/profiling-node/.gitignore b/packages/profiling-node/.gitignore new file mode 100644 index 000000000000..7a329e70a46c --- /dev/null +++ b/packages/profiling-node/.gitignore @@ -0,0 +1,6 @@ +# See https://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/node_modules/ +/lib/ + diff --git a/packages/profiling-node/CHANGES b/packages/profiling-node/CHANGES new file mode 100644 index 000000000000..0ec4d67ec990 --- /dev/null +++ b/packages/profiling-node/CHANGES @@ -0,0 +1,500 @@ +## 1.3.3 + +### Various fixes & improvements + +- ci: make clang-format error when formatting errors are raised. (#230) by @JonasBa +- fix: cleanup timer and reuse exports (#229) by @JonasBa + +## 1.3.2 + +### Various fixes & improvements + +- deps(detect-libc): detect-libc is required for install scripts (#226) by @JonasBa + +## 1.3.1 + +### Various fixes & improvements + +- fix(profiling): add node-abi (d3b3ea9c) by @JonasBa + +## 1.3.0 + +### Various fixes & improvements + +- fix(profiling): node-gyp missing python (#223) by @JonasBa +- fix: change package.json keys (#222) by @anonrig +- test: move tests to dedicated test folder (#221) by @JonasBa +- chore: remove prettier (#220) by @anonrig +- format: add clang format (#214) by @JonasBa +- ref(deps) move all deps to dev deps (#218) by @JonasBa +- docs: add rollup external config section (#216) by @JonasBa +- deps: update to 7.85 (#215) by @JonasBa +- perf: avoid deep string copy (#213) by @anonrig +- chore: Add vite external to profiling node instructions (#209) by @AbhiPrasad + +## 1.2.6 + +### Various fixes & improvements + +- fix: check inf and remove rounding (#208) by @JonasBa +- fix(isnan): set rate to 0 if its nan (#207) by @JonasBa + +## 1.2.5 + +### Various fixes & improvements + +- fix(profiling): cap double precision (#206) by @JonasBa + +## 1.2.4 + +### Various fixes & improvements + +- fix(measurements): guard from negative cpu usage (c7ebac41) by @JonasBa + +## 1.2.3 + +### Various fixes & improvements + +- fix(profiling): if count is 0 dont serialize measurements (#205) by @JonasBa + +## 1.2.2 + +### Various fixes & improvements + +- deps(sentry): bump sentry deps (#203) by @sanjaytwisk +- build(deps-dev): bump @babel/traverse from 7.22.20 to 7.23.2 (#202) by @dependabot +- feat(preprocessEvent): emit preprocessEvent for profiles (#198) by @JonasBa +- Update README.md to include Next.js 13+ bundling (#200) by @Negan1911 + +## 1.2.1 + +### Various fixes & improvements + +- fix: dont throw if profiler returns nulptr (#197) by @JonasBa + +## 1.2.0 + +### Various fixes & improvements + +- fix(build): catch spawn err (#193) by @JonasBa +- fix(build): cross compile from x64 to arm (#194) by @JonasBa +- feat(measurements): collect heap usage (#187) by @JonasBa + +## 1.1.3 + +### Various fixes & improvements + +- deps(sentry): bump sentry deps (#191) by @JonasBa +- ci: test app build and run before publish (#183) by @JonasBa +- build(deps-dev): bump word-wrap from 1.2.3 to 1.2.4 (#185) by @dependabot +- fix(types): correct frame type (cc74b6e1) by @JonasBa + +## 1.1.2 + +### Various fixes & improvements + +- fix: revert output of types to single file (#182) by @JonasBa + +## 1.1.1 + +### Various fixes & improvements + +- fix: setup musl (34874a63) by @JonasBa +- fix: attempt to recompile on all errors (#180) by @JonasBa +- fix:rebuild binary on any error (#179) by @JonasBa + +## 1.1.0 + +### Various fixes & improvements + +- bindings: prebuild more binaries for node 20 (#177) by @JonasBa +- build(deps): bump semver from 6.3.0 to 6.3.1 (#175) by @dependabot +- ref(profiling): change import so contextReplacementPlugin can ignore warning and attempt to provide darwin binaries (#176) by @JonasBa + +## 1.0.9 + +### Various fixes & improvements + +- fix(require): require is no longer async (#174) by @JonasBa + +## 1.0.8 + +### Various fixes & improvements + +- fix: use gnu aarch compiler for arm64 binary (#172) by @bohdanw2 +- fix: Issue fixed for building binary with recompileFromSource (#173) by @whaagmans + +## 1.0.7 + +### Various fixes & improvements + +- fix(build): overwrited dest target (b741891d) by @JonasBa +- fix(build): run as single spawn cmd and fail if target already exists (#169) by @JonasBa +- build: stop error handling and just propagate all errors (#167) by @JonasBa +- build: fix typo (9dbc32fb) by @JonasBa +- build: just dont handle errors (ee0f9b95) by @JonasBa +- build: improve recompile error handling (07f2fd4d) by @JonasBa + +## 1.0.6 + +### Various fixes & improvements + +- build: drop exports entirely (28db74c6) by @JonasBa + +## 1.0.5 + +### Various fixes & improvements + +- build: drop esm support (#166) by @JonasBa + +## 1.0.4 + +### Various fixes & improvements + +- fix: check compile on install instead of postinstall (#163) by @JonasBa + +## 1.0.3 + +### Various fixes & improvements + +- Revert "fix: require instead of import in esm (#162)" (3b2f77fb) by @JonasBa + +## 1.0.2 + +### Various fixes & improvements + +- fix: require instead of import in esm (#162) by @JonasBa + +## 1.0.1 + +### Various fixes & improvements + +- fix: polyfill to level createRequire for esm (#161) by @JonasBa + +## 1.0.0 + +- No documented changes. + +## 1.0.0-beta.2 + +### Various fixes & improvements + +- fix: remove esm polyfills (#159) by @JonasBa + +## 1.0.0-beta.1 + +### Various fixes & improvements + +- build: run update before installing tooling to fix stale index (e4c0916e) by @JonasBa +- fix broken reference to copy-target script (#156) by @alekitto +- fix(profiling): remove app_root relative dir detection (#155) by @JonasBa +- fix(profiling): fix build banner typo (47da6797) by @JonasBa +- readme: add prune docs (9e4a0f3f) by @JonasBa + +## 1.0.0-alpha.7 + +### Various fixes & improvements + +- ref(tracing): drop @sentry/tracing (#153) by @JonasBa +- fix(esm): fix esm compile error (1c4a3cc6) by @JonasBa +- deps(tracing): remove tracing dependency (#152) by @JonasBa +- feat(scripts): introduce a cleanup script (#151) by @JonasBa +- feat(profiling): debug_id support (#144) by @JonasBa + +## 1.0.0-alpha.6 + +### Various fixes & improvements + +- readme: drop beta mentions (c3c66a72) by @JonasBa +- ci: test on node20 (d33110de) by @JonasBa +- ref: remove options options type (41b8544f) by @JonasBa +- ref: use options type (154255d3) by @JonasBa +- fix: segfault in node18 (95545180) by @JonasBa +- fix identifier (21425e4f) by @JonasBa +- rename to mjs (a4d50996) by @JonasBa +- fallthrough in switch (e9f6a872) by @JonasBa +- fix: add back return type (d7560395) by @JonasBa +- fix: profiling binary fallthrough (beaf0c0a) by @JonasBa +- fix: build needs require (bc39eaab) by @JonasBa +- fix(build): enumerate precompiled binaries (#146) by @JonasBa +- feat(profiling): bundle lib code (#145) by @JonasBa +- fix(profiling): add exports to package.json (#142) by @JonasBa +- perf: optimize string ops + remove nan (#140) by @JonasBa +- ref: remove profile context before sending (#138) by @JonasBa + +## 1.0.0-alpha.5 + +### Various fixes & improvements + +- fix: use format version (0850fa0c) by @JonasBa + +## 1.0.0-alpha.4 + +### Various fixes & improvements + +- fix(sdk): bump sdk version and read it (#137) by @JonasBa + +## 1.0.0-alpha.3 + +### Various fixes & improvements + +- fix(frames): fix frame attributes (afc1c7b0) by @JonasBa + +## 1.0.0-alpha.2 + +### Various fixes & improvements + +- feat(esm): build esm properly (#135) by @JonasBa + +## 1.0.0-alpha.1 + +### Various fixes & improvements + +- fix(ci): unpack binaries to lib/binaries (5bbf957f) by @JonasBa +- gh: fix label for install issue (d0602b40) by @JonasBa +- gh: fix label for install issue (ca82e73f) by @JonasBa +- gh: add installation issue template (d1f0a304) by @JonasBa +- ci: downgrade to ubuntu 20.04 (8364deba) by @JonasBa +- fix(status): inline status assertions (#133) by @JonasBa +- perf: use a module cache (#131) by @JonasBa +- ci: bump and pin node images (#130) by @JonasBa +- feat(module): parse module (#129) by @JonasBa +- fix(precompile): fix dir sync (#128) by @JonasBa +- ref: remove test log (c7529b14) by @JonasBa +- ref(profiling): drop nan for node abi (#127) by @JonasBa +- feat(build): output esm and cjs modules (#126) by @JonasBa +- Check if module exists before loading. Compile if missing (#122) by @vidhu +- Add @sentry/core as dep (#125) by @vidhu + +## 0.3.0 + +### Various fixes & improvements + +- fix(profiling): avoid unnecessary copy operations (#117) by @JonasBa +- feat(profiling): expose timeout experiment and handle timeout in hooks (#118) by @JonasBa +- ref(profiling): add SDK hooks support (#110) by @JonasBa +- build(deps-dev): bump sqlite3 from 5.1.2 to 5.1.5 (#111) by @dependabot +- docs: update install link for sentry profiling (#116) by @emilsivervik +- feat(profiling): only mark in_app: false for system code (#114) by @JonasBa +- ref(format): remove format macros (cee68c53) by @JonasBa +- ref(prebuilds): remove binary (6ff35ecb) by @JonasBa +- feat(profiling): add profilesSampler (#109) by @JonasBa +- ref(format): remove transactions array in favor of transaction property (#108) by @JonasBa +- chore: improve documentation around prebuild binaries (dc37cbfb) by @JonasBa + +## 0.2.2 + +### Various fixes & improvements + +- deps(sentry): bump sentry packages (22610c47) by @JonasBa + +## 0.2.1 + +### Various fixes & improvements + +- Update README.md (a1e128c2) by @JonasBa +- Update README.md (d0ad2379) by @JonasBa +- Update README.md (d97aad6a) by @JonasBa +- fix(env): read env from sdk (#103) by @JonasBa + +## 0.2.0 + +### Various fixes & improvements + +- feat(profiling): switch to eager logging by default (#102) by @JonasBa +- Update README.md (2d8fd065) by @JonasBa +- build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 (#100) by @dependabot + +## 0.1.0 + +- No documented changes. + +## 0.1.0-alpha.2 + +### Various fixes & improvements + +- fix(bin): downgrade ubuntu to 20.04 (#99) by @JonasBa + +## 0.1.0-alpha.1 + +### Various fixes & improvements + +- fix(linux): if dlopen fails, build from source (63632046) by @JonasBa +- fix(build): avoid from compiling the build script (#98) by @JonasBa +- fix(test): remove only (6cd37259) by @JonasBa +- feat(ci): run jest with --silent (#96) by @JonasBa +- feat(profiling): add profile context (#95) by @JonasBa +- feat(profiling): discard profiles with <= 1 sample (#94) by @JonasBa +- build(binaries): prebuild binaries for more arch (#92) by @JonasBa + +## 0.0.13 + +### Various fixes & improvements + +- fix(segfault): fix return value order (#89) by @JonasBa +- fix(uuid): uuid is 32hex in sentry (#91) by @JonasBa +- test(build): add node 19 to build matrix (#87) by @JonasBa +- build(deps): bump json5 from 2.2.1 to 2.2.3 (#86) by @dependabot +- feat(profiling): add debug logs (#82) by @JonasBa +- fix(sampleRate): profilesSampleRate and tracesSampleRate are multiplied (#77) by @JonasBa +- fix(sdk): use release instead of sdk release (#76) by @JonasBa +- feat(filename): generate filename from abs path (#75) by @JonasBa +- fix: path -> absPath (#72) by @JonasBa + +## 0.0.12 + +### Various fixes & improvements + +- fix(timestamps): int64_t (#69) by @JonasBa + +## 0.0.11 + +### Various fixes & improvements + +- fix(stack): use unique pointer not i (#68) by @JonasBa + +## 0.0.10 + +### Various fixes & improvements + +- fix(profile): wrong stack indexing insertion (#67) by @JonasBa +- docs: readme semicolon (#66) by @scttcper +- Update README.md (595ebb99) by @JonasBa + +## 0.0.9 + +### Various fixes & improvements + +- fix(envelope): missmatch in type guard (#65) by @JonasBa +- feat(binaries): precompile binaries (#64) by @JonasBa + +## 0.0.8 + +### Various fixes & improvements + +- fix(profiling): remove build script (c5cf7353) by @JonasBa + +## 0.0.7 + +### Various fixes & improvements + +- ref(sdk): remove spans (#62) by @JonasBa +- feat(profiling): use env variable instead of compile time (#61) by @JonasBa + +## 0.0.6 + +### Various fixes & improvements + +- ref(sdk): add temporary spans (#60) by @JonasBa +- ref(sdk): remove sdk tag (#59) by @JonasBa +- fix: fix javascript repo reference (af046f28) by @JonasBa + +## 0.0.5 + +### Various fixes & improvements + +- feat(profiling): index stacks (#58) by @JonasBa +- test(config): skip benchmarks (ee8e4d90) by @JonasBa +- chore(pkg): add github (#57) by @JonasBa +- test(samples): bump min samples (123928a2) by @JonasBa + +## 0.0.4 + +### Various fixes & improvements + +- chore(license): switch to MIT (#56) by @JonasBa +- fix(release): js not sh (27482070) by @JonasBa + +## 0.0.3 + +### Various fixes & improvements + +- fix(test): fix setTag test (096619d9) by @JonasBa +- chore(deps): bump (331e8450) by @JonasBa +- fix(profiler): fix typo (f1cb8823) by @JonasBa +- feat(profiler): set logging mode as tag (f2517f69) by @JonasBa + +## 0.0.2 + +### Various fixes & improvements + +- ref(benchmark): add jest benchmark (#54) by @JonasBa +- build(gyp): add compile time flag for profiler logging strategy (#55) by @JonasBa + +## 0.0.1 + +### Various fixes & improvements + +- feat(profile): log call site info (#53) by @JonasBa +- fix(benchmark): recompute json (eddcad28) by @JonasBa +- fix(benchmark): pass both options (b9911726) by @JonasBa +- fix(benchmark): pass option to compare (ce805797) by @JonasBa +- fix(benchmark): run node benchmark instead of compare (0a4d9abb) by @JonasBa +- fix(benchmark): run node benchmark (595a4f96) by @JonasBa +- fix(scripts): stash and apply script results (3d4c92df) by @JonasBa +- fix(scripts): stash and apply script results (a9e7f360) by @JonasBa +- fix(benchmark): allow running between two commits (#52) by @JonasBa +- test(threshold) increase max sample threshold (847f42ac) by @JonasBa +- test(threshold) increase max sample threshold (6d10b885) by @JonasBa +- feat(profiling): adjust sampling frequency (#50) by @JonasBa +- chore(github): add issue bug template (d5b488ad) by @JonasBa +- chore(github): add feature template (f137585b) by @JonasBa +- chore(github): add pull request template (759237f0) by @JonasBa + +## 0.0.0-alpha.6 + +### Various fixes & improvements + +- feat(sdk): use uuid to avoid ignored transactions (#47) by @JonasBa +- fix(profiling): correct ts (b46547f6) by @JonasBa +- feat(sdk): add max duration timeout (#46) by @JonasBa +- fix(units): report ns to backend (#45) by @JonasBa +- feat(timestamps): more accurate timestamps (#44) by @JonasBa +- ref(hubextension): explain finish reference (05924fe7) by @JonasBa +- fix(sampling): remove unnecessary negate (1b6fdab5) by @JonasBa +- fix(profile): rename fields and eval device info only once (#43) by @JonasBa +- feat(skd): add better messaging when we cannot patch the lib (#42) by @JonasBa +- chore(github): add contributing (#41) by @JonasBa + +## 0.0.0-alpha.5 + +### Various fixes & improvements + +- fix(c++): make sure we use unique_id (#40) by @JonasBa +- chore(readme): improve wording (5f439bba) by @JonasBa +- chore(workers): remove disclaimer as we do not support node 10 (ac15d4f7) by @JonasBa + +## 0.0.0-alpha.4 + +### Various fixes & improvements + +- chore(readme): overhead explanation (c159e6bd) by @JonasBa +- chore(readme): overhead explanation (58d865c5) by @JonasBa +- feat(playground): add express node test (#39) by @JonasBa +- feat(c++): cleanup addon data (#38) by @JonasBa +- feat(playground): add express integration (#37) by @JonasBa +- chore(readme): remove todo (505888e7) by @JonasBa + +## 0.0.0-alpha.3 + +### Various fixes & improvements + +- deps(nan): move to dependencies (#36) by @JonasBa + +## 0.0.0-alpha.2 + +### Various fixes & improvements + +- feat(build): move node-gyp to dep (#33) by @JonasBa + +## 0.0.0-alpha.1 + +### Various fixes & improvements + +- ci: use npm pack (#32) by @JonasBa +- fix(ci): remove dependant job (#31) by @JonasBa +- ci(craft): setup build (#30) by @JonasBa +- fix(ci): run ci for release (#28) by @JonasBa +- chore(craft): add bump version script (#26) by @JonasBa +- chore(changelog): add changelog (#25) by @JonasBa + diff --git a/packages/profiling-node/CONTRIBUTING.md b/packages/profiling-node/CONTRIBUTING.md new file mode 100644 index 000000000000..3a9e06783fe0 --- /dev/null +++ b/packages/profiling-node/CONTRIBUTING.md @@ -0,0 +1,57 @@ +

+ + Sentry + +

+ +# Contributing + +We welcome suggested improvements and bug fixes to the `@sentry/*` family of packages, in the form of pull requests on [`GitHub`](https://github.com/getsentry/profiling-node). The guide below will help you get started, but if you have further questions, please feel free to reach out on [Discord](https://discord.gg/Ww9hbqr). + +## Setting up an Environment + +To run the test suite and our code linter, node.js and npm are required. + +[`npm and node` download](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) + +Because the repository requires you to compile the c++ bindings via node-gyp, we may require you to install dependencies like Python and GCC. See [node-gyp](https://github.com/nodejs/node-gyp#on-unix) for a full list of those requirements depending on the OS that you are running. + +## Building the package + +Since we are using [`TypeScript`](https://www.typescriptlang.org/) and native node addons, you need to transpile the code to JavaScript and compile the c++ bindings in order to be able to run the addon. + +- `yarn build` will compile the c++ bindings and ts files. +- `yarn build:lib` will compile ts files +- `yarn build:bindings` will compile c++ bindings + +## Tests + +Tests are colocated with source files and should have a .test.ts suffix. The entire test suite can be ran using the `yarn test` command. + +## Linting + +Similar to building and testing, linting can be done via `yarn lint` command. + +## Considerations Before Sending Your First PR + +When contributing to the codebase, please note: + +- Non-trivial PRs will not be accepted without tests (see above). +- We encourage you to open issues and discuss the change you want to make before opening PR's. This is especially true if you are considering adding new functionality. Remember that your requirements may differ from the direction that we want this SDK to take. +- Please do not bump version numbers yourself. + +## Benchmarks + +The repository contains micro benchmarks. You can find all benchmarks at the benchmarks folder in project root directory. The benchmarks can either be ran directly through node via `node benchmarks/cpu/benchmark.profiler.js` or via `yarn benchmark` command. There are also individual yarn benchmark commands like `yarn benchmark:server` or `yarn benchmark:methods` which will only run individual benchmarks. + +Remember that these are micro benchmarks and that results will vary across different OS and architectures. + +## Publishing a Release + +_These steps are only relevant to Sentry employees when preparing and publishing a new SDK release._ + +1. Determine what version will be released (we use [semver](https://semver.org)). +2. Update [`CHANGELOG.md`](https://github.com/getsentry/profiling-node/edit/master/CHANGELOG.md) to add an entry for the next release number and a list of changes since the last release. (See details below.) +3. Run the [Prepare Release](https://github.com/getsentry/profiling-node/actions/workflows/release.yml) workflow. +4. A new issue should appear in https://github.com/getsentry/publish/issues. +5. Ask a member of the [@getsentry/releases team](https://github.com/orgs/getsentry/teams/releases/members) to approve the release. diff --git a/packages/profiling-node/LICENSE b/packages/profiling-node/LICENSE new file mode 100644 index 000000000000..6031123bdc4c --- /dev/null +++ b/packages/profiling-node/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Sentry + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/profiling-node/README.md b/packages/profiling-node/README.md new file mode 100644 index 000000000000..7490109aeb28 --- /dev/null +++ b/packages/profiling-node/README.md @@ -0,0 +1,268 @@ +

+ + Sentry + +

+ +# Official Sentry Profiling SDK for NodeJS + +[![npm version](https://img.shields.io/npm/v/@sentry/profiling-node.svg)](https://www.npmjs.com/package/@sentry/profiling-node) +[![npm dm](https://img.shields.io/npm/dm/@sentry/profiling-node.svg)](https://www.npmjs.com/package/@sentry/profiling-node) +[![npm dt](https://img.shields.io/npm/dt/@sentry/profiling-node.svg)](https://www.npmjs.com/package/@sentry/profiling-node) + +## Installation + +Profiling works as an extension of tracing so you will need both @sentry/node and @sentry/profiling-node installed. The minimum required major version of @sentry/node that supports profiling is 7.x. + +```bash +# Using yarn +yarn add @sentry/node @sentry/profiling-node + +# Using npm +npm install --save @sentry/node @sentry/profiling-node +``` + +## Usage + +```javascript +import * as Sentry from "@sentry/node"; +import { ProfilingIntegration } from "@sentry/profiling-node"; + +Sentry.init({ + dsn: "https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302", + debug: true, + tracesSampleRate: 1, + profilesSampleRate: 1, // Set profiling sampling rate. + integrations: [new ProfilingIntegration()], +}); +``` + +Sentry SDK will now automatically profile all transactions, even the ones which may be started as a result of using an automatic instrumentation integration. + +```javascript +const transaction = Sentry.startTransaction({ name: "some workflow" }); + +// The code between startTransaction and transaction.finish will be profiled + +transaction.finish(); +``` + +### Building the package from source + +Profiling uses native modules to interop with the v8 javascript engine which means that you may be required to build it from source. The libraries required to successfully build the package from source are often the same libraries that are already required to build any other package which uses native modules and if your codebase uses any of those modules, there is a fairly good chance this will work out of the box. The required packages are python, make and g++. + +**Windows:** +If you are building on windows, you may need to install windows-build-tools + +```bash + +# using yarn package manager +yarn global add windows-build-tools +# or npm package manager +npm i -g windows-build-tools +``` + +### Prebuilt binaries + +We currently ship prebuilt binaries for a few of the most common platforms and node versions (v16-20). + +- macOS x64 +- Linux ARM64 (musl) +- Linux x64 (glibc) +- Windows x64 + +For a more detailed list, see our build.yml workflow. + +### Bundling + +If you are looking to squeeze some extra performance or improve cold start in your application (especially true for serverless environments where modules are often evaluates on a per request basis), then we recommend you look into bundling your code. Modern JS engines are much faster at parsing and compiling JS than following long module resolution chains and reading file contents from disk. Because @sentry/profiling-node is a package that uses native node modules, bundling it is slightly different than just bundling javascript. In other words, the bundler needs to recognize that a .node file is node native binding and move it to the correct location so that it can later be used. Failing to do so will result in a MODULE_NOT_FOUND error. + +The easiest way to make bundling work with @sentry/profiling-node and other modules which use native nodejs bindings is to mark the package as external - this will prevent the code from the package from being bundled, but it means that you will now need to rely on the package to be installed in your production environment. + +To mark the package as external, use the following configuration: + +[Next.js 13+](https://nextjs.org/docs/app/api-reference/next-config-js/serverComponentsExternalPackages) + +```js +const { withSentryConfig } = require("@sentry/nextjs"); + +/** @type {import('next').NextConfig} */ +const nextConfig = { + experimental: { + // Add the "@sentry/profiling-node" to serverComponentsExternalPackages. + serverComponentsExternalPackages: ["@sentry/profiling-node"], + }, +}; + +module.exports = withSentryConfig(nextConfig, { + /* ... */ +}); +``` + +[webpack](https://webpack.js.org/configuration/externals/#externals) + +```js +externals: { + "@sentry/profiling-node": "commonjs @sentry/profiling-node", +}, +``` + +[esbuild](https://esbuild.github.io/api/#external) + +```js +{ + entryPoints: ['index.js'], + platform: 'node', + external: ['@sentry/profiling-node'], +} +``` + +[Rollup](https://rollupjs.org/configuration-options/#external) + +```js +{ + entry: 'index.js', + external: '@sentry/profiling-node' +} +``` + +[serverless-esbuild (serverless.yml)](https://www.serverless.com/plugins/serverless-esbuild#external-dependencies) + +```yml +custom: + esbuild: + external: + - @sentry/profiling-node + packagerOptions: + scripts: + - npm install @sentry/profiling-node +``` + +[vercel-ncc](https://github.com/vercel/ncc#programmatically-from-nodejs) + +```js +{ + externals: ["@sentry/profiling-node"], +} +``` + +[vite](https://vitejs.dev/config/ssr-options.html#ssr-external) + +```js +ssr: { + external: ["@sentry/profiling-node"]; +} +``` + +Marking the package as external is the simplest and most future proof way of ensuring it will work, however if you want to bundle it, it is possible to do so as well. Bundling has the benefit of improving your script startup time as all of the code is (usually) inside a single executable .js file, which saves time on module resolution. + +In general, when attempting to bundle .node native file extensions, you will need to tell your bundler how to treat these, as by default it does not know how to handle them. The required approach varies between build tools and you will need to find which one will work for you. + +The result of bundling .node files correctly is that they are placed into your bundle output directory with their require paths updated to reflect their final location. + +Example of bundling @sentry/profiling-node with esbuild and .copy loader + +```json +// package.json +{ + "scripts": "node esbuild.serverless.js" +} +``` + +```js +// esbuild.serverless.js +const { sentryEsbuildPlugin } = require("@sentry/esbuild-plugin"); + +require("esbuild").build({ + entryPoints: ["./index.js"], + outfile: "./dist", + platform: "node", + bundle: true, + minify: true, + sourcemap: true, + // This is no longer necessary + // external: ["@sentry/profiling-node"], + loader: { + // ensures .node binaries are copied to ./dist + ".node": "copy", + }, + plugins: [ + // See https://docs.sentry.io/platforms/javascript/sourcemaps/uploading/esbuild/ + sentryEsbuildPlugin({ + project: "", + org: "", + authToken: "", + release: "", + sourcemaps: { + // Specify the directory containing build artifacts + assets: "./dist/**", + }, + }), + ], +}); +``` + +Once you run `node esbuild.serverless.js` esbuild wil bundle and output the files to ./dist folder, but note that all of the binaries will be copied. This is wasteful as you will likely only need one of these libraries to be available during runtime. + +To prune the other libraries, profiling-node ships with a small utility script that helps you prune unused binaries. +The script can be invoked via `sentry-prune-profiler-binaries`, use `--help` to see a list of available options or `--dry-run` if you want it to log the binaries that would have been deleted. + +Example of only preserving a binary to run node16 on linux x64 musl. + +```bash +sentry-prune-profiler-binaries --target_dir_path=./dist/esbuild-serverless --target_platform=linux --target_node=16 --target_stdlib=musl --target_arch=x64 +``` + +Which will output something like + +``` +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-darwin-x64-108-IFGH3SUR.node (90.41 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-darwin-x64-93-Q7KBVHSP.node (74.16 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-glibc-108-NXSISRTB.node (52.17 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-glibc-83-OEQT5HUK.node (52.08 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-glibc-93-IIXXW2PN.node (52.06 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-musl-108-DSILNYHA.node (48.46 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-musl-83-4CNOBNC3.node (48.37 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-musl-93-JA5PKNWQ.node (48.38 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-x64-glibc-108-NXSISRTB.node (52.17 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-x64-glibc-83-OEQT5HUK.node (52.08 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-x64-glibc-93-IIXXW2PN.node (52.06 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-x64-musl-108-CX7SL27U.node (51.50 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-x64-musl-83-YD7ZQK2E.node (51.53 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-win32-x64-108-P7V3URQV.node (181.50 KiB) +Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-win32-x64-93-3PKQDSGE.node (181.50 KiB) +✅ Sentry: pruned 15 binaries, saved 1.06 MiB in total. +``` + +### Environment flags + +The default mode of the v8 CpuProfiler is kEagerLoggin which enables the profiler even when no profiles are active - this is good because it makes calls to startProfiling fast at the tradeoff for constant CPU overhead. The behavior can be controlled via the `SENTRY_PROFILER_LOGGING_MODE` environment variable with values of `eager|lazy`. If you opt to use the lazy logging mode, calls to startProfiling may be slow (depending on environment and node version, it can be in the order of a few hundred ms). + +Example of starting a server with lazy logging mode. + +```javascript +SENTRY_PROFILER_LOGGING_MODE=lazy node server.js +``` + +## FAQ 💭 + +### Can the profiler leak PII to Sentry? + +The profiler does not collect function arguments so leaking any PII is unlikely. We only collect a subset of the values which may identify the device and os that the profiler is running on (if you are already using tracing, it is likely that these values are already being collected by the SDK). + +There is one way a profiler could leak pii information, but this is unlikely and would only happen for cases where you might be creating or naming functions which might contain pii information such as + +```js +eval("function scriptFor${PII_DATA}...."); +``` + +In that case it is possible that the function name may end up being reported to Sentry. + +### Are worker threads supported? + +No. All instances of the profiler are scoped per thread In practice, this means that starting a transaction on thread A and delegating work to thread B will only result in sample stacks being collected from thread A. That said, nothing should prevent you from starting a transaction on thread B concurrently which will result in two independant profiles being sent to the Sentry backend. We currently do not do any correlation between such transactions, but we would be open to exploring the possibilities. Please file an issue if you have suggestions or specific use-cases in mind. + +### How much overhead will this profiler add? + +The profiler uses the kEagerLogging option by default which trades off fast calls to startProfiling for a small amount of constant CPU overhead. +If you are using kEagerLogging then the tradeoff is reversed and there will be no CPU overhead while the profiler is not running, but calls to startProfiling could be slow (in our tests, this varies by environments and node versions, but could be in the order of a couple 100ms). diff --git a/packages/profiling-node/WORKERS.md b/packages/profiling-node/WORKERS.md new file mode 100644 index 000000000000..5e03883d5439 --- /dev/null +++ b/packages/profiling-node/WORKERS.md @@ -0,0 +1,42 @@ +# Profiling support for worker threads + +Profiling is supported in worker threads for node versions, however each thread is treated as a separate entity and cross thread profiler are currently not linked together in any way. If this is something that you would like us to support, please file a feature request describing your use-case. + +## Worker SDK setup + +Profiling worker threads requires the Sentry SDK to be initialized per thread. If you are cloning the Sentry hub and passing it to workers, you will have to change your approach and reinitialize the SDK in each thread. + +```ts +// cpuintense.worker.js +const Sentry = require("@sentry/node"); +const { parentPort } = require("node:worker_threads"); +const { ProfilingIntegration } = require("@sentry/profiler-node"); // this has a addExtensionMethods side effect + +Sentry.init({ + dsn: "https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302", + debug: true, + tracesSampleRate: 1, + profilesSampleRate: 1, + integrations: [new ProfilingIntegration()], +}); + +/** + * Synchronous worker example + */ +const transaction = Sentry.startTransaction({ name: "worker_profiling" }); +// The code between these two calls will be profiled. +transaction.finish(); + +/* + * Asynchronous worker example + */ +parentPort.on("message", () => { + const transaction = Sentry.startTransaction({ name: "worker_profiling" }); + // The code between these two calls will be profiled each time a message is received + transaction.finish(); +}); +``` + +## Questions, issues or feature requests? + +Please file an issue. diff --git a/packages/profiling-node/binding.gyp b/packages/profiling-node/binding.gyp new file mode 100644 index 000000000000..aeabfaf8914b --- /dev/null +++ b/packages/profiling-node/binding.gyp @@ -0,0 +1,10 @@ +{ + "targets": [ + { + "target_name": "sentry_cpu_profiler", + "sources": [ "bindings/cpu_profiler.cc" ], + # Silence gcc8 deprecation warning https://github.com/nodejs/nan/issues/807#issuecomment-455750192 + "cflags": ["-Wno-cast-function-type"] + }, + ] +} \ No newline at end of file diff --git a/packages/profiling-node/bindings/cpu_profiler.cc b/packages/profiling-node/bindings/cpu_profiler.cc new file mode 100644 index 000000000000..cd4374d66794 --- /dev/null +++ b/packages/profiling-node/bindings/cpu_profiler.cc @@ -0,0 +1,1118 @@ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +static const uint8_t kMaxStackDepth(128); +static const float kSamplingFrequency(99.0); // 99 to avoid lockstep sampling +static const float kSamplingHz(1 / kSamplingFrequency); +static const int kSamplingInterval(kSamplingHz * 1e6); +static const v8::CpuProfilingNamingMode kNamingMode( + v8::CpuProfilingNamingMode::kDebugNaming); +static const v8::CpuProfilingLoggingMode kDefaultLoggingMode( + v8::CpuProfilingLoggingMode::kEagerLogging); + +// Allow users to override the default logging mode via env variable. This is +// useful because sometimes the flow of the profiled program can be to execute +// many sequential transaction - in that case, it may be preferable to set eager +// logging to avoid paying the high cost of profiling for each individual +// transaction (one example for this are jest tests when run with --runInBand +// option). +static const char *kEagerLoggingMode = "eager"; +static const char *kLazyLoggingMode = "lazy"; + +v8::CpuProfilingLoggingMode GetLoggingMode() { + static const char *logging_mode(getenv("SENTRY_PROFILER_LOGGING_MODE")); + + // most times this wont be set so just bail early + if (!logging_mode) { + return kDefaultLoggingMode; + } + + // other times it'll likely be set to lazy as eager is the default + if (strcmp(logging_mode, kLazyLoggingMode) == 0) { + return v8::CpuProfilingLoggingMode::kLazyLogging; + } else if (strcmp(logging_mode, kEagerLoggingMode) == 0) { + return v8::CpuProfilingLoggingMode::kEagerLogging; + } + + return kDefaultLoggingMode; +} + +class SentryProfile; +class Profiler; + +enum class ProfileStatus { + kNotStarted, + kStarted, + kStopped, +}; + +class MeasurementsTicker { + private: + uv_timer_t timer; + uint64_t period_ms; + std::unordered_map> + heap_listeners; + std::unordered_map> + cpu_listeners; + v8::Isolate *isolate; + v8::HeapStatistics heap_stats; + uv_cpu_info_t cpu_stats; + + public: + MeasurementsTicker(uv_loop_t *loop) + : period_ms(100), isolate(v8::Isolate::GetCurrent()) { + uv_timer_init(loop, &timer); + timer.data = this; + } + + static void ticker(uv_timer_t *); + // Memory listeners + void heap_callback(); + void add_heap_listener( + std::string &profile_id, + const std::function cb); + void remove_heap_listener( + std::string &profile_id, + const std::function &cb); + + // CPU listeners + void cpu_callback(); + void add_cpu_listener(std::string &profile_id, + const std::function cb); + void remove_cpu_listener(std::string &profile_id, + const std::function &cb); + + size_t listener_count(); + + ~MeasurementsTicker() { + uv_timer_stop(&timer); + + auto handle = reinterpret_cast(&timer); + + // Calling uv_close on an inactive handle will cause a segfault. + if (uv_is_active(handle)) { + uv_close(handle, nullptr); + } + } +}; + +size_t MeasurementsTicker::listener_count() { + return heap_listeners.size() + cpu_listeners.size(); +} + +// Heap tickers +void MeasurementsTicker::heap_callback() { + isolate->GetHeapStatistics(&heap_stats); + uint64_t ts = uv_hrtime(); + + for (auto cb : heap_listeners) { + cb.second(ts, heap_stats); + } +} + +void MeasurementsTicker::add_heap_listener( + std::string &profile_id, + const std::function cb) { + heap_listeners.emplace(profile_id, cb); + + if (listener_count() == 1) { + uv_timer_set_repeat(&timer, period_ms); + uv_timer_start(&timer, ticker, 0, period_ms); + } +} + +void MeasurementsTicker::remove_heap_listener( + std::string &profile_id, + const std::function &cb) { + heap_listeners.erase(profile_id); + + if (listener_count() == 0) { + uv_timer_stop(&timer); + } +}; + +// CPU tickers +void MeasurementsTicker::cpu_callback() { + uv_cpu_info_t *cpu = &cpu_stats; + int count; + int err = uv_cpu_info(&cpu, &count); + + if (err) { + return; + } + + if (count < 1) { + return; + } + + uint64_t ts = uv_hrtime(); + uint64_t total = 0; + uint64_t idle_total = 0; + + for (int i = 0; i < count; i++) { + uv_cpu_info_t *core = cpu + i; + + total += core->cpu_times.user; + total += core->cpu_times.nice; + total += core->cpu_times.sys; + total += core->cpu_times.idle; + total += core->cpu_times.irq; + + idle_total += core->cpu_times.idle; + } + + double idle_avg = idle_total / count; + double total_avg = total / count; + double rate = 1.0 - idle_avg / total_avg; + + if (rate < 0.0 || isinf(rate) || isnan(rate)) { + rate = 0.0; + } + + auto it = cpu_listeners.begin(); + while (it != cpu_listeners.end()) { + if (it->second(ts, rate)) { + it = cpu_listeners.erase(it); + } else { + ++it; + } + }; + + uv_free_cpu_info(cpu, count); +}; + +void MeasurementsTicker::ticker(uv_timer_t *handle) { + MeasurementsTicker *self = static_cast(handle->data); + self->heap_callback(); + self->cpu_callback(); +} + +void MeasurementsTicker::add_cpu_listener( + std::string &profile_id, const std::function cb) { + cpu_listeners.emplace(profile_id, cb); + + if (listener_count() == 1) { + uv_timer_set_repeat(&timer, period_ms); + uv_timer_start(&timer, ticker, 0, period_ms); + } +} + +void MeasurementsTicker::remove_cpu_listener( + std::string &profile_id, const std::function &cb) { + cpu_listeners.erase(profile_id); + + if (listener_count() == 0) { + uv_timer_stop(&timer); + } +}; + +class Profiler { + public: + std::unordered_map active_profiles; + + MeasurementsTicker measurements_ticker; + v8::CpuProfiler *cpu_profiler; + + explicit Profiler(const napi_env &env, v8::Isolate *isolate) + : measurements_ticker(uv_default_loop()), + cpu_profiler( + v8::CpuProfiler::New(isolate, kNamingMode, GetLoggingMode())) {} +}; + +class SentryProfile { + private: + uint64_t started_at; + uint16_t heap_write_index = 0; + uint16_t cpu_write_index = 0; + + std::vector heap_stats_ts; + std::vector heap_stats_usage; + + std::vector cpu_stats_ts; + std::vector cpu_stats_usage; + + const std::function memory_sampler_cb; + const std::function cpu_sampler_cb; + + ProfileStatus status = ProfileStatus::kNotStarted; + std::string id; + + public: + explicit SentryProfile(const char *id) + : started_at(uv_hrtime()), + memory_sampler_cb([this](uint64_t ts, v8::HeapStatistics &stats) { + if ((heap_write_index >= heap_stats_ts.capacity()) || + heap_write_index >= heap_stats_usage.capacity()) { + return true; + } + + heap_stats_ts.insert(heap_stats_ts.begin() + heap_write_index, + ts - started_at); + heap_stats_usage.insert( + heap_stats_usage.begin() + heap_write_index, + static_cast(stats.used_heap_size())); + ++heap_write_index; + + return false; + }), + + cpu_sampler_cb([this](uint64_t ts, double rate) { + if (cpu_write_index >= cpu_stats_ts.capacity() || + cpu_write_index >= cpu_stats_usage.capacity()) { + return true; + } + cpu_stats_ts.insert(cpu_stats_ts.begin() + cpu_write_index, + ts - started_at); + cpu_stats_usage.insert(cpu_stats_usage.begin() + cpu_write_index, + rate); + ++cpu_write_index; + return false; + }), + + status(ProfileStatus::kNotStarted), + id(id) { + heap_stats_ts.reserve(300); + heap_stats_usage.reserve(300); + cpu_stats_ts.reserve(300); + cpu_stats_usage.reserve(300); + } + + const std::vector &heap_usage_timestamps() const; + const std::vector &heap_usage_values() const; + const uint16_t &heap_usage_write_index() const; + + const std::vector &cpu_usage_timestamps() const; + const std::vector &cpu_usage_values() const; + const uint16_t &cpu_usage_write_index() const; + + void Start(Profiler *profiler); + v8::CpuProfile *Stop(Profiler *profiler); +}; + +void SentryProfile::Start(Profiler *profiler) { + v8::Local profile_title = + v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), id.c_str(), + v8::NewStringType::kNormal) + .ToLocalChecked(); + + started_at = uv_hrtime(); + + // Initialize the CPU Profiler + profiler->cpu_profiler->StartProfiling( + profile_title, + {v8::CpuProfilingMode::kCallerLineNumbers, + v8::CpuProfilingOptions::kNoSampleLimit, kSamplingInterval}); + + // listen for memory sample ticks + profiler->measurements_ticker.add_cpu_listener(id, cpu_sampler_cb); + profiler->measurements_ticker.add_heap_listener(id, memory_sampler_cb); + + status = ProfileStatus::kStarted; +} + +static void CleanupSentryProfile(Profiler *profiler, + SentryProfile *sentry_profile, + const std::string &profile_id) { + if (sentry_profile == nullptr) { + return; + } + + sentry_profile->Stop(profiler); + profiler->active_profiles.erase(profile_id); + delete sentry_profile; +}; + +v8::CpuProfile *SentryProfile::Stop(Profiler *profiler) { + // Stop the CPU Profiler + v8::CpuProfile *profile = profiler->cpu_profiler->StopProfiling( + v8::String::NewFromUtf8(v8::Isolate::GetCurrent(), id.c_str(), + v8::NewStringType::kNormal) + .ToLocalChecked()); + + // Remove the meemory sampler + profiler->measurements_ticker.remove_heap_listener(id, memory_sampler_cb); + profiler->measurements_ticker.remove_cpu_listener(id, cpu_sampler_cb); + // If for some reason stopProfiling was called with an invalid profile title + // or if that title had somehow been stopped already, profile will be null. + status = ProfileStatus::kStopped; + return profile; +} + +// Memory getters +const std::vector &SentryProfile::heap_usage_timestamps() const { + return heap_stats_ts; +}; + +const std::vector &SentryProfile::heap_usage_values() const { + return heap_stats_usage; +}; + +const uint16_t &SentryProfile::heap_usage_write_index() const { + return heap_write_index; +}; + +// CPU getters +const std::vector &SentryProfile::cpu_usage_timestamps() const { + return cpu_stats_ts; +}; + +const std::vector &SentryProfile::cpu_usage_values() const { + return cpu_stats_usage; +}; +const uint16_t &SentryProfile::cpu_usage_write_index() const { + return cpu_write_index; +}; + +#ifdef _WIN32 +static const char kPlatformSeparator = '\\'; +static const char kWinDiskPrefix = ':'; +#else +static const char kPlatformSeparator = '/'; +#endif + +static const char kSentryPathDelimiter = '.'; +static const char kSentryFileDelimiter = ':'; +static const std::string kNodeModulesPath = + std::string("node_modules") + kPlatformSeparator; + +static void GetFrameModule(const std::string &abs_path, std::string &module) { + if (abs_path.empty()) { + return; + } + + module = abs_path; + + // Drop .js extension + size_t module_len = module.length(); + if (module.compare(module_len - 3, 3, ".js") == 0) { + module = module.substr(0, module_len - 3); + } + + // Drop anything before and including node_modules/ + size_t node_modules_pos = module.rfind(kNodeModulesPath); + if (node_modules_pos != std::string::npos) { + module = module.substr(node_modules_pos + 13); + } + + // Replace all path separators with dots except the last one, that one is + // replaced with a colon + int match_count = 0; + for (int pos = module.length() - 1; pos >= 0; pos--) { + // if there is a match and it's not the first character, replace it + if (module[pos] == kPlatformSeparator) { + module[pos] = + match_count == 0 ? kSentryFileDelimiter : kSentryPathDelimiter; + match_count++; + } + } + +#ifdef _WIN32 + // Strip out C: prefix. On Windows, the drive letter is not part of the module + // name + if (module[1] == kWinDiskPrefix) { + // We will try and strip our the disk prefix. + module = module.substr(2, std::string::npos); + } +#endif + + if (module[0] == '.') { + module = module.substr(1, std::string::npos); + } +} + +static napi_value GetFrameModuleWrapped(napi_env env, napi_callback_info info) { + size_t argc = 2; + napi_value argv[2]; + napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); + + size_t len; + assert(napi_get_value_string_utf8(env, argv[0], NULL, 0, &len) == napi_ok); + + char *abs_path = (char *)malloc(len + 1); + assert(napi_get_value_string_utf8(env, argv[0], abs_path, len + 1, &len) == + napi_ok); + + std::string module; + napi_value napi_module; + + GetFrameModule(abs_path, module); + + assert(napi_create_string_utf8(env, module.c_str(), NAPI_AUTO_LENGTH, + &napi_module) == napi_ok); + return napi_module; +} + +napi_value CreateFrameNode( + const napi_env &env, const v8::CpuProfileNode &node, + std::unordered_map &module_cache, + napi_value &resources) { + napi_value js_node; + napi_create_object(env, &js_node); + + napi_value lineno_prop; + napi_create_int32(env, node.GetLineNumber(), &lineno_prop); + napi_set_named_property(env, js_node, "lineno", lineno_prop); + + napi_value colno_prop; + napi_create_int32(env, node.GetColumnNumber(), &colno_prop); + napi_set_named_property(env, js_node, "colno", colno_prop); + + if (node.GetSourceType() != v8::CpuProfileNode::SourceType::kScript) { + napi_value system_frame_prop; + napi_get_boolean(env, false, &system_frame_prop); + napi_set_named_property(env, js_node, "in_app", system_frame_prop); + } + + napi_value function; + napi_create_string_utf8(env, node.GetFunctionNameStr(), NAPI_AUTO_LENGTH, + &function); + napi_set_named_property(env, js_node, "function", function); + + const char *resource = node.GetScriptResourceNameStr(); + + if (resource != nullptr) { + // resource is absolute path, set it on the abs_path property + napi_value abs_path_prop; + napi_create_string_utf8(env, resource, NAPI_AUTO_LENGTH, &abs_path_prop); + napi_set_named_property(env, js_node, "abs_path", abs_path_prop); + // Error stack traces are not relative to root dir, doing our own path + // normalization breaks people's code mapping configs so we need to leave it + // as is. + napi_set_named_property(env, js_node, "filename", abs_path_prop); + + std::string module; + std::string resource_str = std::string(resource); + + if (resource_str.empty()) { + return js_node; + } + + if (module_cache.find(resource_str) != module_cache.end()) { + module = module_cache[resource_str]; + } else { + napi_value resource; + napi_create_string_utf8(env, resource_str.c_str(), NAPI_AUTO_LENGTH, + &resource); + napi_set_element(env, resources, module_cache.size(), resource); + + GetFrameModule(resource_str, module); + module_cache.emplace(resource_str, module); + } + + if (!module.empty()) { + napi_value filename_prop; + napi_create_string_utf8(env, module.c_str(), NAPI_AUTO_LENGTH, + &filename_prop); + napi_set_named_property(env, js_node, "module", filename_prop); + } + } + + return js_node; +}; + +napi_value CreateSample(const napi_env &env, const uint32_t stack_id, + const int64_t sample_timestamp_us, + const uint32_t thread_id) { + napi_value js_node; + napi_create_object(env, &js_node); + + napi_value stack_id_prop; + napi_create_uint32(env, stack_id, &stack_id_prop); + napi_set_named_property(env, js_node, "stack_id", stack_id_prop); + + napi_value thread_id_prop; + napi_create_string_utf8(env, std::to_string(thread_id).c_str(), + NAPI_AUTO_LENGTH, &thread_id_prop); + napi_set_named_property(env, js_node, "thread_id", thread_id_prop); + + napi_value elapsed_since_start_ns_prop; + napi_create_int64(env, sample_timestamp_us * 1000, + &elapsed_since_start_ns_prop); + napi_set_named_property(env, js_node, "elapsed_since_start_ns", + elapsed_since_start_ns_prop); + + return js_node; +}; + +std::string kDelimiter = std::string(";"); +std::string hashCpuProfilerNodeByPath(const v8::CpuProfileNode *node, + std::string &path) { + path.clear(); + + while (node != nullptr) { + path.append(std::to_string(node->GetNodeId())); + node = node->GetParent(); + } + + return path; +} + +static void GetSamples(const napi_env &env, const v8::CpuProfile *profile, + const uint32_t thread_id, napi_value &samples, + napi_value &stacks, napi_value &frames, + napi_value &resources) { + const int64_t profile_start_time_us = profile->GetStartTime(); + const int sampleCount = profile->GetSamplesCount(); + + uint32_t unique_stack_id = 0; + uint32_t unique_frame_id = 0; + + // Initialize the lookup tables for stacks and frames, both of these are + // indexed in the sample format we are using to optimize for size. + std::unordered_map frame_lookup_table; + std::unordered_map stack_lookup_table; + std::unordered_map module_cache; + + // At worst, all stacks are unique so reserve the maximum amount of space + stack_lookup_table.reserve(sampleCount); + + std::string node_hash = ""; + + for (int i = 0; i < sampleCount; i++) { + uint32_t stack_index = unique_stack_id; + + const v8::CpuProfileNode *node = profile->GetSample(i); + const int64_t sample_timestamp = profile->GetSampleTimestamp(i); + + // If a node was only on top of the stack once, then it will only ever + // be inserted once and there is no need for hashing. + if (node->GetHitCount() > 1) { + hashCpuProfilerNodeByPath(node, node_hash); + + std::unordered_map::iterator + stack_index_cache_hit = stack_lookup_table.find(node_hash); + + // If we have a hit, update the stack index, otherwise + // insert it into the hash table and continue. + if (stack_index_cache_hit == stack_lookup_table.end()) { + stack_lookup_table.emplace(node_hash, stack_index); + } else { + stack_index = stack_index_cache_hit->second; + } + } + + napi_value sample = CreateSample( + env, stack_index, sample_timestamp - profile_start_time_us, thread_id); + + if (stack_index != unique_stack_id) { + napi_value index; + napi_create_uint32(env, i, &index); + napi_set_property(env, samples, index, sample); + continue; + } + + // A stack is a list of frames ordered from outermost (top) to innermost + // frame (bottom) + napi_value stack; + napi_create_array(env, &stack); + + uint32_t stack_depth = 0; + + while (node != nullptr && stack_depth < kMaxStackDepth) { + auto nodeId = node->GetNodeId(); + auto frame_index = frame_lookup_table.find(nodeId); + + // If the frame does not exist in the index + if (frame_index == frame_lookup_table.end()) { + frame_lookup_table.emplace(nodeId, unique_frame_id); + + napi_value frame_id; + napi_create_uint32(env, unique_frame_id, &frame_id); + + napi_value depth; + napi_create_uint32(env, stack_depth, &depth); + napi_set_property(env, stack, depth, frame_id); + napi_set_property(env, frames, frame_id, + CreateFrameNode(env, *node, module_cache, resources)); + + unique_frame_id++; + } else { + // If it was already indexed, just add it's id to the stack + napi_value depth; + napi_create_uint32(env, stack_depth, &depth); + + napi_value frame; + napi_create_uint32(env, frame_index->second, &frame); + napi_set_property(env, stack, depth, frame); + }; + + // Continue walking down the stack + node = node->GetParent(); + stack_depth++; + } + + napi_value napi_sample_index; + napi_value napi_stack_index; + + napi_create_uint32(env, i, &napi_sample_index); + napi_set_property(env, samples, napi_sample_index, sample); + napi_create_uint32(env, stack_index, &napi_stack_index); + napi_set_property(env, stacks, napi_stack_index, stack); + + unique_stack_id++; + } +} + +static napi_value TranslateMeasurementsDouble( + const napi_env &env, const char *unit, const uint16_t size, + const std::vector &values, + const std::vector ×tamps) { + if (size > values.size() || size > timestamps.size()) { + napi_throw_range_error(env, "NAPI_ERROR", + "CPU measurement size is larger than the number of " + "values or timestamps"); + return nullptr; + } + + if (values.size() != timestamps.size()) { + napi_throw_range_error(env, "NAPI_ERROR", + "CPU measurement entries are corrupt, expected " + "values and timestamps to be of equal length"); + return nullptr; + } + + napi_value measurement; + napi_create_object(env, &measurement); + + napi_value unit_string; + napi_create_string_utf8(env, unit, NAPI_AUTO_LENGTH, &unit_string); + napi_set_named_property(env, measurement, "unit", unit_string); + + napi_value values_array; + napi_create_array(env, &values_array); + + uint16_t idx = size; + + for (size_t i = 0; i < idx; i++) { + napi_value entry; + napi_create_object(env, &entry); + + napi_value value; + if (napi_create_double(env, values[i], &value) != napi_ok) { + if (napi_create_double(env, 0.0, &value) != napi_ok) { + continue; + } + } + + napi_value ts; + napi_create_int64(env, timestamps[i], &ts); + + napi_set_named_property(env, entry, "value", value); + napi_set_named_property(env, entry, "elapsed_since_start_ns", ts); + napi_set_element(env, values_array, i, entry); + } + + napi_set_named_property(env, measurement, "values", values_array); + + return measurement; +} + +static napi_value TranslateMeasurements( + const napi_env &env, const char *unit, const uint16_t size, + const std::vector &values, + const std::vector ×tamps) { + if (size > values.size() || size > timestamps.size()) { + napi_throw_range_error(env, "NAPI_ERROR", + "Memory measurement size is larger than the number " + "of values or timestamps"); + return nullptr; + } + + if (values.size() != timestamps.size()) { + napi_throw_range_error(env, "NAPI_ERROR", + "Memory measurement entries are corrupt, expected " + "values and timestamps to be of equal length"); + return nullptr; + } + + napi_value measurement; + napi_create_object(env, &measurement); + + napi_value unit_string; + napi_create_string_utf8(env, unit, NAPI_AUTO_LENGTH, &unit_string); + napi_set_named_property(env, measurement, "unit", unit_string); + + napi_value values_array; + napi_create_array(env, &values_array); + + for (size_t i = 0; i < size; i++) { + napi_value entry; + napi_create_object(env, &entry); + + napi_value value; + napi_create_int64(env, values[i], &value); + + napi_value ts; + napi_create_int64(env, timestamps[i], &ts); + + napi_set_named_property(env, entry, "value", value); + napi_set_named_property(env, entry, "elapsed_since_start_ns", ts); + napi_set_element(env, values_array, i, entry); + } + + napi_set_named_property(env, measurement, "values", values_array); + + return measurement; +} + +static napi_value TranslateProfile(const napi_env &env, + const v8::CpuProfile *profile, + const uint32_t thread_id, + bool collect_resources) { + napi_value js_profile; + + napi_create_object(env, &js_profile); + + napi_value logging_mode; + napi_value samples; + napi_value stacks; + napi_value frames; + napi_value resources; + + napi_create_string_utf8( + env, + GetLoggingMode() == v8::CpuProfilingLoggingMode::kEagerLogging ? "eager" + : "lazy", + NAPI_AUTO_LENGTH, &logging_mode); + + napi_create_array(env, &samples); + napi_create_array(env, &stacks); + napi_create_array(env, &frames); + napi_create_array(env, &resources); + + napi_set_named_property(env, js_profile, "samples", samples); + napi_set_named_property(env, js_profile, "stacks", stacks); + napi_set_named_property(env, js_profile, "frames", frames); + napi_set_named_property(env, js_profile, "profiler_logging_mode", + logging_mode); + + GetSamples(env, profile, thread_id, samples, stacks, frames, resources); + + if (collect_resources) { + napi_set_named_property(env, js_profile, "resources", resources); + } else { + napi_create_array(env, &resources); + napi_set_named_property(env, js_profile, "resources", resources); + } + + return js_profile; +} + +static napi_value StartProfiling(napi_env env, napi_callback_info info) { + size_t argc = 1; + napi_value argv[1]; + + assert(napi_get_cb_info(env, info, &argc, argv, NULL, NULL) == napi_ok); + + napi_valuetype callbacktype0; + assert(napi_typeof(env, argv[0], &callbacktype0) == napi_ok); + + if (callbacktype0 != napi_string) { + napi_throw_error( + env, "NAPI_ERROR", + "TypeError: StartProfiling expects a string as first argument."); + napi_value napi_null; + assert(napi_get_null(env, &napi_null) == napi_ok); + + return napi_null; + } + + size_t len; + assert(napi_get_value_string_utf8(env, argv[0], NULL, 0, &len) == napi_ok); + + char *title = (char *)malloc(len + 1); + assert(napi_get_value_string_utf8(env, argv[0], title, len + 1, &len) == + napi_ok); + + if (len < 1) { + napi_throw_error(env, "NAPI_ERROR", + "StartProfiling expects a non-empty string as first " + "argument, got an empty string."); + + napi_value napi_null; + assert(napi_get_null(env, &napi_null) == napi_ok); + + return napi_null; + } + + v8::Isolate *isolate = v8::Isolate::GetCurrent(); + assert(isolate != 0); + + Profiler *profiler; + assert(napi_get_instance_data(env, (void **)&profiler) == napi_ok); + + if (!profiler) { + napi_throw_error(env, "NAPI_ERROR", + "StartProfiling: Profiler is not initialized."); + + napi_value napi_null; + assert(napi_get_null(env, &napi_null) == napi_ok); + + return napi_null; + } + + const std::string profile_id(title); + // In case we have a collision, cleanup the old profile first + auto existing_profile = profiler->active_profiles.find(profile_id); + if (existing_profile != profiler->active_profiles.end()) { + existing_profile->second->Stop(profiler); + CleanupSentryProfile(profiler, existing_profile->second, profile_id); + } + + SentryProfile *sentry_profile = new SentryProfile(title); + sentry_profile->Start(profiler); + + profiler->active_profiles.emplace(profile_id, sentry_profile); + + napi_value napi_null; + assert(napi_get_null(env, &napi_null) == napi_ok); + + return napi_null; +} + +// StopProfiling(string title) +// https://v8docs.nodesource.com/node-18.2/d2/d34/classv8_1_1_cpu_profiler.html#a40ca4c8a8aa4c9233aa2a2706457cc80 +static napi_value StopProfiling(napi_env env, napi_callback_info info) { + size_t argc = 3; + napi_value argv[3]; + + assert(napi_get_cb_info(env, info, &argc, argv, NULL, NULL) == napi_ok); + + if (argc < 2) { + napi_throw_error(env, "NAPI_ERROR", + "StopProfiling expects at least two arguments."); + + napi_value napi_null; + assert(napi_get_null(env, &napi_null) == napi_ok); + + return napi_null; + } + + // Verify the first argument is a string + napi_valuetype callbacktype0; + assert(napi_typeof(env, argv[0], &callbacktype0) == napi_ok); + + if (callbacktype0 != napi_string) { + napi_throw_error(env, "NAPI_ERROR", + "StopProfiling expects a string as first argument."); + + napi_value napi_null; + assert(napi_get_null(env, &napi_null) == napi_ok); + + return napi_null; + } + + // Verify the second argument is a number + napi_valuetype callbacktype1; + assert(napi_typeof(env, argv[1], &callbacktype1) == napi_ok); + + if (callbacktype1 != napi_number) { + napi_throw_error( + env, "NAPI_ERROR", + "StopProfiling expects a thread_id integer as second argument."); + + napi_value napi_null; + assert(napi_get_null(env, &napi_null) == napi_ok); + + return napi_null; + } + + size_t len; + assert(napi_get_value_string_utf8(env, argv[0], NULL, 0, &len) == napi_ok); + + char *title = (char *)malloc(len + 1); + assert(napi_get_value_string_utf8(env, argv[0], title, len + 1, &len) == + napi_ok); + + if (len < 1) { + napi_throw_error(env, "NAPI_ERROR", + "StopProfiling expects a string as first argument."); + + napi_value napi_null; + assert(napi_get_null(env, &napi_null) == napi_ok); + + return napi_null; + } + + // Get the value of the second argument and convert it to uint64 + int64_t thread_id; + assert(napi_get_value_int64(env, argv[1], &thread_id) == napi_ok); + + // Get profiler from instance data + Profiler *profiler; + assert(napi_get_instance_data(env, (void **)&profiler) == napi_ok); + + if (!profiler) { + napi_throw_error(env, "NAPI_ERROR", + "StopProfiling: Profiler is not initialized."); + + napi_value napi_null; + assert(napi_get_null(env, &napi_null) == napi_ok); + + return napi_null; + } + + const std::string profile_id(title); + auto profile = profiler->active_profiles.find(profile_id); + + // If the profile was never started, silently ignore the call and return null + if (profile == profiler->active_profiles.end()) { + napi_value napi_null; + assert(napi_get_null(env, &napi_null) == napi_ok); + return napi_null; + } + + v8::CpuProfile *cpu_profile = profile->second->Stop(profiler); + + // If for some reason stopProfiling was called with an invalid profile title + // or if that title had somehow been stopped already, profile will be null. + if (!cpu_profile) { + CleanupSentryProfile(profiler, profile->second, profile_id); + + napi_value napi_null; + assert(napi_get_null(env, &napi_null) == napi_ok); + return napi_null; + }; + + napi_valuetype callbacktype3; + assert(napi_typeof(env, argv[2], &callbacktype3) == napi_ok); + + bool collect_resources; + napi_get_value_bool(env, argv[2], &collect_resources); + + napi_value js_profile = + TranslateProfile(env, cpu_profile, thread_id, collect_resources); + + napi_value measurements; + napi_create_object(env, &measurements); + + if (profile->second->heap_usage_write_index() > 0) { + static const char *memory_unit = "byte"; + napi_value heap_usage_measurements = TranslateMeasurements( + env, memory_unit, profile->second->heap_usage_write_index(), + profile->second->heap_usage_values(), + profile->second->heap_usage_timestamps()); + + if (heap_usage_measurements != nullptr) { + napi_set_named_property(env, measurements, "memory_footprint", + heap_usage_measurements); + }; + }; + + if (profile->second->cpu_usage_write_index() > 0) { + static const char *cpu_unit = "percent"; + napi_value cpu_usage_measurements = TranslateMeasurementsDouble( + env, cpu_unit, profile->second->cpu_usage_write_index(), + profile->second->cpu_usage_values(), + profile->second->cpu_usage_timestamps()); + + if (cpu_usage_measurements != nullptr) { + napi_set_named_property(env, measurements, "cpu_usage", + cpu_usage_measurements); + }; + }; + + napi_set_named_property(env, js_profile, "measurements", measurements); + + CleanupSentryProfile(profiler, profile->second, profile_id); + cpu_profile->Delete(); + + return js_profile; +}; + +void FreeAddonData(napi_env env, void *data, void *hint) { + Profiler *profiler = static_cast(data); + + if (profiler == nullptr) { + return; + } + + if (!profiler->active_profiles.empty()) { + for (auto &profile : profiler->active_profiles) { + CleanupSentryProfile(profiler, profile.second, profile.first); + } + } + + if (profiler->cpu_profiler != nullptr) { + profiler->cpu_profiler->Dispose(); + } + + delete profiler; +} + +napi_value Init(napi_env env, napi_value exports) { + v8::Isolate *isolate = v8::Isolate::GetCurrent(); + + if (isolate == nullptr) { + napi_throw_error(env, nullptr, + "Failed to initialize Sentry profiler: isolate is null."); + return NULL; + } + + Profiler *profiler = new Profiler(env, isolate); + + if (napi_set_instance_data(env, profiler, FreeAddonData, NULL) != napi_ok) { + napi_throw_error(env, nullptr, "Failed to set instance data for profiler."); + return NULL; + } + + napi_value start_profiling; + if (napi_create_function(env, "startProfiling", NAPI_AUTO_LENGTH, + StartProfiling, exports, + &start_profiling) != napi_ok) { + napi_throw_error(env, nullptr, "Failed to create startProfiling function."); + return NULL; + } + + if (napi_set_named_property(env, exports, "startProfiling", + start_profiling) != napi_ok) { + napi_throw_error(env, nullptr, + "Failed to set startProfiling property on exports."); + return NULL; + } + + napi_value stop_profiling; + if (napi_create_function(env, "stopProfiling", NAPI_AUTO_LENGTH, + StopProfiling, exports, + &stop_profiling) != napi_ok) { + napi_throw_error(env, nullptr, "Failed to create stopProfiling function."); + return NULL; + } + + if (napi_set_named_property(env, exports, "stopProfiling", stop_profiling) != + napi_ok) { + napi_throw_error(env, nullptr, + "Failed to set stopProfiling property on exports."); + return NULL; + } + + napi_value get_frame_module; + if (napi_create_function(env, "getFrameModule", NAPI_AUTO_LENGTH, + GetFrameModuleWrapped, exports, + &get_frame_module) != napi_ok) { + napi_throw_error(env, nullptr, "Failed to create getFrameModule function."); + return NULL; + } + + if (napi_set_named_property(env, exports, "getFrameModule", + get_frame_module) != napi_ok) { + napi_throw_error(env, nullptr, + "Failed to set getFrameModule property on exports."); + return NULL; + } + + return exports; +} + +NAPI_MODULE(NODE_GYP_MODULE_NAME, Init) diff --git a/packages/profiling-node/clang-format.mjs b/packages/profiling-node/clang-format.mjs new file mode 100644 index 000000000000..ec7a28fe6980 --- /dev/null +++ b/packages/profiling-node/clang-format.mjs @@ -0,0 +1,21 @@ +import { execSync } from "child_process"; +import { exit } from "process"; +import {error, log} from "console" + + +const args = ["--Werror", "-i", "--style=file", "bindings/cpu_profiler.cc"]; +const cmd = `./node_modules/.bin/clang-format ${args.join(" ")}`; + +execSync(cmd) + +log("clang-format: done, checking tree...") + +const diff = execSync(`git status --short`).toString() + +if(diff) { + error("clang-format: check failed ❌") + exit(1) +} + +log("clang-format: check passed ✅") + diff --git a/packages/profiling-node/demo_app/esbuild.mjs b/packages/profiling-node/demo_app/esbuild.mjs new file mode 100644 index 000000000000..7df249d3f787 --- /dev/null +++ b/packages/profiling-node/demo_app/esbuild.mjs @@ -0,0 +1,19 @@ +import esbuild from 'esbuild'; +import path from 'path'; + +import { URL, fileURLToPath } from 'url'; + +const __dirname = fileURLToPath(new URL('.', import.meta.url)); + +esbuild.build({ + platform: 'node', + format: 'cjs', + target: 'node12', + entryPoints: [path.resolve(__dirname, './index.js')], + outdir: path.resolve(__dirname, './dist/esbuild'), + bundle: true, + loader: { + '.node': 'copy' + }, + tsconfig: path.resolve(__dirname, '../tsconfig.json') +}); diff --git a/packages/profiling-node/demo_app/index.js b/packages/profiling-node/demo_app/index.js new file mode 100644 index 000000000000..08ee945120c4 --- /dev/null +++ b/packages/profiling-node/demo_app/index.js @@ -0,0 +1,25 @@ +const Sentry = require('@sentry/node'); +const profiling = require('@sentry/profiling-node'); + +Sentry.init({ + dsn: '', + integrations: [new profiling.ProfilingIntegration()], + tracesSampleRate: 1, + profilesSampleRate: 1 +}); + +const transaction = Sentry.startTransaction({ name: `${process.env['BUNDLER']}-application-build` }); + +function sleep(time) { + const stop = new Date().getTime(); + while (new Date().getTime() < stop + time) { + // block + } +} + +sleep(1000); +transaction.finish(); + +(async () => { + await Sentry.flush(); +})(); diff --git a/packages/profiling-node/demo_app/package.json b/packages/profiling-node/demo_app/package.json new file mode 100644 index 000000000000..2511dff52ca6 --- /dev/null +++ b/packages/profiling-node/demo_app/package.json @@ -0,0 +1,14 @@ +{ + "name": "demo_app", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@sentry/node": "^7.58.1" + } +} diff --git a/packages/profiling-node/demo_app/rollup.config.js b/packages/profiling-node/demo_app/rollup.config.js new file mode 100644 index 000000000000..9b7a30bc0aa4 --- /dev/null +++ b/packages/profiling-node/demo_app/rollup.config.js @@ -0,0 +1,28 @@ +const rollupNativePlugin = require('rollup-plugin-natives'); +const path = require('path'); + +const commonjs = require('@rollup/plugin-commonjs'); +const {nodeResolve} = require('@rollup/plugin-node-resolve'); + +module.exports = { + input: path.resolve(__dirname, './index.js'), + output: { + format: 'cjs', + dir: path.resolve(__dirname, './dist/rollup'), + }, + plugins: [ + nodeResolve({ + extensions: ['.js', '.ts'] + }), + commonjs({ + strictRequires: true + }), + rollupNativePlugin({ + // Where we want to physically put the extracted .node files + copyTo: path.resolve(__dirname, './dist/rollup'), + + // Path to the same folder, relative to the output bundle js + destDir: path.resolve(__dirname, './dist/rollup'), + }), + ] +}; diff --git a/packages/profiling-node/demo_app/webpack.config.js b/packages/profiling-node/demo_app/webpack.config.js new file mode 100644 index 000000000000..86fdffafb039 --- /dev/null +++ b/packages/profiling-node/demo_app/webpack.config.js @@ -0,0 +1,25 @@ +const path = require('path'); + +module.exports = { + target: 'node', + entry: path.resolve(__dirname, './index.js'), + mode: 'production', + optimization: { + minimize: false + }, + module: { + rules: [ + { + test: /\.node$/, + loader: 'file-loader' + } + ] + }, + resolve: { + extensions: ['.tsx', '.ts', '.js'] + }, + output: { + filename: 'index.js', + path: path.resolve(__dirname, './dist/webpack'), + } +}; diff --git a/packages/profiling-node/esbuild.mjs b/packages/profiling-node/esbuild.mjs new file mode 100644 index 000000000000..14fa89cb9401 --- /dev/null +++ b/packages/profiling-node/esbuild.mjs @@ -0,0 +1,23 @@ +const esbuild = require('esbuild'); + +let missingBindingsPlugin = { + name: 'MissingBindings', + setup(build) { + build.onResolve({ filter: /\.node$/ }, (args) => ({ + path: args.path, + namespace: 'missing-bindings', + external: true + })); + } +}; + +esbuild.build({ + platform: 'node', + entryPoints: ['./src/index.ts'], + outfile: './lib/index.js', + format: 'cjs', + target: 'node16', + bundle: true, + tsconfig: './tsconfig.json', + plugins: [missingBindingsPlugin] +}); diff --git a/packages/profiling-node/jest.config.js b/packages/profiling-node/jest.config.js new file mode 100644 index 000000000000..c27f698c95d0 --- /dev/null +++ b/packages/profiling-node/jest.config.js @@ -0,0 +1,20 @@ +module.exports = { + verbose: true, + forceExit: true, + collectCoverage: true, + testMatch: ['**/*.test.ts'], + testPathIgnorePatterns: ['benchmarks/'], + resetMocks: true, + restoreMocks: true, + silent: false, + transform: { + // '^.+\\.[tj]sx?$' to process js/ts with `ts-jest` + // '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest` + '^.+\\.tsx?$': [ + 'ts-jest', + { + tsconfig: 'tsconfig.test.json' + } + ] + } +}; diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json new file mode 100644 index 000000000000..2f0b546b1bbc --- /dev/null +++ b/packages/profiling-node/package.json @@ -0,0 +1,112 @@ +{ + "name": "@sentry/profiling-node", + "version": "1.3.3", + "description": "Sampling based nodejs profiler.", + "repository": { + "type": "git", + "url": "https://github.com/getsentry/profiling-node.git" + }, + "main": "lib/index.js", + "types": "lib/types/index.d.ts", + "bin": { + "sentry-prune-profiler-binaries": "scripts/prune-profiler-binaries.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "files": [ + "lib", + "bindings", + "binding.gyp", + "LICENSE", + "README.md", + "package.json", + "package-lock.json", + "scripts/binaries.js", + "scripts/check-build.js", + "scripts/copy-target.js", + "scripts/prune-profiler-binaries.js" + ], + "scripts": { + "install": "node scripts/check-build.js", + "clean": "rm -rf ./build && rm -rf ./lib", + "lint": "yarn lint:eslint && yarn lint:clang", + "lint:eslint": "eslint . --format stylish", + "lint:clang": "node ./clang-format.js", + "fix": "eslint . --format stylish --fix", + "lint:fix": "npm run fix:eslint && npm run fix:clang", + "lint:fix:clang": "node ./clang-format.js --fix", + "build": "npm run build:bindings && npm run build:lib", + "build:lib": "npm run build:types && node ./esbuild.js", + "build:types": "tsc -p ./tsconfig.types.json", + "build:bindings:configure": "node-gyp configure", + "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64", + "build:bindings": "node-gyp build && node scripts/copy-target.js", + "build:bindings:arm64": "node-gyp build --arch=arm64 && node scripts/copy-target.js", + "build:dev": "yarn clean && yarn build:configure && yarn build", + "test:watch": "cross-env SENTRY_PROFILER_BINARY_DIR=./build jest --watch", + "test:bundle": "node test-binaries.esbuild.js", + "test:setup:bundle": "(npm link && cd demo_app && npm install && npm link @sentry/profiling-node)", + "test:esbuild:build": "node ./demo_app/esbuild.js", + "test:esbuild:run": "BUNDLER=esbuild node ./demo_app/dist/esbuild/index.js", + "test:esbuild": "yarn test:esbuild:build && yarn test:esbuild:run", + "test:webpack:build": "webpack --config ./demo_app/webpack.config.js", + "test:webpack:run": "BUNDLER=webpack node ./demo_app/dist/webpack/index.js", + "test:webpack": "yarn test:webpack:build && yarn test:webpack:run", + "test:rollup:build": "rollup --config ./demo_app/rollup.config.js", + "test:rollup:run": "BUNDLER=rollup node ./demo_app/dist/rollup/index.js", + "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", + "test": "cross-env SENTRY_PROFILER_BINARY_DIR=./lib jest --config jest.config.ts" + }, + "keywords": [ + "profiling", + "monitoring", + "apm", + "cpu", + "node", + "performance" + ], + "binary": { + "napi_versions": [ + 7 + ] + }, + "author": "jonas.badalic@sentry.io", + "license": "MIT", + "peerDependencies": { + "@sentry/node": "^7.44.1" + }, + "dependencies": { + "detect-libc": "^2.0.2", + "node-abi": "^3.52.0" + }, + "devDependencies": { + "@sentry-internal/eslint-config-sdk": "^7.91.0", + "@sentry/core": "^7.86.0", + "@sentry/hub": "^7.87.0", + "@sentry/node": "^7.87.0", + "@sentry/types": "^7.87.0", + "@sentry/utils": "^7.87.0", + "@types/eslint": "^7", + "@types/express": "^4.17.14", + "@types/jest": "^29.0.0", + "@types/node": "^18.19.4", + "@types/node-abi": "^3.0.0", + "autocannon": "^7.9.0", + "benchmark": "^2.1.4", + "clang-format": "^1.8.0", + "cross-env": "^7.0.3", + "esbuild": "^0.17.18", + "eslint": "7.32.0", + "express": "^4.18.1", + "jest": "^29.5.0", + "node-gyp": "^10.0.1", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "simple-zstd": "^1.4.0", + "sqlite3": "^5.0.8", + "ts-jest": "^29.1.0", + "ts-node": "^10.9.1", + "typescript": "^4.9.5" + } +} diff --git a/packages/profiling-node/scripts/binaries.js b/packages/profiling-node/scripts/binaries.js new file mode 100644 index 000000000000..8a1966d8576a --- /dev/null +++ b/packages/profiling-node/scripts/binaries.js @@ -0,0 +1,31 @@ +const os = require('os'); +const path = require('path'); + +const abi = require('node-abi'); +const libc = require('detect-libc'); + +function getModuleName() { + const stdlib = libc.familySync(); + const platform = process.env['BUILD_PLATFORM'] || os.platform(); + const arch = process.env['BUILD_ARCH'] || os.arch(); + + if (platform === 'darwin' && arch === 'arm64') { + const identifier = [platform, 'arm64', abi.getAbi(process.versions.node, 'node')] + .filter((c) => c !== undefined && c !== null) + .join('-'); + return `sentry_cpu_profiler-${identifier}.node`; + } + + const identifier = [platform, arch, stdlib, abi.getAbi(process.versions.node, 'node')] + .filter((c) => c !== undefined && c !== null) + .join('-'); + + return `sentry_cpu_profiler-${identifier}.node`; +} + +const source = path.join(__dirname, '..', 'build', 'Release', 'sentry_cpu_profiler.node'); +const target = path.join(__dirname, '..', 'lib', getModuleName()); + +module.exports.source = source; +module.exports.target = target; +module.exports.getModuleName = getModuleName; diff --git a/packages/profiling-node/scripts/bump-version.sh b/packages/profiling-node/scripts/bump-version.sh new file mode 100755 index 000000000000..234d58f5359b --- /dev/null +++ b/packages/profiling-node/scripts/bump-version.sh @@ -0,0 +1,14 @@ +#!/bin/bash +### Example of a version-bumping script for an NPM project. +### Located at: ./scripts/bump-version.sh +set -eux + +NEW_VERSION="${2}" + +# Do not tag and commit changes made by "npm version" +export npm_config_git_tag_version=false +npm version "${NEW_VERSION}" + +echo "// This is an auto generated file. Do not edit this file directly. +// The version is bumped by scripts/bump_version.sh +export const SDK_VERSION = '${NEW_VERSION}';" > src/sdk_version.ts \ No newline at end of file diff --git a/packages/profiling-node/scripts/check-build.js b/packages/profiling-node/scripts/check-build.js new file mode 100644 index 000000000000..eb60afa0941d --- /dev/null +++ b/packages/profiling-node/scripts/check-build.js @@ -0,0 +1,64 @@ +const fs = require('fs'); +const child_process = require('child_process'); +const binaries = require('./binaries.js'); + +function clean(err) { + return err.toString().trim(); +} + +function recompileFromSource() { + // eslint-disable-next-line no-console + console.log('@sentry/profiling-node: Compiling from source...'); + let spawn = child_process.spawnSync('npm', ['run', 'build:configure'], { + stdio: ['inherit', 'inherit', 'pipe'], + env: process.env, + shell: true + }); + + if (spawn.status !== 0) { + // eslint-disable-next-line no-console + console.log('@sentry/profiling-node: Failed to configure gyp'); + // eslint-disable-next-line no-console + console.log('@sentry/profiling-node:', clean(spawn.stderr)); + return; + } + + spawn = child_process.spawnSync('npm', ['run', 'build:bindings'], { + stdio: ['inherit', 'inherit', 'pipe'], + env: process.env, + shell: true + }); + if (spawn.status !== 0) { + // eslint-disable-next-line no-console + console.log('@sentry/profiling-node: Failed to build bindings'); + // eslint-disable-next-line no-console + console.log('@sentry/profiling-node:', clean(spawn.stderr)); + return; + } +} + +if (fs.existsSync(binaries.target)) { + try { + // eslint-disable-next-line no-console + console.log(`@sentry/profiling-node: Precompiled binary found, attempting to load ${binaries.target}`); + require(binaries.target); + // eslint-disable-next-line no-console + console.log('@sentry/profiling-node: Precompiled binary found, skipping build from source.'); + } catch (e) { + // eslint-disable-next-line no-console + console.log('@sentry/profiling-node: Precompiled binary found but failed loading'); + // eslint-disable-next-line no-console + console.log('@sentry/profiling-node:', e); + try { + recompileFromSource(); + } catch (e) { + // eslint-disable-next-line no-console + console.log('@sentry/profiling-node: Failed to compile from source'); + throw e; + } + } +} else { + // eslint-disable-next-line no-console + console.log('@sentry/profiling-node: No precompiled binary found'); + recompileFromSource(); +} diff --git a/packages/profiling-node/scripts/copy-target.js b/packages/profiling-node/scripts/copy-target.js new file mode 100644 index 000000000000..c713a8558169 --- /dev/null +++ b/packages/profiling-node/scripts/copy-target.js @@ -0,0 +1,27 @@ +const fs = require('fs'); +const path = require('path'); +const process = require('process'); +const binaries = require('./binaries.js'); + +const build = path.resolve(__dirname, '..', 'lib'); + +if (!fs.existsSync(build)) { + fs.mkdirSync(build); +} + +const source = path.join(__dirname, '..', 'build', 'Release', 'sentry_cpu_profiler.node'); +const target = path.join(__dirname, '..', 'lib', binaries.getModuleName()); + +if (!fs.existsSync(source)) { + // eslint-disable-next-line no-console + console.log('Source file does not exist:', source); + process.exit(1); +} else { + if (fs.existsSync(target)) { + // eslint-disable-next-line no-console + console.log('Target file already exists, overwriting it'); + } + // eslint-disable-next-line no-console + console.log('Renaming', source, 'to', target); + fs.renameSync(source, target); +} diff --git a/packages/profiling-node/scripts/prune-profiler-binaries.js b/packages/profiling-node/scripts/prune-profiler-binaries.js new file mode 100755 index 000000000000..4db85cb5e52f --- /dev/null +++ b/packages/profiling-node/scripts/prune-profiler-binaries.js @@ -0,0 +1,192 @@ +#! /usr/bin/env node +const fs = require('fs'); + +let SOURCE_DIR, PLATFORM, ARCH, STDLIB, NODE, HELP; + +for (let i = 0; i < process.argv.length; i++) { + const arg = process.argv[i]; + if (arg.startsWith('--target_dir_path=')) { + SOURCE_DIR = arg.split('=')[1]; + continue; + } + + if (arg.startsWith('--target_platform=')) { + PLATFORM = arg.split('=')[1]; + continue; + } + + if (arg.startsWith('--target_arch=')) { + ARCH = arg.split('=')[1]; + continue; + } + + if (arg.startsWith('--target_stdlib=')) { + STDLIB = arg.split('=')[1]; + continue; + } + + if (arg.startsWith('--target_node=')) { + NODE = arg.split('=')[1]; + continue; + } + + if (arg === '--help' || arg === '-h') { + HELP = true; + continue; + } +} + +if (HELP) { + // eslint-disable-next-line no-console + console.log( + `\nSentry: Prune profiler binaries\n +Usage: sentry-prune-profiler-binaries --target_dir_path=... --target_platform=... --target_arch=... --target_stdlib=...\n +Arguments:\n +--target_dir_path: Path to the directory containing the final bundled code. If you are using webpack, this would be the equivalent of output.path option.\n +--target_node: The major node version the code will be running on. Example: 16, 18, 20...\n +--target_platform: The platform the code will be running on. Example: linux, darwin, win32\n +--target_arch: The architecture the code will be running on. Example: x64, arm64\n +--target_stdlib: The standard library the code will be running on. Example: glibc, musl\n +--dry-run: Do not delete any files, just print the files that would be deleted.\n +--help: Print this help message.\n` + ); + process.exit(0); +} + +const ARGV_ERRORS = []; + +const NODE_TO_ABI = { + 16: '93', + 18: '108', + 20: '115' +}; + +if (NODE) { + if (NODE_TO_ABI[NODE]) { + NODE = NODE_TO_ABI[NODE]; + } else if (NODE.startsWith('16')) { + NODE = NODE_TO_ABI['16']; + } else if (NODE.startsWith('18')) { + NODE = NODE_TO_ABI['18']; + } else if (NODE.startsWith('20')) { + NODE = NODE_TO_ABI['20']; + } else { + ARGV_ERRORS.push( + '❌ Sentry: Invalid node version passed as argument, please make sure --target_node is a valid major node version. Supported versions are 16, 18 and 20.' + ); + } +} + +if (!SOURCE_DIR) { + ARGV_ERRORS.push( + '❌ Sentry: Missing target_dir_path argument. target_dir_path should point to the directory containing the final bundled code. If you are using webpack, this would be the equivalent of output.path option.' + ); +} + +if (!PLATFORM && !ARCH && !STDLIB) { + ARGV_ERRORS.push( + `❌ Sentry: Missing argument values, pruning requires either --target_platform, --target_arch or --targer_stdlib to be passed as argument values.\n Example: sentry-prune-profiler-binaries --target_platform=linux --target_arch=x64 --target_stdlib=glibc\n +If you are unsure about the execution environment, you can opt to skip some values, but at least one value must be passed.` + ); +} + +if (ARGV_ERRORS.length > 0) { + // eslint-disable-next-line no-console + console.log(ARGV_ERRORS.join('\n')); + process.exit(1); +} + +const SENTRY__PROFILER_BIN_REGEXP = /sentry_cpu_profiler-.*\.node$/; + +async function findSentryProfilerBinaries(source_dir) { + const binaries = new Set(); + const queue = [source_dir]; + + while (queue.length > 0) { + const dir = queue.pop(); + + for (const file of fs.readdirSync(dir)) { + if (SENTRY__PROFILER_BIN_REGEXP.test(file)) { + binaries.add(`${dir }/${ file}`); + continue; + } + + if (fs.statSync(`${dir }/${ file}`).isDirectory()) { + if (file === 'node_modules') { + continue; + } + + queue.push(`${dir }/${ file}`); + } + } + } + + return binaries; +} + +function bytesToHumanReadable(bytes) { + if (bytes < 1024) { + return `${bytes } Bytes`; + } else if (bytes < 1048576) { + return `${(bytes / 1024).toFixed(2) } KiB`; + } else { + return `${(bytes / 1048576).toFixed(2) } MiB`; + } +} + +async function prune(binaries) { + let bytesSaved = 0; + let removedBinariesCount = 0; + + const conditions = [PLATFORM, ARCH, STDLIB, NODE].filter((n) => !!n); + + for (const binary of binaries) { + if (conditions.every((condition) => binary.includes(condition))) { + continue; + } + + const stats = fs.statSync(binary); + bytesSaved += stats.size; + removedBinariesCount++; + + if (process.argv.includes('--dry-run')) { + // eslint-disable-next-line no-console + console.log(`Sentry: would have pruned ${binary} (${bytesToHumanReadable(stats.size)})`); + continue; + } + + // eslint-disable-next-line no-console + console.log(`Sentry: pruned ${binary} (${bytesToHumanReadable(stats.size)})`); + fs.unlinkSync(binary); + } + + if (removedBinariesCount === 0) { + // eslint-disable-next-line no-console + console.log( + '❌ Sentry: no binaries pruned, please make sure target argument values are valid or use --help for more information.' + ); + return; + } + + if (process.argv.includes('--dry-run')) { + // eslint-disable-next-line no-console + console.log( + `✅ Sentry: would have pruned ${removedBinariesCount} ${ + removedBinariesCount === 1 ? 'binary' : 'binaries' + } and saved ${bytesToHumanReadable(bytesSaved)}.` + ); + return; + } + + // eslint-disable-next-line no-console + console.log( + `✅ Sentry: pruned ${removedBinariesCount} ${ + removedBinariesCount === 1 ? 'binary' : 'binaries' + }, saved ${bytesToHumanReadable(bytesSaved)} in total.` + ); +} + +(async () => { + const binaries = await findSentryProfilerBinaries(SOURCE_DIR); + await prune(binaries); +})() diff --git a/packages/profiling-node/src/cpu_profiler.ts b/packages/profiling-node/src/cpu_profiler.ts new file mode 100644 index 000000000000..8f97c11c7711 --- /dev/null +++ b/packages/profiling-node/src/cpu_profiler.ts @@ -0,0 +1,157 @@ +import { arch as _arch, platform as _platform } from 'os'; +import { env, versions } from 'process'; +import { threadId } from 'worker_threads'; +import { getAbi } from 'node-abi'; +import { join, resolve } from 'path'; +import { familySync } from 'detect-libc'; + +import { GLOBAL_OBJ, logger } from '@sentry/utils'; +import { isDebugBuild } from './env'; +import type { PrivateV8CpuProfilerBindings, V8CpuProfilerBindings } from './types'; + +const stdlib = familySync(); +const platform = process.env['BUILD_PLATFORM'] || _platform(); +const arch = process.env['BUILD_ARCH'] || _arch(); +const abi = getAbi(versions.node, 'node'); +const identifier = [platform, arch, stdlib, abi].filter((c) => c !== undefined && c !== null).join('-'); + +const built_from_source_path = resolve(__dirname, `./sentry_cpu_profiler-${identifier}`); + +/** + * Imports cpp bindings based on the current platform and architecture. + */ +// eslint-disable-next-line complexity +export function importCppBindingsModule(): PrivateV8CpuProfilerBindings { + // If a binary path is specified, use that. + if (env['SENTRY_PROFILER_BINARY_PATH']) { + const envPath = env['SENTRY_PROFILER_BINARY_PATH']; + return require(envPath); + } + + // If a user specifies a different binary dir, they are in control of the binaries being moved there + if (env['SENTRY_PROFILER_BINARY_DIR']) { + const binaryPath = join(resolve(env['SENTRY_PROFILER_BINARY_DIR']), `sentry_cpu_profiler-${identifier}`); + return require(`${binaryPath }.node`); + } + + /* eslint-disable no-fallthrough */ + // We need the fallthrough so that in the end, we can fallback to the require dynamice require. + // This is for cases where precompiled binaries were not provided, but may have been compiled from source. + if (platform === 'darwin') { + if (arch === 'x64') { + if (abi === '93') { + return require('./sentry_cpu_profiler-darwin-x64-93.node'); + } + if (abi === '108') { + return require('./sentry_cpu_profiler-darwin-x64-108.node'); + } + if (abi === '115') { + return require('./sentry_cpu_profiler-darwin-x64-115.node'); + } + } + + if (arch === 'arm64') { + if (abi === '93') { + return require('./sentry_cpu_profiler-darwin-arm64-93.node'); + } + if (abi === '108') { + return require('./sentry_cpu_profiler-darwin-arm64-108.node'); + } + if (abi === '115') { + return require('./sentry_cpu_profiler-darwin-arm64-115.node'); + } + } + } + + if (platform === 'win32') { + if (arch === 'x64') { + if (abi === '93') { + return require('./sentry_cpu_profiler-win32-x64-93.node'); + } + if (abi === '108') { + return require('./sentry_cpu_profiler-win32-x64-108.node'); + } + if (abi === '115') { + return require('./sentry_cpu_profiler-win32-x64-115.node'); + } + } + } + + if (platform === 'linux') { + if (arch === 'x64') { + if (stdlib === 'musl') { + if (abi === '93') { + return require('./sentry_cpu_profiler-linux-x64-musl-93.node'); + } + if (abi === '108') { + return require('./sentry_cpu_profiler-linux-x64-musl-108.node'); + } + if (abi === '115') { + return require('./sentry_cpu_profiler-linux-x64-musl-115.node'); + } + } + if (stdlib === 'glibc') { + if (abi === '93') { + return require('./sentry_cpu_profiler-linux-x64-glibc-93.node'); + } + if (abi === '108') { + return require('./sentry_cpu_profiler-linux-x64-glibc-108.node'); + } + if (abi === '115') { + return require('./sentry_cpu_profiler-linux-x64-glibc-115.node'); + } + } + } + if (arch === 'arm64') { + if (stdlib === 'musl') { + if (abi === '93') { + return require('./sentry_cpu_profiler-linux-arm64-musl-93.node'); + } + if (abi === '108') { + return require('./sentry_cpu_profiler-linux-arm64-musl-108.node'); + } + if (abi === '115') { + return require('./sentry_cpu_profiler-linux-arm64-musl-115.node'); + } + } + if (stdlib === 'glibc') { + if (abi === '93') { + return require('./sentry_cpu_profiler-linux-arm64-glibc-93.node'); + } + if (abi === '108') { + return require('./sentry_cpu_profiler-linux-arm64-glibc-108.node'); + } + if (abi === '115') { + return require('./sentry_cpu_profiler-linux-arm64-glibc-115.node'); + } + } + } + } + return require(`${built_from_source_path }.node`); +} + +const PrivateCpuProfilerBindings: PrivateV8CpuProfilerBindings = importCppBindingsModule(); +const CpuProfilerBindings: V8CpuProfilerBindings = { + startProfiling(name: string) { + if (!PrivateCpuProfilerBindings) { + if (isDebugBuild()) { + logger.log('[Profiling] Bindings not loaded, ignoring call to startProfiling.'); + } + return; + } + + return PrivateCpuProfilerBindings.startProfiling(name); + }, + stopProfiling(name: string) { + if (!PrivateCpuProfilerBindings) { + if (isDebugBuild()) { + logger.log('[Profiling] Bindings not loaded or profile was never started, ignoring call to stopProfiling.'); + } + return null; + } + return PrivateCpuProfilerBindings.stopProfiling(name, threadId, !!GLOBAL_OBJ._sentryDebugIds); + } +}; + +export { PrivateCpuProfilerBindings }; +export { CpuProfilerBindings }; diff --git a/packages/profiling-node/src/env.ts b/packages/profiling-node/src/env.ts new file mode 100644 index 000000000000..71c7e1623fb8 --- /dev/null +++ b/packages/profiling-node/src/env.ts @@ -0,0 +1,17 @@ +/** + * This module exists for optimizations in the build process through rollup and terser. We define some global + * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these + * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will + * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to + * `logger` and preventing node-related code from appearing in browser bundles. + */ +const __SENTRY_DEBUG__ = true; + +/** + * Figures out if we're building with debug functionality. + * + * @returns true if this is a debug build + */ +export function isDebugBuild(): boolean { + return __SENTRY_DEBUG__; +} diff --git a/packages/profiling-node/src/hubextensions.ts b/packages/profiling-node/src/hubextensions.ts new file mode 100644 index 000000000000..cb98beefa914 --- /dev/null +++ b/packages/profiling-node/src/hubextensions.ts @@ -0,0 +1,260 @@ +import type { Hub, TransactionContext, CustomSamplingContext, Transaction } from '@sentry/types'; +import { logger, uuid4 } from '@sentry/utils'; +import type { NodeClient } from '@sentry/node'; +import { getMainCarrier } from '@sentry/core'; + +import { isDebugBuild } from './env'; +import { CpuProfilerBindings } from './cpu_profiler'; +import { isValidSampleRate } from './utils'; + +export const MAX_PROFILE_DURATION_MS = 30 * 1000; + +type StartTransaction = ( + this: Hub, + transactionContext: TransactionContext, + customSamplingContext?: CustomSamplingContext +) => Transaction; + +/** + * Takes a transaction and determines if it should be profiled or not. If it should be profiled, it returns the + * profile_id, otherwise returns undefined. Takes care of setting profile context on transaction as well + */ +export function maybeProfileTransaction( + client: NodeClient | undefined, + transaction: Transaction, + customSamplingContext?: CustomSamplingContext +): string | undefined { + // profilesSampleRate is multiplied with tracesSampleRate to get the final sampling rate. We dont perform + // the actual multiplication to get the final rate, but we discard the profile if the transaction was sampled, + // so anything after this block from here is based on the transaction sampling. + if (!transaction.sampled) { + return; + } + + // Client and options are required for profiling + if (!client) { + if (isDebugBuild()) { + logger.log('[Profiling] Profiling disabled, no client found.'); + } + return; + } + + const options = client.getOptions(); + if (!options) { + if (isDebugBuild()) { + logger.log('[Profiling] Profiling disabled, no options found.'); + } + return; + } + + const profilesSampler = options.profilesSampler; + let profilesSampleRate: number | boolean | undefined = options.profilesSampleRate; + + // Prefer sampler to sample rate if both are provided. + if (typeof profilesSampler === 'function') { + profilesSampleRate = profilesSampler({ transactionContext: transaction.toContext(), ...customSamplingContext }); + } + + // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The + // only valid values are booleans or numbers between 0 and 1.) + if (!isValidSampleRate(profilesSampleRate)) { + if (isDebugBuild()) { + logger.warn('[Profiling] Discarding profile because of invalid sample rate.'); + } + return; + } + + // if the function returned 0 (or false), or if `profileSampleRate` is 0, it's a sign the profile should be dropped + if (!profilesSampleRate) { + if (isDebugBuild()) { + logger.log( + `[Profiling] Discarding profile because ${ + typeof profilesSampler === 'function' + ? 'profileSampler returned 0 or false' + : 'a negative sampling decision was inherited or profileSampleRate is set to 0' + }` + ); + } + return; + } + + // Now we roll the dice. Math.random is inclusive of 0, but not of 1, so strict < is safe here. In case sampleRate is + // a boolean, the < comparison will cause it to be automatically cast to 1 if it's true and 0 if it's false. + const sampled = profilesSampleRate === true ? true : Math.random() < profilesSampleRate; + // Check if we should sample this profile + if (!sampled) { + if (isDebugBuild()) { + logger.log( + `[Profiling] Discarding profile because it's not included in the random sample (sampling rate = ${Number( + profilesSampleRate + )})` + ); + } + return; + } + + const profile_id = uuid4(); + CpuProfilerBindings.startProfiling(profile_id); + if (isDebugBuild()) { + logger.log(`[Profiling] started profiling transaction: ${ transaction.name}`); + } + + // set transaction context - do this regardless if profiling fails down the line + // so that we can still see the profile_id in the transaction context + return profile_id; +} + +/** + * Stops the profiler for profile_id and returns the profile + * @param transaction + * @param profile_id + * @returns + */ +export function stopTransactionProfile( + transaction: Transaction, + profile_id: string | undefined +): ReturnType | null { + // Should not happen, but satisfy the type checker and be safe regardless. + if (!profile_id) { + return null; + } + + const profile = CpuProfilerBindings.stopProfiling(profile_id); + + if (isDebugBuild()) { + logger.log(`[Profiling] stopped profiling of transaction: ${ transaction.name}`); + } + + // In case of an overlapping transaction, stopProfiling may return null and silently ignore the overlapping profile. + if (!profile) { + if (isDebugBuild()) { + logger.log( + `[Profiling] profiler returned null profile for: ${ transaction.name}`, + 'this may indicate an overlapping transaction or a call to stopProfiling with a profile title that was never started' + ); + } + return null; + } + + // Assign profile_id to the profile + profile.profile_id = profile_id; + return profile; +} + +/** + * Wraps startTransaction and stopTransaction with profiling related logic. + * startProfiling is called after the call to startTransaction in order to avoid our own code from + * being profiled. Because of that same reason, stopProfiling is called before the call to stopTransaction. + */ +export function __PRIVATE__wrapStartTransactionWithProfiling(startTransaction: StartTransaction): StartTransaction { + return function wrappedStartTransaction( + this: Hub, + transactionContext: TransactionContext, + customSamplingContext?: CustomSamplingContext + ): Transaction { + const transaction: Transaction = startTransaction.call(this, transactionContext, customSamplingContext); + + // Client is required if we want to profile + const client = this.getClient() as NodeClient | undefined; + if (!client) { + return transaction; + } + + // Check if we should profile this transaction. If a profile_id is returned, then profiling has been started. + const profile_id = maybeProfileTransaction(client, transaction, customSamplingContext); + if (!profile_id) { + return transaction; + } + + // A couple of important things to note here: + // `CpuProfilerBindings.stopProfiling` will be scheduled to run in 30seconds in order to exceed max profile duration. + // Whichever of the two (transaction.finish/timeout) is first to run, the profiling will be stopped and the gathered profile + // will be processed when the original transaction is finished. Since onProfileHandler can be invoked multiple times in the + // event of an error or user mistake (calling transaction.finish multiple times), it is important that the behavior of onProfileHandler + // is idempotent as we do not want any timings or profiles to be overriden by the last call to onProfileHandler. + // After the original finish method is called, the event will be reported through the integration and delegated to transport. + let profile: ReturnType | null = null; + + const options = client.getOptions(); + // Not intended for external use, hence missing types, but we want to profile a couple of things at Sentry that + // currently exceed the default timeout set by the SDKs. + const maxProfileDurationMs = + (options._experiments && options._experiments['maxProfileDurationMs']) || MAX_PROFILE_DURATION_MS; + + // Enqueue a timeout to prevent profiles from running over max duration. + let maxDurationTimeoutID: NodeJS.Timeout | void = global.setTimeout(() => { + if (isDebugBuild()) { + logger.log('[Profiling] max profile duration elapsed, stopping profiling for:', transaction.name); + } + profile = stopTransactionProfile(transaction, profile_id); + }, maxProfileDurationMs); + + // We need to reference the original finish call to avoid creating an infinite loop + const originalFinish = transaction.finish.bind(transaction); + + // Wrap the transaction finish method to stop profiling and set the profile on the transaction. + function profilingWrappedTransactionFinish(): void { + if (!profile_id) { + return originalFinish(); + } + + // We stop the handler first to ensure that the timeout is cleared and the profile is stopped. + if (maxDurationTimeoutID) { + global.clearTimeout(maxDurationTimeoutID); + maxDurationTimeoutID = undefined; + } + + // onProfileHandler should always return the same profile even if this is called multiple times. + // Always call onProfileHandler to ensure stopProfiling is called and the timeout is cleared. + if (!profile) { + profile = stopTransactionProfile(transaction, profile_id); + } + + // @ts-expect-error profile is not part of metadata + transaction.setMetadata({ profile }); + return originalFinish(); + } + + transaction.finish = profilingWrappedTransactionFinish; + return transaction; + }; +} + +/** + * Patches startTransaction and stopTransaction with profiling logic. + * This is used by the SDK's that do not support event hooks. + * @private + */ +function _addProfilingExtensionMethods(): void { + const carrier = getMainCarrier(); + if (!carrier.__SENTRY__) { + if (isDebugBuild()) { + logger.log("[Profiling] Can't find main carrier, profiling won't work."); + } + return; + } + + carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {}; + if (!carrier.__SENTRY__.extensions['startTransaction']) { + if (isDebugBuild()) { + logger.log('[Profiling] startTransaction does not exists, profiling will not work.'); + } + return; + } + + if (isDebugBuild()) { + logger.log('[Profiling] startTransaction exists, patching it with profiling functionality...'); + } + + carrier.__SENTRY__.extensions['startTransaction'] = __PRIVATE__wrapStartTransactionWithProfiling( + // This is patched by sentry/tracing, we are going to re-patch it... + carrier.__SENTRY__.extensions['startTransaction'] as StartTransaction + ); +} + +/** + * This patches the global object and injects the Profiling extensions methods + */ +export function addProfilingExtensionMethods(): void { + _addProfilingExtensionMethods(); +} diff --git a/packages/profiling-node/src/index.ts b/packages/profiling-node/src/index.ts new file mode 100644 index 000000000000..fee7c526929d --- /dev/null +++ b/packages/profiling-node/src/index.ts @@ -0,0 +1 @@ +export { ProfilingIntegration } from './integration'; diff --git a/packages/profiling-node/src/integration.ts b/packages/profiling-node/src/integration.ts new file mode 100644 index 000000000000..5e00f1c237d5 --- /dev/null +++ b/packages/profiling-node/src/integration.ts @@ -0,0 +1,247 @@ +import type { NodeClient } from '@sentry/node'; +import type { Integration, EventProcessor, Hub, Event, Transaction } from '@sentry/types'; + +import { logger } from '@sentry/utils'; + +import { isDebugBuild } from './env'; +import type { RawThreadCpuProfile, Profile } from './types'; +import { + addProfilingExtensionMethods, + maybeProfileTransaction, + stopTransactionProfile, + MAX_PROFILE_DURATION_MS +} from './hubextensions'; + +import { + addProfilesToEnvelope, + maybeRemoveProfileFromSdkMetadata, + createProfilingEventEnvelope, + createProfilingEvent, + isProfiledTransactionEvent, + findProfiledTransactionsFromEnvelope +} from './utils'; + +const MAX_PROFILE_QUEUE_LENGTH = 50; +const PROFILE_QUEUE: RawThreadCpuProfile[] = []; +const PROFILE_TIMEOUTS: Record = {}; + +function addToProfileQueue(profile: RawThreadCpuProfile): void { + PROFILE_QUEUE.push(profile); + + // We only want to keep the last n profiles in the queue. + if (PROFILE_QUEUE.length > MAX_PROFILE_QUEUE_LENGTH) { + PROFILE_QUEUE.shift(); + } +} + +/** + * We need this integration in order to send data to Sentry. We hook into the event processor + * and inspect each event to see if it is a transaction event and if that transaction event + * contains a profile on it's metadata. If that is the case, we create a profiling event envelope + * and delete the profile from the transaction metadata. + */ +export class ProfilingIntegration implements Integration { + /** + * @inheritDoc + */ + public readonly name: string; + public getCurrentHub?: () => Hub; + + public constructor(){ + this.name = 'ProfilingIntegration'; + } + + /** + * @inheritDoc + */ + public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void { + this.getCurrentHub = getCurrentHub; + const client = this.getCurrentHub().getClient() as NodeClient; + + if (client && typeof client.on === 'function') { + client.on('startTransaction', (transaction: Transaction) => { + const profile_id = maybeProfileTransaction(client, transaction, undefined); + + if (profile_id) { + const options = client.getOptions(); + // Not intended for external use, hence missing types, but we want to profile a couple of things at Sentry that + // currently exceed the default timeout set by the SDKs. + const maxProfileDurationMs = + (options._experiments && options._experiments['maxProfileDurationMs']) || MAX_PROFILE_DURATION_MS; + + if (PROFILE_TIMEOUTS[profile_id]) { + global.clearTimeout(PROFILE_TIMEOUTS[profile_id]); + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + delete PROFILE_TIMEOUTS[profile_id]; + } + + // Enqueue a timeout to prevent profiles from running over max duration. + PROFILE_TIMEOUTS[profile_id] = global.setTimeout(() => { + if (isDebugBuild()) { + logger.log('[Profiling] max profile duration elapsed, stopping profiling for:', transaction.name); + } + + const profile = stopTransactionProfile(transaction, profile_id); + if (profile) { + addToProfileQueue(profile); + } + }, maxProfileDurationMs); + + transaction.setContext('profile', { profile_id }); + // @ts-expect-error profile_id is not part of the metadata type + transaction.setMetadata({ profile_id: profile_id }); + } + }); + + client.on('finishTransaction', (transaction) => { + // @ts-expect-error profile_id is not part of the metadata type + const profile_id = transaction.metadata.profile_id; + if (profile_id && typeof profile_id === 'string') { + if (PROFILE_TIMEOUTS[profile_id]) { + global.clearTimeout(PROFILE_TIMEOUTS[profile_id]); + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + delete PROFILE_TIMEOUTS[profile_id]; + } + const profile = stopTransactionProfile(transaction, profile_id); + + if (profile) { + addToProfileQueue(profile); + } + } + }); + + client.on('beforeEnvelope', (envelope): void => { + // if not profiles are in queue, there is nothing to add to the envelope. + if (!PROFILE_QUEUE.length) { + return; + } + + const profiledTransactionEvents = findProfiledTransactionsFromEnvelope(envelope); + if (!profiledTransactionEvents.length) { + return; + } + + const profilesToAddToEnvelope: Profile[] = []; + + for (const profiledTransaction of profiledTransactionEvents) { + const profileContext = profiledTransaction.contexts?.['profile'] + const profile_id = profileContext?.['profile_id']; + + if (!profile_id) { + throw new TypeError('[Profiling] cannot find profile for a transaction without a profile context'); + } + + // Remove the profile from the transaction context before sending, relay will take care of the rest. + if (profileContext) { + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + delete profiledTransaction.contexts?.['profile']; + } + + // We need to find both a profile and a transaction event for the same profile_id. + const profileIndex = PROFILE_QUEUE.findIndex((p) => p.profile_id === profile_id); + if (profileIndex === -1) { + if (isDebugBuild()) { + logger.log(`[Profiling] Could not retrieve profile for transaction: ${profile_id}`); + } + continue; + } + + const cpuProfile = PROFILE_QUEUE[profileIndex]; + if (!cpuProfile) { + if (isDebugBuild()) { + logger.log(`[Profiling] Could not retrieve profile for transaction: ${profile_id}`); + } + continue; + } + + // Remove the profile from the queue. + PROFILE_QUEUE.splice(profileIndex, 1); + const profile = createProfilingEvent(cpuProfile, profiledTransaction); + + if (client.emit && profile) { + const integrations = + client['_integrations'] && client['_integrations'] !== null && !Array.isArray(client['_integrations']) + ? Object.keys(client['_integrations']) + : undefined; + + // @ts-expect-error bad overload due to unknown event + client.emit('preprocessEvent', profile, { + event_id: profiledTransaction.event_id, + integrations + }); + } + + if (profile) { + profilesToAddToEnvelope.push(profile); + } + } + + addProfilesToEnvelope(envelope, profilesToAddToEnvelope); + }); + } else { + // Patch the carrier methods and add the event processor. + addProfilingExtensionMethods(); + addGlobalEventProcessor(this.handleGlobalEvent.bind(this)); + } + } + + /** + * @inheritDoc + */ + public async handleGlobalEvent(event: Event): Promise { + if (this.getCurrentHub === undefined) { + return maybeRemoveProfileFromSdkMetadata(event); + } + + if (isProfiledTransactionEvent(event)) { + // Client, Dsn and Transport are all required to be able to send the profiling event to Sentry. + // If either of them is not available, we remove the profile from the transaction event. + // and forward it to the next event processor. + const hub = this.getCurrentHub(); + const client = hub.getClient(); + if (!client) { + if (isDebugBuild()) { + logger.log( + '[Profiling] getClient did not return a Client, removing profile from event and forwarding to next event processors.' + ); + } + return maybeRemoveProfileFromSdkMetadata(event); + } + + const dsn = client.getDsn(); + if (!dsn) { + if (isDebugBuild()) { + logger.log( + '[Profiling] getDsn did not return a Dsn, removing profile from event and forwarding to next event processors.' + ); + } + return maybeRemoveProfileFromSdkMetadata(event); + } + + const transport = client.getTransport(); + if (!transport) { + if (isDebugBuild()) { + logger.log( + '[Profiling] getTransport did not return a Transport, removing profile from event and forwarding to next event processors.' + ); + } + return maybeRemoveProfileFromSdkMetadata(event); + } + + // If all required components are available, we construct a profiling event envelope and send it to Sentry. + if (isDebugBuild()) { + logger.log('[Profiling] Preparing envelope and sending a profiling event'); + } + const envelope = createProfilingEventEnvelope(event, dsn); + + if (envelope) { + // Fire and forget, we don't want to block the main event processing flow. + // eslint-disable-next-line @typescript-eslint/no-floating-promises + transport.send(envelope); + } + } + + // Ensure sdkProcessingMetadata["profile"] is removed from the event before forwarding it to the next event processor. + return maybeRemoveProfileFromSdkMetadata(event); + } +} diff --git a/packages/profiling-node/src/sdk_version.ts b/packages/profiling-node/src/sdk_version.ts new file mode 100644 index 000000000000..116a57e251ff --- /dev/null +++ b/packages/profiling-node/src/sdk_version.ts @@ -0,0 +1,3 @@ +// This is an auto generated file. Do not edit this file directly. +// The version is bumped by scripts/bump_version.sh +export const SDK_VERSION = '1.3.3'; diff --git a/packages/profiling-node/src/types.ts b/packages/profiling-node/src/types.ts new file mode 100644 index 000000000000..3042335269eb --- /dev/null +++ b/packages/profiling-node/src/types.ts @@ -0,0 +1,105 @@ +import type { Event } from '@sentry/types'; + +interface Sample { + stack_id: number; + thread_id: string; + elapsed_since_start_ns: string; +} + +type Stack = number[]; + +type Frame = { + function: string; + file: string; + lineno: number; + colno: number; +}; + +interface Measurement { + unit: string; + values: { + elapsed_since_start_ns: number; + value: number; + }[]; +} + +export interface DebugImage { + code_file: string; + type: string; + debug_id: string; + image_addr?: string; + image_size?: number; + image_vmaddr?: string; +} + +// Profile is marked as optional because it is deleted from the metadata +// by the integration before the event is processed by other integrations. +export interface ProfiledEvent extends Event { + sdkProcessingMetadata: { + profile?: RawThreadCpuProfile; + }; +} + +export interface RawThreadCpuProfile { + profile_id?: string; + stacks: ReadonlyArray; + samples: ReadonlyArray; + frames: ReadonlyArray; + resources: ReadonlyArray; + profiler_logging_mode: 'eager' | 'lazy'; + measurements: Record; +} +export interface ThreadCpuProfile { + stacks: ReadonlyArray; + samples: ReadonlyArray; + frames: ReadonlyArray; + thread_metadata: Record; + queue_metadata?: Record; +} + +export interface PrivateV8CpuProfilerBindings { + startProfiling(name: string): void; + stopProfiling(name: string, threadId: number, collectResources: boolean): RawThreadCpuProfile | null; + getFrameModule(abs_path: string): string; +} + +export interface V8CpuProfilerBindings { + startProfiling(name: string): void; + stopProfiling(name: string): RawThreadCpuProfile | null; +} + +export interface Profile { + event_id: string; + version: string; + os: { + name: string; + version: string; + build_number: string; + }; + runtime: { + name: string; + version: string; + }; + device: { + architecture: string; + is_emulator: boolean; + locale: string; + manufacturer: string; + model: string; + }; + timestamp: string; + release: string; + environment: string; + platform: string; + profile: ThreadCpuProfile; + debug_meta?: { + images: DebugImage[]; + }; + transaction: { + name: string; + id: string; + trace_id: string; + active_thread_id: string; + }; + measurements: Record; +} diff --git a/packages/profiling-node/src/utils.ts b/packages/profiling-node/src/utils.ts new file mode 100644 index 000000000000..71396edae7e7 --- /dev/null +++ b/packages/profiling-node/src/utils.ts @@ -0,0 +1,514 @@ +/* eslint-disable max-lines */ +import * as os from 'os'; +import { versions, env } from 'process'; +import { isMainThread, threadId } from 'worker_threads'; +import type { + SdkInfo, + SdkMetadata, + StackParser, + StackFrame, + DynamicSamplingContext, + DsnComponents, + Event, + EventItem, + Envelope, + EventEnvelope, + EventEnvelopeHeaders, + Context, +} from '@sentry/types'; + +import * as Sentry from '@sentry/node'; +import { GLOBAL_OBJ, createEnvelope, dropUndefinedKeys, dsnToString, logger, forEachEnvelopeItem } from '@sentry/utils'; + +import { isDebugBuild } from './env'; +import type { ProfiledEvent, RawThreadCpuProfile, Profile, ThreadCpuProfile } from './types'; +import type { DebugImage } from './types'; + +// We require the file because if we import it, it will be included in the bundle. +// I guess tsc does not check file contents when it's imported. +// eslint-disable-next-line +const THREAD_ID_STRING = String(threadId); +const THREAD_NAME = isMainThread ? 'main' : 'worker'; +const FORMAT_VERSION = '1'; + +// Machine properties (eval only once) +const PLATFORM = os.platform(); +const RELEASE = os.release(); +const VERSION = os.version(); +const TYPE = os.type(); +const MODEL = os.machine ? os.machine() : os.arch(); +const ARCH = os.arch(); + +/** + * Checks if the profile is a raw profile or a profile enriched with thread information. + * @param {ThreadCpuProfile | RawThreadCpuProfile} profile + * @returns {boolean} + */ +function isRawThreadCpuProfile(profile: ThreadCpuProfile | RawThreadCpuProfile): profile is RawThreadCpuProfile { + return !('thread_metadata' in profile); +} + +/** + * Enriches the profile with threadId of the current thread. + * This is done in node as we seem to not be able to get the info from C native code. + * + * @param {ThreadCpuProfile | RawThreadCpuProfile} profile + * @returns {ThreadCpuProfile} + */ +export function enrichWithThreadInformation(profile: ThreadCpuProfile | RawThreadCpuProfile): ThreadCpuProfile { + if (!isRawThreadCpuProfile(profile)) { + return profile; + } + + return { + samples: profile.samples, + frames: profile.frames, + stacks: profile.stacks, + thread_metadata: { + [THREAD_ID_STRING]: { + name: THREAD_NAME + } + } + }; +} + +/** + * Extract sdk info from from the API metadata + * @param {SdkMetadata | undefined} metadata + * @returns {SdkInfo | undefined} + */ +function getSdkMetadataForEnvelopeHeader(metadata?: SdkMetadata): SdkInfo | undefined { + if (!metadata || !metadata.sdk) { + return undefined; + } + + return { name: metadata.sdk.name, version: metadata.sdk.version } as SdkInfo; +} + +/** + * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key. + * Merge with existing data if any. + * + * @param {Event} event + * @param {SdkInfo | undefined} sdkInfo + * @returns {Event} + */ +function enhanceEventWithSdkInfo(event: Event, sdkInfo?: SdkInfo): Event { + if (!sdkInfo) { + return event; + } + event.sdk = event.sdk || {}; + event.sdk.name = event.sdk.name || sdkInfo.name || 'unknown sdk'; + event.sdk.version = event.sdk.version || sdkInfo.version || 'unknown sdk version'; + event.sdk.integrations = [...(event.sdk.integrations || []), ...(sdkInfo.integrations || [])]; + event.sdk.packages = [...(event.sdk.packages || []), ...(sdkInfo.packages || [])]; + return event; +} + +/** + * + * @param {Event} event + * @param {SdkInfo | undefined} sdkInfo + * @param {string | undefined} tunnel + * @param {DsnComponents} dsn + * @returns {EventEnvelopeHeaders} + */ +function createEventEnvelopeHeaders( + event: Event, + sdkInfo: SdkInfo | undefined, + tunnel: string | undefined, + dsn: DsnComponents +): EventEnvelopeHeaders { + const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata['dynamicSamplingContext']; + + return { + event_id: event.event_id as string, + sent_at: new Date().toISOString(), + ...(sdkInfo && { sdk: sdkInfo }), + ...(!!tunnel && { dsn: dsnToString(dsn) }), + ...(event.type === 'transaction' && + dynamicSamplingContext && { + trace: dropUndefinedKeys({ ...dynamicSamplingContext }) as DynamicSamplingContext + }) + }; +} + +/** + * Creates a profiling event envelope from a Sentry event. If profile does not pass + * validation, returns null. + * @param {Event} + * @returns {Profile | null} + */ +export function createProfilingEventFromTransaction(event: ProfiledEvent): Profile | null { + if (event.type !== 'transaction') { + // createProfilingEventEnvelope should only be called for transactions, + // we type guard this behavior with isProfiledTransactionEvent. + throw new TypeError('Profiling events may only be attached to transactions, this should never occur.'); + } + + const rawProfile = event.sdkProcessingMetadata['profile']; + if (rawProfile === undefined || rawProfile === null) { + throw new TypeError( + `Cannot construct profiling event envelope without a valid profile. Got ${rawProfile} instead.` + ); + } + + if (!rawProfile.profile_id) { + throw new TypeError( + `Cannot construct profiling event envelope without a valid profile id. Got ${rawProfile.profile_id} instead.` + ); + } + + if (!isValidProfile(rawProfile)) { + return null; + } + + return createProfilePayload(rawProfile, { + release: event.release ?? '', + environment: event.environment ?? '', + event_id: event.event_id ?? '', + transaction: event.transaction ?? '', + start_timestamp: event.start_timestamp ? event.start_timestamp * 1000 : Date.now(), + trace_id: event.contexts?.['trace']?.['trace_id'] ?? '', + profile_id: rawProfile.profile_id + }); +} + +/** + * Creates a profiling envelope item, if the profile does not pass validation, returns null. + * @param {RawThreadCpuProfile} + * @param {Event} + * @returns {Profile | null} + */ +export function createProfilingEvent(profile: RawThreadCpuProfile, event: Event): Profile | null { + if (!isValidProfile(profile)) { + return null; + } + + return createProfilePayload(profile, { + release: event.release ?? '', + environment: event.environment ?? '', + event_id: event.event_id ?? '', + transaction: event.transaction ?? '', + start_timestamp: event.start_timestamp ? event.start_timestamp * 1000 : Date.now(), + trace_id: event.contexts?.['trace']?.['trace_id'] ?? '', + profile_id: profile.profile_id + }); +} + +/** + * Create a profile + * @param {RawThreadCpuProfile} cpuProfile + * @param {options} + * @returns {Profile} + */ + +function createProfilePayload( + cpuProfile: RawThreadCpuProfile, + { + release, + environment, + event_id, + transaction, + start_timestamp, + trace_id, + profile_id + }: { + release: string; + environment: string; + event_id: string; + transaction: string; + start_timestamp: number; + trace_id: string | undefined; + profile_id: string; + } +): Profile { + // Log a warning if the profile has an invalid traceId (should be uuidv4). + // All profiles and transactions are rejected if this is the case and we want to + // warn users that this is happening if they enable debug flag + if (trace_id && trace_id.length !== 32) { + if (isDebugBuild()) { + logger.log(`[Profiling] Invalid traceId: ${ trace_id } on profiled event`); + } + } + + const enrichedThreadProfile = enrichWithThreadInformation(cpuProfile); + + const profile: Profile = { + event_id: profile_id, + timestamp: new Date(start_timestamp).toISOString(), + platform: 'node', + version: FORMAT_VERSION, + release: release, + environment: environment, + measurements: cpuProfile.measurements, + runtime: { + name: 'node', + version: versions.node || '' + }, + os: { + name: PLATFORM, + version: RELEASE, + build_number: VERSION + }, + device: { + locale: env['LC_ALL'] || env['LC_MESSAGES'] || env['LANG'] || env['LANGUAGE'] || '', + model: MODEL, + manufacturer: TYPE, + architecture: ARCH, + is_emulator: false + }, + debug_meta: { + images: applyDebugMetadata(cpuProfile.resources) + }, + profile: enrichedThreadProfile, + transaction: { + name: transaction, + id: event_id, + trace_id: trace_id || '', + active_thread_id: THREAD_ID_STRING + } + }; + + return profile; +} + +/** + * Creates an envelope from a profiling event. + * @param {Event} Profile + * @param {DsnComponents} dsn + * @param {SdkMetadata} metadata + * @param {string|undefined} tunnel + * @returns {Envelope|null} + */ +export function createProfilingEventEnvelope( + event: ProfiledEvent, + dsn: DsnComponents, + metadata?: SdkMetadata, + tunnel?: string +): EventEnvelope | null { + const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata); + enhanceEventWithSdkInfo(event, metadata && metadata.sdk); + + const envelopeHeaders = createEventEnvelopeHeaders(event, sdkInfo, tunnel, dsn); + const profile = createProfilingEventFromTransaction(event); + + if (!profile) { + return null; + } + + const envelopeItem: EventItem = [ + { + type: 'profile' + }, + // @ts-expect-error profile is not part of EventItem yet + profile + ]; + + return createEnvelope(envelopeHeaders, [envelopeItem]); +} + +/** + * Check if event metadata contains profile information + * @param {Event} + * @returns {boolean} + */ +export function isProfiledTransactionEvent(event: Event): event is ProfiledEvent { + return !!(event.sdkProcessingMetadata && event.sdkProcessingMetadata['profile']); +} + +/** + * Due to how profiles are attached to event metadata, we may sometimes want to remove them to ensure + * they are not processed by other Sentry integrations. This can be the case when we cannot construct a valid + * profile from the data we have or some of the mechanisms to send the event (Hub, Transport etc) are not available to us. + * + * @param {Event | ProfiledEvent} event + * @returns {Event} + */ +export function maybeRemoveProfileFromSdkMetadata(event: Event | ProfiledEvent): Event { + if (!isProfiledTransactionEvent(event)) { + return event; + } + + delete event.sdkProcessingMetadata.profile; + return event; +} + +/** + * Checks the given sample rate to make sure it is valid type and value (a boolean, or a number between 0 and 1). + * @param {unknown} rate + * @returns {boolean} + */ +export function isValidSampleRate(rate: unknown): boolean { + // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck + if ((typeof rate !== 'number' && typeof rate !== 'boolean') || (typeof rate === 'number' && isNaN(rate))) { + if (isDebugBuild()) { + logger.warn( + `[Profiling] Invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify( + rate + )} of type ${JSON.stringify(typeof rate)}.` + ); + } + return false; + } + + // Boolean sample rates are always valid + if (rate === true || rate === false) { + return true; + } + + // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false + if (rate < 0 || rate > 1) { + if (isDebugBuild()) { + logger.warn(`[Profiling] Invalid sample rate. Sample rate must be between 0 and 1. Got ${rate}.`); + } + return false; + } + return true; +} + +/** + * Checks if the profile is valid and can be sent to Sentry. + * @param {RawThreadCpuProfile} profile + * @returns {boolean} + */ +export function isValidProfile(profile: RawThreadCpuProfile): profile is RawThreadCpuProfile & { profile_id: string } { + if (profile.samples.length <= 1) { + if (isDebugBuild()) { + // Log a warning if the profile has less than 2 samples so users can know why + // they are not seeing any profiling data and we cant avoid the back and forth + // of asking them to provide us with a dump of the profile data. + logger.log('[Profiling] Discarding profile because it contains less than 2 samples'); + } + return false; + } + + if (!profile.profile_id) { + return false; + } + + return true; +} + +/** + * Adds items to envelope if they are not already present - mutates the envelope. + * @param {Envelope} envelope + * @param {Profile[]} profiles + * @returns {Envelope} + */ +export function addProfilesToEnvelope(envelope: Envelope, profiles: Profile[]): Envelope { + if (!profiles.length) { + return envelope; + } + + for (const profile of profiles) { + // @ts-expect-error untyped envelope + envelope[1].push([{ type: 'profile' }, profile]); + } + return envelope; +} + +/** + * Finds transactions with profile_id context in the envelope + * @param {Envelope} envelope + * @returns {Event[]} + */ +export function findProfiledTransactionsFromEnvelope(envelope: Envelope): Event[] { + const events: Event[] = []; + + forEachEnvelopeItem(envelope, (item, type) => { + if (type !== 'transaction') { + return; + } + + // First item is the type, so we can skip it, everything else is an event + for (let j = 1; j < item.length; j++) { + const event = item[j]; + + if(!event){ + // Shouldnt happen, but lets be safe + continue + } + + + // @ts-expect-error profile_id is not part of the metadata type + const profile_id = (event.contexts as Context)?.['profile']?.['profile_id']; + + if (event && profile_id) { + events.push(item[j] as Event); + } + } + }); + + return events; +} + +const debugIdStackParserCache = new WeakMap>(); + +/** + * Cross reference profile collected resources with debug_ids and return a list of debug images. + * @param {string[]} resource_paths + * @returns {DebugImage[]} + */ +export function applyDebugMetadata(resource_paths: ReadonlyArray): DebugImage[] { + const debugIdMap = GLOBAL_OBJ._sentryDebugIds; + + if (!debugIdMap) { + return []; + } + + const hub = Sentry.getCurrentHub(); + const client = hub.getClient(); + const options = client && client.getOptions(); + + if (!options || !options.stackParser) { + return []; + } + + let debugIdStackFramesCache: Map; + const cachedDebugIdStackFrameCache = debugIdStackParserCache.get(options.stackParser); + if (cachedDebugIdStackFrameCache) { + debugIdStackFramesCache = cachedDebugIdStackFrameCache; + } else { + debugIdStackFramesCache = new Map(); + debugIdStackParserCache.set(options.stackParser, debugIdStackFramesCache); + } + + // Build a map of filename -> debug_id. + const filenameDebugIdMap = Object.keys(debugIdMap).reduce>((acc, debugIdStackTrace) => { + let parsedStack: StackFrame[]; + + const cachedParsedStack = debugIdStackFramesCache.get(debugIdStackTrace); + if (cachedParsedStack) { + parsedStack = cachedParsedStack; + } else { + parsedStack = options.stackParser(debugIdStackTrace); + debugIdStackFramesCache.set(debugIdStackTrace, parsedStack); + } + + for (let i = parsedStack.length - 1; i >= 0; i--) { + const stackFrame = parsedStack[i]; + const file = stackFrame && stackFrame.filename; + + if (stackFrame && file) { + acc[file] = debugIdMap[debugIdStackTrace] as string; + break; + } + } + return acc; + }, {}); + + const images: DebugImage[] = []; + + for (const resource of resource_paths) { + if (resource && filenameDebugIdMap[resource]) { + images.push({ + type: 'sourcemap', + code_file: resource, + debug_id: filenameDebugIdMap[resource] as string + }); + } + } + + return images; +} diff --git a/packages/profiling-node/test-binaries.entry.js b/packages/profiling-node/test-binaries.entry.js new file mode 100644 index 000000000000..d1f58e365ca1 --- /dev/null +++ b/packages/profiling-node/test-binaries.entry.js @@ -0,0 +1,19 @@ +// See test-binaries.esbuild.js +const Sentry = require('@sentry/node'); +const Profiling = require('./lib'); + +const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); + +Sentry.init({ + dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', + integrations: [new Profiling.ProfilingIntegration()], + tracesSampleRate: 1.0, + profilesSampleRate: 1.0 +}); + +const txn = Sentry.startTransaction('Precompile test'); + +(async () => { + await wait(500); + txn.finish(); +})() diff --git a/packages/profiling-node/test-binaries.esbuild.js b/packages/profiling-node/test-binaries.esbuild.js new file mode 100644 index 000000000000..0bbe111cd513 --- /dev/null +++ b/packages/profiling-node/test-binaries.esbuild.js @@ -0,0 +1,20 @@ +// Because bundlers can now predetermine a static set of binaries we need to ensure those binaries +// actually exists, else we risk a compile time error when bundling the package. This could happen +// if we added a new binary in cpu_profiler.ts, but forgot to prebuild binaries for it. Because CI +// only runs integration and unit tests, this change would be missed and could end up in a release. +// Therefor, once all binaries are precompiled in CI and tests pass, run esbuild with bundle:true +// which will copy all binaries to the outfile folder and throw if any of them are missing. +const esbuild = require('esbuild'); + +esbuild.build({ + platform: 'node', + entryPoints: ['./test-binaries.entry.js'], + outfile: './build-test/test-binaries.js', + target: 'esnext', + format: 'esm', + bundle: true, + tsconfig: './tsconfig.json', + loader: { + '.node': 'copy' + } +}); diff --git a/packages/profiling-node/test/bindings.test.ts b/packages/profiling-node/test/bindings.test.ts new file mode 100644 index 000000000000..cd402a9d36f2 --- /dev/null +++ b/packages/profiling-node/test/bindings.test.ts @@ -0,0 +1,30 @@ +// Contains unit tests for some of the C++ bindings. These functions +// are exported on the private bindings object, so we can test them and +// they should not be used outside of this file. +import { PrivateCpuProfilerBindings } from '../src/cpu_profiler'; +import { platform } from 'os'; + +const cases = [ + ['/Users/jonas/code/node_modules/@scope/package/file.js', '@scope.package:file'], + ['/Users/jonas/code/node_modules/package/dir/file.js', 'package.dir:file'], + ['/Users/jonas/code/node_modules/package/file.js', 'package:file'], + ['/Users/jonas/code/src/file.js', 'Users.jonas.code.src:file'], + + // Preserves non .js extensions + ['/Users/jonas/code/src/file.ts', 'Users.jonas.code.src:file.ts'], + // No extension + ['/Users/jonas/code/src/file', 'Users.jonas.code.src:file'], + // Edge cases that shouldn't happen in practice, but try and handle them so we dont crash + ['/Users/jonas/code/src/file.js', 'Users.jonas.code.src:file'], + ['', ''] +]; + +describe('GetFrameModule', () => { + it.each( + platform() === 'win32' + ? cases.map(([abs_path, expected]) => [abs_path ? `C:${ abs_path.replace(/\//g, '\\')}` : '', expected]) + : cases + )('%s => %s', (abs_path: string, expected: string) => { + expect(PrivateCpuProfilerBindings.getFrameModule(abs_path)).toBe(expected); + }); +}); diff --git a/packages/profiling-node/test/cpu_profiler.test.ts b/packages/profiling-node/test/cpu_profiler.test.ts new file mode 100644 index 000000000000..3bc31c5e9991 --- /dev/null +++ b/packages/profiling-node/test/cpu_profiler.test.ts @@ -0,0 +1,302 @@ +import { CpuProfilerBindings, PrivateCpuProfilerBindings } from '../src/cpu_profiler'; +import type { ThreadCpuProfile, RawThreadCpuProfile } from '../src/types'; + +// Required because we test a hypothetical long profile +// and we cannot use advance timers as the c++ relies on +// actual event loop ticks that we cannot advance from jest. +jest.setTimeout(60_000); + +function fail(message: string): never { + throw new Error(message); +} + +const fibonacci = (n: number): number => { + if (n <= 1) { + return n; + } + return fibonacci(n - 1) + fibonacci(n - 2); +}; + +const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); +const profiled = async (name: string, fn: () => void) => { + CpuProfilerBindings.startProfiling(name); + await fn(); + return CpuProfilerBindings.stopProfiling(name); +}; + +const assertValidSamplesAndStacks = (stacks: ThreadCpuProfile['stacks'], samples: ThreadCpuProfile['samples']) => { + expect(stacks.length).toBeGreaterThan(0); + expect(samples.length).toBeGreaterThan(0); + expect(stacks.length <= samples.length).toBe(true); + + for (const sample of samples) { + if (sample.stack_id === undefined) { + throw new Error(`Sample ${JSON.stringify(sample)} has not stack id associated`); + } + if (!stacks[sample.stack_id]) { + throw new Error(`Failed to find stack for sample: ${JSON.stringify(sample)}`); + } + expect(stacks[sample.stack_id]).not.toBe(undefined); + } + + for (const stack of stacks) { + expect(stack).not.toBe(undefined); + } +}; + +const isValidMeasurementValue = (v: any) => { + if (isNaN(v)) return false; + return typeof v === 'number' && v > 0; +}; + +const assertValidMeasurements = (measurement: RawThreadCpuProfile['measurements']['memory_footprint'] | undefined) => { + if (!measurement) { + throw new Error('Measurement is undefined'); + } + expect(measurement).not.toBe(undefined); + expect(typeof measurement.unit).toBe('string'); + expect(measurement.unit.length).toBeGreaterThan(0); + + for (let i = 0; i < measurement.values.length; i++) { + expect(measurement?.values?.[i]?.elapsed_since_start_ns).toBeGreaterThan(0); + expect(measurement?.values?.[i]?.value).toBeGreaterThan(0); + } +}; + +describe('Private bindings', () => { + it('does not crash if collect resources is false', async () => { + PrivateCpuProfilerBindings.startProfiling('profiled-program'); + await wait(100); + expect(() => { + const profile = PrivateCpuProfilerBindings.stopProfiling('profiled-program', 0, false); + if (!profile) throw new Error('No profile'); + }).not.toThrow(); + }); + + it('collects resources', async () => { + PrivateCpuProfilerBindings.startProfiling('profiled-program'); + await wait(100); + + const profile = PrivateCpuProfilerBindings.stopProfiling('profiled-program', 0, true); + if (!profile) throw new Error('No profile'); + + expect(profile.resources.length).toBeGreaterThan(0); + + expect(new Set(profile.resources).size).toBe(profile.resources.length); + + for (const resource of profile.resources) { + expect(typeof resource).toBe('string'); + expect(resource).not.toBe(undefined); + } + }); + + it('does not collect resources', async () => { + PrivateCpuProfilerBindings.startProfiling('profiled-program'); + await wait(100); + + const profile = PrivateCpuProfilerBindings.stopProfiling('profiled-program', 0, false); + if (!profile) throw new Error('No profile'); + + expect(profile.resources.length).toBe(0); + }); +}); + +describe('Profiler bindings', () => { + it('exports profiler binding methods', () => { + expect(typeof CpuProfilerBindings['startProfiling']).toBe('function'); + expect(typeof CpuProfilerBindings['stopProfiling']).toBe('function'); + }); + + it('profiles a program', async () => { + const profile = await profiled('profiled-program', async () => { + await wait(100); + }); + + if (!profile) fail('Profile is null'); + + assertValidSamplesAndStacks(profile.stacks, profile.samples); + }); + + it('adds thread_id info', async () => { + const profile = await profiled('profiled-program', async () => { + await wait(100); + }); + + if (!profile) fail('Profile is null'); + const samples = profile.samples; + + if (!samples.length) { + throw new Error('No samples'); + } + for (const sample of samples) { + expect(sample.thread_id).toBe('0'); + } + }); + + it('caps stack depth at 128', async () => { + const recurseToDepth = async (depth: number): Promise => { + if (depth === 0) { + // Wait a bit to make sure stack gets sampled here + await wait(1000); + return 0; + } + const v = await recurseToDepth(depth - 1); + return v + }; + + const profile = await profiled('profiled-program', async () => { + await recurseToDepth(256); + }); + + if (!profile) fail('Profile is null'); + + for (const stack of profile.stacks) { + expect(stack.length).toBeLessThanOrEqual(128); + } + }); + + it('does not record two profiles when titles match', () => { + CpuProfilerBindings.startProfiling('same-title'); + CpuProfilerBindings.startProfiling('same-title'); + + const first = CpuProfilerBindings.stopProfiling('same-title'); + const second = CpuProfilerBindings.stopProfiling('same-title'); + + expect(first).not.toBe(null); + expect(second).toBe(null); + }); + + it('weird cases', () => { + CpuProfilerBindings.startProfiling('same-title'); + expect(() => { + CpuProfilerBindings.stopProfiling('same-title'); + CpuProfilerBindings.stopProfiling('same-title'); + }).not.toThrow(); + }); + + it('does not crash if stopTransaction is called before startTransaction', () => { + expect(CpuProfilerBindings.stopProfiling('does not exist')).toBe(null); + }); + + it('does crash if name is invalid', () => { + expect(() => CpuProfilerBindings.stopProfiling('')).toThrow(); + // @ts-expect-error test invalid input + expect(() => CpuProfilerBindings.stopProfiling(undefined)).toThrow(); + // @ts-expect-error test invalid input + expect(() => CpuProfilerBindings.stopProfiling(null)).toThrow(); + // @ts-expect-error test invalid input + expect(() => CpuProfilerBindings.stopProfiling({})).toThrow(); + }); + + it('does not throw if stopTransaction is called before startTransaction', () => { + expect(CpuProfilerBindings.stopProfiling('does not exist')).toBe(null); + expect(() => CpuProfilerBindings.stopProfiling('does not exist')).not.toThrow(); + }); + + it('compiles with eager logging by default', async () => { + const profile = await profiled('profiled-program', async () => { + await wait(100); + }); + + if (!profile) fail('Profile is null'); + expect(profile.profiler_logging_mode).toBe('eager'); + }); + + it('stacks are not null', async () => { + const profile = await profiled('non nullable stack', async () => { + await wait(1000); + fibonacci(36); + await wait(1000); + }); + + if (!profile) fail('Profile is null'); + assertValidSamplesAndStacks(profile.stacks, profile.samples); + }); + + it('samples at ~99hz', async () => { + CpuProfilerBindings.startProfiling('profile'); + await wait(100); + const profile = CpuProfilerBindings.stopProfiling('profile'); + + if (!profile) fail('Profile is null'); + + // Exception for macos and windows - we seem to get way less samples there, but I'm not sure if that's due to poor + // performance of the actions runner, machine or something else. This needs more investigation to determine + // the cause of low sample count. https://github.com/actions/runner-images/issues/1336 seems relevant. + if (process.platform === 'darwin' || process.platform === 'win32') { + if (profile.samples.length < 2) { + fail(`Only ${ profile.samples.length } samples obtained on ${ process.platform }, expected at least 2`); + } + } else { + if (profile.samples.length < 6) { + fail(`Only ${ profile.samples.length } samples obtained on ${ process.platform }, expected at least 6`); + } + } + if (profile.samples.length > 15) { + fail(`Too many samples on ${ process.platform }, got ${ profile.samples.length}`); + } + }); + + it('collects memory footprint', async () => { + CpuProfilerBindings.startProfiling('profile'); + await wait(1000); + const profile = CpuProfilerBindings.stopProfiling('profile'); + + const heap_usage = profile?.measurements['memory_footprint']; + if (!heap_usage) { + throw new Error('memory_footprint is null'); + } + expect(heap_usage.values.length).toBeGreaterThan(6); + expect(heap_usage.values.length).toBeLessThanOrEqual(11); + expect(heap_usage.unit).toBe('byte'); + expect(heap_usage.values.every((v) => isValidMeasurementValue(v.value))).toBe(true); + assertValidMeasurements(profile.measurements['memory_footprint']); + }); + + it('collects cpu usage', async () => { + CpuProfilerBindings.startProfiling('profile'); + await wait(1000); + const profile = CpuProfilerBindings.stopProfiling('profile'); + + const cpu_usage = profile?.measurements['cpu_usage']; + if (!cpu_usage) { + throw new Error('cpu_usage is null'); + } + expect(cpu_usage.values.length).toBeGreaterThan(6); + expect(cpu_usage.values.length).toBeLessThanOrEqual(11); + expect(cpu_usage.values.every((v) => isValidMeasurementValue(v.value))).toBe(true); + expect(cpu_usage.unit).toBe('percent'); + assertValidMeasurements(profile.measurements['cpu_usage']); + }); + + it('does not overflow measurement buffer if profile runs longer than 30s', async () => { + CpuProfilerBindings.startProfiling('profile'); + await wait(35000); + const profile = CpuProfilerBindings.stopProfiling('profile'); + expect(profile).not.toBe(null); + expect(profile?.measurements?.['cpu_usage']?.values.length).toBeLessThanOrEqual(300); + expect(profile?.measurements?.['memory_footprint']?.values.length).toBeLessThanOrEqual(300); + }); + + // eslint-disable-next-line jest/no-disabled-tests + it.skip('includes deopt reason', async () => { + // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#52-the-object-being-iterated-is-not-a-simple-enumerable + function iterateOverLargeHashTable() { + const table: Record = {}; + for (let i = 0; i < 1e5; i++) { + table[i] = i; + } + // eslint-disable-next-line + for (const _ in table) { + } + } + + const profile = await profiled('profiled-program', async () => { + iterateOverLargeHashTable(); + }); + + // @ts-expect-error deopt reasons are disabled for now as we need to figure out the backend support + const hasDeoptimizedFrame = profile.frames.some((f) => f.deopt_reasons && f.deopt_reasons.length > 0); + expect(hasDeoptimizedFrame).toBe(true); + }); +}); diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts new file mode 100644 index 000000000000..b92cf2cb08da --- /dev/null +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -0,0 +1,424 @@ +import * as Sentry from '@sentry/node'; + +import { ProfilingIntegration } from '../src/index'; +import { CpuProfilerBindings } from '../src/cpu_profiler'; +import { logger, createEnvelope } from '@sentry/utils'; +import { GLOBAL_OBJ } from '@sentry/utils'; +import { NodeClient } from '@sentry/node'; +import { getMainCarrier } from '@sentry/core'; +import type { Transport } from '@sentry/types'; + +function makeClientWithoutHooks(): [NodeClient, Transport] { + const integration = new ProfilingIntegration(); + const transport = Sentry.makeNodeTransport({ + url: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', + recordDroppedEvent: () => { + return undefined; + } + }); + const client = new NodeClient({ + stackParser: Sentry.defaultStackParser, + tracesSampleRate: 1, + profilesSampleRate: 1, + debug: true, + environment: 'test-environment', + dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', + integrations: [integration], + transport: (_opts) => transport + }); + client.setupIntegrations = () => { + integration.setupOnce( + (cb) => { + // @ts-expect-error __SENTRY__ is a private property + getMainCarrier().__SENTRY__.globalEventProcessors = [cb]; + }, + () => Sentry.getCurrentHub() + ); + }; + // @ts-expect-error override private + client.on = undefined; + return [client, transport]; +} + +function makeClientWithHooks(): [NodeClient, Transport] { + const integration = new ProfilingIntegration(); + const client = new NodeClient({ + stackParser: Sentry.defaultStackParser, + tracesSampleRate: 1, + profilesSampleRate: 1, + debug: true, + environment: 'test-environment', + dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', + integrations: [integration], + transport: (_opts) => + Sentry.makeNodeTransport({ + url: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', + recordDroppedEvent: () => { + return undefined; + } + }) + }); + + client.setupIntegrations = () => { + integration.setupOnce( + (cb) => { + // @ts-expect-error __SENTRY__ is a private property + getMainCarrier().__SENTRY__.globalEventProcessors = [cb]; + }, + () => Sentry.getCurrentHub() + ); + }; + + return [client, client.getTransport() as Transport]; +} + +const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +describe('hubextensions', () => { + beforeEach(() => { + jest.clearAllMocks(); + jest.useRealTimers(); + // We will mock the carrier as if it has been initialized by the SDK, else everything is short circuited + getMainCarrier().__SENTRY__ = {}; + GLOBAL_OBJ._sentryDebugIds = undefined as any; + }); + afterEach(() => { + delete getMainCarrier().__SENTRY__; + }); + + it('pulls environment from sdk init', async () => { + const [client, transport] = makeClientWithoutHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const transportSpy = jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + + const transaction = Sentry.getCurrentHub().startTransaction({ name: 'profile_hub' }); + await wait(500); + transaction.finish(); + + await Sentry.flush(1000); + expect(transportSpy.mock.calls?.[0]?.[0]?.[1]?.[0]?.[1]).toMatchObject({ environment: 'test-environment' }); + }); + + it('logger warns user if there are insufficient samples and discards the profile', async () => { + const logSpy = jest.spyOn(logger, 'log'); + + const [client, transport] = makeClientWithoutHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + jest.spyOn(CpuProfilerBindings, 'stopProfiling').mockImplementation(() => { + return { + samples: [ + { + stack_id: 0, + thread_id: '0', + elapsed_since_start_ns: '10' + } + ], + measurements: {}, + stacks: [[0]], + frames: [], + resources: [], + profiler_logging_mode: 'lazy' + }; + }); + + jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + + const transaction = Sentry.getCurrentHub().startTransaction({ name: 'profile_hub' }); + transaction.finish(); + + await Sentry.flush(1000); + expect(logSpy.mock?.lastCall?.[0]).toBe('[Profiling] Discarding profile because it contains less than 2 samples'); + + expect((transport.send as any).mock.calls[0][0][1][0][0].type).toBe('transaction'); + // eslint-disable-next-line @typescript-eslint/unbound-method + expect(transport.send).toHaveBeenCalledTimes(1); + }); + + it('logger warns user if traceId is invalid', async () => { + const logSpy = jest.spyOn(logger, 'log'); + + const [client, transport] = makeClientWithoutHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + jest.spyOn(CpuProfilerBindings, 'stopProfiling').mockImplementation(() => { + return { + samples: [ + { + stack_id: 0, + thread_id: '0', + elapsed_since_start_ns: '10' + }, + { + stack_id: 0, + thread_id: '0', + elapsed_since_start_ns: '10' + } + ], + measurements: {}, + resources: [], + stacks: [[0]], + frames: [], + profiler_logging_mode: 'lazy' + }; + }); + + jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + + const transaction = Sentry.getCurrentHub().startTransaction({ name: 'profile_hub', traceId: 'boop' }); + await wait(500); + transaction.finish(); + + await Sentry.flush(1000); + expect(logSpy.mock?.calls?.[6]?.[0]).toBe('[Profiling] Invalid traceId: ' + 'boop' + ' on profiled event'); + }); + + describe('with hooks', () => { + it('calls profiler when transaction is started/stopped', async () => { + const [client, transport] = makeClientWithHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + const stopProfilingSpy = jest.spyOn(CpuProfilerBindings, 'stopProfiling'); + + jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + + const transaction = hub.startTransaction({ name: 'profile_hub' }); + await wait(500); + transaction.finish(); + + await Sentry.flush(1000); + + expect(startProfilingSpy).toHaveBeenCalledTimes(1); + expect((stopProfilingSpy.mock.lastCall?.[0] as string).length).toBe(32); + }); + + it('sends profile in the same envelope as transaction', async () => { + const [client, transport] = makeClientWithHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const transportSpy = jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + + const transaction = hub.startTransaction({ name: 'profile_hub' }); + await wait(500); + transaction.finish(); + + await Sentry.flush(1000); + + // One for profile, the other for transaction + expect(transportSpy).toHaveBeenCalledTimes(1); + expect(transportSpy.mock.calls?.[0]?.[0]?.[1]?.[1]?.[0]).toMatchObject({ type: 'profile' }); + }); + + it('does not crash if transaction has no profile context or it is invalid', async () => { + const [client] = makeClientWithHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + // @ts-expect-error transaction is partial + client.emit('beforeEnvelope', createEnvelope({ type: 'transaction' }, { type: 'transaction' })); + // @ts-expect-error transaction is partial + client.emit('beforeEnvelope', createEnvelope({ type: 'transaction' }, { type: 'transaction', contexts: {} })); + client.emit( + 'beforeEnvelope', + // @ts-expect-error transaction is partial + createEnvelope({ type: 'transaction' }, { type: 'transaction', contexts: { profile: {} } }) + ); + client.emit( + 'beforeEnvelope', + // @ts-expect-error transaction is partial + createEnvelope({ type: 'transaction' }, { type: 'transaction', contexts: { profile: { profile_id: null } } }) + ); + + // Emit is sync, so we can just assert that we got here + expect(true).toBe(true); + }); + + it('if transaction was profiled, but profiler returned null', async () => { + const [client, transport] = makeClientWithHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + jest.spyOn(CpuProfilerBindings, 'stopProfiling').mockReturnValue(null); + // Emit is sync, so we can just assert that we got here + const transportSpy = jest.spyOn(transport, 'send').mockImplementation(() => { + // Do nothing so we don't send events to Sentry + return Promise.resolve(); + }); + + const transaction = hub.startTransaction({ name: 'profile_hub' }); + await wait(500); + transaction.finish(); + + await Sentry.flush(1000); + + // Only transaction is sent + expect(transportSpy.mock.calls?.[0]?.[0]?.[1]?.[0]?.[0]).toMatchObject({ type: 'transaction' }); + expect(transportSpy.mock.calls?.[0]?.[0]?.[1][1]).toBeUndefined(); + }); + + it('emits preprocessEvent for profile', async () => { + const [client] = makeClientWithHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + const onPreprocessEvent = jest.fn(); + + client.on('preprocessEvent', onPreprocessEvent); + + const transaction = hub.startTransaction({ name: 'profile_hub' }); + await wait(500); + transaction.finish(); + + await Sentry.flush(1000); + + expect(onPreprocessEvent.mock.calls[1][0]).toMatchObject({ + profile: { + samples: expect.arrayContaining([expect.anything()]), + stacks: expect.arrayContaining([expect.anything()]) + } + }); + }); + }); + + describe('without hooks', () => { + it('calls profiler when transaction is started/stopped', async () => { + const [client] = makeClientWithoutHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + const stopProfilingSpy = jest.spyOn(CpuProfilerBindings, 'stopProfiling'); + + const transaction = hub.startTransaction({ name: 'profile_hub' }); + await wait(500); + transaction.finish(); + + await Sentry.flush(1000); + + expect(startProfilingSpy).toHaveBeenCalledTimes(1); + expect((stopProfilingSpy.mock.lastCall?.[0] as string).length).toBe(32); + }); + + it('sends profile in separate envelope', async () => { + const [client, transport] = makeClientWithoutHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const transportSpy = jest.spyOn(transport, 'send').mockImplementation(() => { + // Do nothing so we don't send events to Sentry + return Promise.resolve(); + }); + + const transaction = hub.startTransaction({ name: 'profile_hub' }); + await wait(500); + transaction.finish(); + + await Sentry.flush(1000); + + // One for profile, the other for transaction + expect(transportSpy).toHaveBeenCalledTimes(2); + expect(transportSpy.mock.calls?.[0]?.[0]?.[1]?.[0]?.[0]).toMatchObject({ type: 'profile' }); + }); + + it('respect max profile duration timeout', async () => { + // it seems that in node 19 globals (or least part of them) are a readonly object + // so when useFakeTimers is called it throws an error because it cannot override + // a readonly property of performance on global object. Use legacyFakeTimers for now + jest.useFakeTimers({ legacyFakeTimers: true }); + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + const stopProfilingSpy = jest.spyOn(CpuProfilerBindings, 'stopProfiling'); + + const [client] = makeClientWithoutHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const transaction = Sentry.getCurrentHub().startTransaction({ name: 'timeout_transaction' }); + expect(startProfilingSpy).toHaveBeenCalledTimes(1); + jest.advanceTimersByTime(30001); + + expect(stopProfilingSpy).toHaveBeenCalledTimes(1); + expect((stopProfilingSpy.mock.lastCall?.[0] as string).length).toBe(32); + + transaction.finish(); + expect(stopProfilingSpy).toHaveBeenCalledTimes(1); + }); + }); + + it('does not crash if stop is called multiple times', async () => { + const stopProfilingSpy = jest.spyOn(CpuProfilerBindings, 'stopProfiling'); + + const [client] = makeClientWithoutHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const transaction = Sentry.getCurrentHub().startTransaction({ name: 'txn' }); + transaction.finish(); + transaction.finish(); + expect(stopProfilingSpy).toHaveBeenCalledTimes(1); + }); + + it('enriches profile with debug_id', async () => { + GLOBAL_OBJ._sentryDebugIds = { + 'Error\n at filename.js (filename.js:36:15)': 'aaaaaaaa-aaaa-4aaa-aaaa-aaaaaaaaaa', + 'Error\n at filename2.js (filename2.js:36:15)': 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb', + 'Error\n at filename3.js (filename3.js:36:15)': 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb' + }; + + jest.spyOn(CpuProfilerBindings, 'stopProfiling').mockImplementation(() => { + return { + samples: [ + { + stack_id: 0, + thread_id: '0', + elapsed_since_start_ns: '10' + }, + { + stack_id: 0, + thread_id: '0', + elapsed_since_start_ns: '10' + } + ], + measurements: {}, + resources: ['filename.js', 'filename2.js'], + stacks: [[0]], + frames: [], + profiler_logging_mode: 'lazy' + }; + }); + + const [client, transport] = makeClientWithHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const transportSpy = jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + + const transaction = hub.startTransaction({ name: 'profile_hub' }); + await wait(500); + transaction.finish(); + + await Sentry.flush(1000); + + expect(transportSpy.mock.calls?.[0]?.[0]?.[1]?.[1]?.[1]).toMatchObject({ + debug_meta: { + images: [ + { + type: 'sourcemap', + debug_id: 'aaaaaaaa-aaaa-4aaa-aaaa-aaaaaaaaaa', + code_file: 'filename.js' + }, + { + type: 'sourcemap', + debug_id: 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb', + code_file: 'filename2.js' + } + ] + } + }); + }); +}); diff --git a/packages/profiling-node/test/hubextensions.test.ts b/packages/profiling-node/test/hubextensions.test.ts new file mode 100644 index 000000000000..7384e056275b --- /dev/null +++ b/packages/profiling-node/test/hubextensions.test.ts @@ -0,0 +1,240 @@ +import type { + BaseTransportOptions, + ClientOptions, + Hub, + Context, + Transaction, + TransactionMetadata +} from '@sentry/types'; + +import type { NodeClient } from '@sentry/node'; + +import { __PRIVATE__wrapStartTransactionWithProfiling } from '../src/hubextensions'; +import { CpuProfilerBindings } from '../src/cpu_profiler'; + +function makeTransactionMock(options = {}): Transaction { + return { + metadata: {}, + tags: {}, + sampled: true, + contexts: {}, + startChild: () => ({ finish: () => void 0 }), + finish() { + return; + }, + toContext: () => { + return {}; + }, + setContext(this: Transaction, key: string, context: Context) { + // @ts-expect-error - contexts is private + this.contexts[key] = context; + }, + setTag(this: Transaction, key: string, value: any) { + this.tags[key] = value; + }, + setMetadata(this: Transaction, metadata: Partial) { + this.metadata = { ...metadata } as TransactionMetadata; + }, + ...options + } as unknown as Transaction; +} + +function makeHubMock({ + profilesSampleRate, + client +}: { + profilesSampleRate: number | undefined; + client?: Partial; +}): Hub { + return { + getClient: jest.fn().mockImplementation(() => { + return { + getOptions: jest.fn().mockImplementation(() => { + return { + profilesSampleRate + } as unknown as ClientOptions; + }), + ...(client ?? {}) + }; + }) + } as unknown as Hub; +} + +describe('hubextensions', () => { + beforeEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); + }); + it('skips profiling if profilesSampleRate is not set (undefined)', () => { + const hub = makeHubMock({ profilesSampleRate: undefined }); + const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + + const maybeStartTransactionWithProfiling = __PRIVATE__wrapStartTransactionWithProfiling(startTransaction); + const transaction = maybeStartTransactionWithProfiling.call(hub, { name: '' }, {}); + transaction.finish(); + + expect(startTransaction).toHaveBeenCalledTimes(1); + expect(startProfilingSpy).not.toHaveBeenCalled(); + expect((transaction.metadata as any)?.profile).toBeUndefined(); + }); + it('skips profiling if profilesSampleRate is set to 0', () => { + const hub = makeHubMock({ profilesSampleRate: 0 }); + const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + + const maybeStartTransactionWithProfiling = __PRIVATE__wrapStartTransactionWithProfiling(startTransaction); + const transaction = maybeStartTransactionWithProfiling.call(hub, { name: '' }, {}); + transaction.finish(); + + expect(startTransaction).toHaveBeenCalledTimes(1); + expect(startProfilingSpy).not.toHaveBeenCalled(); + + expect((transaction.metadata as any)?.profile).toBeUndefined(); + }); + it('skips profiling when random > sampleRate', () => { + const hub = makeHubMock({ profilesSampleRate: 0.5 }); + jest.spyOn(global.Math, 'random').mockReturnValue(1); + const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + + const maybeStartTransactionWithProfiling = __PRIVATE__wrapStartTransactionWithProfiling(startTransaction); + const transaction = maybeStartTransactionWithProfiling.call(hub, { name: '' }, {}); + transaction.finish(); + + expect(startTransaction).toHaveBeenCalledTimes(1); + expect(startProfilingSpy).not.toHaveBeenCalled(); + + expect((transaction.metadata as any)?.profile).toBeUndefined(); + }); + it('starts the profiler', () => { + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + const stopProfilingSpy = jest.spyOn(CpuProfilerBindings, 'stopProfiling'); + + const hub = makeHubMock({ profilesSampleRate: 1 }); + const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); + + const maybeStartTransactionWithProfiling = __PRIVATE__wrapStartTransactionWithProfiling(startTransaction); + const transaction = maybeStartTransactionWithProfiling.call(hub, { name: '' }, {}); + transaction.finish(); + + expect(startTransaction).toHaveBeenCalledTimes(1); + expect(startProfilingSpy).toHaveBeenCalledTimes(1); + expect(stopProfilingSpy).toHaveBeenCalledTimes(1); + + expect((transaction.metadata as any)?.profile).toBeDefined(); + }); + + it('does not start the profiler if transaction is sampled', () => { + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + const stopProfilingSpy = jest.spyOn(CpuProfilerBindings, 'stopProfiling'); + + const hub = makeHubMock({ profilesSampleRate: 1 }); + const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock({ sampled: false })); + + const maybeStartTransactionWithProfiling = __PRIVATE__wrapStartTransactionWithProfiling(startTransaction); + const transaction = maybeStartTransactionWithProfiling.call(hub, { name: '' }, {}); + transaction.finish(); + + expect(startTransaction).toHaveBeenCalledTimes(1); + expect(startProfilingSpy).not.toHaveBeenCalledTimes(1); + expect(stopProfilingSpy).not.toHaveBeenCalledTimes(1); + }); + + it('disabled if neither profilesSampler and profilesSampleRate are not set', () => { + const hub = makeHubMock({ profilesSampleRate: undefined }); + const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); + + const maybeStartTransactionWithProfiling = __PRIVATE__wrapStartTransactionWithProfiling(startTransaction); + const samplingContext = { beep: 'boop' }; + const transaction = maybeStartTransactionWithProfiling.call(hub, { name: '' }, samplingContext); + transaction.finish(); + + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + expect(startProfilingSpy).not.toHaveBeenCalled(); + }); + + it('does not call startProfiling if profilesSampler returns invalid rate', () => { + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + const options = { profilesSampler: jest.fn().mockReturnValue(NaN) }; + const hub = makeHubMock({ + profilesSampleRate: undefined, + client: { + // @ts-expect-error partial client + getOptions: () => options + } + }); + const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); + + const maybeStartTransactionWithProfiling = __PRIVATE__wrapStartTransactionWithProfiling(startTransaction); + const samplingContext = { beep: 'boop' }; + const transaction = maybeStartTransactionWithProfiling.call(hub, { name: '' }, samplingContext); + transaction.finish(); + + expect(options.profilesSampler).toHaveBeenCalled(); + expect(startProfilingSpy).not.toHaveBeenCalled(); + }); + + it('does not call startProfiling if profilesSampleRate is invalid', () => { + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + const options = { profilesSampler: jest.fn().mockReturnValue(NaN) }; + const hub = makeHubMock({ + profilesSampleRate: NaN, + client: { + // @ts-expect-error partial client + getOptions: () => options + } + }); + const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); + + const maybeStartTransactionWithProfiling = __PRIVATE__wrapStartTransactionWithProfiling(startTransaction); + const samplingContext = { beep: 'boop' }; + const transaction = maybeStartTransactionWithProfiling.call(hub, { name: '' }, samplingContext); + transaction.finish(); + + expect(options.profilesSampler).toHaveBeenCalled(); + expect(startProfilingSpy).not.toHaveBeenCalled(); + }); + + it('calls profilesSampler with sampling context', () => { + const options = { profilesSampler: jest.fn() }; + const hub = makeHubMock({ + profilesSampleRate: undefined, + client: { + // @ts-expect-error partial client + getOptions: () => options + } + }); + const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); + + const maybeStartTransactionWithProfiling = __PRIVATE__wrapStartTransactionWithProfiling(startTransaction); + const samplingContext = { beep: 'boop' }; + const transaction = maybeStartTransactionWithProfiling.call(hub, { name: '' }, samplingContext); + transaction.finish(); + + expect(options.profilesSampler).toHaveBeenCalledWith({ + ...samplingContext, + transactionContext: transaction.toContext() + }); + }); + + it('prioritizes profilesSampler outcome over profilesSampleRate', () => { + const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); + const options = { profilesSampler: jest.fn().mockReturnValue(1) }; + const hub = makeHubMock({ + profilesSampleRate: 0, + client: { + // @ts-expect-error partial client + getOptions: () => options + } + }); + const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); + + const maybeStartTransactionWithProfiling = __PRIVATE__wrapStartTransactionWithProfiling(startTransaction); + const samplingContext = { beep: 'boop' }; + const transaction = maybeStartTransactionWithProfiling.call(hub, { name: '' }, samplingContext); + transaction.finish(); + + expect(startProfilingSpy).toHaveBeenCalled(); + }); +}); diff --git a/packages/profiling-node/test/index.test.ts b/packages/profiling-node/test/index.test.ts new file mode 100644 index 000000000000..95b441870f9d --- /dev/null +++ b/packages/profiling-node/test/index.test.ts @@ -0,0 +1,144 @@ +import * as Sentry from '@sentry/node'; +import type { Transport } from '@sentry/types'; + +import { ProfilingIntegration } from '../src/index'; +import { NodeClient } from '@sentry/node'; +import { getMainCarrier } from '@sentry/core'; +import type { Profile } from '../src/types'; + +interface MockTransport extends Transport { + events: any[]; +} + +function makeStaticTransport(): MockTransport { + return { + events: [] as any[], + send: function (...args: any[]) { + this.events.push(args); + return Promise.resolve(); + }, + flush: function () { + return Promise.resolve(true); + } + }; +} + +function makeClientWithoutHooks(): [NodeClient, MockTransport] { + const integration = new ProfilingIntegration(); + const transport = makeStaticTransport(); + const client = new NodeClient({ + stackParser: Sentry.defaultStackParser, + tracesSampleRate: 1, + profilesSampleRate: 1, + debug: true, + environment: 'test-environment', + dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', + integrations: [integration], + transport: () => transport + }); + client.setupIntegrations = () => { + integration.setupOnce( + (cb) => { + // @ts-expect-error __SENTRY__ is private + getMainCarrier().__SENTRY__.globalEventProcessors = [cb]; + }, + () => Sentry.getCurrentHub() + ); + }; + // @ts-expect-error override private property + client.on = undefined; + return [client, transport]; +} + +function findAllProfiles(transport: MockTransport): [any, Profile][] | null { + return transport?.events.filter((call) => { + return call[0][1][0][0].type === 'profile'; + }); +} + +function findProfile(transport: MockTransport): Profile | null { + return ( + transport?.events.find((call) => { + return call[0][1][0][0].type === 'profile'; + })?.[0][1][0][1] ?? null + ); +} + +const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); + +describe('Sentry - Profiling', () => { + beforeEach(() => { + jest.clearAllMocks(); + jest.useRealTimers(); + // We will mock the carrier as if it has been initialized by the SDK, else everything is short circuited + getMainCarrier().__SENTRY__ = {}; + }); + afterEach(() => { + delete getMainCarrier().__SENTRY__; + }); + describe('without hooks', () => { + it('profiles a transaction', async () => { + const [client, transport] = makeClientWithoutHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const transaction = Sentry.startTransaction({ name: 'title' }); + await wait(500); + transaction.finish(); + + await Sentry.flush(500); + expect(findProfile(transport)).not.toBe(null); + }); + + it('can profile overlapping transactions', async () => { + const [client, transport] = makeClientWithoutHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const t1 = Sentry.startTransaction({ name: 'outer' }); + const t2 = Sentry.startTransaction({ name: 'inner' }); + await wait(500); + + t2.finish(); + t1.finish(); + + await Sentry.flush(500); + + expect(findAllProfiles(transport)?.[0]?.[0]?.[1]?.[0]?.[1].transaction.name).toBe('inner'); + expect(findAllProfiles(transport)?.[1]?.[0]?.[1]?.[0]?.[1].transaction.name).toBe('outer'); + expect(findAllProfiles(transport)).toHaveLength(2); + expect(findProfile(transport)).not.toBe(null); + }); + + it('does not discard overlapping transaction with same title', async () => { + const [client, transport] = makeClientWithoutHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const t1 = Sentry.startTransaction({ name: 'same-title' }); + const t2 = Sentry.startTransaction({ name: 'same-title' }); + await wait(500); + t2.finish(); + t1.finish(); + + await Sentry.flush(500); + expect(findAllProfiles(transport)).toHaveLength(2); + expect(findProfile(transport)).not.toBe(null); + }); + + it('does not crash if finish is called multiple times', async () => { + const [client, transport] = makeClientWithoutHooks(); + const hub = Sentry.getCurrentHub(); + hub.bindClient(client); + + const transaction = Sentry.startTransaction({ name: 'title' }); + await wait(500); + transaction.finish(); + transaction.finish(); + + await Sentry.flush(500); + expect(findAllProfiles(transport)).toHaveLength(1); + expect(findProfile(transport)).not.toBe(null); + }); + }); +}); diff --git a/packages/profiling-node/test/integration.test.ts b/packages/profiling-node/test/integration.test.ts new file mode 100644 index 000000000000..d9976759c6b1 --- /dev/null +++ b/packages/profiling-node/test/integration.test.ts @@ -0,0 +1,269 @@ +import { EventEmitter } from 'events'; + +import { logger } from '@sentry/utils'; +import type { Event, Hub, Transport } from '@sentry/types'; + +import { ProfilingIntegration } from '../src/integration'; +import type { ProfiledEvent } from '../src/types'; + +function assertCleanProfile(event: ProfiledEvent | Event): void { + expect(event.sdkProcessingMetadata?.profile).toBeUndefined(); +} + +function makeProfiledEvent(): ProfiledEvent { + return { + type: 'transaction', + sdkProcessingMetadata: { + profile: { + profile_id: 'id', + profiler_logging_mode: 'lazy', + samples: [ + { + elapsed_since_start_ns: '0', + thread_id: '0', + stack_id: 0 + }, + { + elapsed_since_start_ns: '1', + thread_id: '0', + stack_id: 0 + } + ], + measurements: {}, + frames: [], + stacks: [], + resources: [] + } + } + }; +} + +describe('ProfilingIntegration', () => { + it('has a name', () => { + expect(new ProfilingIntegration().name).toBe('ProfilingIntegration'); + }); + + it('stores a reference to getCurrentHub', () => { + const integration = new ProfilingIntegration(); + + const getCurrentHub = jest.fn().mockImplementation(() => { + return { + getClient: jest.fn() + }; + }); + const addGlobalEventProcessor = () => void 0; + + integration.setupOnce(addGlobalEventProcessor, getCurrentHub); + expect(integration.getCurrentHub).toBe(getCurrentHub); + }); + + describe('without hooks', () => { + it('does not call transporter if null profile is received', () => { + const transport: Transport = { + send: jest.fn().mockImplementation(() => Promise.resolve()), + flush: jest.fn().mockImplementation(() => Promise.resolve()) + }; + const integration = new ProfilingIntegration(); + + const getCurrentHub = jest.fn((): Hub => { + return { + getClient: () => { + return { + getOptions: () => { + return { + _metadata: {} + }; + }, + getDsn: () => { + return {}; + }, + getTransport: () => transport + }; + } + } as Hub; + }); + const addGlobalEventProcessor = () => void 0; + integration.setupOnce(addGlobalEventProcessor, getCurrentHub); + + integration.handleGlobalEvent({ + type: 'transaction', + sdkProcessingMetadata: { + profile: null + } + }); + // eslint-disable-next-line @typescript-eslint/unbound-method + expect(transport.send).not.toHaveBeenCalled(); + }); + + it('when Hub.getClient returns undefined', async() => { + const logSpy = jest.spyOn(logger, 'log'); + const integration = new ProfilingIntegration(); + + const getCurrentHub = jest.fn((): Hub => { + return { getClient: () => undefined } as Hub; + }); + const addGlobalEventProcessor = () => void 0; + integration.setupOnce(addGlobalEventProcessor, getCurrentHub); + + assertCleanProfile(await integration.handleGlobalEvent(makeProfiledEvent())); + expect(logSpy).toHaveBeenCalledWith( + '[Profiling] getClient did not return a Client, removing profile from event and forwarding to next event processors.' + ); + }); + it('when getDsn returns undefined', async () => { + const logSpy = jest.spyOn(logger, 'log'); + const integration = new ProfilingIntegration(); + + const getCurrentHub = jest.fn((): Hub => { + return { + getClient: () => { + return { + getDsn: () => undefined + }; + } + } as Hub; + }); + const addGlobalEventProcessor = () => void 0; + integration.setupOnce(addGlobalEventProcessor, getCurrentHub); + + assertCleanProfile(await integration.handleGlobalEvent(makeProfiledEvent())); + expect(logSpy).toHaveBeenCalledWith( + '[Profiling] getDsn did not return a Dsn, removing profile from event and forwarding to next event processors.' + ); + }); + it('when getTransport returns undefined', async () => { + const logSpy = jest.spyOn(logger, 'log'); + const integration = new ProfilingIntegration(); + + const getCurrentHub = jest.fn((): Hub => { + return { + getClient: () => { + return { + getDsn: () => { + return {}; + }, + getTransport: () => undefined + }; + } + } as Hub; + }); + const addGlobalEventProcessor = () => void 0; + integration.setupOnce(addGlobalEventProcessor, getCurrentHub); + + assertCleanProfile(await integration.handleGlobalEvent(makeProfiledEvent())); + expect(logSpy).toHaveBeenCalledWith( + '[Profiling] getTransport did not return a Transport, removing profile from event and forwarding to next event processors.' + ); + }); + + it('sends profile to sentry', async () => { + const logSpy = jest.spyOn(logger, 'log'); + const transport: Transport = { + send: jest.fn().mockImplementation(() => Promise.resolve()), + flush: jest.fn().mockImplementation(() => Promise.resolve()) + }; + const integration = new ProfilingIntegration(); + + const getCurrentHub = jest.fn((): Hub => { + return { + getClient: () => { + return { + getOptions: () => { + return { + _metadata: {} + }; + }, + getDsn: () => { + return {}; + }, + getTransport: () => transport + }; + } + } as Hub; + }); + const addGlobalEventProcessor = () => void 0; + integration.setupOnce(addGlobalEventProcessor, getCurrentHub); + + assertCleanProfile(await integration.handleGlobalEvent(makeProfiledEvent())); + expect(logSpy.mock.calls?.[1]?.[0]).toBe('[Profiling] Preparing envelope and sending a profiling event'); + }); + }); + + describe('with SDK hooks', () => { + it('does not call transporter if null profile is received', () => { + const transport: Transport = { + send: jest.fn().mockImplementation(() => Promise.resolve()), + flush: jest.fn().mockImplementation(() => Promise.resolve()) + }; + const integration = new ProfilingIntegration(); + const emitter = new EventEmitter(); + + const getCurrentHub = jest.fn((): Hub => { + return { + getClient: () => { + return { + on: emitter.on.bind(emitter), + emit: emitter.emit.bind(emitter), + getOptions: () => { + return { + _metadata: {} + }; + }, + getDsn: () => { + return {}; + }, + getTransport: () => transport + } as any; + } + } as Hub; + }); + + const addGlobalEventProcessor = () => void 0; + integration.setupOnce(addGlobalEventProcessor, getCurrentHub); + + // eslint-disable-next-line @typescript-eslint/unbound-method + expect(transport.send).not.toHaveBeenCalled(); + }); + + it('binds to startTransaction, finishTransaction and beforeEnvelope', () => { + const transport: Transport = { + send: jest.fn().mockImplementation(() => Promise.resolve()), + flush: jest.fn().mockImplementation(() => Promise.resolve()) + }; + const integration = new ProfilingIntegration(); + const emitter = new EventEmitter(); + + const getCurrentHub = jest.fn((): Hub => { + return { + getClient: () => { + return { + on: emitter.on.bind(emitter), + emit: emitter.emit.bind(emitter), + getOptions: () => { + return { + _metadata: {} + }; + }, + getDsn: () => { + return {}; + }, + getTransport: () => transport + } as any; + } + } as Hub; + }); + + const spy = jest.spyOn(emitter, 'on'); + + const addGlobalEventProcessor = jest.fn(); + integration.setupOnce(addGlobalEventProcessor, getCurrentHub); + + expect(spy).toHaveBeenCalledTimes(3); + expect(spy.mock?.calls?.[0]?.[0]).toBe('startTransaction'); + expect(spy.mock?.calls?.[1]?.[0]).toBe('finishTransaction'); + expect(spy.mock?.calls?.[2]?.[0]).toBe('beforeEnvelope'); + + expect(addGlobalEventProcessor).not.toHaveBeenCalled(); + }); + }); +}); diff --git a/packages/profiling-node/test/utils.test.ts b/packages/profiling-node/test/utils.test.ts new file mode 100644 index 000000000000..34e345485a54 --- /dev/null +++ b/packages/profiling-node/test/utils.test.ts @@ -0,0 +1,361 @@ +import type { SdkMetadata, DsnComponents, Event } from '@sentry/types'; +import { createEnvelope, uuid4, addItemToEnvelope } from '@sentry/utils'; + +import { + isValidSampleRate, + isValidProfile, + addProfilesToEnvelope, + findProfiledTransactionsFromEnvelope +} from '../src/utils'; + +import { + maybeRemoveProfileFromSdkMetadata, + isProfiledTransactionEvent, + createProfilingEventEnvelope +} from '../src/utils'; +import type { Profile, ProfiledEvent } from '../src/types'; + +function makeSdkMetadata(props: Partial): SdkMetadata { + return { + sdk: { + ...props + } + }; +} + +function makeDsn(props: Partial): DsnComponents { + return { + protocol: 'http', + projectId: '1', + host: 'localhost', + ...props + }; +} + +function makeEvent( + props: Partial, + profile: NonNullable +): ProfiledEvent { + return { ...props, sdkProcessingMetadata: { profile: profile } }; +} + +function makeProfile( + props: Partial +): NonNullable { + return { + profile_id: '1', + profiler_logging_mode: 'lazy', + stacks: [], + samples: [ + { elapsed_since_start_ns: '0', thread_id: '0', stack_id: 0 }, + { elapsed_since_start_ns: '10', thread_id: '0', stack_id: 0 } + ], + measurements: {}, + resources: [], + frames: [], + ...props + }; +} + +describe('isProfiledTransactionEvent', () => { + it('profiled event', () => { + expect(isProfiledTransactionEvent({ sdkProcessingMetadata: { profile: {} } })).toBe(true); + }); + it('not profiled event', () => { + expect(isProfiledTransactionEvent({ sdkProcessingMetadata: { something: {} } })).toBe(false); + }); +}); + +describe('maybeRemoveProfileFromSdkMetadata', () => { + it('removes profile', () => { + expect(maybeRemoveProfileFromSdkMetadata({ sdkProcessingMetadata: { profile: {} } })).toEqual({ + sdkProcessingMetadata: {} + }); + }); + + it('does nothing', () => { + expect(maybeRemoveProfileFromSdkMetadata({ sdkProcessingMetadata: { something: {} } })).toEqual({ + sdkProcessingMetadata: { something: {} } + }); + }); +}); + +describe('createProfilingEventEnvelope', () => { + it('throws if profile_id is not set', () => { + const profile = makeProfile({}); + delete profile.profile_id; + + expect(() => + createProfilingEventEnvelope(makeEvent({ type: 'transaction' }, profile), makeDsn({}), makeSdkMetadata({})) + ).toThrow('Cannot construct profiling event envelope without a valid profile id. Got undefined instead.'); + }); + it('throws if profile is undefined', () => { + expect(() => + // @ts-expect-error mock profile as undefined + createProfilingEventEnvelope(makeEvent({ type: 'transaction' }, undefined), makeDsn({}), makeSdkMetadata({})) + ).toThrow('Cannot construct profiling event envelope without a valid profile. Got undefined instead.'); + expect(() => + // @ts-expect-error mock profile as null + createProfilingEventEnvelope(makeEvent({ type: 'transaction' }, null), makeDsn({}), makeSdkMetadata({})) + ).toThrow('Cannot construct profiling event envelope without a valid profile. Got null instead.'); + }); + + it('envelope header is of type: profile', () => { + const envelope = createProfilingEventEnvelope( + makeEvent( + { type: 'transaction' }, + makeProfile({ + samples: [ + { elapsed_since_start_ns: '0', thread_id: '0', stack_id: 0 }, + { elapsed_since_start_ns: '0', thread_id: '0', stack_id: 0 } + ] + }) + ), + makeDsn({}), + makeSdkMetadata({ + name: 'sentry.javascript.node', + version: '1.2.3', + integrations: ['integration1', 'integration2'], + packages: [ + { name: 'package1', version: '1.2.3' }, + { name: 'package2', version: '4.5.6' } + ] + }) + ); + expect(envelope?.[1][0]?.[0].type).toBe('profile'); + }); + + it('returns if samples.length <= 1', () => { + const envelope = createProfilingEventEnvelope( + makeEvent( + { type: 'transaction' }, + makeProfile({ + samples: [{ elapsed_since_start_ns: '0', thread_id: '0', stack_id: 0 }] + }) + ), + makeDsn({}), + makeSdkMetadata({ + name: 'sentry.javascript.node', + version: '1.2.3', + integrations: ['integration1', 'integration2'], + packages: [ + { name: 'package1', version: '1.2.3' }, + { name: 'package2', version: '4.5.6' } + ] + }) + ); + expect(envelope).toBe(null); + }); + + it('enriches envelope with sdk metadata', () => { + const envelope = createProfilingEventEnvelope( + makeEvent({ type: 'transaction' }, makeProfile({})), + makeDsn({}), + makeSdkMetadata({ + name: 'sentry.javascript.node', + version: '1.2.3' + }) + ); + + expect(envelope && envelope[0]?.sdk?.name).toBe('sentry.javascript.node'); + expect(envelope && envelope[0]?.sdk?.version).toBe('1.2.3'); + }); + + it('handles undefined sdk metadata', () => { + const envelope = createProfilingEventEnvelope( + makeEvent({ type: 'transaction' }, makeProfile({})), + makeDsn({}), + undefined + ); + + expect(envelope?.[0].sdk).toBe(undefined); + }); + + it('enriches envelope with dsn metadata', () => { + const envelope = createProfilingEventEnvelope( + makeEvent({ type: 'transaction' }, makeProfile({})), + makeDsn({ + host: 'sentry.io', + projectId: '123', + protocol: 'https', + path: 'path', + port: '9000', + publicKey: 'publicKey' + }), + makeSdkMetadata({}), + 'tunnel' + ); + + expect(envelope?.[0].dsn).toBe('https://publicKey@sentry.io:9000/path/123'); + }); + + it('enriches profile with device info', () => { + const envelope = createProfilingEventEnvelope( + makeEvent({ type: 'transaction' }, makeProfile({})), + makeDsn({}), + makeSdkMetadata({}) + ); + const profile = envelope?.[1][0]?.[1] as unknown as Profile; + + expect(typeof profile.device.manufacturer).toBe('string'); + expect(typeof profile.device.model).toBe('string'); + expect(typeof profile.os.name).toBe('string'); + expect(typeof profile.os.version).toBe('string'); + + expect(profile.device.manufacturer.length).toBeGreaterThan(0); + expect(profile.device.model.length).toBeGreaterThan(0); + expect(profile.os.name.length).toBeGreaterThan(0); + expect(profile.os.version.length).toBeGreaterThan(0); + }); + + it('throws if event.type is not a transaction', () => { + expect(() => + createProfilingEventEnvelope( + makeEvent( + // @ts-expect-error force invalid value + { type: 'error' }, + // @ts-expect-error mock tid as undefined + makeProfile({ samples: [{ stack_id: 0, thread_id: undefined, elapsed_since_start_ns: '0' }] }) + ), + makeDsn({}), + makeSdkMetadata({}) + ) + ).toThrow('Profiling events may only be attached to transactions, this should never occur.'); + }); + + it('inherits transaction properties', () => { + const start = new Date(2022, 8, 1, 12, 0, 0); + const end = new Date(2022, 8, 1, 12, 0, 10); + + const envelope = createProfilingEventEnvelope( + makeEvent( + { + event_id: uuid4(), + type: 'transaction', + transaction: 'transaction-name', + start_timestamp: start.getTime() / 1000, + timestamp: end.getTime() / 1000, + contexts: { + trace: { + span_id: 'span_id', + trace_id: 'trace_id' + } + } + }, + makeProfile({ + samples: [ + // @ts-expect-error mock tid as undefined + { stack_id: 0, thread_id: undefined, elapsed_since_start_ns: '0' }, + // @ts-expect-error mock tid as undefined + { stack_id: 0, thread_id: undefined, elapsed_since_start_ns: '0' } + ] + }) + ), + makeDsn({}), + makeSdkMetadata({}) + ); + + const profile = envelope?.[1][0]?.[1] as unknown as Profile; + + expect(profile.transaction.name).toBe('transaction-name'); + expect(typeof profile.transaction.id).toBe('string'); + expect(profile.transaction.id?.length).toBe(32); + expect(profile.transaction.trace_id).toBe('trace_id'); + }); +}); + +describe('isValidSampleRate', () => { + it.each([ + [0, true], + [0.1, true], + [1, true], + [true, true], + [false, true], + // invalid values + [1.1, false], + [-0.1, false], + [NaN, false], + [Infinity, false], + [null, false], + [undefined, false], + ['', false], + [' ', false], + [{}, false], + [[], false], + [() => null, false] + ])('value %s is %s', (input, expected) => { + expect(isValidSampleRate(input)).toBe(expected); + }); +}); + +describe('isValidProfile', () => { + it('is not valid if samples <= 1', () => { + expect(isValidProfile(makeProfile({ samples: [] }))).toBe(false); + }); + + it('is not valid if it does not have a profile_id', () => { + expect(isValidProfile(makeProfile({ samples: [], profile_id: undefined } as any))).toBe(false); + }); +}); + +describe('addProfilesToEnvelope', () => { + it('adds profile', () => { + const profile = makeProfile({}); + const envelope = createEnvelope({}); + + // @ts-expect-error profile is untyped + addProfilesToEnvelope(envelope, [profile]); + + // @ts-expect-error profile is untyped + const addedBySdk = addItemToEnvelope(createEnvelope({}), [{ type: 'profile' }, profile]); + + expect(envelope?.[1][0]?.[0]).toEqual({ type: 'profile' }); + expect(envelope?.[1][0]?.[1]).toEqual(profile); + + expect(JSON.stringify(addedBySdk)).toEqual(JSON.stringify(envelope)); + }); +}); + +describe('findProfiledTransactionsFromEnvelope', () => { + it('returns transactions with profile context', () => { + const txnWithProfile: Event = { + event_id: uuid4(), + type: 'transaction', + contexts: { + profile: { + profile_id: uuid4() + } + } + }; + + const envelope = addItemToEnvelope(createEnvelope({}), [{ type: 'transaction' }, txnWithProfile]); + expect(findProfiledTransactionsFromEnvelope(envelope)[0]).toBe(txnWithProfile); + }); + + it('skips if transaction event is not profiled', () => { + const txnWithProfile: Event = { + event_id: uuid4(), + type: 'transaction', + contexts: {} + }; + + const envelope = addItemToEnvelope(createEnvelope({}), [{ type: 'transaction' }, txnWithProfile]); + expect(findProfiledTransactionsFromEnvelope(envelope)[0]).toBe(undefined); + }); + + it('skips if event is not a transaction', () => { + const nonTransactionEvent: Event = { + event_id: uuid4(), + type: 'replay_event', + contexts: { + profile: { + profile_id: uuid4() + } + } + }; + + // @ts-expect-error replay event is partial + const envelope = addItemToEnvelope(createEnvelope({}), [{ type: 'replay_event' }, nonTransactionEvent]); + expect(findProfiledTransactionsFromEnvelope(envelope)[0]).toBe(undefined); + }); +}); diff --git a/packages/profiling-node/tsconfig.json b/packages/profiling-node/tsconfig.json new file mode 100644 index 000000000000..8efc3a7f9497 --- /dev/null +++ b/packages/profiling-node/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "lib", + "module": "CommonJS", + "declaration": false, + "emitDeclarationOnly": false, + "types": ["node"], + }, + "exclude": [ + "scripts/**/*", + "lib/**/*", + "demo_app/**/*", + "jest.config.js" + ], + "include": ["src/**/*.ts"] +} diff --git a/packages/profiling-node/tsconfig.test.json b/packages/profiling-node/tsconfig.test.json new file mode 100644 index 000000000000..f2a6107c1590 --- /dev/null +++ b/packages/profiling-node/tsconfig.test.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "include": ["test/**/*"], + "exclude": ["lib/**/*"], + "compilerOptions": { + "esModuleInterop": true, + "types": ["jest", "node"] + } +} diff --git a/packages/profiling-node/tsconfig.types.json b/packages/profiling-node/tsconfig.types.json new file mode 100644 index 000000000000..d613534a1674 --- /dev/null +++ b/packages/profiling-node/tsconfig.types.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "outDir": "lib/types", + "types": ["node"] + }, + "files": ["src/index.ts"] +} diff --git a/packages/profiling-node/yarn.lock b/packages/profiling-node/yarn.lock new file mode 100644 index 000000000000..80c6ac5cf663 --- /dev/null +++ b/packages/profiling-node/yarn.lock @@ -0,0 +1,5661 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@assemblyscript/loader@^0.19.21": + version "0.19.23" + resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.19.23.tgz#7fccae28d0a2692869f1d1219d36093bc24d5e72" + integrity sha512-ulkCYfFbYj01ie1MDOyxv2F6SpRN1TOj7fQxbP07D6HmeR+gr2JLSmINKjga2emB+b1L2KGrFKBTc+e00p54nw== + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/compat-data@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" + integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" + integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-compilation-targets" "^7.23.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helpers" "^7.23.7" + "@babel/parser" "^7.23.6" + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" + integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== + dependencies: + "@babel/types" "^7.23.6" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-compilation-targets@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" + integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== + dependencies: + "@babel/compat-data" "^7.23.5" + "@babel/helper-validator-option" "^7.23.5" + browserslist "^4.22.2" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-environment-visitor@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" + integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== + +"@babel/helper-function-name@^7.23.0": + version "7.23.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" + integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== + dependencies: + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" + +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-module-imports@^7.22.15": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + +"@babel/helper-module-transforms@^7.23.3": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" + integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" + integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/helper-validator-option@^7.23.5": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" + integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== + +"@babel/helpers@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.7.tgz#eb543c36f81da2873e47b76ee032343ac83bba60" + integrity sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ== + dependencies: + "@babel/template" "^7.22.15" + "@babel/traverse" "^7.23.7" + "@babel/types" "^7.23.6" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" + integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.8.3": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-import-meta@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" + integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-top-level-await@^7.8.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.7.2": + version "7.23.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" + integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/template@^7.22.15", "@babel/template@^7.3.3": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" + integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== + dependencies: + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" + +"@babel/traverse@^7.23.7": + version "7.23.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" + integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== + dependencies: + "@babel/code-frame" "^7.23.5" + "@babel/generator" "^7.23.6" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.23.6" + "@babel/types" "^7.23.6" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3": + version "7.23.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" + integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== + dependencies: + "@babel/helper-string-parser" "^7.23.4" + "@babel/helper-validator-identifier" "^7.22.20" + to-fast-properties "^2.0.0" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@esbuild/android-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" + integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== + +"@esbuild/android-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" + integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== + +"@esbuild/android-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" + integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== + +"@esbuild/darwin-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" + integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== + +"@esbuild/darwin-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" + integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== + +"@esbuild/freebsd-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" + integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== + +"@esbuild/freebsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" + integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== + +"@esbuild/linux-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" + integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== + +"@esbuild/linux-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" + integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== + +"@esbuild/linux-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" + integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== + +"@esbuild/linux-loong64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" + integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== + +"@esbuild/linux-mips64el@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" + integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== + +"@esbuild/linux-ppc64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" + integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== + +"@esbuild/linux-riscv64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" + integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== + +"@esbuild/linux-s390x@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" + integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== + +"@esbuild/linux-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" + integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== + +"@esbuild/netbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" + integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== + +"@esbuild/openbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" + integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== + +"@esbuild/sunos-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" + integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== + +"@esbuild/win32-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" + integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== + +"@esbuild/win32-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" + integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== + +"@esbuild/win32-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" + integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@gar/promisify@^1.0.1": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" + integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== + +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@isaacs/cliui@^8.0.2": + version "8.0.2" + resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" + integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== + 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" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.20" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" + integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@mapbox/node-pre-gyp@^1.0.0": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" + integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== + dependencies: + detect-libc "^2.0.0" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.7" + nopt "^5.0.0" + npmlog "^5.0.1" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.11" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@npmcli/agent@^2.0.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.0.tgz#e81f00fdb2a670750ff7731bbefb47ecbf0ccf44" + integrity sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q== + 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.1" + +"@npmcli/fs@^1.0.0": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" + integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== + dependencies: + "@gar/promisify" "^1.0.1" + semver "^7.3.5" + +"@npmcli/fs@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" + integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== + dependencies: + semver "^7.3.5" + +"@npmcli/move-file@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" + integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== + dependencies: + mkdirp "^1.0.4" + rimraf "^3.0.2" + +"@pkgjs/parseargs@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" + integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== + +"@sentry-internal/eslint-config-sdk@^7.91.0": + version "7.91.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.91.0.tgz#36b347fe86dbf9b130037d5b4eb083d477b82471" + integrity sha512-z1YhDpvvUK1Nl1atXQYZJII4Vjb8bSU0golWo5Pp8DpyRvCI52xthLcT+1+kmL87ZMurVh4zb6sYpMcTQFUtbQ== + dependencies: + "@sentry-internal/eslint-plugin-sdk" "7.91.0" + "@sentry-internal/typescript" "7.91.0" + "@typescript-eslint/eslint-plugin" "^5.48.0" + "@typescript-eslint/parser" "^5.48.0" + eslint-config-prettier "^6.11.0" + eslint-plugin-deprecation "^1.5.0" + eslint-plugin-import "^2.22.0" + eslint-plugin-jest "^27.2.2" + eslint-plugin-jsdoc "^30.0.3" + eslint-plugin-simple-import-sort "^5.0.3" + +"@sentry-internal/eslint-plugin-sdk@7.91.0": + version "7.91.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.91.0.tgz#45a5877ace398f7d83a3dc500aaea85bd04c702e" + integrity sha512-N3asqnTiX7zBhEgIo2FyawJWeSDKqq8qzWl60UxArQNN1QhJGO+j+GPHcmztdMca6cmTomNcOevJ9ShcMcWC9g== + dependencies: + requireindex "~1.1.0" + +"@sentry-internal/tracing@7.91.0": + version "7.91.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.91.0.tgz#fbb6e1e3383e1eeee08633384e004da73ac1c37d" + integrity sha512-JH5y6gs6BS0its7WF2DhySu7nkhPDfZcdpAXldxzIlJpqFkuwQKLU5nkYJpiIyZz1NHYYtW5aum2bV2oCOdDRA== + dependencies: + "@sentry/core" "7.91.0" + "@sentry/types" "7.91.0" + "@sentry/utils" "7.91.0" + +"@sentry-internal/typescript@7.91.0": + version "7.91.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.91.0.tgz#16343227c3552e3f117ccddb1d405bdeb50ab1f6" + integrity sha512-z0e0jVPlcdb3IlRhCzLDgMTC4+HL1z5iQGhs2AcdD1EWbg5xR8aa7t/hXxRGyerqnoIXMr7BfFtdUes+DSD3cA== + +"@sentry/core@7.91.0", "@sentry/core@^7.86.0": + version "7.91.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.91.0.tgz#229334d7f03dd5d90a17495e61ce4215ab730b2a" + integrity sha512-tu+gYq4JrTdrR+YSh5IVHF0fJi/Pi9y0HZ5H9HnYy+UMcXIotxf6hIEaC6ZKGeLWkGXffz2gKpQLe/g6vy/lPA== + dependencies: + "@sentry/types" "7.91.0" + "@sentry/utils" "7.91.0" + +"@sentry/hub@^7.87.0": + version "7.91.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.91.0.tgz#da66d57b7877f655603b87a01e70491f64777b48" + integrity sha512-Ro7AhRu4cbbn+o7FpbGdVikri57HjkAXFD2uwyzZbw7CPoAlvVcezoa0FuUZ/b8KPp38apqVWBR4FdBESUtB9A== + dependencies: + "@sentry/core" "7.91.0" + "@sentry/types" "7.91.0" + "@sentry/utils" "7.91.0" + +"@sentry/node@^7.87.0": + version "7.91.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.91.0.tgz#26bf13c3daf988f9725afd1a3cc38ba2ff90d62a" + integrity sha512-hTIfSQxD7L+AKIqyjoq8CWBRkEQrrMZmA3GSZgPI5JFWBHgO0HBo5TH/8TU81oEJh6kqqHAl2ObMhmcnaFqlzg== + dependencies: + "@sentry-internal/tracing" "7.91.0" + "@sentry/core" "7.91.0" + "@sentry/types" "7.91.0" + "@sentry/utils" "7.91.0" + https-proxy-agent "^5.0.0" + +"@sentry/types@7.91.0", "@sentry/types@^7.87.0": + version "7.91.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.91.0.tgz#5b68954e08986fecb0d4bef168df58eef62c32c7" + integrity sha512-bcQnb7J3P3equbCUc+sPuHog2Y47yGD2sCkzmnZBjvBT0Z1B4f36fI/5WjyZhTjLSiOdg3F2otwvikbMjmBDew== + +"@sentry/utils@7.91.0", "@sentry/utils@^7.87.0": + version "7.91.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.91.0.tgz#3b1a94c053c885877908cd3e1365e3d23e21a73f" + integrity sha512-fvxjrEbk6T6Otu++Ax9ntlQ0sGRiwSC179w68aC3u26Wr30FAIRKqHTCCdc2jyWk7Gd9uWRT/cq+g8NG/8BfSg== + dependencies: + "@sentry/types" "7.91.0" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sinonjs/commons@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" + integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.8" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" + integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" + integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== + dependencies: + "@babel/types" "^7.20.7" + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/eslint@^7": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" + integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" + integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + +"@types/express-serve-static-core@^4.17.33": + version "4.17.41" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" + integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@^4.17.14": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@^29.0.0": + version "29.5.11" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.11.tgz#0c13aa0da7d0929f078ab080ae5d4ced80fa2f2c" + integrity sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/mime@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/node-abi@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/node-abi/-/node-abi-3.0.3.tgz#a8334d75fe45ccd4cdb2a6c1ae82540a7a76828c" + integrity sha512-5oos6sivyXcDEuVC5oX3+wLwfgrGZu4NIOn826PGAjPCHsqp2zSPTGU7H1Tv+GZBOiDUY3nBXY1MdaofSEt4fw== + +"@types/node@*": + version "20.10.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.6.tgz#a3ec84c22965802bf763da55b2394424f22bfbb5" + integrity sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw== + dependencies: + undici-types "~5.26.4" + +"@types/node@^18.19.4": + version "18.19.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.4.tgz#89672e84f11a2c19543d694dac00ab8d7bc20ddb" + integrity sha512-xNzlUhzoHotIsnFoXmJB+yWmBvFZgKCI9TtPIEdYIMM1KWfwuY8zh7wvc1u1OAXlC7dlf6mZVx/s+Y5KfFz19A== + dependencies: + undici-types "~5.26.4" + +"@types/qs@*": + version "6.9.11" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" + integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/semver@^7.3.12", "@types/semver@^7.5.0": + version "7.5.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + dependencies: + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.32" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@^5.48.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== + 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" + +"@typescript-eslint/parser@^5.48.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== + 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" + +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/scope-manager@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.17.0.tgz#70e6c1334d0d76562dfa61aed9009c140a7601b4" + integrity sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA== + dependencies: + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" + +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== + dependencies: + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/types@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.17.0.tgz#844a92eb7c527110bf9a7d177e3f22bd5a2f40cb" + integrity sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + 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" + +"@typescript-eslint/typescript-estree@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.17.0.tgz#b913d19886c52d8dc3db856903a36c6c64fd62aa" + integrity sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg== + dependencies: + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/visitor-keys" "6.17.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "9.0.3" + semver "^7.5.4" + ts-api-utils "^1.0.1" + +"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.10.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + 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" + +"@typescript-eslint/utils@^6.0.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.17.0.tgz#f2b16d4c9984474656c420438cdede7eccd4079e" + integrity sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@types/json-schema" "^7.0.12" + "@types/semver" "^7.5.0" + "@typescript-eslint/scope-manager" "6.17.0" + "@typescript-eslint/types" "6.17.0" + "@typescript-eslint/typescript-estree" "6.17.0" + semver "^7.5.4" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + +"@typescript-eslint/visitor-keys@6.17.0": + version "6.17.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.17.0.tgz#3ed043709c39b43ec1e58694f329e0b0430c26b6" + integrity sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg== + dependencies: + "@typescript-eslint/types" "6.17.0" + eslint-visitor-keys "^3.4.1" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.3.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" + integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== + +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +agent-base@6, agent-base@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" + integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== + dependencies: + debug "^4.3.4" + +agentkeepalive@^4.1.3: + version "4.5.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" + integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== + dependencies: + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + 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" + +ajv@^8.0.1: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +"aproba@^1.0.3 || ^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" + integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== + +are-we-there-yet@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" + integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +are-we-there-yet@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" + integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== + dependencies: + delegates "^1.0.0" + readable-stream "^3.6.0" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-string "^1.0.7" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" + integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-array-buffer "^3.0.2" + is-shared-array-buffer "^1.0.2" + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async@^3.2.3: + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +autocannon@^7.9.0: + version "7.14.0" + resolved "https://registry.yarnpkg.com/autocannon/-/autocannon-7.14.0.tgz#3843f2dd44a02973d36b56dd3199a20b8e97c319" + integrity sha512-lusP43BAwrTwQhihLjKwy7LceyX01eKSvFJUsBktASGqcR1g1ySYSPxCoCGDX08uLEs9oaqEKBBUFMenK3B3lQ== + dependencies: + chalk "^4.1.0" + char-spinner "^1.0.1" + cli-table3 "^0.6.0" + color-support "^1.1.1" + cross-argv "^2.0.0" + form-data "^4.0.0" + has-async-hooks "^1.0.0" + hdr-histogram-js "^3.0.0" + hdr-histogram-percentiles-obj "^3.0.0" + http-parser-js "^0.5.2" + hyperid "^3.0.0" + lodash.chunk "^4.2.0" + lodash.clonedeep "^4.5.0" + lodash.flatten "^4.4.0" + manage-path "^2.0.0" + on-net-listen "^1.1.1" + pretty-bytes "^5.4.1" + progress "^2.0.3" + reinterval "^1.1.0" + retimer "^3.0.0" + semver "^7.3.2" + subarg "^1.0.0" + timestring "^6.0.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-preset-current-node-syntax@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" + integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.8.3" + "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.8.3" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.2.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +benchmark@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" + integrity sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ== + dependencies: + lodash "^4.17.4" + platform "^1.3.3" + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.22.2: + version "4.22.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" + integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== + dependencies: + caniuse-lite "^1.0.30001565" + electron-to-chromium "^1.4.601" + node-releases "^2.0.14" + update-browserslist-db "^1.0.13" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacache@^15.2.0: + version "15.3.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" + integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== + 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" + +cacache@^18.0.0: + version "18.0.1" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.1.tgz#b026d56ad569e4f73cc07c813b3c66707d0fb142" + integrity sha512-g4Uf2CFZPaxtJKre6qr4zqLDOOPU7bNVhWjlNhvzc51xaTOx2noMOLhfFkTAqwtrAZAKQUuDfyjitzilpA8WsQ== + 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" + +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001565: + version "1.0.30001574" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz#fb4f1359c77f6af942510493672e1ec7ec80230c" + integrity sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg== + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +char-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" + integrity sha512-acv43vqJ0+N0rD+Uw3pDHSxP30FHrywu2NO6/wBaHChJIizpDeBUd6NjqhNhy9LGaEAhZAXn46QzmlAvIWd16g== + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +cjs-module-lexer@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" + integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== + +clang-format@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/clang-format/-/clang-format-1.8.0.tgz#7779df1c5ce1bc8aac1b0b02b4e479191ef21d46" + integrity sha512-pK8gzfu55/lHzIpQ1givIbWfn3eXnU7SfxqIwVgnn5jEM6j4ZJYjpFqFs4iSBPNedzRMmfjYjuQhu657WAXHXw== + dependencies: + async "^3.2.3" + glob "^7.0.0" + resolve "^1.1.6" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-table3@^0.6.0: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-support@^1.1.1, color-support@^1.1.2, color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +comment-parser@^0.7.6: + version "0.7.6" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.7.6.tgz#0e743a53c8e646c899a1323db31f6cd337b10f12" + integrity sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +console-control-strings@^1.0.0, console-control-strings@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-argv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cross-argv/-/cross-argv-2.0.0.tgz#2e7907ba3246f82c967623a3e8525925bbd6c0ad" + integrity sha512-YIaY9TR5Nxeb8SMdtrU8asWVM4jqJDNDYlKV21LxtYcfNJhp1kEsgSa6qXwXgzN0WQWGODps0+TlGp2xQSHwOg== + +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +dedent@^1.0.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" + integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^2.0.0, detect-libc@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" + integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +duplex-maker@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/duplex-maker/-/duplex-maker-1.0.0.tgz#1604f8b943cb0063a6d3e1fe42aa65113a79da4a" + integrity sha512-KoHuzggxg7f+vvjqOHfXxaQYI1POzBm+ah0eec7YDssZmbt6QFBI8d1nl5GQwAgR2f+VQCPvyvZtmWWqWuFtlA== + +duplexify@^3.5.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.601: + version "1.4.620" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.620.tgz#a6481e0703f8df1e6821063fb43c9b818a7a2ef4" + integrity sha512-a2fcSHOHrqBJsPNXtf6ZCEZpXrFCcbK1FBxfX3txoqWzNgtEDG1f3M59M98iwxhRW4iMKESnSjbJ310/rkrp0g== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding@^0.1.12, encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + +end-of-stream@^1.0.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@^2.3.5: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +err-code@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" + integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.1: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +esbuild@^0.17.18: + version "0.17.19" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" + integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== + optionalDependencies: + "@esbuild/android-arm" "0.17.19" + "@esbuild/android-arm64" "0.17.19" + "@esbuild/android-x64" "0.17.19" + "@esbuild/darwin-arm64" "0.17.19" + "@esbuild/darwin-x64" "0.17.19" + "@esbuild/freebsd-arm64" "0.17.19" + "@esbuild/freebsd-x64" "0.17.19" + "@esbuild/linux-arm" "0.17.19" + "@esbuild/linux-arm64" "0.17.19" + "@esbuild/linux-ia32" "0.17.19" + "@esbuild/linux-loong64" "0.17.19" + "@esbuild/linux-mips64el" "0.17.19" + "@esbuild/linux-ppc64" "0.17.19" + "@esbuild/linux-riscv64" "0.17.19" + "@esbuild/linux-s390x" "0.17.19" + "@esbuild/linux-x64" "0.17.19" + "@esbuild/netbsd-x64" "0.17.19" + "@esbuild/openbsd-x64" "0.17.19" + "@esbuild/sunos-x64" "0.17.19" + "@esbuild/win32-arm64" "0.17.19" + "@esbuild/win32-ia32" "0.17.19" + "@esbuild/win32-x64" "0.17.19" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-prettier@^6.11.0: + version "6.15.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" + integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== + dependencies: + get-stdin "^6.0.0" + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-deprecation@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.6.0.tgz#b12d0c5a9baf3bcde0752ff6337703c059a4ae23" + integrity sha512-rld+Vrneh/NXRtDB0vQifOvgUy0HJYoejaxWlVnsk/LK7iij2tCWQIFcCKG4uzQb+Ef86bDke39w1lh4wnon4Q== + dependencies: + "@typescript-eslint/utils" "^6.0.0" + tslib "^2.3.1" + tsutils "^3.21.0" + +eslint-plugin-import@^2.22.0: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + 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.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.15.0" + +eslint-plugin-jest@^27.2.2: + version "27.6.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.6.1.tgz#5e43b07f3ca48d72e4b4fa243531e5153d9ca1dc" + integrity sha512-WEYkyVXD9NlmFBKvrkmzrC+C9yZoz5pAml2hO19PlS3spJtoiwj4p2u8spd/7zx5IvRsZsCmsoImaAvBB9X93Q== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + +eslint-plugin-jsdoc@^30.0.3: + version "30.7.13" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.7.13.tgz#52e5c74fb806d3bbeb51d04a0c829508c3c6b563" + integrity sha512-YM4WIsmurrp0rHX6XiXQppqKB8Ne5ATiZLJe2+/fkp9l9ExXFr43BbAbjZaVrpCT+tuPYOZ8k1MICARHnURUNQ== + dependencies: + comment-parser "^0.7.6" + debug "^4.3.1" + jsdoctypeparser "^9.0.0" + lodash "^4.17.20" + regextras "^0.7.1" + semver "^7.3.4" + spdx-expression-parse "^3.0.1" + +eslint-plugin-simple-import-sort@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.3.tgz#9ae258ddada6efffc55e47a134afbd279eb31fc6" + integrity sha512-1rf3AWiHeWNCQdAq0iXNnlccnH1UDnelGgrPbjBBHE8d2hXVtOudcmy0vTF4hri3iJ0MKz8jBhmH6lJ0ZWZLHQ== + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@7.32.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + 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" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + +express@^4.18.1: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + 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.4" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" + integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreground-child@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" + integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-minipass@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" + integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== + dependencies: + minipass "^7.0.3" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gauge@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" + integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.2" + console-control-strings "^1.0.0" + has-unicode "^2.0.1" + object-assign "^4.1.1" + signal-exit "^3.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.2" + +gauge@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" + integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== + dependencies: + aproba "^1.0.3 || ^2.0.0" + color-support "^1.1.3" + console-control-strings "^1.1.0" + has-unicode "^2.0.1" + signal-exit "^3.0.7" + string-width "^4.2.3" + strip-ansi "^6.0.1" + wide-align "^1.1.5" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^10.2.2, glob@^10.3.10: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + +glob@^7.0.0, glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + 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" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.6.0, globals@^13.9.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + 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" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-async-hooks@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-async-hooks/-/has-async-hooks-1.0.0.tgz#3df965ade8cd2d9dbfdacfbca3e0a5152baaf204" + integrity sha512-YF0VPGjkxr7AyyQQNykX8zK4PvtEDsUJAPqwu06UFz1lb6EvI53sPh5H1kWxg8NXI5LsfRCZ8uX9NkYDZBb/mw== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-unicode@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +hdr-histogram-js@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hdr-histogram-js/-/hdr-histogram-js-3.0.0.tgz#8e2d9a68e3313147804c47d85a9c22a93f85e24b" + integrity sha512-/EpvQI2/Z98mNFYEnlqJ8Ogful8OpArLG/6Tf2bPnkutBVLIeMVNHjk1ZDfshF2BUweipzbk+dB1hgSB7SIakw== + dependencies: + "@assemblyscript/loader" "^0.19.21" + base64-js "^1.2.0" + pako "^1.0.3" + +hdr-histogram-percentiles-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz#9409f4de0c2dda78e61de2d9d78b1e9f3cba283c" + integrity sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-parser-js@^0.5.2: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" + integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== + dependencies: + agent-base "^7.0.2" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +hyperid@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/hyperid/-/hyperid-3.1.1.tgz#50fe8a75ff3ada74dacaf5a3761fb031bdf541c7" + integrity sha512-RveV33kIksycSf7HLkq1sHB5wW0OwuX8ot8MYnY++gaaPXGFfKpBncHrAWxdpuEeRlazUMGWefwP1w6o6GaumA== + dependencies: + uuid "^8.3.2" + uuid-parse "^1.1.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + +ip@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" + integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: + version "1.1.12" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" + integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== + dependencies: + which-typed-array "^1.1.11" + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-zst@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-zst/-/is-zst-1.0.0.tgz#97462bb1a376dabba561e249ea754801e9b90fe0" + integrity sha512-ZA5lvshKAl8z30dX7saXLpVhpsq3d2EHK9uf7qtUjnOtdw4XBpAoWb2RvZ5kyoaebdoidnGI0g2hn9Z7ObPbww== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" + integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.6" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" + integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.0.0, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@^29.5.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsdoctypeparser@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26" + integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.chunk@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" + integrity sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@^4.17.20, lodash@^4.17.4: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" + integrity sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A== + 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" + promise-retry "^2.0.1" + ssri "^10.0.0" + +make-fetch-happen@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" + integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== + 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" + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +manage-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/manage-path/-/manage-path-2.0.0.tgz#f4cf8457b926eeee2a83b173501414bc76eb9597" + integrity sha512-NJhyB+PJYTpxhxZJ3lecIGgh4kwIY2RAh44XvAz9UlqthlQwtPBf62uBVR8XaD8CRuSjQ6TnZH2lNJkbLPZM2A== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@9.0.3, minimatch@^9.0.1: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== + dependencies: + minipass "^7.0.3" + +minipass-fetch@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" + integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== + dependencies: + minipass "^3.1.0" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-fetch@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" + integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== + dependencies: + minipass "^7.0.3" + minipass-sized "^1.0.3" + minizlib "^2.1.2" + optionalDependencies: + encoding "^0.1.13" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" + integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: + version "3.3.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" + integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== + dependencies: + yallist "^4.0.0" + +minipass@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" + integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== + +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + +minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3, mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.0.0, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3, negotiator@^0.6.2, negotiator@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +node-abi@^3.52.0: + version "3.54.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.54.0.tgz#f6386f7548817acac6434c6cba02999c9aebcc69" + integrity sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA== + dependencies: + semver "^7.3.5" + +node-addon-api@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" + integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== + +node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp@8.x: + version "8.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" + integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== + dependencies: + env-paths "^2.2.0" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^9.1.0" + nopt "^5.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + +node-gyp@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.0.1.tgz#205514fc19e5830fa991e4a689f9e81af377a966" + integrity sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg== + 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 "^3.0.0" + semver "^7.3.5" + tar "^6.1.2" + which "^4.0.0" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-releases@^2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" + integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== + +nopt@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" + integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== + dependencies: + abbrev "1" + +nopt@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" + integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== + dependencies: + abbrev "^2.0.0" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" + integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== + dependencies: + are-we-there-yet "^2.0.0" + console-control-strings "^1.1.0" + gauge "^3.0.0" + set-blocking "^2.0.0" + +npmlog@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" + integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== + dependencies: + are-we-there-yet "^3.0.0" + console-control-strings "^1.1.0" + gauge "^4.0.3" + set-blocking "^2.0.0" + +object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" + integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-net-listen@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/on-net-listen/-/on-net-listen-1.1.2.tgz#671e55a81c910fa7e5b1e4d506545e9ea0f2e11c" + integrity sha512-y1HRYy8s/RlcBvDUwKXSmkODMdx4KSuIvloCnQYJ2LdBBC1asY4HtfhXwe3UWknLakATZDnbzht2Ijw3M1EqFg== + +once@^1.3.0, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.9.1: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@^1.0.3: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + 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" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-scurry@^1.10.1: + version "1.10.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" + integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== + dependencies: + lru-cache "^9.1.1 || ^10.0.0" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +peek-stream@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz#3b35d84b7ccbbd262fff31dc10da56856ead6d67" + integrity sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA== + dependencies: + buffer-from "^1.0.0" + duplexify "^3.5.0" + through2 "^2.0.3" + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pirates@^4.0.4: + version "4.0.6" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" + integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +platform@^1.3.3: + version "1.3.6" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +pretty-bytes@^5.4.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" + integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== + +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process-streams@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/process-streams/-/process-streams-1.0.1.tgz#e22c2aadbf788ef0c5754ea5e057e985c87dd691" + integrity sha512-Z+FHhxiBhiQ4t/xTY3Bo2SxZG/CehflyckFsQirAXFRf/BfVnDePzpo58eq9JI4XfFu1RnX5C5EAE6V4sce1+g== + dependencies: + duplex-maker "^1.0.0" + quotemeta "0.0.0" + tempfile "^1.1.0" + +progress@^2.0.0, progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== + +promise-retry@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" + integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== + dependencies: + err-code "^2.0.2" + retry "^0.12.0" + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.0.4" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" + integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quotemeta@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/quotemeta/-/quotemeta-0.0.0.tgz#51d3a06ee0fcd6e3b501dbd28904351ad7a5a38c" + integrity sha512-1XGObUh7RN5b58vKuAsrlfqT+Rc4vmw8N4pP9gFCq1GFlTdV0Ex/D2Ro1Drvrqj++HPi3ig0Np17XPslELeMRA== + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== + dependencies: + loose-envify "^1.1.0" + scheduler "^0.23.0" + +react-is@^18.0.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" + integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== + +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== + dependencies: + loose-envify "^1.1.0" + +readable-stream@3, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.0.0, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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" + +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regextras@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2" + integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w== + +reinterval@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reinterval/-/reinterval-1.1.0.tgz#3361ecfa3ca6c18283380dd0bb9546f390f5ece7" + integrity sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ== + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requireindex@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" + integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve.exports@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" + integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + +resolve@^1.1.6, resolve@^1.20.0, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +retimer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/retimer/-/retimer-3.0.0.tgz#98b751b1feaf1af13eb0228f8ea68b8f9da530df" + integrity sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" + integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== + dependencies: + loose-envify "^1.1.0" + +semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.0, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +simple-zstd@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/simple-zstd/-/simple-zstd-1.4.2.tgz#4f5b7b05dfd2930b03092eb0c0cd13a44bad4b34" + integrity sha512-kGYEvT33M5XfyQvvW4wxl3eKcWbdbCc1V7OZzuElnaXft0qbVzoIIXHXiCm3JCUki+MZKKmvjl8p2VGLJc5Y/A== + dependencies: + is-zst "^1.0.0" + peek-stream "^1.1.3" + process-streams "^1.0.1" + through2 "^4.0.2" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +smart-buffer@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== + +socks-proxy-agent@^6.0.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" + integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== + dependencies: + agent-base "^6.0.2" + debug "^4.3.3" + socks "^2.6.2" + +socks-proxy-agent@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" + integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + socks "^2.7.1" + +socks@^2.6.2, socks@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" + integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== + dependencies: + ip "^2.0.0" + smart-buffer "^4.2.0" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.16" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sqlite3@^5.0.8: + version "5.1.6" + resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.6.tgz#1d4fbc90fe4fbd51e952e0a90fd8f6c2b9098e97" + integrity sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.0" + node-addon-api "^4.2.0" + tar "^6.1.11" + optionalDependencies: + node-gyp "8.x" + +ssri@^10.0.0: + version "10.0.5" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" + integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== + dependencies: + minipass "^7.0.3" + +ssri@^8.0.0, ssri@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" + integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== + dependencies: + minipass "^3.1.1" + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1, string-width@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== + dependencies: + ansi-regex "^6.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + integrity sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg== + dependencies: + minimist "^1.1.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +table@^6.0.9: + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: + version "6.2.0" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" + integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== + 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" + +tempfile@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" + integrity sha512-NjT12fW6pSEKz1eVcADgaKfeM+XZ4+zSaqVz46XH7+CiEwcelnwtGWRRjF1p+xyW2PVgKKKS2UUw1LzRelntxg== + dependencies: + os-tmpdir "^1.0.0" + uuid "^2.0.1" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +through2@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +timestring@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/timestring/-/timestring-6.0.0.tgz#b0c7c331981ecf2066ce88bcfb8ee3ae32e7a0f6" + integrity sha512-wMctrWD2HZZLuIlchlkE2dfXJh7J2KDI9Dwl+2abPYg0mswQHfOAyQW3jJg1pY5VfttSINZuKcXoB3FGypVklA== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-api-utils@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" + integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== + +ts-jest@^29.1.0: + version "29.1.1" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.1.tgz#f58fe62c63caf7bfcc5cc6472082f79180f0815b" + integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "^7.5.3" + yargs-parser "^21.0.1" + +ts-node@^10.9.1: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + 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" + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.3.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typescript@^4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-filename@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" + integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== + dependencies: + unique-slug "^4.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-slug@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" + integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== + dependencies: + imurmurhash "^0.1.4" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.0.13: + version "1.0.13" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" + integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid-parse@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/uuid-parse/-/uuid-parse-1.1.0.tgz#7061c5a1384ae0e1f943c538094597e1b5f3a65b" + integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== + +uuid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + integrity sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-compile-cache@^2.0.3: + version "2.4.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" + integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== + +v8-to-istanbul@^9.0.1: + version "9.2.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" + integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.11, which-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" + integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.4" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== + dependencies: + isexe "^3.1.1" + +wide-align@^1.1.2, wide-align@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^21.0.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs@^17.3.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + 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" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From b0069e05f9240869979e8093cce6142d3fec96b2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 11:25:08 -0500 Subject: [PATCH 002/240] fix: scope profiling test to pkg --- .github/workflows/build.yml | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2e013b32140e..1a788641c80a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -268,7 +268,7 @@ jobs: dependency_cache_key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} job_build_bindings_profiling_node: - name: ${{ matrix.os }} (${{ matrix.target_platform }} node=${{ matrix.node || matrix.container }}, arch=${{ matrix.arch || matrix.container }}, compiler=${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) + name: Build Profiling Bindings ${{ matrix.os }} (${{ matrix.target_platform }} node=${{ matrix.node || matrix.container }}, arch=${{ matrix.arch || matrix.container }}, compiler=${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) needs: [job_get_metadata, job_install_deps] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} @@ -653,12 +653,20 @@ jobs: ref: ${{ env.HEAD_COMMIT }} - uses: actions/setup-node@v4 with: - node-version: 'package.json' + node-version: 20 - uses: actions/setup-python@v4 - - run: yarn install --frozen-lockfile - - run: yarn build:bindings:configure - - run: yarn build - - run: yarn test + - run: | + cd packages/profiling-node + yarn install --frozen-lockfile + - run: | + cd packages/profiling-node + yarn build:bindings:configure + - run: | + cd packages/profiling-node + yarn build + - run: | + cd packages/profiling-node + yarn test job_bun_unit_tests: name: Bun Unit Tests From 854d2e70823408959dcc170a5633c23bc4e26f73 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 11:31:22 -0500 Subject: [PATCH 003/240] ci: change naming to be more consistent with rest of the build --- .github/workflows/build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1a788641c80a..0790148f9df0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -268,7 +268,7 @@ jobs: dependency_cache_key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} job_build_bindings_profiling_node: - name: Build Profiling Bindings ${{ matrix.os }} (${{ matrix.target_platform }} node=${{ matrix.node || matrix.container }}, arch=${{ matrix.arch || matrix.container }}, compiler=${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) + name: Build Profiling Bindings Node (${{ matrix.os }}) (${{ matrix.target_platform }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) needs: [job_get_metadata, job_install_deps] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} @@ -450,6 +450,7 @@ jobs: ${{ github.workspace }}/packages/profiling-node/lib/*.node job_pack_profiling_node: + name: Extract Binaries and Pack Profiling Node runs-on: ubuntu-latest needs: [job_get_metadata, job_build_bindings_profiling_node] timeout-minutes: 5 From 9437cf7363f0c3661bd17729301748eacef2d580 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 11:42:11 -0500 Subject: [PATCH 004/240] ci: fix forgotten cmd rename --- .github/workflows/build.yml | 2 +- packages/profiling-node/package.json | 2 +- packages/profiling-node/scripts/check-build.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0790148f9df0..d953132dcca6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -268,7 +268,7 @@ jobs: dependency_cache_key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} job_build_bindings_profiling_node: - name: Build Profiling Bindings Node (${{ matrix.os }}) (${{ matrix.target_platform }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) + name: Build Profiling Bindings Node (${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) needs: [job_get_metadata, job_install_deps] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 2f0b546b1bbc..b2eaf5fb8e5c 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -43,7 +43,7 @@ "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64", "build:bindings": "node-gyp build && node scripts/copy-target.js", "build:bindings:arm64": "node-gyp build --arch=arm64 && node scripts/copy-target.js", - "build:dev": "yarn clean && yarn build:configure && yarn build", + "build:dev": "yarn clean && yarn build:bindings:configure && yarn build", "test:watch": "cross-env SENTRY_PROFILER_BINARY_DIR=./build jest --watch", "test:bundle": "node test-binaries.esbuild.js", "test:setup:bundle": "(npm link && cd demo_app && npm install && npm link @sentry/profiling-node)", diff --git a/packages/profiling-node/scripts/check-build.js b/packages/profiling-node/scripts/check-build.js index eb60afa0941d..c0330b080503 100644 --- a/packages/profiling-node/scripts/check-build.js +++ b/packages/profiling-node/scripts/check-build.js @@ -9,7 +9,7 @@ function clean(err) { function recompileFromSource() { // eslint-disable-next-line no-console console.log('@sentry/profiling-node: Compiling from source...'); - let spawn = child_process.spawnSync('npm', ['run', 'build:configure'], { + let spawn = child_process.spawnSync('npm', ['run', 'build:bindings:configure'], { stdio: ['inherit', 'inherit', 'pipe'], env: process.env, shell: true From f230b5983e3ed7b9495703d38dfe9c1bbbaaa625 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 11:57:26 -0500 Subject: [PATCH 005/240] deps: cleanup shared dependencies --- packages/profiling-node/package.json | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index b2eaf5fb8e5c..43a0471020b3 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -87,26 +87,12 @@ "@sentry/node": "^7.87.0", "@sentry/types": "^7.87.0", "@sentry/utils": "^7.87.0", - "@types/eslint": "^7", - "@types/express": "^4.17.14", - "@types/jest": "^29.0.0", - "@types/node": "^18.19.4", "@types/node-abi": "^3.0.0", - "autocannon": "^7.9.0", - "benchmark": "^2.1.4", "clang-format": "^1.8.0", "cross-env": "^7.0.3", "esbuild": "^0.17.18", "eslint": "7.32.0", - "express": "^4.18.1", - "jest": "^29.5.0", "node-gyp": "^10.0.1", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "simple-zstd": "^1.4.0", - "sqlite3": "^5.0.8", - "ts-jest": "^29.1.0", - "ts-node": "^10.9.1", "typescript": "^4.9.5" } } From ca7d2df9ef2418de97194b5541b5eea89b0955a1 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 11:57:36 -0500 Subject: [PATCH 006/240] deps: cleanup shared dependencies --- yarn.lock | 326 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 322 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8b1623ec39bb..633144329c6e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2734,6 +2734,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== +"@esbuild/android-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" + integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== + "@esbuild/android-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" @@ -2754,6 +2759,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== +"@esbuild/android-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" + integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== + "@esbuild/android-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" @@ -2774,6 +2784,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== +"@esbuild/android-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" + integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== + "@esbuild/android-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" @@ -2794,6 +2809,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== +"@esbuild/darwin-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" + integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== + "@esbuild/darwin-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" @@ -2814,6 +2834,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== +"@esbuild/darwin-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" + integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== + "@esbuild/darwin-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" @@ -2834,6 +2859,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== +"@esbuild/freebsd-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" + integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== + "@esbuild/freebsd-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" @@ -2854,6 +2884,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== +"@esbuild/freebsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" + integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== + "@esbuild/freebsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" @@ -2874,6 +2909,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== +"@esbuild/linux-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" + integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== + "@esbuild/linux-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" @@ -2894,6 +2934,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== +"@esbuild/linux-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" + integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== + "@esbuild/linux-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" @@ -2914,6 +2959,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== +"@esbuild/linux-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" + integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== + "@esbuild/linux-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" @@ -2934,6 +2984,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== +"@esbuild/linux-loong64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" + integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== + "@esbuild/linux-loong64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" @@ -2954,6 +3009,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== +"@esbuild/linux-mips64el@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" + integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== + "@esbuild/linux-mips64el@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" @@ -2974,6 +3034,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== +"@esbuild/linux-ppc64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" + integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== + "@esbuild/linux-ppc64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" @@ -2994,6 +3059,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== +"@esbuild/linux-riscv64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" + integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== + "@esbuild/linux-riscv64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" @@ -3014,6 +3084,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== +"@esbuild/linux-s390x@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" + integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== + "@esbuild/linux-s390x@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" @@ -3034,6 +3109,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== +"@esbuild/linux-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" + integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== + "@esbuild/linux-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" @@ -3054,6 +3134,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== +"@esbuild/netbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" + integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== + "@esbuild/netbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" @@ -3074,6 +3159,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== +"@esbuild/openbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" + integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== + "@esbuild/openbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" @@ -3094,6 +3184,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== +"@esbuild/sunos-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" + integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== + "@esbuild/sunos-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" @@ -3114,6 +3209,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== +"@esbuild/win32-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" + integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== + "@esbuild/win32-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" @@ -3134,6 +3234,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== +"@esbuild/win32-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" + integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== + "@esbuild/win32-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" @@ -3154,6 +3259,11 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== +"@esbuild/win32-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" + integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== + "@esbuild/win32-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" @@ -4302,6 +4412,17 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" +"@npmcli/agent@^2.0.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.0.tgz#e81f00fdb2a670750ff7731bbefb47ecbf0ccf44" + integrity sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q== + 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.1" + "@npmcli/fs@^1.0.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" @@ -6531,6 +6652,11 @@ dependencies: "@types/unist" "^2" +"@types/node-abi@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/node-abi/-/node-abi-3.0.3.tgz#a8334d75fe45ccd4cdb2a6c1ae82540a7a76828c" + integrity sha512-5oos6sivyXcDEuVC5oX3+wLwfgrGZu4NIOn826PGAjPCHsqp2zSPTGU7H1Tv+GZBOiDUY3nBXY1MdaofSEt4fw== + "@types/node-fetch@^2.6.0": version "2.6.2" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.2.tgz#d1a9c5fd049d9415dce61571557104dec3ec81da" @@ -7700,6 +7826,11 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= +abbrev@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" + integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== + abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -7804,7 +7935,7 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -agent-base@4, agent-base@5, agent-base@6, agent-base@^4.3.0, agent-base@^6.0.2, agent-base@~4.2.1: +agent-base@4, agent-base@5, agent-base@6, agent-base@^4.3.0, agent-base@^6.0.2, agent-base@^7.0.2, agent-base@^7.1.0, agent-base@~4.2.1: version "5.1.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== @@ -10801,6 +10932,24 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" +cacache@^18.0.0: + version "18.0.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.2.tgz#fd527ea0f03a603be5c0da5805635f8eef00c60c" + integrity sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw== + 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" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -11226,6 +11375,15 @@ cjs-module-lexer@^1.2.2: resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== +clang-format@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/clang-format/-/clang-format-1.8.0.tgz#7779df1c5ce1bc8aac1b0b02b4e479191ef21d46" + integrity sha512-pK8gzfu55/lHzIpQ1givIbWfn3eXnU7SfxqIwVgnn5jEM6j4ZJYjpFqFs4iSBPNedzRMmfjYjuQhu657WAXHXw== + dependencies: + async "^3.2.3" + glob "^7.0.0" + resolve "^1.1.6" + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -12147,6 +12305,12 @@ cron@^3.1.6: dependencies: "@types/luxon" "~3.3.0" luxon "~3.4.0" +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" @@ -12159,7 +12323,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -14617,6 +14781,34 @@ esbuild@^0.16.14, esbuild@^0.16.3: "@esbuild/win32-ia32" "0.16.17" "@esbuild/win32-x64" "0.16.17" +esbuild@^0.17.18: + version "0.17.19" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" + integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== + optionalDependencies: + "@esbuild/android-arm" "0.17.19" + "@esbuild/android-arm64" "0.17.19" + "@esbuild/android-x64" "0.17.19" + "@esbuild/darwin-arm64" "0.17.19" + "@esbuild/darwin-x64" "0.17.19" + "@esbuild/freebsd-arm64" "0.17.19" + "@esbuild/freebsd-x64" "0.17.19" + "@esbuild/linux-arm" "0.17.19" + "@esbuild/linux-arm64" "0.17.19" + "@esbuild/linux-ia32" "0.17.19" + "@esbuild/linux-loong64" "0.17.19" + "@esbuild/linux-mips64el" "0.17.19" + "@esbuild/linux-ppc64" "0.17.19" + "@esbuild/linux-riscv64" "0.17.19" + "@esbuild/linux-s390x" "0.17.19" + "@esbuild/linux-x64" "0.17.19" + "@esbuild/netbsd-x64" "0.17.19" + "@esbuild/openbsd-x64" "0.17.19" + "@esbuild/sunos-x64" "0.17.19" + "@esbuild/win32-arm64" "0.17.19" + "@esbuild/win32-ia32" "0.17.19" + "@esbuild/win32-x64" "0.17.19" + esbuild@^0.18.10: version "0.18.20" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" @@ -15308,6 +15500,11 @@ expect@^27.5.1: jest-matcher-utils "^27.5.1" jest-message-util "^27.5.1" +exponential-backoff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" + integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== + express@^4.10.7, express@^4.16.4, express@^4.17.1, express@^4.17.3, express@^4.18.1: version "4.18.2" resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" @@ -16639,6 +16836,17 @@ glob@^10.2.2: minipass "^5.0.0 || ^6.0.2" path-scurry "^1.10.0" +glob@^10.3.10: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== + dependencies: + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" + glob@^10.3.4: version "10.3.4" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.4.tgz#c85c9c7ab98669102b6defda76d35c5b1ef9766f" @@ -17688,6 +17896,14 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-proxy-agent@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" + integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -17755,6 +17971,14 @@ https-proxy-agent@^4.0.0: agent-base "5" debug "4" +https-proxy-agent@^7.0.1: + version "7.0.2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" + integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== + dependencies: + agent-base "^7.0.2" + debug "4" + https@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4" @@ -18826,6 +19050,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isexe@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" + integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== + isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -18966,6 +19195,15 @@ jackspeak@^2.0.3: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +jackspeak@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" + integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== + dependencies: + "@isaacs/cliui" "^8.0.2" + optionalDependencies: + "@pkgjs/parseargs" "^0.11.0" + jake@^10.8.5: version "10.8.5" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" @@ -20890,6 +21128,11 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^10.0.1: + version "10.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" + integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -21086,6 +21329,23 @@ make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: socks-proxy-agent "^7.0.0" ssri "^10.0.0" +make-fetch-happen@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" + integrity sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A== + 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" + promise-retry "^2.0.1" + ssri "^10.0.0" + make-fetch-happen@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" @@ -22078,6 +22338,13 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" +minipass-collect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" + integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== + dependencies: + minipass "^7.0.3" + minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" @@ -22180,6 +22447,11 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== +minipass@^7.0.2, minipass@^7.0.3: + version "7.0.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" + integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== + minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -22887,6 +23159,13 @@ node-abi@^3.3.0: dependencies: semver "^7.3.5" +node-abi@^3.52.0: + version "3.54.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.54.0.tgz#f6386f7548817acac6434c6cba02999c9aebcc69" + integrity sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA== + dependencies: + semver "^7.3.5" + node-abort-controller@^3.0.1: version "3.1.1" resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" @@ -22954,6 +23233,22 @@ node-gyp-build@^4.3.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== +node-gyp@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.0.1.tgz#205514fc19e5830fa991e4a689f9e81af377a966" + integrity sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg== + 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 "^3.0.0" + semver "^7.3.5" + tar "^6.1.2" + which "^4.0.0" + node-gyp@^8.2.0: version "8.4.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" @@ -23120,6 +23415,13 @@ nopt@^6.0.0: dependencies: abbrev "^1.0.0" +nopt@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" + integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== + dependencies: + abbrev "^2.0.0" + nopt@~1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" @@ -28692,7 +28994,16 @@ socks-proxy-agent@^7.0.0: debug "^4.3.3" socks "^2.6.2" -socks@^2.6.2: +socks-proxy-agent@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" + integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== + dependencies: + agent-base "^7.0.2" + debug "^4.3.4" + socks "^2.7.1" + +socks@^2.6.2, socks@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== @@ -30793,7 +31104,7 @@ typescript@4.3.5: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== -typescript@4.9.5: +typescript@4.9.5, typescript@^4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== @@ -32346,6 +32657,13 @@ which@^3.0.0: dependencies: isexe "^2.0.0" +which@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" + integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== + dependencies: + isexe "^3.1.1" + why-is-node-running@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" From 566f634f962ab716d42dabbee706be28ee752246 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 12:00:21 -0500 Subject: [PATCH 007/240] deps: cleanup shared dependencies --- packages/profiling-node/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 43a0471020b3..44c17ecb8308 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -91,7 +91,6 @@ "clang-format": "^1.8.0", "cross-env": "^7.0.3", "esbuild": "^0.17.18", - "eslint": "7.32.0", "node-gyp": "^10.0.1", "typescript": "^4.9.5" } From f9347594df012721decebbde8f431bb066809440 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 12:39:31 -0500 Subject: [PATCH 008/240] deps: cleanup shared dependencies --- packages/profiling-node/package.json | 1 - packages/profiling-node/yarn.lock | 5661 -------------------------- 2 files changed, 5662 deletions(-) delete mode 100644 packages/profiling-node/yarn.lock diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 44c17ecb8308..988a18ae5d84 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -81,7 +81,6 @@ "node-abi": "^3.52.0" }, "devDependencies": { - "@sentry-internal/eslint-config-sdk": "^7.91.0", "@sentry/core": "^7.86.0", "@sentry/hub": "^7.87.0", "@sentry/node": "^7.87.0", diff --git a/packages/profiling-node/yarn.lock b/packages/profiling-node/yarn.lock deleted file mode 100644 index 80c6ac5cf663..000000000000 --- a/packages/profiling-node/yarn.lock +++ /dev/null @@ -1,5661 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@ampproject/remapping@^2.2.0": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" - integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@assemblyscript/loader@^0.19.21": - version "0.19.23" - resolved "https://registry.yarnpkg.com/@assemblyscript/loader/-/loader-0.19.23.tgz#7fccae28d0a2692869f1d1219d36093bc24d5e72" - integrity sha512-ulkCYfFbYj01ie1MDOyxv2F6SpRN1TOj7fQxbP07D6HmeR+gr2JLSmINKjga2emB+b1L2KGrFKBTc+e00p54nw== - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/compat-data@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98" - integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw== - -"@babel/core@^7.11.6", "@babel/core@^7.12.3": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.23.7.tgz#4d8016e06a14b5f92530a13ed0561730b5c6483f" - integrity sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw== - dependencies: - "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-compilation-targets" "^7.23.6" - "@babel/helper-module-transforms" "^7.23.3" - "@babel/helpers" "^7.23.7" - "@babel/parser" "^7.23.6" - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" - convert-source-map "^2.0.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.3" - semver "^6.3.1" - -"@babel/generator@^7.23.6", "@babel/generator@^7.7.2": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e" - integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw== - dependencies: - "@babel/types" "^7.23.6" - "@jridgewell/gen-mapping" "^0.3.2" - "@jridgewell/trace-mapping" "^0.3.17" - jsesc "^2.5.1" - -"@babel/helper-compilation-targets@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991" - integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ== - dependencies: - "@babel/compat-data" "^7.23.5" - "@babel/helper-validator-option" "^7.23.5" - browserslist "^4.22.2" - lru-cache "^5.1.1" - semver "^6.3.1" - -"@babel/helper-environment-visitor@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167" - integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA== - -"@babel/helper-function-name@^7.23.0": - version "7.23.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759" - integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw== - dependencies: - "@babel/template" "^7.22.15" - "@babel/types" "^7.23.0" - -"@babel/helper-hoist-variables@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" - integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-module-imports@^7.22.15": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" - integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== - dependencies: - "@babel/types" "^7.22.15" - -"@babel/helper-module-transforms@^7.23.3": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1" - integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ== - dependencies: - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-module-imports" "^7.22.15" - "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/helper-validator-identifier" "^7.22.20" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/helper-simple-access@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" - integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-split-export-declaration@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" - integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== - dependencies: - "@babel/types" "^7.22.5" - -"@babel/helper-string-parser@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83" - integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ== - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/helper-validator-option@^7.23.5": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307" - integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw== - -"@babel/helpers@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.7.tgz#eb543c36f81da2873e47b76ee032343ac83bba60" - integrity sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ== - dependencies: - "@babel/template" "^7.22.15" - "@babel/traverse" "^7.23.7" - "@babel/types" "^7.23.6" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.15", "@babel/parser@^7.23.6": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz#24f460c85dbbc983cd2b9c4994178bcc01df958f" - integrity sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/template@^7.22.15", "@babel/template@^7.3.3": - version "7.22.15" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38" - integrity sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w== - dependencies: - "@babel/code-frame" "^7.22.13" - "@babel/parser" "^7.22.15" - "@babel/types" "^7.22.15" - -"@babel/traverse@^7.23.7": - version "7.23.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.7.tgz#9a7bf285c928cb99b5ead19c3b1ce5b310c9c305" - integrity sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg== - dependencies: - "@babel/code-frame" "^7.23.5" - "@babel/generator" "^7.23.6" - "@babel/helper-environment-visitor" "^7.22.20" - "@babel/helper-function-name" "^7.23.0" - "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.23.6" - "@babel/types" "^7.23.6" - debug "^4.3.1" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.22.15", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.3.3": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.23.6.tgz#be33fdb151e1f5a56877d704492c240fc71c7ccd" - integrity sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg== - dependencies: - "@babel/helper-string-parser" "^7.23.4" - "@babel/helper-validator-identifier" "^7.22.20" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== - -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== - -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== - -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== - -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== - -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== - -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== - -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== - -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== - -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== - -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== - -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== - -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@gar/promisify@^1.0.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" - integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== - -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== - dependencies: - "@humanwhocodes/object-schema" "^1.2.0" - debug "^4.1.1" - minimatch "^3.0.4" - -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - 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" - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" - integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - -"@jest/core@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" - integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== - dependencies: - "@jest/console" "^29.7.0" - "@jest/reporters" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - ci-info "^3.2.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^29.7.0" - jest-config "^29.7.0" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-resolve-dependencies "^29.7.0" - jest-runner "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - jest-watcher "^29.7.0" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" - integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== - dependencies: - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - -"@jest/expect-utils@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" - integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== - dependencies: - jest-get-type "^29.6.3" - -"@jest/expect@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" - integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== - dependencies: - expect "^29.7.0" - jest-snapshot "^29.7.0" - -"@jest/fake-timers@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" - integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== - dependencies: - "@jest/types" "^29.6.3" - "@sinonjs/fake-timers" "^10.0.2" - "@types/node" "*" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -"@jest/globals@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" - integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/types" "^29.6.3" - jest-mock "^29.7.0" - -"@jest/reporters@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" - integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^6.0.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - jest-worker "^29.7.0" - slash "^3.0.0" - string-length "^4.0.1" - strip-ansi "^6.0.0" - v8-to-istanbul "^9.0.1" - -"@jest/schemas@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" - integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== - dependencies: - "@sinclair/typebox" "^0.27.8" - -"@jest/source-map@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" - integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== - dependencies: - "@jridgewell/trace-mapping" "^0.3.18" - callsites "^3.0.0" - graceful-fs "^4.2.9" - -"@jest/test-result@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" - integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== - dependencies: - "@jest/console" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" - integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== - dependencies: - "@jest/test-result" "^29.7.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - slash "^3.0.0" - -"@jest/transform@^29.7.0": - version "29.7.0" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" - integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== - dependencies: - "@babel/core" "^7.11.6" - "@jest/types" "^29.6.3" - "@jridgewell/trace-mapping" "^0.3.18" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^2.0.0" - fast-json-stable-stringify "^2.1.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - write-file-atomic "^4.0.2" - -"@jest/types@^29.6.3": - version "29.6.3" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" - integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== - dependencies: - "@jest/schemas" "^29.6.3" - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^17.0.8" - chalk "^4.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz#72e45707cf240fa6b081d0366f8265b0cd10197f" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@mapbox/node-pre-gyp@^1.0.0": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz#417db42b7f5323d79e93b34a6d7a2a12c0df43fa" - integrity sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ== - dependencies: - detect-libc "^2.0.0" - https-proxy-agent "^5.0.0" - make-dir "^3.1.0" - node-fetch "^2.6.7" - nopt "^5.0.0" - npmlog "^5.0.1" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.11" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@npmcli/agent@^2.0.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.0.tgz#e81f00fdb2a670750ff7731bbefb47ecbf0ccf44" - integrity sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q== - 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.1" - -"@npmcli/fs@^1.0.0": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" - integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ== - dependencies: - "@gar/promisify" "^1.0.1" - semver "^7.3.5" - -"@npmcli/fs@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-3.1.0.tgz#233d43a25a91d68c3a863ba0da6a3f00924a173e" - integrity sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w== - dependencies: - semver "^7.3.5" - -"@npmcli/move-file@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@npmcli/move-file/-/move-file-1.1.2.tgz#1a82c3e372f7cae9253eb66d72543d6b8685c674" - integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg== - dependencies: - mkdirp "^1.0.4" - rimraf "^3.0.2" - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@sentry-internal/eslint-config-sdk@^7.91.0": - version "7.91.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-config-sdk/-/eslint-config-sdk-7.91.0.tgz#36b347fe86dbf9b130037d5b4eb083d477b82471" - integrity sha512-z1YhDpvvUK1Nl1atXQYZJII4Vjb8bSU0golWo5Pp8DpyRvCI52xthLcT+1+kmL87ZMurVh4zb6sYpMcTQFUtbQ== - dependencies: - "@sentry-internal/eslint-plugin-sdk" "7.91.0" - "@sentry-internal/typescript" "7.91.0" - "@typescript-eslint/eslint-plugin" "^5.48.0" - "@typescript-eslint/parser" "^5.48.0" - eslint-config-prettier "^6.11.0" - eslint-plugin-deprecation "^1.5.0" - eslint-plugin-import "^2.22.0" - eslint-plugin-jest "^27.2.2" - eslint-plugin-jsdoc "^30.0.3" - eslint-plugin-simple-import-sort "^5.0.3" - -"@sentry-internal/eslint-plugin-sdk@7.91.0": - version "7.91.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/eslint-plugin-sdk/-/eslint-plugin-sdk-7.91.0.tgz#45a5877ace398f7d83a3dc500aaea85bd04c702e" - integrity sha512-N3asqnTiX7zBhEgIo2FyawJWeSDKqq8qzWl60UxArQNN1QhJGO+j+GPHcmztdMca6cmTomNcOevJ9ShcMcWC9g== - dependencies: - requireindex "~1.1.0" - -"@sentry-internal/tracing@7.91.0": - version "7.91.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.91.0.tgz#fbb6e1e3383e1eeee08633384e004da73ac1c37d" - integrity sha512-JH5y6gs6BS0its7WF2DhySu7nkhPDfZcdpAXldxzIlJpqFkuwQKLU5nkYJpiIyZz1NHYYtW5aum2bV2oCOdDRA== - dependencies: - "@sentry/core" "7.91.0" - "@sentry/types" "7.91.0" - "@sentry/utils" "7.91.0" - -"@sentry-internal/typescript@7.91.0": - version "7.91.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/typescript/-/typescript-7.91.0.tgz#16343227c3552e3f117ccddb1d405bdeb50ab1f6" - integrity sha512-z0e0jVPlcdb3IlRhCzLDgMTC4+HL1z5iQGhs2AcdD1EWbg5xR8aa7t/hXxRGyerqnoIXMr7BfFtdUes+DSD3cA== - -"@sentry/core@7.91.0", "@sentry/core@^7.86.0": - version "7.91.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.91.0.tgz#229334d7f03dd5d90a17495e61ce4215ab730b2a" - integrity sha512-tu+gYq4JrTdrR+YSh5IVHF0fJi/Pi9y0HZ5H9HnYy+UMcXIotxf6hIEaC6ZKGeLWkGXffz2gKpQLe/g6vy/lPA== - dependencies: - "@sentry/types" "7.91.0" - "@sentry/utils" "7.91.0" - -"@sentry/hub@^7.87.0": - version "7.91.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.91.0.tgz#da66d57b7877f655603b87a01e70491f64777b48" - integrity sha512-Ro7AhRu4cbbn+o7FpbGdVikri57HjkAXFD2uwyzZbw7CPoAlvVcezoa0FuUZ/b8KPp38apqVWBR4FdBESUtB9A== - dependencies: - "@sentry/core" "7.91.0" - "@sentry/types" "7.91.0" - "@sentry/utils" "7.91.0" - -"@sentry/node@^7.87.0": - version "7.91.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.91.0.tgz#26bf13c3daf988f9725afd1a3cc38ba2ff90d62a" - integrity sha512-hTIfSQxD7L+AKIqyjoq8CWBRkEQrrMZmA3GSZgPI5JFWBHgO0HBo5TH/8TU81oEJh6kqqHAl2ObMhmcnaFqlzg== - dependencies: - "@sentry-internal/tracing" "7.91.0" - "@sentry/core" "7.91.0" - "@sentry/types" "7.91.0" - "@sentry/utils" "7.91.0" - https-proxy-agent "^5.0.0" - -"@sentry/types@7.91.0", "@sentry/types@^7.87.0": - version "7.91.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.91.0.tgz#5b68954e08986fecb0d4bef168df58eef62c32c7" - integrity sha512-bcQnb7J3P3equbCUc+sPuHog2Y47yGD2sCkzmnZBjvBT0Z1B4f36fI/5WjyZhTjLSiOdg3F2otwvikbMjmBDew== - -"@sentry/utils@7.91.0", "@sentry/utils@^7.87.0": - version "7.91.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.91.0.tgz#3b1a94c053c885877908cd3e1365e3d23e21a73f" - integrity sha512-fvxjrEbk6T6Otu++Ax9ntlQ0sGRiwSC179w68aC3u26Wr30FAIRKqHTCCdc2jyWk7Gd9uWRT/cq+g8NG/8BfSg== - dependencies: - "@sentry/types" "7.91.0" - -"@sinclair/typebox@^0.27.8": - version "0.27.8" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" - integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== - -"@sinonjs/commons@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.0.tgz#beb434fe875d965265e04722ccfc21df7f755d72" - integrity sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^10.0.2": - version "10.3.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" - integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== - dependencies: - "@sinonjs/commons" "^3.0.0" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/babel__core@^7.1.14": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" - integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== - dependencies: - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.4" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" - integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.5.tgz#7b7502be0aa80cc4ef22978846b983edaafcd4dd" - integrity sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ== - dependencies: - "@babel/types" "^7.20.7" - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/eslint@^7": - version "7.29.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-7.29.0.tgz#e56ddc8e542815272720bb0b4ccc2aff9c3e1c78" - integrity sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng== - dependencies: - "@types/estree" "*" - "@types/json-schema" "*" - -"@types/estree@*": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== - -"@types/express-serve-static-core@^4.17.33": - version "4.17.41" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" - integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@^4.17.14": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/graceful-fs@^4.1.3": - version "4.1.9" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" - integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== - dependencies: - "@types/node" "*" - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" - integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== - -"@types/istanbul-lib-report@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" - integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" - integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^29.0.0": - version "29.5.11" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.11.tgz#0c13aa0da7d0929f078ab080ae5d4ced80fa2f2c" - integrity sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - -"@types/json-schema@*", "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/mime@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/node-abi@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/node-abi/-/node-abi-3.0.3.tgz#a8334d75fe45ccd4cdb2a6c1ae82540a7a76828c" - integrity sha512-5oos6sivyXcDEuVC5oX3+wLwfgrGZu4NIOn826PGAjPCHsqp2zSPTGU7H1Tv+GZBOiDUY3nBXY1MdaofSEt4fw== - -"@types/node@*": - version "20.10.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.6.tgz#a3ec84c22965802bf763da55b2394424f22bfbb5" - integrity sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw== - dependencies: - undici-types "~5.26.4" - -"@types/node@^18.19.4": - version "18.19.4" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.4.tgz#89672e84f11a2c19543d694dac00ab8d7bc20ddb" - integrity sha512-xNzlUhzoHotIsnFoXmJB+yWmBvFZgKCI9TtPIEdYIMM1KWfwuY8zh7wvc1u1OAXlC7dlf6mZVx/s+Y5KfFz19A== - dependencies: - undici-types "~5.26.4" - -"@types/qs@*": - version "6.9.11" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/semver@^7.3.12", "@types/semver@^7.5.0": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.5" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@types/stack-utils@^2.0.0": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" - integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== - -"@types/yargs-parser@*": - version "21.0.3" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" - integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== - -"@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== - dependencies: - "@types/yargs-parser" "*" - -"@typescript-eslint/eslint-plugin@^5.48.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" - integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== - 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" - -"@typescript-eslint/parser@^5.48.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" - integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== - 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" - -"@typescript-eslint/scope-manager@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" - integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - -"@typescript-eslint/scope-manager@6.17.0": - version "6.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-6.17.0.tgz#70e6c1334d0d76562dfa61aed9009c140a7601b4" - integrity sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA== - dependencies: - "@typescript-eslint/types" "6.17.0" - "@typescript-eslint/visitor-keys" "6.17.0" - -"@typescript-eslint/type-utils@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" - integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== - dependencies: - "@typescript-eslint/typescript-estree" "5.62.0" - "@typescript-eslint/utils" "5.62.0" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/types@6.17.0": - version "6.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-6.17.0.tgz#844a92eb7c527110bf9a7d177e3f22bd5a2f40cb" - integrity sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A== - -"@typescript-eslint/typescript-estree@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - 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" - -"@typescript-eslint/typescript-estree@6.17.0": - version "6.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-6.17.0.tgz#b913d19886c52d8dc3db856903a36c6c64fd62aa" - integrity sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg== - dependencies: - "@typescript-eslint/types" "6.17.0" - "@typescript-eslint/visitor-keys" "6.17.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "9.0.3" - semver "^7.5.4" - ts-api-utils "^1.0.1" - -"@typescript-eslint/utils@5.62.0", "@typescript-eslint/utils@^5.10.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" - integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== - 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" - -"@typescript-eslint/utils@^6.0.0": - version "6.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-6.17.0.tgz#f2b16d4c9984474656c420438cdede7eccd4079e" - integrity sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.12" - "@types/semver" "^7.5.0" - "@typescript-eslint/scope-manager" "6.17.0" - "@typescript-eslint/types" "6.17.0" - "@typescript-eslint/typescript-estree" "6.17.0" - semver "^7.5.4" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -"@typescript-eslint/visitor-keys@6.17.0": - version "6.17.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-6.17.0.tgz#3ed043709c39b43ec1e58694f329e0b0430c26b6" - integrity sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg== - dependencies: - "@typescript-eslint/types" "6.17.0" - eslint-visitor-keys "^3.4.1" - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.1.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" - integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== - -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -agent-base@6, agent-base@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -agent-base@^7.0.2, agent-base@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.0.tgz#536802b76bc0b34aa50195eb2442276d613e3434" - integrity sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg== - dependencies: - debug "^4.3.4" - -agentkeepalive@^4.1.3: - version "4.5.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz#2673ad1389b3c418c5a20c5d7364f93ca04be923" - integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew== - dependencies: - humanize-ms "^1.2.1" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - 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" - -ajv@^8.0.1: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -anymatch@^3.0.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -"aproba@^1.0.3 || ^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-2.0.0.tgz#52520b8ae5b569215b354efc0caa3fe1e45a8adc" - integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ== - -are-we-there-yet@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz#372e0e7bd279d8e94c653aaa1f67200884bf3e1c" - integrity sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -are-we-there-yet@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz#679df222b278c64f2cdba1175cdc00b0d96164bd" - integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg== - dependencies: - delegates "^1.0.0" - readable-stream "^3.6.0" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" - -array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async@^3.2.3: - version "3.2.5" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -autocannon@^7.9.0: - version "7.14.0" - resolved "https://registry.yarnpkg.com/autocannon/-/autocannon-7.14.0.tgz#3843f2dd44a02973d36b56dd3199a20b8e97c319" - integrity sha512-lusP43BAwrTwQhihLjKwy7LceyX01eKSvFJUsBktASGqcR1g1ySYSPxCoCGDX08uLEs9oaqEKBBUFMenK3B3lQ== - dependencies: - chalk "^4.1.0" - char-spinner "^1.0.1" - cli-table3 "^0.6.0" - color-support "^1.1.1" - cross-argv "^2.0.0" - form-data "^4.0.0" - has-async-hooks "^1.0.0" - hdr-histogram-js "^3.0.0" - hdr-histogram-percentiles-obj "^3.0.0" - http-parser-js "^0.5.2" - hyperid "^3.0.0" - lodash.chunk "^4.2.0" - lodash.clonedeep "^4.5.0" - lodash.flatten "^4.4.0" - manage-path "^2.0.0" - on-net-listen "^1.1.1" - pretty-bytes "^5.4.1" - progress "^2.0.3" - reinterval "^1.1.0" - retimer "^3.0.0" - semver "^7.3.2" - subarg "^1.0.0" - timestring "^6.0.0" - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -babel-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" - integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== - dependencies: - "@jest/transform" "^29.7.0" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^29.6.3" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" - integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.1.14" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" - integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== - dependencies: - babel-plugin-jest-hoist "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.2.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -benchmark@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" - integrity sha512-l9MlfN4M1K/H2fbhfMy3B7vJd6AGKJVQn2h6Sg/Yx+KckoUA7ewS5Vv6TjSq18ooE1kS9hhAlQRH3AkXIh/aOQ== - dependencies: - lodash "^4.17.4" - platform "^1.3.3" - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.22.2: - version "4.22.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.2.tgz#704c4943072bd81ea18997f3bd2180e89c77874b" - integrity sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A== - dependencies: - caniuse-lite "^1.0.30001565" - electron-to-chromium "^1.4.601" - node-releases "^2.0.14" - update-browserslist-db "^1.0.13" - -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacache@^15.2.0: - version "15.3.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.3.0.tgz#dc85380fb2f556fe3dda4c719bfa0ec875a7f1eb" - integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ== - 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" - -cacache@^18.0.0: - version "18.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.1.tgz#b026d56ad569e4f73cc07c813b3c66707d0fb142" - integrity sha512-g4Uf2CFZPaxtJKre6qr4zqLDOOPU7bNVhWjlNhvzc51xaTOx2noMOLhfFkTAqwtrAZAKQUuDfyjitzilpA8WsQ== - 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" - -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001565: - version "1.0.30001574" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz#fb4f1359c77f6af942510493672e1ec7ec80230c" - integrity sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg== - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -char-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/char-spinner/-/char-spinner-1.0.1.tgz#e6ea67bd247e107112983b7ab0479ed362800081" - integrity sha512-acv43vqJ0+N0rD+Uw3pDHSxP30FHrywu2NO6/wBaHChJIizpDeBUd6NjqhNhy9LGaEAhZAXn46QzmlAvIWd16g== - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -cjs-module-lexer@^1.0.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" - integrity sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ== - -clang-format@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/clang-format/-/clang-format-1.8.0.tgz#7779df1c5ce1bc8aac1b0b02b4e479191ef21d46" - integrity sha512-pK8gzfu55/lHzIpQ1givIbWfn3eXnU7SfxqIwVgnn5jEM6j4ZJYjpFqFs4iSBPNedzRMmfjYjuQhu657WAXHXw== - dependencies: - async "^3.2.3" - glob "^7.0.0" - resolve "^1.1.6" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-table3@^0.6.0: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== - -collect-v8-coverage@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" - integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-support@^1.1.1, color-support@^1.1.2, color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -comment-parser@^0.7.6: - version "0.7.6" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.7.6.tgz#0e743a53c8e646c899a1323db31f6cd337b10f12" - integrity sha512-GKNxVA7/iuTnAqGADlTWX4tkhzxZKXp5fLJqKTlQLHkE65XDUKutZ3BHaJC5IGcper2tT3QRD1xr4o3jNpgXXg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -console-control-strings@^1.0.0, console-control-strings@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -convert-source-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" - integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -create-jest@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" - integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-config "^29.7.0" - jest-util "^29.7.0" - prompts "^2.0.1" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-argv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/cross-argv/-/cross-argv-2.0.0.tgz#2e7907ba3246f82c967623a3e8525925bbd6c0ad" - integrity sha512-YIaY9TR5Nxeb8SMdtrU8asWVM4jqJDNDYlKV21LxtYcfNJhp1kEsgSa6qXwXgzN0WQWGODps0+TlGp2xQSHwOg== - -cross-env@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" - integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== - dependencies: - cross-spawn "^7.0.1" - -cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -dedent@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" - integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -deepmerge@^4.2.2: - version "4.3.1" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" - integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== - -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-libc@^2.0.0, detect-libc@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.2.tgz#8ccf2ba9315350e1241b88d0ac3b0e1fbd99605d" - integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw== - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" - integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -duplex-maker@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/duplex-maker/-/duplex-maker-1.0.0.tgz#1604f8b943cb0063a6d3e1fe42aa65113a79da4a" - integrity sha512-KoHuzggxg7f+vvjqOHfXxaQYI1POzBm+ah0eec7YDssZmbt6QFBI8d1nl5GQwAgR2f+VQCPvyvZtmWWqWuFtlA== - -duplexify@^3.5.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -electron-to-chromium@^1.4.601: - version "1.4.620" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.620.tgz#a6481e0703f8df1e6821063fb43c9b818a7a2ef4" - integrity sha512-a2fcSHOHrqBJsPNXtf6ZCEZpXrFCcbK1FBxfX3txoqWzNgtEDG1f3M59M98iwxhRW4iMKESnSjbJ310/rkrp0g== - -emittery@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" - integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encoding@^0.1.12, encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - -end-of-stream@^1.0.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.5: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -env-paths@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -err-code@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" - integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA== - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" - -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== - dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" - -es-shim-unscopables@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -esbuild@^0.17.18: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== - optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-prettier@^6.11.0: - version "6.15.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9" - integrity sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw== - dependencies: - get-stdin "^6.0.0" - -eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-deprecation@^1.5.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-deprecation/-/eslint-plugin-deprecation-1.6.0.tgz#b12d0c5a9baf3bcde0752ff6337703c059a4ae23" - integrity sha512-rld+Vrneh/NXRtDB0vQifOvgUy0HJYoejaxWlVnsk/LK7iij2tCWQIFcCKG4uzQb+Ef86bDke39w1lh4wnon4Q== - dependencies: - "@typescript-eslint/utils" "^6.0.0" - tslib "^2.3.1" - tsutils "^3.21.0" - -eslint-plugin-import@^2.22.0: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== - dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" - 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.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" - semver "^6.3.1" - tsconfig-paths "^3.15.0" - -eslint-plugin-jest@^27.2.2: - version "27.6.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.6.1.tgz#5e43b07f3ca48d72e4b4fa243531e5153d9ca1dc" - integrity sha512-WEYkyVXD9NlmFBKvrkmzrC+C9yZoz5pAml2hO19PlS3spJtoiwj4p2u8spd/7zx5IvRsZsCmsoImaAvBB9X93Q== - dependencies: - "@typescript-eslint/utils" "^5.10.0" - -eslint-plugin-jsdoc@^30.0.3: - version "30.7.13" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.7.13.tgz#52e5c74fb806d3bbeb51d04a0c829508c3c6b563" - integrity sha512-YM4WIsmurrp0rHX6XiXQppqKB8Ne5ATiZLJe2+/fkp9l9ExXFr43BbAbjZaVrpCT+tuPYOZ8k1MICARHnURUNQ== - dependencies: - comment-parser "^0.7.6" - debug "^4.3.1" - jsdoctypeparser "^9.0.0" - lodash "^4.17.20" - regextras "^0.7.1" - semver "^7.3.4" - spdx-expression-parse "^3.0.1" - -eslint-plugin-simple-import-sort@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-5.0.3.tgz#9ae258ddada6efffc55e47a134afbd279eb31fc6" - integrity sha512-1rf3AWiHeWNCQdAq0iXNnlccnH1UDnelGgrPbjBBHE8d2hXVtOudcmy0vTF4hri3iJ0MKz8jBhmH6lJ0ZWZLHQ== - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - 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" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== - -expect@^29.0.0, expect@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" - integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== - dependencies: - "@jest/expect-utils" "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - -exponential-backoff@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/exponential-backoff/-/exponential-backoff-3.1.1.tgz#64ac7526fe341ab18a39016cd22c787d01e00bf6" - integrity sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw== - -express@^4.18.1: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - 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.4" - -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" - integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" - integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== - dependencies: - bser "2.1.1" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.1.1.tgz#1d173e776d75d2772fed08efe4a0de1ea1b12d0d" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs-minipass@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-3.0.3.tgz#79a85981c4dc120065e96f62086bf6f9dc26cc54" - integrity sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw== - dependencies: - minipass "^7.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -gauge@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-3.0.2.tgz#03bf4441c044383908bcfa0656ad91803259b395" - integrity sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.2" - console-control-strings "^1.0.0" - has-unicode "^2.0.1" - object-assign "^4.1.1" - signal-exit "^3.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.2" - -gauge@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.4.tgz#52ff0652f2bbf607a989793d53b751bef2328dce" - integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg== - dependencies: - aproba "^1.0.3 || ^2.0.0" - color-support "^1.1.3" - console-control-strings "^1.1.0" - has-unicode "^2.0.1" - signal-exit "^3.0.7" - string-width "^4.2.3" - strip-ansi "^6.0.1" - wide-align "^1.1.5" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^10.2.2, glob@^10.3.10: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -glob@^7.0.0, glob@^7.1.3, glob@^7.1.4: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - 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" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.6.0, globals@^13.9.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - 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" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.2.6, graceful-fs@^4.2.9: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -has-async-hooks@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-async-hooks/-/has-async-hooks-1.0.0.tgz#3df965ade8cd2d9dbfdacfbca3e0a5152baaf204" - integrity sha512-YF0VPGjkxr7AyyQQNykX8zK4PvtEDsUJAPqwu06UFz1lb6EvI53sPh5H1kWxg8NXI5LsfRCZ8uX9NkYDZBb/mw== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has-unicode@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ== - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -hdr-histogram-js@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hdr-histogram-js/-/hdr-histogram-js-3.0.0.tgz#8e2d9a68e3313147804c47d85a9c22a93f85e24b" - integrity sha512-/EpvQI2/Z98mNFYEnlqJ8Ogful8OpArLG/6Tf2bPnkutBVLIeMVNHjk1ZDfshF2BUweipzbk+dB1hgSB7SIakw== - dependencies: - "@assemblyscript/loader" "^0.19.21" - base64-js "^1.2.0" - pako "^1.0.3" - -hdr-histogram-percentiles-obj@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz#9409f4de0c2dda78e61de2d9d78b1e9f3cba283c" - integrity sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw== - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-cache-semantics@^4.1.0, http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-parser-js@^0.5.2: - version "0.5.8" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" - integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -http-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" - integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -https-proxy-agent@^7.0.1: - version "7.0.2" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" - integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== - dependencies: - agent-base "^7.0.2" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -humanize-ms@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" - integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== - dependencies: - ms "^2.0.0" - -hyperid@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/hyperid/-/hyperid-3.1.1.tgz#50fe8a75ff3ada74dacaf5a3761fb031bdf541c7" - integrity sha512-RveV33kIksycSf7HLkq1sHB5wW0OwuX8ot8MYnY++gaaPXGFfKpBncHrAWxdpuEeRlazUMGWefwP1w6o6GaumA== - dependencies: - uuid "^8.3.2" - uuid-parse "^1.1.0" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -infer-owner@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== - dependencies: - get-intrinsic "^1.2.2" - hasown "^2.0.0" - side-channel "^1.0.4" - -ip@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.0.tgz#4cf4ab182fee2314c75ede1276f8c80b479936da" - integrity sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-lambda@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" - integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ== - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -is-zst@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-zst/-/is-zst-1.0.0.tgz#97462bb1a376dabba561e249ea754801e9b90fe0" - integrity sha512-ZA5lvshKAl8z30dX7saXLpVhpsq3d2EHK9uf7qtUjnOtdw4XBpAoWb2RvZ5kyoaebdoidnGI0g2hn9Z7ObPbww== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isexe@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" - integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== - -istanbul-lib-instrument@^5.0.4: - version "5.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" - integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-instrument@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz#71e87707e8041428732518c6fb5211761753fbdf" - integrity sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^7.5.4" - -istanbul-lib-report@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" - integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^4.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.6" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.6.tgz#2544bcab4768154281a2f0870471902704ccaa1a" - integrity sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -jest-changed-files@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" - integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== - dependencies: - execa "^5.0.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - -jest-circus@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" - integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/expect" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^1.0.0" - is-generator-fn "^2.0.0" - jest-each "^29.7.0" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-runtime "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - p-limit "^3.1.0" - pretty-format "^29.7.0" - pure-rand "^6.0.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-cli@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" - integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== - dependencies: - "@jest/core" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - chalk "^4.0.0" - create-jest "^29.7.0" - exit "^0.1.2" - import-local "^3.0.2" - jest-config "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - yargs "^17.3.1" - -jest-config@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" - integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== - dependencies: - "@babel/core" "^7.11.6" - "@jest/test-sequencer" "^29.7.0" - "@jest/types" "^29.6.3" - babel-jest "^29.7.0" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-circus "^29.7.0" - jest-environment-node "^29.7.0" - jest-get-type "^29.6.3" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-runner "^29.7.0" - jest-util "^29.7.0" - jest-validate "^29.7.0" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^29.7.0" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" - integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== - dependencies: - chalk "^4.0.0" - diff-sequences "^29.6.3" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-docblock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" - integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== - dependencies: - detect-newline "^3.0.0" - -jest-each@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" - integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== - dependencies: - "@jest/types" "^29.6.3" - chalk "^4.0.0" - jest-get-type "^29.6.3" - jest-util "^29.7.0" - pretty-format "^29.7.0" - -jest-environment-node@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" - integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-mock "^29.7.0" - jest-util "^29.7.0" - -jest-get-type@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" - integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== - -jest-haste-map@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" - integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== - dependencies: - "@jest/types" "^29.6.3" - "@types/graceful-fs" "^4.1.3" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^29.6.3" - jest-util "^29.7.0" - jest-worker "^29.7.0" - micromatch "^4.0.4" - walker "^1.0.8" - optionalDependencies: - fsevents "^2.3.2" - -jest-leak-detector@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" - integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== - dependencies: - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-matcher-utils@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" - integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== - dependencies: - chalk "^4.0.0" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - pretty-format "^29.7.0" - -jest-message-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" - integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^29.6.3" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^29.7.0" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" - integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - jest-util "^29.7.0" - -jest-pnp-resolver@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" - integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== - -jest-regex-util@^29.6.3: - version "29.6.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" - integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== - -jest-resolve-dependencies@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" - integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== - dependencies: - jest-regex-util "^29.6.3" - jest-snapshot "^29.7.0" - -jest-resolve@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" - integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== - dependencies: - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-pnp-resolver "^1.2.2" - jest-util "^29.7.0" - jest-validate "^29.7.0" - resolve "^1.20.0" - resolve.exports "^2.0.0" - slash "^3.0.0" - -jest-runner@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" - integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== - dependencies: - "@jest/console" "^29.7.0" - "@jest/environment" "^29.7.0" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.13.1" - graceful-fs "^4.2.9" - jest-docblock "^29.7.0" - jest-environment-node "^29.7.0" - jest-haste-map "^29.7.0" - jest-leak-detector "^29.7.0" - jest-message-util "^29.7.0" - jest-resolve "^29.7.0" - jest-runtime "^29.7.0" - jest-util "^29.7.0" - jest-watcher "^29.7.0" - jest-worker "^29.7.0" - p-limit "^3.1.0" - source-map-support "0.5.13" - -jest-runtime@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" - integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== - dependencies: - "@jest/environment" "^29.7.0" - "@jest/fake-timers" "^29.7.0" - "@jest/globals" "^29.7.0" - "@jest/source-map" "^29.6.3" - "@jest/test-result" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^29.7.0" - jest-message-util "^29.7.0" - jest-mock "^29.7.0" - jest-regex-util "^29.6.3" - jest-resolve "^29.7.0" - jest-snapshot "^29.7.0" - jest-util "^29.7.0" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-snapshot@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" - integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== - dependencies: - "@babel/core" "^7.11.6" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-jsx" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/types" "^7.3.3" - "@jest/expect-utils" "^29.7.0" - "@jest/transform" "^29.7.0" - "@jest/types" "^29.6.3" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^29.7.0" - graceful-fs "^4.2.9" - jest-diff "^29.7.0" - jest-get-type "^29.6.3" - jest-matcher-utils "^29.7.0" - jest-message-util "^29.7.0" - jest-util "^29.7.0" - natural-compare "^1.4.0" - pretty-format "^29.7.0" - semver "^7.5.3" - -jest-util@^29.0.0, jest-util@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" - integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== - dependencies: - "@jest/types" "^29.6.3" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" - integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== - dependencies: - "@jest/types" "^29.6.3" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^29.6.3" - leven "^3.1.0" - pretty-format "^29.7.0" - -jest-watcher@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" - integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== - dependencies: - "@jest/test-result" "^29.7.0" - "@jest/types" "^29.6.3" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.13.1" - jest-util "^29.7.0" - string-length "^4.0.1" - -jest-worker@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" - integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== - dependencies: - "@types/node" "*" - jest-util "^29.7.0" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^29.5.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" - integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== - dependencies: - "@jest/core" "^29.7.0" - "@jest/types" "^29.6.3" - import-local "^3.0.2" - jest-cli "^29.7.0" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsdoctypeparser@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26" - integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -json5@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash.chunk@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" - integrity sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w== - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lodash@^4.17.20, lodash@^4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -loose-envify@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -lru-cache@^10.0.1, "lru-cache@^9.1.1 || ^10.0.0": - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-dir@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -make-dir@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" - integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== - dependencies: - semver "^7.5.3" - -make-error@1.x, make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -make-fetch-happen@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" - integrity sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A== - 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" - promise-retry "^2.0.1" - ssri "^10.0.0" - -make-fetch-happen@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz#53085a09e7971433e6765f7971bf63f4e05cb968" - integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg== - 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" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -manage-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/manage-path/-/manage-path-2.0.0.tgz#f4cf8457b926eeee2a83b173501414bc76eb9597" - integrity sha512-NJhyB+PJYTpxhxZJ3lecIGgh4kwIY2RAh44XvAz9UlqthlQwtPBf62uBVR8XaD8CRuSjQ6TnZH2lNJkbLPZM2A== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@9.0.3, minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass-collect@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" - integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== - dependencies: - minipass "^3.0.0" - -minipass-collect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" - integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== - dependencies: - minipass "^7.0.3" - -minipass-fetch@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" - integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw== - dependencies: - minipass "^3.1.0" - minipass-sized "^1.0.3" - minizlib "^2.0.0" - optionalDependencies: - encoding "^0.1.12" - -minipass-fetch@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-3.0.4.tgz#4d4d9b9f34053af6c6e597a64be8e66e42bf45b7" - integrity sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg== - dependencies: - minipass "^7.0.3" - minipass-sized "^1.0.3" - minizlib "^2.1.2" - optionalDependencies: - encoding "^0.1.13" - -minipass-flush@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" - integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== - dependencies: - minipass "^3.0.0" - -minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz#68472f79711c084657c067c5c6ad93cddea8214c" - integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A== - dependencies: - minipass "^3.0.0" - -minipass-sized@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" - integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== - dependencies: - minipass "^3.0.0" - -minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3: - version "3.3.6" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.6.tgz#7bba384db3a1520d18c9c0e5251c3444e95dd94a" - integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw== - dependencies: - yallist "^4.0.0" - -minipass@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" - integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.2, minipass@^7.0.3: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -minizlib@^2.0.0, minizlib@^2.1.1, minizlib@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3, mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.0.0, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3, negotiator@^0.6.2, negotiator@^0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -node-abi@^3.52.0: - version "3.54.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.54.0.tgz#f6386f7548817acac6434c6cba02999c9aebcc69" - integrity sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA== - dependencies: - semver "^7.3.5" - -node-addon-api@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f" - integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ== - -node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-gyp@8.x: - version "8.4.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" - integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.6" - make-fetch-happen "^9.1.0" - nopt "^5.0.0" - npmlog "^6.0.0" - rimraf "^3.0.2" - semver "^7.3.5" - tar "^6.1.2" - which "^2.0.2" - -node-gyp@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.0.1.tgz#205514fc19e5830fa991e4a689f9e81af377a966" - integrity sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg== - 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 "^3.0.0" - semver "^7.3.5" - tar "^6.1.2" - which "^4.0.0" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== - -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== - -nopt@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" - integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ== - dependencies: - abbrev "1" - -nopt@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" - integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== - dependencies: - abbrev "^2.0.0" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npmlog@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-5.0.1.tgz#f06678e80e29419ad67ab964e0fa69959c1eb8b0" - integrity sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw== - dependencies: - are-we-there-yet "^2.0.0" - console-control-strings "^1.1.0" - gauge "^3.0.0" - set-blocking "^2.0.0" - -npmlog@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" - integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg== - dependencies: - are-we-there-yet "^3.0.0" - console-control-strings "^1.1.0" - gauge "^4.0.3" - set-blocking "^2.0.0" - -object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.1, object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.groupby@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.1.tgz#d41d9f3c8d6c778d9cbac86b4ee9f5af103152ee" - integrity sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - -object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -on-net-listen@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/on-net-listen/-/on-net-listen-1.1.2.tgz#671e55a81c910fa7e5b1e4d506545e9ea0f2e11c" - integrity sha512-y1HRYy8s/RlcBvDUwKXSmkODMdx4KSuIvloCnQYJ2LdBBC1asY4HtfhXwe3UWknLakATZDnbzht2Ijw3M1EqFg== - -once@^1.3.0, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.9.1: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -os-tmpdir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -pako@^1.0.3: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - 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" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -peek-stream@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz#3b35d84b7ccbbd262fff31dc10da56856ead6d67" - integrity sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA== - dependencies: - buffer-from "^1.0.0" - duplexify "^3.5.0" - through2 "^2.0.3" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -platform@^1.3.3: - version "1.3.6" - resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" - integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -pretty-bytes@^5.4.1: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-format@^29.0.0, pretty-format@^29.7.0: - version "29.7.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" - integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== - dependencies: - "@jest/schemas" "^29.6.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -proc-log@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" - integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process-streams@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/process-streams/-/process-streams-1.0.1.tgz#e22c2aadbf788ef0c5754ea5e057e985c87dd691" - integrity sha512-Z+FHhxiBhiQ4t/xTY3Bo2SxZG/CehflyckFsQirAXFRf/BfVnDePzpo58eq9JI4XfFu1RnX5C5EAE6V4sce1+g== - dependencies: - duplex-maker "^1.0.0" - quotemeta "0.0.0" - tempfile "^1.1.0" - -progress@^2.0.0, progress@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g== - -promise-retry@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-2.0.1.tgz#ff747a13620ab57ba688f5fc67855410c370da22" - integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g== - dependencies: - err-code "^2.0.2" - retry "^0.12.0" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pure-rand@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.4.tgz#50b737f6a925468679bff00ad20eade53f37d5c7" - integrity sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quotemeta@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/quotemeta/-/quotemeta-0.0.0.tgz#51d3a06ee0fcd6e3b501dbd28904351ad7a5a38c" - integrity sha512-1XGObUh7RN5b58vKuAsrlfqT+Rc4vmw8N4pP9gFCq1GFlTdV0Ex/D2Ro1Drvrqj++HPi3ig0Np17XPslELeMRA== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - -react-is@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" - integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== - -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - -readable-stream@3, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^2.0.0, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - 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" - -regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regextras@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.7.1.tgz#be95719d5f43f9ef0b9fa07ad89b7c606995a3b2" - integrity sha512-9YXf6xtW+qzQ+hcMQXx95MOvfqXFgsKDZodX3qZB0x2n5Z94ioetIITsBtvJbiOyxa/6s9AtyweBLCdPmPko/w== - -reinterval@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/reinterval/-/reinterval-1.1.0.tgz#3361ecfa3ca6c18283380dd0bb9546f390f5ece7" - integrity sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requireindex@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.1.0.tgz#e5404b81557ef75db6e49c5a72004893fe03e162" - integrity sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== - -resolve@^1.1.6, resolve@^1.20.0, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -retimer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/retimer/-/retimer-3.0.0.tgz#98b751b1feaf1af13eb0228f8ea68b8f9da530df" - integrity sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - -semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.0, signal-exit@^3.0.3, signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -simple-zstd@^1.4.0: - version "1.4.2" - resolved "https://registry.yarnpkg.com/simple-zstd/-/simple-zstd-1.4.2.tgz#4f5b7b05dfd2930b03092eb0c0cd13a44bad4b34" - integrity sha512-kGYEvT33M5XfyQvvW4wxl3eKcWbdbCc1V7OZzuElnaXft0qbVzoIIXHXiCm3JCUki+MZKKmvjl8p2VGLJc5Y/A== - dependencies: - is-zst "^1.0.0" - peek-stream "^1.1.3" - process-streams "^1.0.1" - through2 "^4.0.2" - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -smart-buffer@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" - integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== - -socks-proxy-agent@^6.0.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz#2687a31f9d7185e38d530bef1944fe1f1496d6ce" - integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ== - dependencies: - agent-base "^6.0.2" - debug "^4.3.3" - socks "^2.6.2" - -socks-proxy-agent@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" - integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== - dependencies: - agent-base "^7.0.2" - debug "^4.3.4" - socks "^2.7.1" - -socks@^2.6.2, socks@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" - integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== - dependencies: - ip "^2.0.0" - smart-buffer "^4.2.0" - -source-map-support@0.5.13: - version "0.5.13" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" - integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0, source-map@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -sqlite3@^5.0.8: - version "5.1.6" - resolved "https://registry.yarnpkg.com/sqlite3/-/sqlite3-5.1.6.tgz#1d4fbc90fe4fbd51e952e0a90fd8f6c2b9098e97" - integrity sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw== - dependencies: - "@mapbox/node-pre-gyp" "^1.0.0" - node-addon-api "^4.2.0" - tar "^6.1.11" - optionalDependencies: - node-gyp "8.x" - -ssri@^10.0.0: - version "10.0.5" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-10.0.5.tgz#e49efcd6e36385196cb515d3a2ad6c3f0265ef8c" - integrity sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A== - dependencies: - minipass "^7.0.3" - -ssri@^8.0.0, ssri@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af" - integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ== - dependencies: - minipass "^3.1.1" - -stack-utils@^2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" - integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== - dependencies: - escape-string-regexp "^2.0.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -subarg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - integrity sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg== - dependencies: - minimist "^1.1.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -table@^6.0.9: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tar@^6.0.2, tar@^6.1.11, tar@^6.1.2: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.0.tgz#b14ce49a79cb1cd23bc9b016302dea5474493f73" - integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ== - 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" - -tempfile@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" - integrity sha512-NjT12fW6pSEKz1eVcADgaKfeM+XZ4+zSaqVz46XH7+CiEwcelnwtGWRRjF1p+xyW2PVgKKKS2UUw1LzRelntxg== - dependencies: - os-tmpdir "^1.0.0" - uuid "^2.0.1" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -through2@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -through2@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" - integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== - dependencies: - readable-stream "3" - -timestring@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/timestring/-/timestring-6.0.0.tgz#b0c7c331981ecf2066ce88bcfb8ee3ae32e7a0f6" - integrity sha512-wMctrWD2HZZLuIlchlkE2dfXJh7J2KDI9Dwl+2abPYg0mswQHfOAyQW3jJg1pY5VfttSINZuKcXoB3FGypVklA== - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -ts-api-utils@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" - integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== - -ts-jest@^29.1.0: - version "29.1.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.1.tgz#f58fe62c63caf7bfcc5cc6472082f79180f0815b" - integrity sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^29.0.0" - json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" - -ts-node@^10.9.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - 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" - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.3.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-filename@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-3.0.0.tgz#48ba7a5a16849f5080d26c760c86cf5cf05770ea" - integrity sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g== - dependencies: - unique-slug "^4.0.0" - -unique-slug@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" - integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== - dependencies: - imurmurhash "^0.1.4" - -unique-slug@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-4.0.0.tgz#6bae6bb16be91351badd24cdce741f892a6532e3" - integrity sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ== - dependencies: - imurmurhash "^0.1.4" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -update-browserslist-db@^1.0.13: - version "1.0.13" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" - integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg== - dependencies: - escalade "^3.1.1" - picocolors "^1.0.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid-parse@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/uuid-parse/-/uuid-parse-1.1.0.tgz#7061c5a1384ae0e1f943c538094597e1b5f3a65b" - integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== - -uuid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - integrity sha512-FULf7fayPdpASncVy4DLh3xydlXEJJpvIELjYjNeQWYUZ9pclcpvCZSr2gkmN2FrrGcI7G/cJsIEwk5/8vfXpg== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -v8-compile-cache@^2.0.3: - version "2.4.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" - integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== - -v8-to-istanbul@^9.0.1: - version "9.2.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz#2ed7644a245cddd83d4e087b9b33b3e62dfd10ad" - integrity sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA== - dependencies: - "@jridgewell/trace-mapping" "^0.3.12" - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^2.0.0" - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -walker@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-typed-array@^1.1.11, which-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^2.0.1, which@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -which@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" - integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== - dependencies: - isexe "^3.1.1" - -wide-align@^1.1.2, wide-align@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" - integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== - dependencies: - string-width "^1.0.2 || 2 || 3 || 4" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" - integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^21.0.1, yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.3.1: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - 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" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From d129ccdcf6143041e7e8062d3bbdc613e0c08c57 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 14:07:32 -0500 Subject: [PATCH 009/240] fix: update deps --- .../{esbuild.mjs => esbuild.js} | 0 packages/profiling-node/package.json | 3 ++- packages/profiling-node/src/utils.ts | 20 +++++++++++-------- packages/profiling-node/tsconfig.json | 15 ++++---------- packages/profiling-node/tsconfig.test.json | 9 ++++++--- yarn.lock | 5 +++++ 6 files changed, 29 insertions(+), 23 deletions(-) rename packages/profiling-node/{esbuild.mjs => esbuild.js} (100%) diff --git a/packages/profiling-node/esbuild.mjs b/packages/profiling-node/esbuild.js similarity index 100% rename from packages/profiling-node/esbuild.mjs rename to packages/profiling-node/esbuild.js diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 988a18ae5d84..6f32da8fb758 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -56,7 +56,7 @@ "test:rollup:build": "rollup --config ./demo_app/rollup.config.js", "test:rollup:run": "BUNDLER=rollup node ./demo_app/dist/rollup/index.js", "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", - "test": "cross-env SENTRY_PROFILER_BINARY_DIR=./lib jest --config jest.config.ts" + "test": "cross-env SENTRY_PROFILER_BINARY_DIR=./lib jest --config jest.config.js" }, "keywords": [ "profiling", @@ -87,6 +87,7 @@ "@sentry/types": "^7.87.0", "@sentry/utils": "^7.87.0", "@types/node-abi": "^3.0.0", + "@types/node": "16.18.70", "clang-format": "^1.8.0", "cross-env": "^7.0.3", "esbuild": "^0.17.18", diff --git a/packages/profiling-node/src/utils.ts b/packages/profiling-node/src/utils.ts index 71396edae7e7..5ff3fae5edd4 100644 --- a/packages/profiling-node/src/utils.ts +++ b/packages/profiling-node/src/utils.ts @@ -1,5 +1,5 @@ /* eslint-disable max-lines */ -import * as os from 'os'; +import os from 'os'; import { versions, env } from 'process'; import { isMainThread, threadId } from 'worker_threads'; import type { @@ -31,12 +31,16 @@ const THREAD_ID_STRING = String(threadId); const THREAD_NAME = isMainThread ? 'main' : 'worker'; const FORMAT_VERSION = '1'; +// Os machine was backported to 16.18, but this was not reflected in the types +// @ts-expect-error ignore missing +const machine = typeof os.machine === 'function' ? os.machine() : os.arch(); + // Machine properties (eval only once) const PLATFORM = os.platform(); const RELEASE = os.release(); const VERSION = os.version(); const TYPE = os.type(); -const MODEL = os.machine ? os.machine() : os.arch(); +const MODEL = machine(); const ARCH = os.arch(); /** @@ -51,7 +55,7 @@ function isRawThreadCpuProfile(profile: ThreadCpuProfile | RawThreadCpuProfile): /** * Enriches the profile with threadId of the current thread. * This is done in node as we seem to not be able to get the info from C native code. - * + * * @param {ThreadCpuProfile | RawThreadCpuProfile} profile * @returns {ThreadCpuProfile} */ @@ -73,7 +77,7 @@ export function enrichWithThreadInformation(profile: ThreadCpuProfile | RawThrea } /** - * Extract sdk info from from the API metadata + * Extract sdk info from from the API metadata * @param {SdkMetadata | undefined} metadata * @returns {SdkInfo | undefined} */ @@ -88,7 +92,7 @@ function getSdkMetadataForEnvelopeHeader(metadata?: SdkMetadata): SdkInfo | unde /** * Apply SdkInfo (name, version, packages, integrations) to the corresponding event key. * Merge with existing data if any. - * + * * @param {Event} event * @param {SdkInfo | undefined} sdkInfo * @returns {Event} @@ -106,7 +110,7 @@ function enhanceEventWithSdkInfo(event: Event, sdkInfo?: SdkInfo): Event { } /** - * + * * @param {Event} event * @param {SdkInfo | undefined} sdkInfo * @param {string | undefined} tunnel @@ -321,7 +325,7 @@ export function isProfiledTransactionEvent(event: Event): event is ProfiledEvent * Due to how profiles are attached to event metadata, we may sometimes want to remove them to ensure * they are not processed by other Sentry integrations. This can be the case when we cannot construct a valid * profile from the data we have or some of the mechanisms to send the event (Hub, Transport etc) are not available to us. - * + * * @param {Event | ProfiledEvent} event * @returns {Event} */ @@ -433,7 +437,7 @@ export function findProfiledTransactionsFromEnvelope(envelope: Envelope): Event[ // @ts-expect-error profile_id is not part of the metadata type const profile_id = (event.contexts as Context)?.['profile']?.['profile_id']; - + if (event && profile_id) { events.push(item[j] as Event); } diff --git a/packages/profiling-node/tsconfig.json b/packages/profiling-node/tsconfig.json index 8efc3a7f9497..127000b03063 100644 --- a/packages/profiling-node/tsconfig.json +++ b/packages/profiling-node/tsconfig.json @@ -1,17 +1,10 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "lib", "module": "CommonJS", - "declaration": false, - "emitDeclarationOnly": false, - "types": ["node"], + "outDir": "lib", + "types": ["node"] }, - "exclude": [ - "scripts/**/*", - "lib/**/*", - "demo_app/**/*", - "jest.config.js" - ], - "include": ["src/**/*.ts"] + "include": ["src/**/*"] } + diff --git a/packages/profiling-node/tsconfig.test.json b/packages/profiling-node/tsconfig.test.json index f2a6107c1590..87f6afa06b86 100644 --- a/packages/profiling-node/tsconfig.test.json +++ b/packages/profiling-node/tsconfig.test.json @@ -1,9 +1,12 @@ { "extends": "./tsconfig.json", + "include": ["test/**/*"], - "exclude": ["lib/**/*"], + "compilerOptions": { - "esModuleInterop": true, - "types": ["jest", "node"] + // should include all types from `./tsconfig.json` plus types for all test frameworks used + "types": ["node", "jest"] + + // other package-specific, test-specific options } } diff --git a/yarn.lock b/yarn.lock index 633144329c6e..6400f6da2327 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6670,6 +6670,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.38.tgz#f8bb07c371ccb1903f3752872c89f44006132947" integrity sha512-5jY9RhV7c0Z4Jy09G+NIDTsCZ5G0L5n+Z+p+Y7t5VJHM30bgwzSjVtlcBxqAj+6L/swIlvtOSzr8rBk/aNyV2g== +"@types/node@16.18.70": + version "16.18.70" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.18.70.tgz#d4c819be1e9f8b69a794d6f2fd929d9ff76f6d4b" + integrity sha512-8eIk20G5VVVQNZNouHjLA2b8utE2NvGybLjMaF4lyhA9uhGwnmXF8o+icdXKGSQSNANJewXva/sFUoZLwAaYAg== + "@types/node@20.8.2": version "20.8.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.8.2.tgz#d76fb80d87d0d8abfe334fc6d292e83e5524efc4" From 3838019c44274be7832a053d2340d98d93b2c8dc Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 14:15:15 -0500 Subject: [PATCH 010/240] ci: ignore engines when building deps --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d953132dcca6..7d8c1e781f3d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -379,7 +379,7 @@ jobs: - name: Install dependencies run: | cd packages/profiling-node - yarn install --ignore-scripts --frozen-lockfile + yarn install --ignore-scripts --frozen-lockfile --ignore-engines # configure build test copy x64 - name: Configure gyp From d33fb73367c11464015a3935fe7a6516073929a4 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 14:31:28 -0500 Subject: [PATCH 011/240] ci: skip profiling-node tests in node ci --- .github/workflows/build.yml | 2 +- scripts/node-unit-tests.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7d8c1e781f3d..ae1fc9c7509c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -268,7 +268,7 @@ jobs: dependency_cache_key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} job_build_bindings_profiling_node: - name: Build Profiling Bindings Node (${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) + name: Build Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} needs: [job_get_metadata, job_install_deps] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} diff --git a/scripts/node-unit-tests.ts b/scripts/node-unit-tests.ts index 567224854baa..9c9312e76571 100644 --- a/scripts/node-unit-tests.ts +++ b/scripts/node-unit-tests.ts @@ -19,6 +19,7 @@ const DEFAULT_SKIP_TESTS_PACKAGES = [ '@sentry/react', '@sentry/angular', '@sentry/svelte', + '@sentry/profiling-node', '@sentry/replay', '@sentry-internal/replay-canvas', '@sentry-internal/feedback', From 92bb95bc0c48a677dc5331b77787d1ac33b1d5a7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 14:41:30 -0500 Subject: [PATCH 012/240] ci: ignore browser in profiling unit tests --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b20ca9230ae0..d047ba853d1c 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "postpublish": "lerna run --stream --concurrency 1 postpublish", "test": "lerna run --ignore \"@sentry-internal/{browser-integration-tests,e2e-tests,integration-shims,node-integration-tests,overhead-metrics}\" test", "test:unit": "lerna run --ignore \"@sentry-internal/{browser-integration-tests,e2e-tests,integration-shims,node-integration-tests,overhead-metrics}\" test:unit", - "test-ci-browser": "lerna run test --ignore \"@sentry/{bun,deno,node,node-experimental,opentelemetry-node,serverless,nextjs,remix,gatsby,sveltekit,vercel-edge}\" --ignore \"@sentry-internal/{browser-integration-tests,e2e-tests,integration-shims,node-integration-tests,overhead-metrics}\"", + "test-ci-browser": "lerna run test --ignore \"@sentry/{bun,deno,node,node-experimental,opentelemetry-node,profiling-node,serverless,nextjs,remix,gatsby,sveltekit,vercel-edge}\" --ignore \"@sentry-internal/{browser-integration-tests,e2e-tests,integration-shims,node-integration-tests,overhead-metrics}\"", "test-ci-node": "ts-node ./scripts/node-unit-tests.ts", "test-ci-bun": "lerna run test --scope @sentry/bun", "test:update-snapshots": "lerna run test:update-snapshots", From 8c9523724859b655e635e92087a6f1111172a920 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 14:44:18 -0500 Subject: [PATCH 013/240] vscode: revert setting change --- .vscode/settings.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 49517b7d8194..2950621966b9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -38,8 +38,5 @@ "editor.codeActionsOnSave": { "source.organizeImports.biome": "explicit", }, - "editor.defaultFormatter": "biomejs.biome", - "files.associations": { - "functional": "cpp" - } + "editor.defaultFormatter": "biomejs.biome" } From 6f3e3257045b2e3e91c5ed5dd07543ed67b9b54c Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 14:45:28 -0500 Subject: [PATCH 014/240] lint already runs clang --- package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/package.json b/package.json index d047ba853d1c..a168d9aa65d1 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,6 @@ "link:yarn": "lerna exec yarn link", "lint": "run-s lint:lerna lint:biome lint:prettier", "lint:lerna": "lerna run lint", - "lint:clang": "lerna run lint:clang", "lint:biome": "biome check .", "lint:prettier": "prettier **/*.md *.md **/*.css --check", "validate:es5": "lerna run validate:es5", From 033e0760056dd0b48efcc668fc3cbd11e95b4fc9 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 15:00:27 -0500 Subject: [PATCH 015/240] ci: build bindings after build --- .github/workflows/build.yml | 371 ++++++++++++++++++------------------ 1 file changed, 185 insertions(+), 186 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ae1fc9c7509c..0886a14e2436 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -267,192 +267,10 @@ jobs: # `job_build` can't see `job_install_deps` and what it returned) dependency_cache_key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} - job_build_bindings_profiling_node: - name: Build Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} - needs: [job_get_metadata, job_install_deps] - runs-on: ${{ matrix.os }} - container: ${{ matrix.container }} - strategy: - fail-fast: false - matrix: - include: - # x64 glibc - - os: ubuntu-20.04 - node: 16 - - os: ubuntu-20.04 - node: 18 - - os: ubuntu-20.04 - node: 20 - - # x64 musl - - os: ubuntu-20.04 - container: node:16-alpine3.16 - node: 16 - - os: ubuntu-20.04 - container: node:18-alpine3.17 - node: 18 - - os: ubuntu-20.04 - container: node:20-alpine3.17 - node: 20 - - # arm64 glibc - - os: ubuntu-20.04 - arch: arm64 - node: 16 - - os: ubuntu-20.04 - arch: arm64 - node: 18 - - os: ubuntu-20.04 - arch: arm64 - node: 20 - - # arm64 musl - - os: ubuntu-20.04 - container: node:16-alpine3.16 - arch: arm64 - node: 16 - - os: ubuntu-20.04 - arch: arm64 - container: node:18-alpine3.17 - node: 18 - - os: ubuntu-20.04 - arch: arm64 - container: node:20-alpine3.17 - node: 20 - - # macos x64 - - os: macos-11 - node: 16 - arch: x64 - - os: macos-11 - node: 18 - arch: x64 - - os: macos-11 - node: 20 - arch: x64 - - # macos arm64 - - os: macos-12 - arch: arm64 - node: 16 - target_platform: darwin - - - os: macos-12 - arch: arm64 - node: 18 - target_platform: darwin - - - os: macos-12 - arch: arm64 - node: 20 - target_platform: darwin - - # windows x64 - - os: windows-2019 - node: 16 - arch: x64 - - - os: windows-2019 - node: 18 - arch: x64 - - - os: windows-2019 - node: 20 - arch: x64 - steps: - - name: setup (alpine) - if: contains(matrix.container, 'alpine') - run: apk add --no-cache build-base python3 g++ make curl - - - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - uses: actions/checkout@v4 - with: - ref: ${{ env.HEAD_COMMIT }} - - - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - - - uses: actions/setup-python@v4 - name: Setup python - - - name: Install dependencies - run: | - cd packages/profiling-node - yarn install --ignore-scripts --frozen-lockfile --ignore-engines - - # configure build test copy x64 - - name: Configure gyp - if: matrix.arch != 'arm64' - run: | - cd packages/profiling-node - yarn build:bindings:configure - - - name: Build bindings - if: matrix.arch != 'arm64' - run: | - cd packages/profiling-node - yarn build:bindings - - - name: setup (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) - if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' - run: | - sudo apt-get update - sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu - - - name: "Configure gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" - if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' - run: | - cd packages/profiling-node - yarn build:bindings:configure:arm64 - - - name: Setup musl cross compiler - if: contains(matrix.container, 'alpine') - run: | - cd packages/profiling-node - curl -OL https://musl.cc/aarch64-linux-musl-cross.tgz - tar -xzvf aarch64-linux-musl-cross.tgz - $(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc --version - - - name: "Build bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" - if: matrix.arch == 'arm64' && contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' - run: | - cd packages/profiling-node - CC=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc \ - CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ - BUILD_ARCH=arm64 yarn build:bindings - - - name: "Build bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" - if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' - run: | - cd packages/profiling-node - CC=aarch64-linux-gnu-gcc \ - CXX=aarch64-linux-gnu-g++ \ - BUILD_ARCH=arm64 yarn build:bindings:arm64 - - - name: "Configure gyp (arm64, darwin)" - if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' - run: | - cd packages/profiling-node - yarn build:bindings:configure:arm64 - - - name: "Build bindings (arm64, darwin)" - if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' - run: | - cd packages/profiling-node - BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 - - - name: Archive binary - uses: actions/upload-artifact@v4.0.0 - with: - name: profiling-node-binaries-${{ github.sha }} - path: | - ${{ github.workspace }}/packages/profiling-node/lib/*.node - job_pack_profiling_node: name: Extract Binaries and Pack Profiling Node runs-on: ubuntu-latest - needs: [job_get_metadata, job_build_bindings_profiling_node] + needs: [job_get_metadata, job_compile_bindings_profiling_node] timeout-minutes: 5 steps: - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) @@ -483,7 +301,7 @@ jobs: job_size_check: name: Size Check - needs: [job_get_metadata, job_build, job_build_bindings_profiling_node] + needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] timeout-minutes: 15 runs-on: ubuntu-20.04 if: @@ -518,7 +336,7 @@ jobs: name: Lint # Even though the linter only checks source code, not built code, it needs the built code in order check that all # inter-package dependencies resolve cleanly. - needs: [job_get_metadata, job_build, job_build_bindings_profiling_node] + needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] timeout-minutes: 10 runs-on: ubuntu-20.04 steps: @@ -587,7 +405,7 @@ jobs: job_artifacts: name: Upload Artifacts - needs: [job_get_metadata, job_build, job_build_bindings_profiling_node] + needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] runs-on: ubuntu-20.04 # Build artifacts are only needed for releasing workflow. if: needs.job_get_metadata.outputs.is_release == 'true' @@ -1363,3 +1181,184 @@ jobs: with: name: ${{ steps.process.outputs.artifactName }} path: ${{ steps.process.outputs.artifactPath }} + job_compile_bindings_profiling_node: + name: Compile Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} + needs: [job_get_metadata, job_build] + runs-on: ${{ matrix.os }} + container: ${{ matrix.container }} + strategy: + fail-fast: false + matrix: + include: + # x64 glibc + - os: ubuntu-20.04 + node: 16 + - os: ubuntu-20.04 + node: 18 + - os: ubuntu-20.04 + node: 20 + + # x64 musl + - os: ubuntu-20.04 + container: node:16-alpine3.16 + node: 16 + - os: ubuntu-20.04 + container: node:18-alpine3.17 + node: 18 + - os: ubuntu-20.04 + container: node:20-alpine3.17 + node: 20 + + # arm64 glibc + - os: ubuntu-20.04 + arch: arm64 + node: 16 + - os: ubuntu-20.04 + arch: arm64 + node: 18 + - os: ubuntu-20.04 + arch: arm64 + node: 20 + + # arm64 musl + - os: ubuntu-20.04 + container: node:16-alpine3.16 + arch: arm64 + node: 16 + - os: ubuntu-20.04 + arch: arm64 + container: node:18-alpine3.17 + node: 18 + - os: ubuntu-20.04 + arch: arm64 + container: node:20-alpine3.17 + node: 20 + + # macos x64 + - os: macos-11 + node: 16 + arch: x64 + - os: macos-11 + node: 18 + arch: x64 + - os: macos-11 + node: 20 + arch: x64 + + # macos arm64 + - os: macos-12 + arch: arm64 + node: 16 + target_platform: darwin + + - os: macos-12 + arch: arm64 + node: 18 + target_platform: darwin + + - os: macos-12 + arch: arm64 + node: 20 + target_platform: darwin + + # windows x64 + - os: windows-2019 + node: 16 + arch: x64 + + - os: windows-2019 + node: 18 + arch: x64 + + - os: windows-2019 + node: 20 + arch: x64 + steps: + - name: setup (alpine) + if: contains(matrix.container, 'alpine') + run: apk add --no-cache build-base python3 g++ make curl + + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + + - uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + + - uses: actions/setup-python@v4 + name: Setup python + + - name: Install dependencies + run: | + cd packages/profiling-node + yarn install --ignore-scripts --frozen-lockfile --ignore-engines + + # configure build test copy x64 + - name: Configure gyp + if: matrix.arch != 'arm64' + run: | + cd packages/profiling-node + yarn build:bindings:configure + + - name: Build bindings + if: matrix.arch != 'arm64' + run: | + cd packages/profiling-node + yarn build:bindings + + - name: setup (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) + if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' + run: | + sudo apt-get update + sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu + + - name: "Configure gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' + run: | + cd packages/profiling-node + yarn build:bindings:configure:arm64 + + - name: Setup musl cross compiler + if: contains(matrix.container, 'alpine') + run: | + cd packages/profiling-node + curl -OL https://musl.cc/aarch64-linux-musl-cross.tgz + tar -xzvf aarch64-linux-musl-cross.tgz + $(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc --version + + - name: "Build bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + if: matrix.arch == 'arm64' && contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' + run: | + cd packages/profiling-node + CC=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc \ + CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ + BUILD_ARCH=arm64 yarn build:bindings + + - name: "Build bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' + run: | + cd packages/profiling-node + CC=aarch64-linux-gnu-gcc \ + CXX=aarch64-linux-gnu-g++ \ + BUILD_ARCH=arm64 yarn build:bindings:arm64 + + - name: "Configure gyp (arm64, darwin)" + if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' + run: | + cd packages/profiling-node + yarn build:bindings:configure:arm64 + + - name: "Build bindings (arm64, darwin)" + if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' + run: | + cd packages/profiling-node + BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 + + - name: Archive binary + uses: actions/upload-artifact@v4.0.0 + with: + name: profiling-node-binaries-${{ github.sha }} + path: | + ${{ github.workspace }}/packages/profiling-node/lib/*.node From 9f6937f92090fb3921935d97e0ca9189d5e047a3 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 15:02:29 -0500 Subject: [PATCH 016/240] ci: build bindings after buildgst --- .github/workflows/build.yml | 64 ++++++++++++++++++------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0886a14e2436..dacccc516b16 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -267,38 +267,6 @@ jobs: # `job_build` can't see `job_install_deps` and what it returned) dependency_cache_key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} - job_pack_profiling_node: - name: Extract Binaries and Pack Profiling Node - runs-on: ubuntu-latest - needs: [job_get_metadata, job_compile_bindings_profiling_node] - timeout-minutes: 5 - steps: - - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - uses: actions/checkout@v4 - with: - ref: ${{ env.HEAD_COMMIT }} - - - uses: actions/setup-node@v4 - with: - node-version-file: 'package.json' - - - run: | - cd packages/profiling-node - yarn install --frozen-lockfile - - - run: | - cd packages/profiling-node - yarn build:lib - - - uses: actions/download-artifact@v4.0.0 - with: - name: profiling-node-binaries-${{ github.sha }} - path: packages/profiling-node/lib/ - - - run: | - cd packages/profiling-node - yarn pack - job_size_check: name: Size Check needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] @@ -1362,3 +1330,35 @@ jobs: name: profiling-node-binaries-${{ github.sha }} path: | ${{ github.workspace }}/packages/profiling-node/lib/*.node + + job_pack_profiling_node: + name: Extract Binaries and Pack Profiling Node + runs-on: ubuntu-latest + needs: [job_get_metadata, job_compile_bindings_profiling_node] + timeout-minutes: 5 + steps: + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + + - uses: actions/setup-node@v4 + with: + node-version-file: 'package.json' + + - run: | + cd packages/profiling-node + yarn install --frozen-lockfile + + - run: | + cd packages/profiling-node + yarn build:lib + + - uses: actions/download-artifact@v4.0.0 + with: + name: profiling-node-binaries-${{ github.sha }} + path: packages/profiling-node/lib/ + + - run: | + cd packages/profiling-node + yarn pack From dbd5783f85853f78e7540043f2940f807edb0560 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 15:02:35 -0500 Subject: [PATCH 017/240] ci: build bindings after building --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dacccc516b16..0a1bbe68ab16 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -269,7 +269,7 @@ jobs: job_size_check: name: Size Check - needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] + needs: [job_get_metadata, job_build] timeout-minutes: 15 runs-on: ubuntu-20.04 if: @@ -304,7 +304,7 @@ jobs: name: Lint # Even though the linter only checks source code, not built code, it needs the built code in order check that all # inter-package dependencies resolve cleanly. - needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] + needs: [job_get_metadata, job_build] timeout-minutes: 10 runs-on: ubuntu-20.04 steps: From b81201597f418a7d4d6cf2acf756019838ab3451 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 15:12:28 -0500 Subject: [PATCH 018/240] ci: rename to example --- packages/profiling-node/.eslintrc.js | 2 +- .../{demo_app => examples}/esbuild.mjs | 0 .../profiling-node/{demo_app => examples}/index.js | 0 .../{demo_app => examples}/package.json | 2 +- .../{demo_app => examples}/rollup.config.js | 0 .../{demo_app => examples}/webpack.config.js | 0 packages/profiling-node/package.json | 14 +++++++------- 7 files changed, 9 insertions(+), 9 deletions(-) rename packages/profiling-node/{demo_app => examples}/esbuild.mjs (100%) rename packages/profiling-node/{demo_app => examples}/index.js (100%) rename packages/profiling-node/{demo_app => examples}/package.json (91%) rename packages/profiling-node/{demo_app => examples}/rollup.config.js (100%) rename packages/profiling-node/{demo_app => examples}/webpack.config.js (100%) diff --git a/packages/profiling-node/.eslintrc.js b/packages/profiling-node/.eslintrc.js index 97f6e64fc978..7ff3898d5460 100644 --- a/packages/profiling-node/.eslintrc.js +++ b/packages/profiling-node/.eslintrc.js @@ -6,7 +6,7 @@ module.exports = { ignorePatterns: [ 'lib/**/*', - 'demo_app/**/*', + 'examples/**/*', 'jest.co' ], rules: { diff --git a/packages/profiling-node/demo_app/esbuild.mjs b/packages/profiling-node/examples/esbuild.mjs similarity index 100% rename from packages/profiling-node/demo_app/esbuild.mjs rename to packages/profiling-node/examples/esbuild.mjs diff --git a/packages/profiling-node/demo_app/index.js b/packages/profiling-node/examples/index.js similarity index 100% rename from packages/profiling-node/demo_app/index.js rename to packages/profiling-node/examples/index.js diff --git a/packages/profiling-node/demo_app/package.json b/packages/profiling-node/examples/package.json similarity index 91% rename from packages/profiling-node/demo_app/package.json rename to packages/profiling-node/examples/package.json index 2511dff52ca6..e83a13ea2d04 100644 --- a/packages/profiling-node/demo_app/package.json +++ b/packages/profiling-node/examples/package.json @@ -1,5 +1,5 @@ { - "name": "demo_app", + "name": "examples", "version": "1.0.0", "description": "", "main": "index.js", diff --git a/packages/profiling-node/demo_app/rollup.config.js b/packages/profiling-node/examples/rollup.config.js similarity index 100% rename from packages/profiling-node/demo_app/rollup.config.js rename to packages/profiling-node/examples/rollup.config.js diff --git a/packages/profiling-node/demo_app/webpack.config.js b/packages/profiling-node/examples/webpack.config.js similarity index 100% rename from packages/profiling-node/demo_app/webpack.config.js rename to packages/profiling-node/examples/webpack.config.js diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 6f32da8fb758..99c81190f410 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -46,15 +46,15 @@ "build:dev": "yarn clean && yarn build:bindings:configure && yarn build", "test:watch": "cross-env SENTRY_PROFILER_BINARY_DIR=./build jest --watch", "test:bundle": "node test-binaries.esbuild.js", - "test:setup:bundle": "(npm link && cd demo_app && npm install && npm link @sentry/profiling-node)", - "test:esbuild:build": "node ./demo_app/esbuild.js", - "test:esbuild:run": "BUNDLER=esbuild node ./demo_app/dist/esbuild/index.js", + "test:setup:bundle": "(npm link && cd examples && npm install && npm link @sentry/profiling-node)", + "test:esbuild:build": "node ./examples/esbuild.js", + "test:esbuild:run": "BUNDLER=esbuild node ./examples/dist/esbuild/index.js", "test:esbuild": "yarn test:esbuild:build && yarn test:esbuild:run", - "test:webpack:build": "webpack --config ./demo_app/webpack.config.js", - "test:webpack:run": "BUNDLER=webpack node ./demo_app/dist/webpack/index.js", + "test:webpack:build": "webpack --config ./examples/webpack.config.js", + "test:webpack:run": "BUNDLER=webpack node ./examples/dist/webpack/index.js", "test:webpack": "yarn test:webpack:build && yarn test:webpack:run", - "test:rollup:build": "rollup --config ./demo_app/rollup.config.js", - "test:rollup:run": "BUNDLER=rollup node ./demo_app/dist/rollup/index.js", + "test:rollup:build": "rollup --config ./examples/rollup.config.js", + "test:rollup:run": "BUNDLER=rollup node ./examples/dist/rollup/index.js", "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", "test": "cross-env SENTRY_PROFILER_BINARY_DIR=./lib jest --config jest.config.js" }, From 683470aa8e876968e4af63b292d92aaa2c5af67b Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 15:16:49 -0500 Subject: [PATCH 019/240] ci: add profiling-node to verdaccio config --- dev-packages/e2e-tests/verdaccio-config/config.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dev-packages/e2e-tests/verdaccio-config/config.yaml b/dev-packages/e2e-tests/verdaccio-config/config.yaml index 0f1fdee05669..2ed138f1cdcc 100644 --- a/dev-packages/e2e-tests/verdaccio-config/config.yaml +++ b/dev-packages/e2e-tests/verdaccio-config/config.yaml @@ -128,6 +128,12 @@ packages: unpublish: $all # proxy: npmjs # Don't proxy for E2E tests! + '@sentry/profiling-node': + access: $all + publish: $all + unpublish: $all + # proxy: npmjs # Don't proxy for E2E tests! + '@sentry/react': access: $all publish: $all From 4ee5621519dded919de5e53aa106b362bfa7838d Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 15:37:17 -0500 Subject: [PATCH 020/240] format profiling with biome --- packages/profiling-node/.eslintrc.js | 6 +- packages/profiling-node/clang-format.mjs | 26 ++--- packages/profiling-node/esbuild.js | 8 +- packages/profiling-node/examples/esbuild.mjs | 6 +- packages/profiling-node/examples/index.js | 2 +- .../profiling-node/examples/rollup.config.js | 8 +- .../profiling-node/examples/webpack.config.js | 12 +- packages/profiling-node/jest.config.js | 8 +- packages/profiling-node/scripts/binaries.js | 4 +- .../profiling-node/scripts/check-build.js | 4 +- .../scripts/prune-profiler-binaries.js | 34 +++--- packages/profiling-node/src/cpu_profiler.ts | 14 +-- packages/profiling-node/src/hubextensions.ts | 36 +++--- packages/profiling-node/src/integration.ts | 32 ++--- packages/profiling-node/src/utils.ts | 83 +++++++------ .../profiling-node/test-binaries.entry.js | 6 +- .../profiling-node/test-binaries.esbuild.js | 4 +- packages/profiling-node/test/bindings.test.ts | 8 +- .../profiling-node/test/cpu_profiler.test.ts | 18 +-- .../test/hubextensions.hub.test.ts | 72 ++++++------ .../profiling-node/test/hubextensions.test.ts | 34 +++--- packages/profiling-node/test/index.test.ts | 18 +-- .../profiling-node/test/integration.test.ts | 68 +++++------ packages/profiling-node/test/utils.test.ts | 110 +++++++++--------- 24 files changed, 307 insertions(+), 314 deletions(-) diff --git a/packages/profiling-node/.eslintrc.js b/packages/profiling-node/.eslintrc.js index 7ff3898d5460..84ad1f9e91b7 100644 --- a/packages/profiling-node/.eslintrc.js +++ b/packages/profiling-node/.eslintrc.js @@ -4,11 +4,7 @@ module.exports = { }, extends: ['../../.eslintrc.js'], - ignorePatterns: [ - 'lib/**/*', - 'examples/**/*', - 'jest.co' - ], + ignorePatterns: ['lib/**/*', 'examples/**/*', 'jest.co'], rules: { '@sentry-internal/sdk/no-optional-chaining': 'off', '@sentry-internal/sdk/no-nullish-coalescing': 'off', diff --git a/packages/profiling-node/clang-format.mjs b/packages/profiling-node/clang-format.mjs index ec7a28fe6980..e8fd36c8935e 100644 --- a/packages/profiling-node/clang-format.mjs +++ b/packages/profiling-node/clang-format.mjs @@ -1,21 +1,19 @@ -import { execSync } from "child_process"; -import { exit } from "process"; -import {error, log} from "console" +import { execSync } from 'child_process'; +import { error, log } from 'console'; +import { exit } from 'process'; +const args = ['--Werror', '-i', '--style=file', 'bindings/cpu_profiler.cc']; +const cmd = `./node_modules/.bin/clang-format ${args.join(' ')}`; -const args = ["--Werror", "-i", "--style=file", "bindings/cpu_profiler.cc"]; -const cmd = `./node_modules/.bin/clang-format ${args.join(" ")}`; +execSync(cmd); -execSync(cmd) +log('clang-format: done, checking tree...'); -log("clang-format: done, checking tree...") +const diff = execSync(`git status --short`).toString(); -const diff = execSync(`git status --short`).toString() - -if(diff) { - error("clang-format: check failed ❌") - exit(1) +if (diff) { + error('clang-format: check failed ❌'); + exit(1); } -log("clang-format: check passed ✅") - +log('clang-format: check passed ✅'); diff --git a/packages/profiling-node/esbuild.js b/packages/profiling-node/esbuild.js index 14fa89cb9401..bbfdaca4906f 100644 --- a/packages/profiling-node/esbuild.js +++ b/packages/profiling-node/esbuild.js @@ -3,12 +3,12 @@ const esbuild = require('esbuild'); let missingBindingsPlugin = { name: 'MissingBindings', setup(build) { - build.onResolve({ filter: /\.node$/ }, (args) => ({ + build.onResolve({ filter: /\.node$/ }, args => ({ path: args.path, namespace: 'missing-bindings', - external: true + external: true, })); - } + }, }; esbuild.build({ @@ -19,5 +19,5 @@ esbuild.build({ target: 'node16', bundle: true, tsconfig: './tsconfig.json', - plugins: [missingBindingsPlugin] + plugins: [missingBindingsPlugin], }); diff --git a/packages/profiling-node/examples/esbuild.mjs b/packages/profiling-node/examples/esbuild.mjs index 7df249d3f787..edb672633db4 100644 --- a/packages/profiling-node/examples/esbuild.mjs +++ b/packages/profiling-node/examples/esbuild.mjs @@ -1,5 +1,5 @@ -import esbuild from 'esbuild'; import path from 'path'; +import esbuild from 'esbuild'; import { URL, fileURLToPath } from 'url'; @@ -13,7 +13,7 @@ esbuild.build({ outdir: path.resolve(__dirname, './dist/esbuild'), bundle: true, loader: { - '.node': 'copy' + '.node': 'copy', }, - tsconfig: path.resolve(__dirname, '../tsconfig.json') + tsconfig: path.resolve(__dirname, '../tsconfig.json'), }); diff --git a/packages/profiling-node/examples/index.js b/packages/profiling-node/examples/index.js index 08ee945120c4..102ea5baeb0f 100644 --- a/packages/profiling-node/examples/index.js +++ b/packages/profiling-node/examples/index.js @@ -5,7 +5,7 @@ Sentry.init({ dsn: '', integrations: [new profiling.ProfilingIntegration()], tracesSampleRate: 1, - profilesSampleRate: 1 + profilesSampleRate: 1, }); const transaction = Sentry.startTransaction({ name: `${process.env['BUNDLER']}-application-build` }); diff --git a/packages/profiling-node/examples/rollup.config.js b/packages/profiling-node/examples/rollup.config.js index 9b7a30bc0aa4..8b009d323fe0 100644 --- a/packages/profiling-node/examples/rollup.config.js +++ b/packages/profiling-node/examples/rollup.config.js @@ -2,7 +2,7 @@ const rollupNativePlugin = require('rollup-plugin-natives'); const path = require('path'); const commonjs = require('@rollup/plugin-commonjs'); -const {nodeResolve} = require('@rollup/plugin-node-resolve'); +const { nodeResolve } = require('@rollup/plugin-node-resolve'); module.exports = { input: path.resolve(__dirname, './index.js'), @@ -12,10 +12,10 @@ module.exports = { }, plugins: [ nodeResolve({ - extensions: ['.js', '.ts'] + extensions: ['.js', '.ts'], }), commonjs({ - strictRequires: true + strictRequires: true, }), rollupNativePlugin({ // Where we want to physically put the extracted .node files @@ -24,5 +24,5 @@ module.exports = { // Path to the same folder, relative to the output bundle js destDir: path.resolve(__dirname, './dist/rollup'), }), - ] + ], }; diff --git a/packages/profiling-node/examples/webpack.config.js b/packages/profiling-node/examples/webpack.config.js index 86fdffafb039..e3ed93c99b61 100644 --- a/packages/profiling-node/examples/webpack.config.js +++ b/packages/profiling-node/examples/webpack.config.js @@ -5,21 +5,21 @@ module.exports = { entry: path.resolve(__dirname, './index.js'), mode: 'production', optimization: { - minimize: false + minimize: false, }, module: { rules: [ { test: /\.node$/, - loader: 'file-loader' - } - ] + loader: 'file-loader', + }, + ], }, resolve: { - extensions: ['.tsx', '.ts', '.js'] + extensions: ['.tsx', '.ts', '.js'], }, output: { filename: 'index.js', path: path.resolve(__dirname, './dist/webpack'), - } + }, }; diff --git a/packages/profiling-node/jest.config.js b/packages/profiling-node/jest.config.js index c27f698c95d0..7622b57f6b04 100644 --- a/packages/profiling-node/jest.config.js +++ b/packages/profiling-node/jest.config.js @@ -13,8 +13,8 @@ module.exports = { '^.+\\.tsx?$': [ 'ts-jest', { - tsconfig: 'tsconfig.test.json' - } - ] - } + tsconfig: 'tsconfig.test.json', + }, + ], + }, }; diff --git a/packages/profiling-node/scripts/binaries.js b/packages/profiling-node/scripts/binaries.js index 8a1966d8576a..eb0fc636d404 100644 --- a/packages/profiling-node/scripts/binaries.js +++ b/packages/profiling-node/scripts/binaries.js @@ -11,13 +11,13 @@ function getModuleName() { if (platform === 'darwin' && arch === 'arm64') { const identifier = [platform, 'arm64', abi.getAbi(process.versions.node, 'node')] - .filter((c) => c !== undefined && c !== null) + .filter(c => c !== undefined && c !== null) .join('-'); return `sentry_cpu_profiler-${identifier}.node`; } const identifier = [platform, arch, stdlib, abi.getAbi(process.versions.node, 'node')] - .filter((c) => c !== undefined && c !== null) + .filter(c => c !== undefined && c !== null) .join('-'); return `sentry_cpu_profiler-${identifier}.node`; diff --git a/packages/profiling-node/scripts/check-build.js b/packages/profiling-node/scripts/check-build.js index c0330b080503..1e2ec31d2eb2 100644 --- a/packages/profiling-node/scripts/check-build.js +++ b/packages/profiling-node/scripts/check-build.js @@ -12,7 +12,7 @@ function recompileFromSource() { let spawn = child_process.spawnSync('npm', ['run', 'build:bindings:configure'], { stdio: ['inherit', 'inherit', 'pipe'], env: process.env, - shell: true + shell: true, }); if (spawn.status !== 0) { @@ -26,7 +26,7 @@ function recompileFromSource() { spawn = child_process.spawnSync('npm', ['run', 'build:bindings'], { stdio: ['inherit', 'inherit', 'pipe'], env: process.env, - shell: true + shell: true, }); if (spawn.status !== 0) { // eslint-disable-next-line no-console diff --git a/packages/profiling-node/scripts/prune-profiler-binaries.js b/packages/profiling-node/scripts/prune-profiler-binaries.js index 4db85cb5e52f..5e346b65f13c 100755 --- a/packages/profiling-node/scripts/prune-profiler-binaries.js +++ b/packages/profiling-node/scripts/prune-profiler-binaries.js @@ -48,7 +48,7 @@ Arguments:\n --target_arch: The architecture the code will be running on. Example: x64, arm64\n --target_stdlib: The standard library the code will be running on. Example: glibc, musl\n --dry-run: Do not delete any files, just print the files that would be deleted.\n ---help: Print this help message.\n` +--help: Print this help message.\n`, ); process.exit(0); } @@ -58,7 +58,7 @@ const ARGV_ERRORS = []; const NODE_TO_ABI = { 16: '93', 18: '108', - 20: '115' + 20: '115', }; if (NODE) { @@ -72,21 +72,21 @@ if (NODE) { NODE = NODE_TO_ABI['20']; } else { ARGV_ERRORS.push( - '❌ Sentry: Invalid node version passed as argument, please make sure --target_node is a valid major node version. Supported versions are 16, 18 and 20.' + '❌ Sentry: Invalid node version passed as argument, please make sure --target_node is a valid major node version. Supported versions are 16, 18 and 20.', ); } } if (!SOURCE_DIR) { ARGV_ERRORS.push( - '❌ Sentry: Missing target_dir_path argument. target_dir_path should point to the directory containing the final bundled code. If you are using webpack, this would be the equivalent of output.path option.' + '❌ Sentry: Missing target_dir_path argument. target_dir_path should point to the directory containing the final bundled code. If you are using webpack, this would be the equivalent of output.path option.', ); } if (!PLATFORM && !ARCH && !STDLIB) { ARGV_ERRORS.push( `❌ Sentry: Missing argument values, pruning requires either --target_platform, --target_arch or --targer_stdlib to be passed as argument values.\n Example: sentry-prune-profiler-binaries --target_platform=linux --target_arch=x64 --target_stdlib=glibc\n -If you are unsure about the execution environment, you can opt to skip some values, but at least one value must be passed.` +If you are unsure about the execution environment, you can opt to skip some values, but at least one value must be passed.`, ); } @@ -107,16 +107,16 @@ async function findSentryProfilerBinaries(source_dir) { for (const file of fs.readdirSync(dir)) { if (SENTRY__PROFILER_BIN_REGEXP.test(file)) { - binaries.add(`${dir }/${ file}`); + binaries.add(`${dir}/${file}`); continue; } - if (fs.statSync(`${dir }/${ file}`).isDirectory()) { + if (fs.statSync(`${dir}/${file}`).isDirectory()) { if (file === 'node_modules') { continue; } - queue.push(`${dir }/${ file}`); + queue.push(`${dir}/${file}`); } } } @@ -126,11 +126,11 @@ async function findSentryProfilerBinaries(source_dir) { function bytesToHumanReadable(bytes) { if (bytes < 1024) { - return `${bytes } Bytes`; + return `${bytes} Bytes`; } else if (bytes < 1048576) { - return `${(bytes / 1024).toFixed(2) } KiB`; + return `${(bytes / 1024).toFixed(2)} KiB`; } else { - return `${(bytes / 1048576).toFixed(2) } MiB`; + return `${(bytes / 1048576).toFixed(2)} MiB`; } } @@ -138,10 +138,10 @@ async function prune(binaries) { let bytesSaved = 0; let removedBinariesCount = 0; - const conditions = [PLATFORM, ARCH, STDLIB, NODE].filter((n) => !!n); + const conditions = [PLATFORM, ARCH, STDLIB, NODE].filter(n => !!n); for (const binary of binaries) { - if (conditions.every((condition) => binary.includes(condition))) { + if (conditions.every(condition => binary.includes(condition))) { continue; } @@ -163,7 +163,7 @@ async function prune(binaries) { if (removedBinariesCount === 0) { // eslint-disable-next-line no-console console.log( - '❌ Sentry: no binaries pruned, please make sure target argument values are valid or use --help for more information.' + '❌ Sentry: no binaries pruned, please make sure target argument values are valid or use --help for more information.', ); return; } @@ -173,7 +173,7 @@ async function prune(binaries) { console.log( `✅ Sentry: would have pruned ${removedBinariesCount} ${ removedBinariesCount === 1 ? 'binary' : 'binaries' - } and saved ${bytesToHumanReadable(bytesSaved)}.` + } and saved ${bytesToHumanReadable(bytesSaved)}.`, ); return; } @@ -182,11 +182,11 @@ async function prune(binaries) { console.log( `✅ Sentry: pruned ${removedBinariesCount} ${ removedBinariesCount === 1 ? 'binary' : 'binaries' - }, saved ${bytesToHumanReadable(bytesSaved)} in total.` + }, saved ${bytesToHumanReadable(bytesSaved)} in total.`, ); } (async () => { const binaries = await findSentryProfilerBinaries(SOURCE_DIR); await prune(binaries); -})() +})(); diff --git a/packages/profiling-node/src/cpu_profiler.ts b/packages/profiling-node/src/cpu_profiler.ts index 8f97c11c7711..26d1e99e6204 100644 --- a/packages/profiling-node/src/cpu_profiler.ts +++ b/packages/profiling-node/src/cpu_profiler.ts @@ -1,9 +1,9 @@ import { arch as _arch, platform as _platform } from 'os'; -import { env, versions } from 'process'; -import { threadId } from 'worker_threads'; -import { getAbi } from 'node-abi'; import { join, resolve } from 'path'; import { familySync } from 'detect-libc'; +import { getAbi } from 'node-abi'; +import { env, versions } from 'process'; +import { threadId } from 'worker_threads'; import { GLOBAL_OBJ, logger } from '@sentry/utils'; import { isDebugBuild } from './env'; @@ -13,7 +13,7 @@ const stdlib = familySync(); const platform = process.env['BUILD_PLATFORM'] || _platform(); const arch = process.env['BUILD_ARCH'] || _arch(); const abi = getAbi(versions.node, 'node'); -const identifier = [platform, arch, stdlib, abi].filter((c) => c !== undefined && c !== null).join('-'); +const identifier = [platform, arch, stdlib, abi].filter(c => c !== undefined && c !== null).join('-'); const built_from_source_path = resolve(__dirname, `./sentry_cpu_profiler-${identifier}`); @@ -31,7 +31,7 @@ export function importCppBindingsModule(): PrivateV8CpuProfilerBindings { // If a user specifies a different binary dir, they are in control of the binaries being moved there if (env['SENTRY_PROFILER_BINARY_DIR']) { const binaryPath = join(resolve(env['SENTRY_PROFILER_BINARY_DIR']), `sentry_cpu_profiler-${identifier}`); - return require(`${binaryPath }.node`); + return require(`${binaryPath}.node`); } /* eslint-disable no-fallthrough */ @@ -127,7 +127,7 @@ export function importCppBindingsModule(): PrivateV8CpuProfilerBindings { } } } - return require(`${built_from_source_path }.node`); + return require(`${built_from_source_path}.node`); } const PrivateCpuProfilerBindings: PrivateV8CpuProfilerBindings = importCppBindingsModule(); @@ -150,7 +150,7 @@ const CpuProfilerBindings: V8CpuProfilerBindings = { return null; } return PrivateCpuProfilerBindings.stopProfiling(name, threadId, !!GLOBAL_OBJ._sentryDebugIds); - } + }, }; export { PrivateCpuProfilerBindings }; diff --git a/packages/profiling-node/src/hubextensions.ts b/packages/profiling-node/src/hubextensions.ts index cb98beefa914..65a65e39a39c 100644 --- a/packages/profiling-node/src/hubextensions.ts +++ b/packages/profiling-node/src/hubextensions.ts @@ -1,10 +1,10 @@ -import type { Hub, TransactionContext, CustomSamplingContext, Transaction } from '@sentry/types'; -import { logger, uuid4 } from '@sentry/utils'; -import type { NodeClient } from '@sentry/node'; import { getMainCarrier } from '@sentry/core'; +import type { NodeClient } from '@sentry/node'; +import type { CustomSamplingContext, Hub, Transaction, TransactionContext } from '@sentry/types'; +import { logger, uuid4 } from '@sentry/utils'; -import { isDebugBuild } from './env'; import { CpuProfilerBindings } from './cpu_profiler'; +import { isDebugBuild } from './env'; import { isValidSampleRate } from './utils'; export const MAX_PROFILE_DURATION_MS = 30 * 1000; @@ -12,7 +12,7 @@ export const MAX_PROFILE_DURATION_MS = 30 * 1000; type StartTransaction = ( this: Hub, transactionContext: TransactionContext, - customSamplingContext?: CustomSamplingContext + customSamplingContext?: CustomSamplingContext, ) => Transaction; /** @@ -22,7 +22,7 @@ type StartTransaction = ( export function maybeProfileTransaction( client: NodeClient | undefined, transaction: Transaction, - customSamplingContext?: CustomSamplingContext + customSamplingContext?: CustomSamplingContext, ): string | undefined { // profilesSampleRate is multiplied with tracesSampleRate to get the final sampling rate. We dont perform // the actual multiplication to get the final rate, but we discard the profile if the transaction was sampled, @@ -72,7 +72,7 @@ export function maybeProfileTransaction( typeof profilesSampler === 'function' ? 'profileSampler returned 0 or false' : 'a negative sampling decision was inherited or profileSampleRate is set to 0' - }` + }`, ); } return; @@ -86,8 +86,8 @@ export function maybeProfileTransaction( if (isDebugBuild()) { logger.log( `[Profiling] Discarding profile because it's not included in the random sample (sampling rate = ${Number( - profilesSampleRate - )})` + profilesSampleRate, + )})`, ); } return; @@ -96,7 +96,7 @@ export function maybeProfileTransaction( const profile_id = uuid4(); CpuProfilerBindings.startProfiling(profile_id); if (isDebugBuild()) { - logger.log(`[Profiling] started profiling transaction: ${ transaction.name}`); + logger.log(`[Profiling] started profiling transaction: ${transaction.name}`); } // set transaction context - do this regardless if profiling fails down the line @@ -112,8 +112,8 @@ export function maybeProfileTransaction( */ export function stopTransactionProfile( transaction: Transaction, - profile_id: string | undefined -): ReturnType | null { + profile_id: string | undefined, +): ReturnType<(typeof CpuProfilerBindings)['stopProfiling']> | null { // Should not happen, but satisfy the type checker and be safe regardless. if (!profile_id) { return null; @@ -122,15 +122,15 @@ export function stopTransactionProfile( const profile = CpuProfilerBindings.stopProfiling(profile_id); if (isDebugBuild()) { - logger.log(`[Profiling] stopped profiling of transaction: ${ transaction.name}`); + logger.log(`[Profiling] stopped profiling of transaction: ${transaction.name}`); } // In case of an overlapping transaction, stopProfiling may return null and silently ignore the overlapping profile. if (!profile) { if (isDebugBuild()) { logger.log( - `[Profiling] profiler returned null profile for: ${ transaction.name}`, - 'this may indicate an overlapping transaction or a call to stopProfiling with a profile title that was never started' + `[Profiling] profiler returned null profile for: ${transaction.name}`, + 'this may indicate an overlapping transaction or a call to stopProfiling with a profile title that was never started', ); } return null; @@ -150,7 +150,7 @@ export function __PRIVATE__wrapStartTransactionWithProfiling(startTransaction: S return function wrappedStartTransaction( this: Hub, transactionContext: TransactionContext, - customSamplingContext?: CustomSamplingContext + customSamplingContext?: CustomSamplingContext, ): Transaction { const transaction: Transaction = startTransaction.call(this, transactionContext, customSamplingContext); @@ -173,7 +173,7 @@ export function __PRIVATE__wrapStartTransactionWithProfiling(startTransaction: S // event of an error or user mistake (calling transaction.finish multiple times), it is important that the behavior of onProfileHandler // is idempotent as we do not want any timings or profiles to be overriden by the last call to onProfileHandler. // After the original finish method is called, the event will be reported through the integration and delegated to transport. - let profile: ReturnType | null = null; + let profile: ReturnType<(typeof CpuProfilerBindings)['stopProfiling']> | null = null; const options = client.getOptions(); // Not intended for external use, hence missing types, but we want to profile a couple of things at Sentry that @@ -248,7 +248,7 @@ function _addProfilingExtensionMethods(): void { carrier.__SENTRY__.extensions['startTransaction'] = __PRIVATE__wrapStartTransactionWithProfiling( // This is patched by sentry/tracing, we are going to re-patch it... - carrier.__SENTRY__.extensions['startTransaction'] as StartTransaction + carrier.__SENTRY__.extensions['startTransaction'] as StartTransaction, ); } diff --git a/packages/profiling-node/src/integration.ts b/packages/profiling-node/src/integration.ts index 5e00f1c237d5..ff50fa253888 100644 --- a/packages/profiling-node/src/integration.ts +++ b/packages/profiling-node/src/integration.ts @@ -1,24 +1,24 @@ import type { NodeClient } from '@sentry/node'; -import type { Integration, EventProcessor, Hub, Event, Transaction } from '@sentry/types'; +import type { Event, EventProcessor, Hub, Integration, Transaction } from '@sentry/types'; import { logger } from '@sentry/utils'; import { isDebugBuild } from './env'; -import type { RawThreadCpuProfile, Profile } from './types'; import { + MAX_PROFILE_DURATION_MS, addProfilingExtensionMethods, maybeProfileTransaction, stopTransactionProfile, - MAX_PROFILE_DURATION_MS } from './hubextensions'; +import type { Profile, RawThreadCpuProfile } from './types'; import { addProfilesToEnvelope, - maybeRemoveProfileFromSdkMetadata, - createProfilingEventEnvelope, createProfilingEvent, + createProfilingEventEnvelope, + findProfiledTransactionsFromEnvelope, isProfiledTransactionEvent, - findProfiledTransactionsFromEnvelope + maybeRemoveProfileFromSdkMetadata, } from './utils'; const MAX_PROFILE_QUEUE_LENGTH = 50; @@ -42,12 +42,12 @@ function addToProfileQueue(profile: RawThreadCpuProfile): void { */ export class ProfilingIntegration implements Integration { /** - * @inheritDoc - */ + * @inheritDoc + */ public readonly name: string; public getCurrentHub?: () => Hub; - public constructor(){ + public constructor() { this.name = 'ProfilingIntegration'; } @@ -93,7 +93,7 @@ export class ProfilingIntegration implements Integration { } }); - client.on('finishTransaction', (transaction) => { + client.on('finishTransaction', transaction => { // @ts-expect-error profile_id is not part of the metadata type const profile_id = transaction.metadata.profile_id; if (profile_id && typeof profile_id === 'string') { @@ -124,7 +124,7 @@ export class ProfilingIntegration implements Integration { const profilesToAddToEnvelope: Profile[] = []; for (const profiledTransaction of profiledTransactionEvents) { - const profileContext = profiledTransaction.contexts?.['profile'] + const profileContext = profiledTransaction.contexts?.['profile']; const profile_id = profileContext?.['profile_id']; if (!profile_id) { @@ -138,7 +138,7 @@ export class ProfilingIntegration implements Integration { } // We need to find both a profile and a transaction event for the same profile_id. - const profileIndex = PROFILE_QUEUE.findIndex((p) => p.profile_id === profile_id); + const profileIndex = PROFILE_QUEUE.findIndex(p => p.profile_id === profile_id); if (profileIndex === -1) { if (isDebugBuild()) { logger.log(`[Profiling] Could not retrieve profile for transaction: ${profile_id}`); @@ -167,7 +167,7 @@ export class ProfilingIntegration implements Integration { // @ts-expect-error bad overload due to unknown event client.emit('preprocessEvent', profile, { event_id: profiledTransaction.event_id, - integrations + integrations, }); } @@ -202,7 +202,7 @@ export class ProfilingIntegration implements Integration { if (!client) { if (isDebugBuild()) { logger.log( - '[Profiling] getClient did not return a Client, removing profile from event and forwarding to next event processors.' + '[Profiling] getClient did not return a Client, removing profile from event and forwarding to next event processors.', ); } return maybeRemoveProfileFromSdkMetadata(event); @@ -212,7 +212,7 @@ export class ProfilingIntegration implements Integration { if (!dsn) { if (isDebugBuild()) { logger.log( - '[Profiling] getDsn did not return a Dsn, removing profile from event and forwarding to next event processors.' + '[Profiling] getDsn did not return a Dsn, removing profile from event and forwarding to next event processors.', ); } return maybeRemoveProfileFromSdkMetadata(event); @@ -222,7 +222,7 @@ export class ProfilingIntegration implements Integration { if (!transport) { if (isDebugBuild()) { logger.log( - '[Profiling] getTransport did not return a Transport, removing profile from event and forwarding to next event processors.' + '[Profiling] getTransport did not return a Transport, removing profile from event and forwarding to next event processors.', ); } return maybeRemoveProfileFromSdkMetadata(event); diff --git a/packages/profiling-node/src/utils.ts b/packages/profiling-node/src/utils.ts index 5ff3fae5edd4..c8fae386679b 100644 --- a/packages/profiling-node/src/utils.ts +++ b/packages/profiling-node/src/utils.ts @@ -1,27 +1,27 @@ /* eslint-disable max-lines */ import os from 'os'; -import { versions, env } from 'process'; -import { isMainThread, threadId } from 'worker_threads'; import type { - SdkInfo, - SdkMetadata, - StackParser, - StackFrame, - DynamicSamplingContext, + Context, DsnComponents, - Event, - EventItem, + DynamicSamplingContext, Envelope, + Event, EventEnvelope, EventEnvelopeHeaders, - Context, + EventItem, + SdkInfo, + SdkMetadata, + StackFrame, + StackParser, } from '@sentry/types'; +import { env, versions } from 'process'; +import { isMainThread, threadId } from 'worker_threads'; import * as Sentry from '@sentry/node'; -import { GLOBAL_OBJ, createEnvelope, dropUndefinedKeys, dsnToString, logger, forEachEnvelopeItem } from '@sentry/utils'; +import { GLOBAL_OBJ, createEnvelope, dropUndefinedKeys, dsnToString, forEachEnvelopeItem, logger } from '@sentry/utils'; import { isDebugBuild } from './env'; -import type { ProfiledEvent, RawThreadCpuProfile, Profile, ThreadCpuProfile } from './types'; +import type { Profile, ProfiledEvent, RawThreadCpuProfile, ThreadCpuProfile } from './types'; import type { DebugImage } from './types'; // We require the file because if we import it, it will be included in the bundle. @@ -70,9 +70,9 @@ export function enrichWithThreadInformation(profile: ThreadCpuProfile | RawThrea stacks: profile.stacks, thread_metadata: { [THREAD_ID_STRING]: { - name: THREAD_NAME - } - } + name: THREAD_NAME, + }, + }, }; } @@ -121,7 +121,7 @@ function createEventEnvelopeHeaders( event: Event, sdkInfo: SdkInfo | undefined, tunnel: string | undefined, - dsn: DsnComponents + dsn: DsnComponents, ): EventEnvelopeHeaders { const dynamicSamplingContext = event.sdkProcessingMetadata && event.sdkProcessingMetadata['dynamicSamplingContext']; @@ -132,8 +132,8 @@ function createEventEnvelopeHeaders( ...(!!tunnel && { dsn: dsnToString(dsn) }), ...(event.type === 'transaction' && dynamicSamplingContext && { - trace: dropUndefinedKeys({ ...dynamicSamplingContext }) as DynamicSamplingContext - }) + trace: dropUndefinedKeys({ ...dynamicSamplingContext }) as DynamicSamplingContext, + }), }; } @@ -153,13 +153,13 @@ export function createProfilingEventFromTransaction(event: ProfiledEvent): Profi const rawProfile = event.sdkProcessingMetadata['profile']; if (rawProfile === undefined || rawProfile === null) { throw new TypeError( - `Cannot construct profiling event envelope without a valid profile. Got ${rawProfile} instead.` + `Cannot construct profiling event envelope without a valid profile. Got ${rawProfile} instead.`, ); } if (!rawProfile.profile_id) { throw new TypeError( - `Cannot construct profiling event envelope without a valid profile id. Got ${rawProfile.profile_id} instead.` + `Cannot construct profiling event envelope without a valid profile id. Got ${rawProfile.profile_id} instead.`, ); } @@ -173,8 +173,8 @@ export function createProfilingEventFromTransaction(event: ProfiledEvent): Profi event_id: event.event_id ?? '', transaction: event.transaction ?? '', start_timestamp: event.start_timestamp ? event.start_timestamp * 1000 : Date.now(), - trace_id: event.contexts?.['trace']?.['trace_id'] ?? '', - profile_id: rawProfile.profile_id + trace_id: event.contexts?.['trace']?.['trace_id'] ?? '', + profile_id: rawProfile.profile_id, }); } @@ -195,8 +195,8 @@ export function createProfilingEvent(profile: RawThreadCpuProfile, event: Event) event_id: event.event_id ?? '', transaction: event.transaction ?? '', start_timestamp: event.start_timestamp ? event.start_timestamp * 1000 : Date.now(), - trace_id: event.contexts?.['trace']?.['trace_id'] ?? '', - profile_id: profile.profile_id + trace_id: event.contexts?.['trace']?.['trace_id'] ?? '', + profile_id: profile.profile_id, }); } @@ -216,7 +216,7 @@ function createProfilePayload( transaction, start_timestamp, trace_id, - profile_id + profile_id, }: { release: string; environment: string; @@ -225,14 +225,14 @@ function createProfilePayload( start_timestamp: number; trace_id: string | undefined; profile_id: string; - } + }, ): Profile { // Log a warning if the profile has an invalid traceId (should be uuidv4). // All profiles and transactions are rejected if this is the case and we want to // warn users that this is happening if they enable debug flag if (trace_id && trace_id.length !== 32) { if (isDebugBuild()) { - logger.log(`[Profiling] Invalid traceId: ${ trace_id } on profiled event`); + logger.log(`[Profiling] Invalid traceId: ${trace_id} on profiled event`); } } @@ -248,30 +248,30 @@ function createProfilePayload( measurements: cpuProfile.measurements, runtime: { name: 'node', - version: versions.node || '' + version: versions.node || '', }, os: { name: PLATFORM, version: RELEASE, - build_number: VERSION + build_number: VERSION, }, device: { locale: env['LC_ALL'] || env['LC_MESSAGES'] || env['LANG'] || env['LANGUAGE'] || '', model: MODEL, manufacturer: TYPE, architecture: ARCH, - is_emulator: false + is_emulator: false, }, debug_meta: { - images: applyDebugMetadata(cpuProfile.resources) + images: applyDebugMetadata(cpuProfile.resources), }, profile: enrichedThreadProfile, transaction: { name: transaction, id: event_id, trace_id: trace_id || '', - active_thread_id: THREAD_ID_STRING - } + active_thread_id: THREAD_ID_STRING, + }, }; return profile; @@ -289,7 +289,7 @@ export function createProfilingEventEnvelope( event: ProfiledEvent, dsn: DsnComponents, metadata?: SdkMetadata, - tunnel?: string + tunnel?: string, ): EventEnvelope | null { const sdkInfo = getSdkMetadataForEnvelopeHeader(metadata); enhanceEventWithSdkInfo(event, metadata && metadata.sdk); @@ -303,10 +303,10 @@ export function createProfilingEventEnvelope( const envelopeItem: EventItem = [ { - type: 'profile' + type: 'profile', }, // @ts-expect-error profile is not part of EventItem yet - profile + profile, ]; return createEnvelope(envelopeHeaders, [envelopeItem]); @@ -349,8 +349,8 @@ export function isValidSampleRate(rate: unknown): boolean { if (isDebugBuild()) { logger.warn( `[Profiling] Invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify( - rate - )} of type ${JSON.stringify(typeof rate)}.` + rate, + )} of type ${JSON.stringify(typeof rate)}.`, ); } return false; @@ -429,12 +429,11 @@ export function findProfiledTransactionsFromEnvelope(envelope: Envelope): Event[ for (let j = 1; j < item.length; j++) { const event = item[j]; - if(!event){ + if (!event) { // Shouldnt happen, but lets be safe - continue + continue; } - // @ts-expect-error profile_id is not part of the metadata type const profile_id = (event.contexts as Context)?.['profile']?.['profile_id']; @@ -509,7 +508,7 @@ export function applyDebugMetadata(resource_paths: ReadonlyArray): Debug images.push({ type: 'sourcemap', code_file: resource, - debug_id: filenameDebugIdMap[resource] as string + debug_id: filenameDebugIdMap[resource] as string, }); } } diff --git a/packages/profiling-node/test-binaries.entry.js b/packages/profiling-node/test-binaries.entry.js index d1f58e365ca1..fd2f5c266fcd 100644 --- a/packages/profiling-node/test-binaries.entry.js +++ b/packages/profiling-node/test-binaries.entry.js @@ -2,13 +2,13 @@ const Sentry = require('@sentry/node'); const Profiling = require('./lib'); -const wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms)); +const wait = ms => new Promise(resolve => setTimeout(resolve, ms)); Sentry.init({ dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', integrations: [new Profiling.ProfilingIntegration()], tracesSampleRate: 1.0, - profilesSampleRate: 1.0 + profilesSampleRate: 1.0, }); const txn = Sentry.startTransaction('Precompile test'); @@ -16,4 +16,4 @@ const txn = Sentry.startTransaction('Precompile test'); (async () => { await wait(500); txn.finish(); -})() +})(); diff --git a/packages/profiling-node/test-binaries.esbuild.js b/packages/profiling-node/test-binaries.esbuild.js index 0bbe111cd513..8cdf545ff0d7 100644 --- a/packages/profiling-node/test-binaries.esbuild.js +++ b/packages/profiling-node/test-binaries.esbuild.js @@ -15,6 +15,6 @@ esbuild.build({ bundle: true, tsconfig: './tsconfig.json', loader: { - '.node': 'copy' - } + '.node': 'copy', + }, }); diff --git a/packages/profiling-node/test/bindings.test.ts b/packages/profiling-node/test/bindings.test.ts index cd402a9d36f2..c524a277bfa9 100644 --- a/packages/profiling-node/test/bindings.test.ts +++ b/packages/profiling-node/test/bindings.test.ts @@ -1,8 +1,8 @@ +import { platform } from 'os'; // Contains unit tests for some of the C++ bindings. These functions // are exported on the private bindings object, so we can test them and // they should not be used outside of this file. import { PrivateCpuProfilerBindings } from '../src/cpu_profiler'; -import { platform } from 'os'; const cases = [ ['/Users/jonas/code/node_modules/@scope/package/file.js', '@scope.package:file'], @@ -16,14 +16,14 @@ const cases = [ ['/Users/jonas/code/src/file', 'Users.jonas.code.src:file'], // Edge cases that shouldn't happen in practice, but try and handle them so we dont crash ['/Users/jonas/code/src/file.js', 'Users.jonas.code.src:file'], - ['', ''] + ['', ''], ]; describe('GetFrameModule', () => { it.each( platform() === 'win32' - ? cases.map(([abs_path, expected]) => [abs_path ? `C:${ abs_path.replace(/\//g, '\\')}` : '', expected]) - : cases + ? cases.map(([abs_path, expected]) => [abs_path ? `C:${abs_path.replace(/\//g, '\\')}` : '', expected]) + : cases, )('%s => %s', (abs_path: string, expected: string) => { expect(PrivateCpuProfilerBindings.getFrameModule(abs_path)).toBe(expected); }); diff --git a/packages/profiling-node/test/cpu_profiler.test.ts b/packages/profiling-node/test/cpu_profiler.test.ts index 3bc31c5e9991..8f66a91cb5ef 100644 --- a/packages/profiling-node/test/cpu_profiler.test.ts +++ b/packages/profiling-node/test/cpu_profiler.test.ts @@ -1,5 +1,5 @@ import { CpuProfilerBindings, PrivateCpuProfilerBindings } from '../src/cpu_profiler'; -import type { ThreadCpuProfile, RawThreadCpuProfile } from '../src/types'; +import type { RawThreadCpuProfile, ThreadCpuProfile } from '../src/types'; // Required because we test a hypothetical long profile // and we cannot use advance timers as the c++ relies on @@ -17,7 +17,7 @@ const fibonacci = (n: number): number => { return fibonacci(n - 1) + fibonacci(n - 2); }; -const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); +const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); const profiled = async (name: string, fn: () => void) => { CpuProfilerBindings.startProfiling(name); await fn(); @@ -141,7 +141,7 @@ describe('Profiler bindings', () => { return 0; } const v = await recurseToDepth(depth - 1); - return v + return v; }; const profile = await profiled('profiled-program', async () => { @@ -225,15 +225,15 @@ describe('Profiler bindings', () => { // the cause of low sample count. https://github.com/actions/runner-images/issues/1336 seems relevant. if (process.platform === 'darwin' || process.platform === 'win32') { if (profile.samples.length < 2) { - fail(`Only ${ profile.samples.length } samples obtained on ${ process.platform }, expected at least 2`); + fail(`Only ${profile.samples.length} samples obtained on ${process.platform}, expected at least 2`); } } else { if (profile.samples.length < 6) { - fail(`Only ${ profile.samples.length } samples obtained on ${ process.platform }, expected at least 6`); + fail(`Only ${profile.samples.length} samples obtained on ${process.platform}, expected at least 6`); } } if (profile.samples.length > 15) { - fail(`Too many samples on ${ process.platform }, got ${ profile.samples.length}`); + fail(`Too many samples on ${process.platform}, got ${profile.samples.length}`); } }); @@ -249,7 +249,7 @@ describe('Profiler bindings', () => { expect(heap_usage.values.length).toBeGreaterThan(6); expect(heap_usage.values.length).toBeLessThanOrEqual(11); expect(heap_usage.unit).toBe('byte'); - expect(heap_usage.values.every((v) => isValidMeasurementValue(v.value))).toBe(true); + expect(heap_usage.values.every(v => isValidMeasurementValue(v.value))).toBe(true); assertValidMeasurements(profile.measurements['memory_footprint']); }); @@ -264,7 +264,7 @@ describe('Profiler bindings', () => { } expect(cpu_usage.values.length).toBeGreaterThan(6); expect(cpu_usage.values.length).toBeLessThanOrEqual(11); - expect(cpu_usage.values.every((v) => isValidMeasurementValue(v.value))).toBe(true); + expect(cpu_usage.values.every(v => isValidMeasurementValue(v.value))).toBe(true); expect(cpu_usage.unit).toBe('percent'); assertValidMeasurements(profile.measurements['cpu_usage']); }); @@ -296,7 +296,7 @@ describe('Profiler bindings', () => { }); // @ts-expect-error deopt reasons are disabled for now as we need to figure out the backend support - const hasDeoptimizedFrame = profile.frames.some((f) => f.deopt_reasons && f.deopt_reasons.length > 0); + const hasDeoptimizedFrame = profile.frames.some(f => f.deopt_reasons && f.deopt_reasons.length > 0); expect(hasDeoptimizedFrame).toBe(true); }); }); diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index b92cf2cb08da..2200cee1aeb5 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -1,12 +1,12 @@ import * as Sentry from '@sentry/node'; -import { ProfilingIntegration } from '../src/index'; -import { CpuProfilerBindings } from '../src/cpu_profiler'; -import { logger, createEnvelope } from '@sentry/utils'; -import { GLOBAL_OBJ } from '@sentry/utils'; -import { NodeClient } from '@sentry/node'; import { getMainCarrier } from '@sentry/core'; +import { NodeClient } from '@sentry/node'; import type { Transport } from '@sentry/types'; +import { createEnvelope, logger } from '@sentry/utils'; +import { GLOBAL_OBJ } from '@sentry/utils'; +import { CpuProfilerBindings } from '../src/cpu_profiler'; +import { ProfilingIntegration } from '../src/index'; function makeClientWithoutHooks(): [NodeClient, Transport] { const integration = new ProfilingIntegration(); @@ -14,7 +14,7 @@ function makeClientWithoutHooks(): [NodeClient, Transport] { url: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', recordDroppedEvent: () => { return undefined; - } + }, }); const client = new NodeClient({ stackParser: Sentry.defaultStackParser, @@ -24,15 +24,15 @@ function makeClientWithoutHooks(): [NodeClient, Transport] { environment: 'test-environment', dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', integrations: [integration], - transport: (_opts) => transport + transport: _opts => transport, }); client.setupIntegrations = () => { integration.setupOnce( - (cb) => { + cb => { // @ts-expect-error __SENTRY__ is a private property getMainCarrier().__SENTRY__.globalEventProcessors = [cb]; }, - () => Sentry.getCurrentHub() + () => Sentry.getCurrentHub(), ); }; // @ts-expect-error override private @@ -50,29 +50,29 @@ function makeClientWithHooks(): [NodeClient, Transport] { environment: 'test-environment', dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', integrations: [integration], - transport: (_opts) => + transport: _opts => Sentry.makeNodeTransport({ url: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', recordDroppedEvent: () => { return undefined; - } - }) + }, + }), }); client.setupIntegrations = () => { integration.setupOnce( - (cb) => { + cb => { // @ts-expect-error __SENTRY__ is a private property getMainCarrier().__SENTRY__.globalEventProcessors = [cb]; }, - () => Sentry.getCurrentHub() + () => Sentry.getCurrentHub(), ); }; return [client, client.getTransport() as Transport]; } -const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); +const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); describe('hubextensions', () => { beforeEach(() => { @@ -114,14 +114,14 @@ describe('hubextensions', () => { { stack_id: 0, thread_id: '0', - elapsed_since_start_ns: '10' - } + elapsed_since_start_ns: '10', + }, ], measurements: {}, stacks: [[0]], frames: [], resources: [], - profiler_logging_mode: 'lazy' + profiler_logging_mode: 'lazy', }; }); @@ -151,19 +151,19 @@ describe('hubextensions', () => { { stack_id: 0, thread_id: '0', - elapsed_since_start_ns: '10' + elapsed_since_start_ns: '10', }, { stack_id: 0, thread_id: '0', - elapsed_since_start_ns: '10' - } + elapsed_since_start_ns: '10', + }, ], measurements: {}, resources: [], stacks: [[0]], frames: [], - profiler_logging_mode: 'lazy' + profiler_logging_mode: 'lazy', }; }); @@ -228,12 +228,12 @@ describe('hubextensions', () => { client.emit( 'beforeEnvelope', // @ts-expect-error transaction is partial - createEnvelope({ type: 'transaction' }, { type: 'transaction', contexts: { profile: {} } }) + createEnvelope({ type: 'transaction' }, { type: 'transaction', contexts: { profile: {} } }), ); client.emit( 'beforeEnvelope', // @ts-expect-error transaction is partial - createEnvelope({ type: 'transaction' }, { type: 'transaction', contexts: { profile: { profile_id: null } } }) + createEnvelope({ type: 'transaction' }, { type: 'transaction', contexts: { profile: { profile_id: null } } }), ); // Emit is sync, so we can just assert that we got here @@ -280,8 +280,8 @@ describe('hubextensions', () => { expect(onPreprocessEvent.mock.calls[1][0]).toMatchObject({ profile: { samples: expect.arrayContaining([expect.anything()]), - stacks: expect.arrayContaining([expect.anything()]) - } + stacks: expect.arrayContaining([expect.anything()]), + }, }); }); }); @@ -367,7 +367,7 @@ describe('hubextensions', () => { GLOBAL_OBJ._sentryDebugIds = { 'Error\n at filename.js (filename.js:36:15)': 'aaaaaaaa-aaaa-4aaa-aaaa-aaaaaaaaaa', 'Error\n at filename2.js (filename2.js:36:15)': 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb', - 'Error\n at filename3.js (filename3.js:36:15)': 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb' + 'Error\n at filename3.js (filename3.js:36:15)': 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb', }; jest.spyOn(CpuProfilerBindings, 'stopProfiling').mockImplementation(() => { @@ -376,19 +376,19 @@ describe('hubextensions', () => { { stack_id: 0, thread_id: '0', - elapsed_since_start_ns: '10' + elapsed_since_start_ns: '10', }, { stack_id: 0, thread_id: '0', - elapsed_since_start_ns: '10' - } + elapsed_since_start_ns: '10', + }, ], measurements: {}, resources: ['filename.js', 'filename2.js'], stacks: [[0]], frames: [], - profiler_logging_mode: 'lazy' + profiler_logging_mode: 'lazy', }; }); @@ -410,15 +410,15 @@ describe('hubextensions', () => { { type: 'sourcemap', debug_id: 'aaaaaaaa-aaaa-4aaa-aaaa-aaaaaaaaaa', - code_file: 'filename.js' + code_file: 'filename.js', }, { type: 'sourcemap', debug_id: 'bbbbbbbb-bbbb-4bbb-bbbb-bbbbbbbbbb', - code_file: 'filename2.js' - } - ] - } + code_file: 'filename2.js', + }, + ], + }, }); }); }); diff --git a/packages/profiling-node/test/hubextensions.test.ts b/packages/profiling-node/test/hubextensions.test.ts index 7384e056275b..66bd75791869 100644 --- a/packages/profiling-node/test/hubextensions.test.ts +++ b/packages/profiling-node/test/hubextensions.test.ts @@ -1,16 +1,16 @@ import type { BaseTransportOptions, ClientOptions, - Hub, Context, + Hub, Transaction, - TransactionMetadata + TransactionMetadata, } from '@sentry/types'; import type { NodeClient } from '@sentry/node'; -import { __PRIVATE__wrapStartTransactionWithProfiling } from '../src/hubextensions'; import { CpuProfilerBindings } from '../src/cpu_profiler'; +import { __PRIVATE__wrapStartTransactionWithProfiling } from '../src/hubextensions'; function makeTransactionMock(options = {}): Transaction { return { @@ -35,13 +35,13 @@ function makeTransactionMock(options = {}): Transaction { setMetadata(this: Transaction, metadata: Partial) { this.metadata = { ...metadata } as TransactionMetadata; }, - ...options + ...options, } as unknown as Transaction; } function makeHubMock({ profilesSampleRate, - client + client, }: { profilesSampleRate: number | undefined; client?: Partial; @@ -51,12 +51,12 @@ function makeHubMock({ return { getOptions: jest.fn().mockImplementation(() => { return { - profilesSampleRate + profilesSampleRate, } as unknown as ClientOptions; }), - ...(client ?? {}) + ...(client ?? {}), }; - }) + }), } as unknown as Hub; } @@ -161,8 +161,8 @@ describe('hubextensions', () => { profilesSampleRate: undefined, client: { // @ts-expect-error partial client - getOptions: () => options - } + getOptions: () => options, + }, }); const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); @@ -182,8 +182,8 @@ describe('hubextensions', () => { profilesSampleRate: NaN, client: { // @ts-expect-error partial client - getOptions: () => options - } + getOptions: () => options, + }, }); const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); @@ -202,8 +202,8 @@ describe('hubextensions', () => { profilesSampleRate: undefined, client: { // @ts-expect-error partial client - getOptions: () => options - } + getOptions: () => options, + }, }); const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); @@ -214,7 +214,7 @@ describe('hubextensions', () => { expect(options.profilesSampler).toHaveBeenCalledWith({ ...samplingContext, - transactionContext: transaction.toContext() + transactionContext: transaction.toContext(), }); }); @@ -225,8 +225,8 @@ describe('hubextensions', () => { profilesSampleRate: 0, client: { // @ts-expect-error partial client - getOptions: () => options - } + getOptions: () => options, + }, }); const startTransaction = jest.fn().mockImplementation(() => makeTransactionMock()); diff --git a/packages/profiling-node/test/index.test.ts b/packages/profiling-node/test/index.test.ts index 95b441870f9d..b3dd4ca5a453 100644 --- a/packages/profiling-node/test/index.test.ts +++ b/packages/profiling-node/test/index.test.ts @@ -1,9 +1,9 @@ import * as Sentry from '@sentry/node'; import type { Transport } from '@sentry/types'; -import { ProfilingIntegration } from '../src/index'; -import { NodeClient } from '@sentry/node'; import { getMainCarrier } from '@sentry/core'; +import { NodeClient } from '@sentry/node'; +import { ProfilingIntegration } from '../src/index'; import type { Profile } from '../src/types'; interface MockTransport extends Transport { @@ -19,7 +19,7 @@ function makeStaticTransport(): MockTransport { }, flush: function () { return Promise.resolve(true); - } + }, }; } @@ -34,15 +34,15 @@ function makeClientWithoutHooks(): [NodeClient, MockTransport] { environment: 'test-environment', dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', integrations: [integration], - transport: () => transport + transport: () => transport, }); client.setupIntegrations = () => { integration.setupOnce( - (cb) => { + cb => { // @ts-expect-error __SENTRY__ is private getMainCarrier().__SENTRY__.globalEventProcessors = [cb]; }, - () => Sentry.getCurrentHub() + () => Sentry.getCurrentHub(), ); }; // @ts-expect-error override private property @@ -51,20 +51,20 @@ function makeClientWithoutHooks(): [NodeClient, MockTransport] { } function findAllProfiles(transport: MockTransport): [any, Profile][] | null { - return transport?.events.filter((call) => { + return transport?.events.filter(call => { return call[0][1][0][0].type === 'profile'; }); } function findProfile(transport: MockTransport): Profile | null { return ( - transport?.events.find((call) => { + transport?.events.find(call => { return call[0][1][0][0].type === 'profile'; })?.[0][1][0][1] ?? null ); } -const wait = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); +const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); describe('Sentry - Profiling', () => { beforeEach(() => { diff --git a/packages/profiling-node/test/integration.test.ts b/packages/profiling-node/test/integration.test.ts index d9976759c6b1..f26718474e6f 100644 --- a/packages/profiling-node/test/integration.test.ts +++ b/packages/profiling-node/test/integration.test.ts @@ -1,7 +1,7 @@ import { EventEmitter } from 'events'; -import { logger } from '@sentry/utils'; import type { Event, Hub, Transport } from '@sentry/types'; +import { logger } from '@sentry/utils'; import { ProfilingIntegration } from '../src/integration'; import type { ProfiledEvent } from '../src/types'; @@ -21,20 +21,20 @@ function makeProfiledEvent(): ProfiledEvent { { elapsed_since_start_ns: '0', thread_id: '0', - stack_id: 0 + stack_id: 0, }, { elapsed_since_start_ns: '1', thread_id: '0', - stack_id: 0 - } + stack_id: 0, + }, ], measurements: {}, frames: [], stacks: [], - resources: [] - } - } + resources: [], + }, + }, }; } @@ -48,7 +48,7 @@ describe('ProfilingIntegration', () => { const getCurrentHub = jest.fn().mockImplementation(() => { return { - getClient: jest.fn() + getClient: jest.fn(), }; }); const addGlobalEventProcessor = () => void 0; @@ -61,7 +61,7 @@ describe('ProfilingIntegration', () => { it('does not call transporter if null profile is received', () => { const transport: Transport = { send: jest.fn().mockImplementation(() => Promise.resolve()), - flush: jest.fn().mockImplementation(() => Promise.resolve()) + flush: jest.fn().mockImplementation(() => Promise.resolve()), }; const integration = new ProfilingIntegration(); @@ -71,15 +71,15 @@ describe('ProfilingIntegration', () => { return { getOptions: () => { return { - _metadata: {} + _metadata: {}, }; }, getDsn: () => { return {}; }, - getTransport: () => transport + getTransport: () => transport, }; - } + }, } as Hub; }); const addGlobalEventProcessor = () => void 0; @@ -88,14 +88,14 @@ describe('ProfilingIntegration', () => { integration.handleGlobalEvent({ type: 'transaction', sdkProcessingMetadata: { - profile: null - } + profile: null, + }, }); // eslint-disable-next-line @typescript-eslint/unbound-method expect(transport.send).not.toHaveBeenCalled(); }); - it('when Hub.getClient returns undefined', async() => { + it('when Hub.getClient returns undefined', async () => { const logSpy = jest.spyOn(logger, 'log'); const integration = new ProfilingIntegration(); @@ -107,7 +107,7 @@ describe('ProfilingIntegration', () => { assertCleanProfile(await integration.handleGlobalEvent(makeProfiledEvent())); expect(logSpy).toHaveBeenCalledWith( - '[Profiling] getClient did not return a Client, removing profile from event and forwarding to next event processors.' + '[Profiling] getClient did not return a Client, removing profile from event and forwarding to next event processors.', ); }); it('when getDsn returns undefined', async () => { @@ -118,9 +118,9 @@ describe('ProfilingIntegration', () => { return { getClient: () => { return { - getDsn: () => undefined + getDsn: () => undefined, }; - } + }, } as Hub; }); const addGlobalEventProcessor = () => void 0; @@ -128,7 +128,7 @@ describe('ProfilingIntegration', () => { assertCleanProfile(await integration.handleGlobalEvent(makeProfiledEvent())); expect(logSpy).toHaveBeenCalledWith( - '[Profiling] getDsn did not return a Dsn, removing profile from event and forwarding to next event processors.' + '[Profiling] getDsn did not return a Dsn, removing profile from event and forwarding to next event processors.', ); }); it('when getTransport returns undefined', async () => { @@ -142,9 +142,9 @@ describe('ProfilingIntegration', () => { getDsn: () => { return {}; }, - getTransport: () => undefined + getTransport: () => undefined, }; - } + }, } as Hub; }); const addGlobalEventProcessor = () => void 0; @@ -152,7 +152,7 @@ describe('ProfilingIntegration', () => { assertCleanProfile(await integration.handleGlobalEvent(makeProfiledEvent())); expect(logSpy).toHaveBeenCalledWith( - '[Profiling] getTransport did not return a Transport, removing profile from event and forwarding to next event processors.' + '[Profiling] getTransport did not return a Transport, removing profile from event and forwarding to next event processors.', ); }); @@ -160,7 +160,7 @@ describe('ProfilingIntegration', () => { const logSpy = jest.spyOn(logger, 'log'); const transport: Transport = { send: jest.fn().mockImplementation(() => Promise.resolve()), - flush: jest.fn().mockImplementation(() => Promise.resolve()) + flush: jest.fn().mockImplementation(() => Promise.resolve()), }; const integration = new ProfilingIntegration(); @@ -170,15 +170,15 @@ describe('ProfilingIntegration', () => { return { getOptions: () => { return { - _metadata: {} + _metadata: {}, }; }, getDsn: () => { return {}; }, - getTransport: () => transport + getTransport: () => transport, }; - } + }, } as Hub; }); const addGlobalEventProcessor = () => void 0; @@ -193,7 +193,7 @@ describe('ProfilingIntegration', () => { it('does not call transporter if null profile is received', () => { const transport: Transport = { send: jest.fn().mockImplementation(() => Promise.resolve()), - flush: jest.fn().mockImplementation(() => Promise.resolve()) + flush: jest.fn().mockImplementation(() => Promise.resolve()), }; const integration = new ProfilingIntegration(); const emitter = new EventEmitter(); @@ -206,15 +206,15 @@ describe('ProfilingIntegration', () => { emit: emitter.emit.bind(emitter), getOptions: () => { return { - _metadata: {} + _metadata: {}, }; }, getDsn: () => { return {}; }, - getTransport: () => transport + getTransport: () => transport, } as any; - } + }, } as Hub; }); @@ -228,7 +228,7 @@ describe('ProfilingIntegration', () => { it('binds to startTransaction, finishTransaction and beforeEnvelope', () => { const transport: Transport = { send: jest.fn().mockImplementation(() => Promise.resolve()), - flush: jest.fn().mockImplementation(() => Promise.resolve()) + flush: jest.fn().mockImplementation(() => Promise.resolve()), }; const integration = new ProfilingIntegration(); const emitter = new EventEmitter(); @@ -241,15 +241,15 @@ describe('ProfilingIntegration', () => { emit: emitter.emit.bind(emitter), getOptions: () => { return { - _metadata: {} + _metadata: {}, }; }, getDsn: () => { return {}; }, - getTransport: () => transport + getTransport: () => transport, } as any; - } + }, } as Hub; }); diff --git a/packages/profiling-node/test/utils.test.ts b/packages/profiling-node/test/utils.test.ts index 34e345485a54..640d0eace7f2 100644 --- a/packages/profiling-node/test/utils.test.ts +++ b/packages/profiling-node/test/utils.test.ts @@ -1,25 +1,25 @@ -import type { SdkMetadata, DsnComponents, Event } from '@sentry/types'; -import { createEnvelope, uuid4, addItemToEnvelope } from '@sentry/utils'; +import type { DsnComponents, Event, SdkMetadata } from '@sentry/types'; +import { addItemToEnvelope, createEnvelope, uuid4 } from '@sentry/utils'; import { - isValidSampleRate, - isValidProfile, addProfilesToEnvelope, - findProfiledTransactionsFromEnvelope + findProfiledTransactionsFromEnvelope, + isValidProfile, + isValidSampleRate, } from '../src/utils'; +import type { Profile, ProfiledEvent } from '../src/types'; import { - maybeRemoveProfileFromSdkMetadata, + createProfilingEventEnvelope, isProfiledTransactionEvent, - createProfilingEventEnvelope + maybeRemoveProfileFromSdkMetadata, } from '../src/utils'; -import type { Profile, ProfiledEvent } from '../src/types'; function makeSdkMetadata(props: Partial): SdkMetadata { return { sdk: { - ...props - } + ...props, + }, }; } @@ -28,19 +28,19 @@ function makeDsn(props: Partial): DsnComponents { protocol: 'http', projectId: '1', host: 'localhost', - ...props + ...props, }; } function makeEvent( props: Partial, - profile: NonNullable + profile: NonNullable, ): ProfiledEvent { return { ...props, sdkProcessingMetadata: { profile: profile } }; } function makeProfile( - props: Partial + props: Partial, ): NonNullable { return { profile_id: '1', @@ -48,12 +48,12 @@ function makeProfile( stacks: [], samples: [ { elapsed_since_start_ns: '0', thread_id: '0', stack_id: 0 }, - { elapsed_since_start_ns: '10', thread_id: '0', stack_id: 0 } + { elapsed_since_start_ns: '10', thread_id: '0', stack_id: 0 }, ], measurements: {}, resources: [], frames: [], - ...props + ...props, }; } @@ -69,13 +69,13 @@ describe('isProfiledTransactionEvent', () => { describe('maybeRemoveProfileFromSdkMetadata', () => { it('removes profile', () => { expect(maybeRemoveProfileFromSdkMetadata({ sdkProcessingMetadata: { profile: {} } })).toEqual({ - sdkProcessingMetadata: {} + sdkProcessingMetadata: {}, }); }); it('does nothing', () => { expect(maybeRemoveProfileFromSdkMetadata({ sdkProcessingMetadata: { something: {} } })).toEqual({ - sdkProcessingMetadata: { something: {} } + sdkProcessingMetadata: { something: {} }, }); }); }); @@ -86,17 +86,17 @@ describe('createProfilingEventEnvelope', () => { delete profile.profile_id; expect(() => - createProfilingEventEnvelope(makeEvent({ type: 'transaction' }, profile), makeDsn({}), makeSdkMetadata({})) + createProfilingEventEnvelope(makeEvent({ type: 'transaction' }, profile), makeDsn({}), makeSdkMetadata({})), ).toThrow('Cannot construct profiling event envelope without a valid profile id. Got undefined instead.'); }); it('throws if profile is undefined', () => { expect(() => // @ts-expect-error mock profile as undefined - createProfilingEventEnvelope(makeEvent({ type: 'transaction' }, undefined), makeDsn({}), makeSdkMetadata({})) + createProfilingEventEnvelope(makeEvent({ type: 'transaction' }, undefined), makeDsn({}), makeSdkMetadata({})), ).toThrow('Cannot construct profiling event envelope without a valid profile. Got undefined instead.'); expect(() => // @ts-expect-error mock profile as null - createProfilingEventEnvelope(makeEvent({ type: 'transaction' }, null), makeDsn({}), makeSdkMetadata({})) + createProfilingEventEnvelope(makeEvent({ type: 'transaction' }, null), makeDsn({}), makeSdkMetadata({})), ).toThrow('Cannot construct profiling event envelope without a valid profile. Got null instead.'); }); @@ -107,9 +107,9 @@ describe('createProfilingEventEnvelope', () => { makeProfile({ samples: [ { elapsed_since_start_ns: '0', thread_id: '0', stack_id: 0 }, - { elapsed_since_start_ns: '0', thread_id: '0', stack_id: 0 } - ] - }) + { elapsed_since_start_ns: '0', thread_id: '0', stack_id: 0 }, + ], + }), ), makeDsn({}), makeSdkMetadata({ @@ -118,9 +118,9 @@ describe('createProfilingEventEnvelope', () => { integrations: ['integration1', 'integration2'], packages: [ { name: 'package1', version: '1.2.3' }, - { name: 'package2', version: '4.5.6' } - ] - }) + { name: 'package2', version: '4.5.6' }, + ], + }), ); expect(envelope?.[1][0]?.[0].type).toBe('profile'); }); @@ -130,8 +130,8 @@ describe('createProfilingEventEnvelope', () => { makeEvent( { type: 'transaction' }, makeProfile({ - samples: [{ elapsed_since_start_ns: '0', thread_id: '0', stack_id: 0 }] - }) + samples: [{ elapsed_since_start_ns: '0', thread_id: '0', stack_id: 0 }], + }), ), makeDsn({}), makeSdkMetadata({ @@ -140,9 +140,9 @@ describe('createProfilingEventEnvelope', () => { integrations: ['integration1', 'integration2'], packages: [ { name: 'package1', version: '1.2.3' }, - { name: 'package2', version: '4.5.6' } - ] - }) + { name: 'package2', version: '4.5.6' }, + ], + }), ); expect(envelope).toBe(null); }); @@ -153,8 +153,8 @@ describe('createProfilingEventEnvelope', () => { makeDsn({}), makeSdkMetadata({ name: 'sentry.javascript.node', - version: '1.2.3' - }) + version: '1.2.3', + }), ); expect(envelope && envelope[0]?.sdk?.name).toBe('sentry.javascript.node'); @@ -165,7 +165,7 @@ describe('createProfilingEventEnvelope', () => { const envelope = createProfilingEventEnvelope( makeEvent({ type: 'transaction' }, makeProfile({})), makeDsn({}), - undefined + undefined, ); expect(envelope?.[0].sdk).toBe(undefined); @@ -180,10 +180,10 @@ describe('createProfilingEventEnvelope', () => { protocol: 'https', path: 'path', port: '9000', - publicKey: 'publicKey' + publicKey: 'publicKey', }), makeSdkMetadata({}), - 'tunnel' + 'tunnel', ); expect(envelope?.[0].dsn).toBe('https://publicKey@sentry.io:9000/path/123'); @@ -193,7 +193,7 @@ describe('createProfilingEventEnvelope', () => { const envelope = createProfilingEventEnvelope( makeEvent({ type: 'transaction' }, makeProfile({})), makeDsn({}), - makeSdkMetadata({}) + makeSdkMetadata({}), ); const profile = envelope?.[1][0]?.[1] as unknown as Profile; @@ -215,11 +215,11 @@ describe('createProfilingEventEnvelope', () => { // @ts-expect-error force invalid value { type: 'error' }, // @ts-expect-error mock tid as undefined - makeProfile({ samples: [{ stack_id: 0, thread_id: undefined, elapsed_since_start_ns: '0' }] }) + makeProfile({ samples: [{ stack_id: 0, thread_id: undefined, elapsed_since_start_ns: '0' }] }), ), makeDsn({}), - makeSdkMetadata({}) - ) + makeSdkMetadata({}), + ), ).toThrow('Profiling events may only be attached to transactions, this should never occur.'); }); @@ -238,21 +238,21 @@ describe('createProfilingEventEnvelope', () => { contexts: { trace: { span_id: 'span_id', - trace_id: 'trace_id' - } - } + trace_id: 'trace_id', + }, + }, }, makeProfile({ samples: [ // @ts-expect-error mock tid as undefined { stack_id: 0, thread_id: undefined, elapsed_since_start_ns: '0' }, // @ts-expect-error mock tid as undefined - { stack_id: 0, thread_id: undefined, elapsed_since_start_ns: '0' } - ] - }) + { stack_id: 0, thread_id: undefined, elapsed_since_start_ns: '0' }, + ], + }), ), makeDsn({}), - makeSdkMetadata({}) + makeSdkMetadata({}), ); const profile = envelope?.[1][0]?.[1] as unknown as Profile; @@ -282,7 +282,7 @@ describe('isValidSampleRate', () => { [' ', false], [{}, false], [[], false], - [() => null, false] + [() => null, false], ])('value %s is %s', (input, expected) => { expect(isValidSampleRate(input)).toBe(expected); }); @@ -323,9 +323,9 @@ describe('findProfiledTransactionsFromEnvelope', () => { type: 'transaction', contexts: { profile: { - profile_id: uuid4() - } - } + profile_id: uuid4(), + }, + }, }; const envelope = addItemToEnvelope(createEnvelope({}), [{ type: 'transaction' }, txnWithProfile]); @@ -336,7 +336,7 @@ describe('findProfiledTransactionsFromEnvelope', () => { const txnWithProfile: Event = { event_id: uuid4(), type: 'transaction', - contexts: {} + contexts: {}, }; const envelope = addItemToEnvelope(createEnvelope({}), [{ type: 'transaction' }, txnWithProfile]); @@ -349,9 +349,9 @@ describe('findProfiledTransactionsFromEnvelope', () => { type: 'replay_event', contexts: { profile: { - profile_id: uuid4() - } - } + profile_id: uuid4(), + }, + }, }; // @ts-expect-error replay event is partial From 8f495a58d2fbe283d5cde017fc8d5bcf5ee90d83 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 15:51:09 -0500 Subject: [PATCH 021/240] fix: names to run cmds --- .github/workflows/build.yml | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0a1bbe68ab16..90be5a7decec 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -442,16 +442,20 @@ jobs: with: node-version: 20 - uses: actions/setup-python@v4 - - run: | + - name: install dependencies + run: | cd packages/profiling-node yarn install --frozen-lockfile - - run: | + - name: configure node-gyp + run: | cd packages/profiling-node yarn build:bindings:configure - - run: | + - name: build lib and bindings + run: | cd packages/profiling-node yarn build - - run: | + - name: unit test + run: | cd packages/profiling-node yarn test @@ -1346,11 +1350,13 @@ jobs: with: node-version-file: 'package.json' - - run: | + - name: install dependencies + run: | cd packages/profiling-node yarn install --frozen-lockfile - - run: | + - name: Build lib + run: | cd packages/profiling-node yarn build:lib @@ -1359,6 +1365,7 @@ jobs: name: profiling-node-binaries-${{ github.sha }} path: packages/profiling-node/lib/ - - run: | + - name: pack profiling node + run: | cd packages/profiling-node yarn pack From cbec946e2905fa815c3e90a71b8dd5b79283dad7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 15:56:35 -0500 Subject: [PATCH 022/240] fix: ignore deprecations --- packages/profiling-node/src/hubextensions.ts | 7 ++++++ packages/profiling-node/src/integration.ts | 4 ++++ .../test/hubextensions.hub.test.ts | 22 ++++++++++++++----- .../profiling-node/test/hubextensions.test.ts | 2 ++ packages/profiling-node/test/index.test.ts | 6 +++++ 5 files changed, 36 insertions(+), 5 deletions(-) diff --git a/packages/profiling-node/src/hubextensions.ts b/packages/profiling-node/src/hubextensions.ts index 65a65e39a39c..c5b095ffca45 100644 --- a/packages/profiling-node/src/hubextensions.ts +++ b/packages/profiling-node/src/hubextensions.ts @@ -27,6 +27,7 @@ export function maybeProfileTransaction( // profilesSampleRate is multiplied with tracesSampleRate to get the final sampling rate. We dont perform // the actual multiplication to get the final rate, but we discard the profile if the transaction was sampled, // so anything after this block from here is based on the transaction sampling. + // eslint-disable-next-line deprecation/deprecation if (!transaction.sampled) { return; } @@ -52,6 +53,7 @@ export function maybeProfileTransaction( // Prefer sampler to sample rate if both are provided. if (typeof profilesSampler === 'function') { + // eslint-disable-next-line deprecation/deprecation profilesSampleRate = profilesSampler({ transactionContext: transaction.toContext(), ...customSamplingContext }); } @@ -96,6 +98,7 @@ export function maybeProfileTransaction( const profile_id = uuid4(); CpuProfilerBindings.startProfiling(profile_id); if (isDebugBuild()) { + // eslint-disable-next-line deprecation/deprecation logger.log(`[Profiling] started profiling transaction: ${transaction.name}`); } @@ -122,6 +125,7 @@ export function stopTransactionProfile( const profile = CpuProfilerBindings.stopProfiling(profile_id); if (isDebugBuild()) { + // eslint-disable-next-line deprecation/deprecation logger.log(`[Profiling] stopped profiling of transaction: ${transaction.name}`); } @@ -129,6 +133,7 @@ export function stopTransactionProfile( if (!profile) { if (isDebugBuild()) { logger.log( + // eslint-disable-next-line deprecation/deprecation `[Profiling] profiler returned null profile for: ${transaction.name}`, 'this may indicate an overlapping transaction or a call to stopProfiling with a profile title that was never started', ); @@ -184,6 +189,7 @@ export function __PRIVATE__wrapStartTransactionWithProfiling(startTransaction: S // Enqueue a timeout to prevent profiles from running over max duration. let maxDurationTimeoutID: NodeJS.Timeout | void = global.setTimeout(() => { if (isDebugBuild()) { + // eslint-disable-next-line deprecation/deprecation logger.log('[Profiling] max profile duration elapsed, stopping profiling for:', transaction.name); } profile = stopTransactionProfile(transaction, profile_id); @@ -211,6 +217,7 @@ export function __PRIVATE__wrapStartTransactionWithProfiling(startTransaction: S } // @ts-expect-error profile is not part of metadata + // eslint-disable-next-line deprecation/deprecation transaction.setMetadata({ profile }); return originalFinish(); } diff --git a/packages/profiling-node/src/integration.ts b/packages/profiling-node/src/integration.ts index ff50fa253888..4abce53fefba 100644 --- a/packages/profiling-node/src/integration.ts +++ b/packages/profiling-node/src/integration.ts @@ -78,6 +78,7 @@ export class ProfilingIntegration implements Integration { // Enqueue a timeout to prevent profiles from running over max duration. PROFILE_TIMEOUTS[profile_id] = global.setTimeout(() => { if (isDebugBuild()) { + // eslint-disable-next-line deprecation/deprecation logger.log('[Profiling] max profile duration elapsed, stopping profiling for:', transaction.name); } @@ -87,14 +88,17 @@ export class ProfilingIntegration implements Integration { } }, maxProfileDurationMs); + // eslint-disable-next-line deprecation/deprecation transaction.setContext('profile', { profile_id }); // @ts-expect-error profile_id is not part of the metadata type + // eslint-disable-next-line deprecation/deprecation transaction.setMetadata({ profile_id: profile_id }); } }); client.on('finishTransaction', transaction => { // @ts-expect-error profile_id is not part of the metadata type + // eslint-disable-next-line deprecation/deprecation const profile_id = transaction.metadata.profile_id; if (profile_id && typeof profile_id === 'string') { if (PROFILE_TIMEOUTS[profile_id]) { diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index 2200cee1aeb5..a3b7d7996681 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -93,6 +93,7 @@ describe('hubextensions', () => { const transportSpy = jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.getCurrentHub().startTransaction({ name: 'profile_hub' }); await wait(500); transaction.finish(); @@ -127,11 +128,12 @@ describe('hubextensions', () => { jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.getCurrentHub().startTransaction({ name: 'profile_hub' }); transaction.finish(); await Sentry.flush(1000); - expect(logSpy.mock?.lastCall?.[0]).toBe('[Profiling] Discarding profile because it contains less than 2 samples'); + expect(logSpy.mock?.[logSpy.mock.calls.length-1]?.[0]).toBe('[Profiling] Discarding profile because it contains less than 2 samples'); expect((transport.send as any).mock.calls[0][0][1][0][0].type).toBe('transaction'); // eslint-disable-next-line @typescript-eslint/unbound-method @@ -169,6 +171,7 @@ describe('hubextensions', () => { jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.getCurrentHub().startTransaction({ name: 'profile_hub', traceId: 'boop' }); await wait(500); transaction.finish(); @@ -188,6 +191,7 @@ describe('hubextensions', () => { jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); transaction.finish(); @@ -195,7 +199,7 @@ describe('hubextensions', () => { await Sentry.flush(1000); expect(startProfilingSpy).toHaveBeenCalledTimes(1); - expect((stopProfilingSpy.mock.lastCall?.[0] as string).length).toBe(32); + expect((stopProfilingSpy.mock[stopProfilingSpy.mock.calls.length-1]?.[0] as string).length).toBe(32); }); it('sends profile in the same envelope as transaction', async () => { @@ -205,6 +209,7 @@ describe('hubextensions', () => { const transportSpy = jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); transaction.finish(); @@ -252,6 +257,7 @@ describe('hubextensions', () => { return Promise.resolve(); }); + // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); transaction.finish(); @@ -271,6 +277,7 @@ describe('hubextensions', () => { client.on('preprocessEvent', onPreprocessEvent); + // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); transaction.finish(); @@ -295,6 +302,7 @@ describe('hubextensions', () => { const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); const stopProfilingSpy = jest.spyOn(CpuProfilerBindings, 'stopProfiling'); + // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); transaction.finish(); @@ -302,7 +310,7 @@ describe('hubextensions', () => { await Sentry.flush(1000); expect(startProfilingSpy).toHaveBeenCalledTimes(1); - expect((stopProfilingSpy.mock.lastCall?.[0] as string).length).toBe(32); + expect((stopProfilingSpy.mock[startProfilingSpy.mock.calls.length-1]?.[0] as string).length).toBe(32); }); it('sends profile in separate envelope', async () => { @@ -315,6 +323,7 @@ describe('hubextensions', () => { return Promise.resolve(); }); + // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); transaction.finish(); @@ -330,7 +339,7 @@ describe('hubextensions', () => { // it seems that in node 19 globals (or least part of them) are a readonly object // so when useFakeTimers is called it throws an error because it cannot override // a readonly property of performance on global object. Use legacyFakeTimers for now - jest.useFakeTimers({ legacyFakeTimers: true }); + jest.useFakeTimers('legacy'); const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); const stopProfilingSpy = jest.spyOn(CpuProfilerBindings, 'stopProfiling'); @@ -338,12 +347,13 @@ describe('hubextensions', () => { const hub = Sentry.getCurrentHub(); hub.bindClient(client); + // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.getCurrentHub().startTransaction({ name: 'timeout_transaction' }); expect(startProfilingSpy).toHaveBeenCalledTimes(1); jest.advanceTimersByTime(30001); expect(stopProfilingSpy).toHaveBeenCalledTimes(1); - expect((stopProfilingSpy.mock.lastCall?.[0] as string).length).toBe(32); + expect((stopProfilingSpy.mock.calls[startProfilingSpy.mock.calls.length-1]?.[0] as string).length).toBe(32); transaction.finish(); expect(stopProfilingSpy).toHaveBeenCalledTimes(1); @@ -357,6 +367,7 @@ describe('hubextensions', () => { const hub = Sentry.getCurrentHub(); hub.bindClient(client); + // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.getCurrentHub().startTransaction({ name: 'txn' }); transaction.finish(); transaction.finish(); @@ -398,6 +409,7 @@ describe('hubextensions', () => { const transportSpy = jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); + // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); transaction.finish(); diff --git a/packages/profiling-node/test/hubextensions.test.ts b/packages/profiling-node/test/hubextensions.test.ts index 66bd75791869..df90200c2a5d 100644 --- a/packages/profiling-node/test/hubextensions.test.ts +++ b/packages/profiling-node/test/hubextensions.test.ts @@ -30,9 +30,11 @@ function makeTransactionMock(options = {}): Transaction { this.contexts[key] = context; }, setTag(this: Transaction, key: string, value: any) { + // eslint-disable-next-line deprecation/deprecation this.tags[key] = value; }, setMetadata(this: Transaction, metadata: Partial) { + // eslint-disable-next-line deprecation/deprecation this.metadata = { ...metadata } as TransactionMetadata; }, ...options, diff --git a/packages/profiling-node/test/index.test.ts b/packages/profiling-node/test/index.test.ts index b3dd4ca5a453..782cde8fa9a4 100644 --- a/packages/profiling-node/test/index.test.ts +++ b/packages/profiling-node/test/index.test.ts @@ -82,6 +82,7 @@ describe('Sentry - Profiling', () => { const hub = Sentry.getCurrentHub(); hub.bindClient(client); + // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.startTransaction({ name: 'title' }); await wait(500); transaction.finish(); @@ -95,7 +96,9 @@ describe('Sentry - Profiling', () => { const hub = Sentry.getCurrentHub(); hub.bindClient(client); + // eslint-disable-next-line deprecation/deprecation const t1 = Sentry.startTransaction({ name: 'outer' }); + // eslint-disable-next-line deprecation/deprecation const t2 = Sentry.startTransaction({ name: 'inner' }); await wait(500); @@ -115,7 +118,9 @@ describe('Sentry - Profiling', () => { const hub = Sentry.getCurrentHub(); hub.bindClient(client); + // eslint-disable-next-line deprecation/deprecation const t1 = Sentry.startTransaction({ name: 'same-title' }); + // eslint-disable-next-line deprecation/deprecation const t2 = Sentry.startTransaction({ name: 'same-title' }); await wait(500); t2.finish(); @@ -131,6 +136,7 @@ describe('Sentry - Profiling', () => { const hub = Sentry.getCurrentHub(); hub.bindClient(client); + // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.startTransaction({ name: 'title' }); await wait(500); transaction.finish(); From fd4c184de3d32d94f39467416626a021e035e632 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 16:04:58 -0500 Subject: [PATCH 023/240] fix: run lint --- packages/profiling-node/test/hubextensions.hub.test.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index a3b7d7996681..c18a816e9f7f 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -133,7 +133,7 @@ describe('hubextensions', () => { transaction.finish(); await Sentry.flush(1000); - expect(logSpy.mock?.[logSpy.mock.calls.length-1]?.[0]).toBe('[Profiling] Discarding profile because it contains less than 2 samples'); + expect(logSpy.mock?.[logSpy.mock.calls.length - 1]?.[0]).toBe('[Profiling] Discarding profile because it contains less than 2 samples'); expect((transport.send as any).mock.calls[0][0][1][0][0].type).toBe('transaction'); // eslint-disable-next-line @typescript-eslint/unbound-method @@ -199,7 +199,7 @@ describe('hubextensions', () => { await Sentry.flush(1000); expect(startProfilingSpy).toHaveBeenCalledTimes(1); - expect((stopProfilingSpy.mock[stopProfilingSpy.mock.calls.length-1]?.[0] as string).length).toBe(32); + expect((stopProfilingSpy.mock[stopProfilingSpy.mock.calls.length - 1]?.[0] as string).length).toBe(32); }); it('sends profile in the same envelope as transaction', async () => { @@ -310,7 +310,7 @@ describe('hubextensions', () => { await Sentry.flush(1000); expect(startProfilingSpy).toHaveBeenCalledTimes(1); - expect((stopProfilingSpy.mock[startProfilingSpy.mock.calls.length-1]?.[0] as string).length).toBe(32); + expect((stopProfilingSpy.mock[startProfilingSpy.mock.calls.length - 1]?.[0] as string).length).toBe(32); }); it('sends profile in separate envelope', async () => { @@ -353,7 +353,7 @@ describe('hubextensions', () => { jest.advanceTimersByTime(30001); expect(stopProfilingSpy).toHaveBeenCalledTimes(1); - expect((stopProfilingSpy.mock.calls[startProfilingSpy.mock.calls.length-1]?.[0] as string).length).toBe(32); + expect((stopProfilingSpy.mock.calls[startProfilingSpy.mock.calls.length - 1]?.[0] as string).length).toBe(32); transaction.finish(); expect(stopProfilingSpy).toHaveBeenCalledTimes(1); From b299b7388c40866c6c46497d8cdb808227a42e8f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 16:10:46 -0500 Subject: [PATCH 024/240] fix: run lint --- packages/profiling-node/test/hubextensions.hub.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index c18a816e9f7f..b8e85841f5a0 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -133,7 +133,9 @@ describe('hubextensions', () => { transaction.finish(); await Sentry.flush(1000); - expect(logSpy.mock?.[logSpy.mock.calls.length - 1]?.[0]).toBe('[Profiling] Discarding profile because it contains less than 2 samples'); + expect(logSpy.mock?.[logSpy.mock.calls.length - 1]?.[0]).toBe( + '[Profiling] Discarding profile because it contains less than 2 samples', + ); expect((transport.send as any).mock.calls[0][0][1][0][0].type).toBe('transaction'); // eslint-disable-next-line @typescript-eslint/unbound-method From cefea15bf4fafa6fb526fccbfffb2097d2d791a0 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 11 Jan 2024 16:38:28 -0500 Subject: [PATCH 025/240] fix: run lint --- .github/workflows/build.yml | 2 + .../profiling-node/bindings/cpu_profiler.cc | 48 +++++++++---------- packages/profiling-node/clang-format.js | 20 ++++++++ packages/profiling-node/clang-format.mjs | 19 -------- packages/profiling-node/src/hubextensions.ts | 1 + packages/profiling-node/src/integration.ts | 2 + packages/profiling-node/src/utils.ts | 1 + .../test/hubextensions.hub.test.ts | 2 + packages/profiling-node/test/index.test.ts | 1 + 9 files changed, 53 insertions(+), 43 deletions(-) create mode 100644 packages/profiling-node/clang-format.js delete mode 100644 packages/profiling-node/clang-format.mjs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 90be5a7decec..897a184a40a6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -433,6 +433,7 @@ jobs: name: Profiling Node Unit Tests needs: [job_get_metadata, job_build] runs-on: ubuntu-latest + timeout-minutes: 5 steps: - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) uses: actions/checkout@v4 @@ -1158,6 +1159,7 @@ jobs: needs: [job_get_metadata, job_build] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} + timeout-minutes: 10 strategy: fail-fast: false matrix: diff --git a/packages/profiling-node/bindings/cpu_profiler.cc b/packages/profiling-node/bindings/cpu_profiler.cc index cd4374d66794..f269990f425b 100644 --- a/packages/profiling-node/bindings/cpu_profiler.cc +++ b/packages/profiling-node/bindings/cpu_profiler.cc @@ -12,13 +12,13 @@ #include static const uint8_t kMaxStackDepth(128); -static const float kSamplingFrequency(99.0); // 99 to avoid lockstep sampling +static const float kSamplingFrequency(99.0); // 99 to avoid lockstep sampling static const float kSamplingHz(1 / kSamplingFrequency); static const int kSamplingInterval(kSamplingHz * 1e6); -static const v8::CpuProfilingNamingMode kNamingMode( - v8::CpuProfilingNamingMode::kDebugNaming); -static const v8::CpuProfilingLoggingMode kDefaultLoggingMode( - v8::CpuProfilingLoggingMode::kEagerLogging); +static const v8::CpuProfilingNamingMode + kNamingMode(v8::CpuProfilingNamingMode::kDebugNaming); +static const v8::CpuProfilingLoggingMode + kDefaultLoggingMode(v8::CpuProfilingLoggingMode::kEagerLogging); // Allow users to override the default logging mode via env variable. This is // useful because sometimes the flow of the profiled program can be to execute @@ -57,7 +57,7 @@ enum class ProfileStatus { }; class MeasurementsTicker { - private: +private: uv_timer_t timer; uint64_t period_ms; std::unordered_map active_profiles; MeasurementsTicker measurements_ticker; @@ -231,7 +231,7 @@ class Profiler { }; class SentryProfile { - private: +private: uint64_t started_at; uint16_t heap_write_index = 0; uint16_t cpu_write_index = 0; @@ -248,7 +248,7 @@ class SentryProfile { ProfileStatus status = ProfileStatus::kNotStarted; std::string id; - public: +public: explicit SentryProfile(const char *id) : started_at(uv_hrtime()), memory_sampler_cb([this](uint64_t ts, v8::HeapStatistics &stats) { @@ -280,8 +280,7 @@ class SentryProfile { return false; }), - status(ProfileStatus::kNotStarted), - id(id) { + status(ProfileStatus::kNotStarted), id(id) { heap_stats_ts.reserve(300); heap_stats_usage.reserve(300); cpu_stats_ts.reserve(300); @@ -453,10 +452,10 @@ static napi_value GetFrameModuleWrapped(napi_env env, napi_callback_info info) { return napi_module; } -napi_value CreateFrameNode( - const napi_env &env, const v8::CpuProfileNode &node, - std::unordered_map &module_cache, - napi_value &resources) { +napi_value +CreateFrameNode(const napi_env &env, const v8::CpuProfileNode &node, + std::unordered_map &module_cache, + napi_value &resources) { napi_value js_node; napi_create_object(env, &js_node); @@ -664,10 +663,11 @@ static void GetSamples(const napi_env &env, const v8::CpuProfile *profile, } } -static napi_value TranslateMeasurementsDouble( - const napi_env &env, const char *unit, const uint16_t size, - const std::vector &values, - const std::vector ×tamps) { +static napi_value +TranslateMeasurementsDouble(const napi_env &env, const char *unit, + const uint16_t size, + const std::vector &values, + const std::vector ×tamps) { if (size > values.size() || size > timestamps.size()) { napi_throw_range_error(env, "NAPI_ERROR", "CPU measurement size is larger than the number of " @@ -718,10 +718,10 @@ static napi_value TranslateMeasurementsDouble( return measurement; } -static napi_value TranslateMeasurements( - const napi_env &env, const char *unit, const uint16_t size, - const std::vector &values, - const std::vector ×tamps) { +static napi_value +TranslateMeasurements(const napi_env &env, const char *unit, + const uint16_t size, const std::vector &values, + const std::vector ×tamps) { if (size > values.size() || size > timestamps.size()) { napi_throw_range_error(env, "NAPI_ERROR", "Memory measurement size is larger than the number " diff --git a/packages/profiling-node/clang-format.js b/packages/profiling-node/clang-format.js new file mode 100644 index 000000000000..7deb9fb97993 --- /dev/null +++ b/packages/profiling-node/clang-format.js @@ -0,0 +1,20 @@ +const child_process = require('child_process'); + +const args = ['--Werror', '-i', '--style=file', 'bindings/cpu_profiler.cc']; +const cmd = `./node_modules/.bin/clang-format ${args.join(' ')}`; + +child_process.execSync(cmd); + +// eslint-disable-next-line no-console +console.log('clang-format: done, checking tree...'); + +const diff = child_process.execSync('git status --short').toString(); + +if (diff) { + // eslint-disable-next-line no-console + console.error('clang-format: check failed ❌'); + process.exit(1); +} + +// eslint-disable-next-line no-console +console.log('clang-format: check passed ✅'); diff --git a/packages/profiling-node/clang-format.mjs b/packages/profiling-node/clang-format.mjs deleted file mode 100644 index e8fd36c8935e..000000000000 --- a/packages/profiling-node/clang-format.mjs +++ /dev/null @@ -1,19 +0,0 @@ -import { execSync } from 'child_process'; -import { error, log } from 'console'; -import { exit } from 'process'; - -const args = ['--Werror', '-i', '--style=file', 'bindings/cpu_profiler.cc']; -const cmd = `./node_modules/.bin/clang-format ${args.join(' ')}`; - -execSync(cmd); - -log('clang-format: done, checking tree...'); - -const diff = execSync(`git status --short`).toString(); - -if (diff) { - error('clang-format: check failed ❌'); - exit(1); -} - -log('clang-format: check passed ✅'); diff --git a/packages/profiling-node/src/hubextensions.ts b/packages/profiling-node/src/hubextensions.ts index c5b095ffca45..7f19471ce08d 100644 --- a/packages/profiling-node/src/hubextensions.ts +++ b/packages/profiling-node/src/hubextensions.ts @@ -160,6 +160,7 @@ export function __PRIVATE__wrapStartTransactionWithProfiling(startTransaction: S const transaction: Transaction = startTransaction.call(this, transactionContext, customSamplingContext); // Client is required if we want to profile + // eslint-disable-next-line deprecation/deprecation const client = this.getClient() as NodeClient | undefined; if (!client) { return transaction; diff --git a/packages/profiling-node/src/integration.ts b/packages/profiling-node/src/integration.ts index 4abce53fefba..0d9466f05f06 100644 --- a/packages/profiling-node/src/integration.ts +++ b/packages/profiling-node/src/integration.ts @@ -56,6 +56,7 @@ export class ProfilingIntegration implements Integration { */ public setupOnce(addGlobalEventProcessor: (callback: EventProcessor) => void, getCurrentHub: () => Hub): void { this.getCurrentHub = getCurrentHub; + // eslint-disable-next-line deprecation/deprecation const client = this.getCurrentHub().getClient() as NodeClient; if (client && typeof client.on === 'function') { @@ -202,6 +203,7 @@ export class ProfilingIntegration implements Integration { // If either of them is not available, we remove the profile from the transaction event. // and forward it to the next event processor. const hub = this.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation const client = hub.getClient(); if (!client) { if (isDebugBuild()) { diff --git a/packages/profiling-node/src/utils.ts b/packages/profiling-node/src/utils.ts index c8fae386679b..703e037147f7 100644 --- a/packages/profiling-node/src/utils.ts +++ b/packages/profiling-node/src/utils.ts @@ -461,6 +461,7 @@ export function applyDebugMetadata(resource_paths: ReadonlyArray): Debug } const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation const client = hub.getClient(); const options = client && client.getOptions(); diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index b8e85841f5a0..d295829e8225 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -26,6 +26,7 @@ function makeClientWithoutHooks(): [NodeClient, Transport] { integrations: [integration], transport: _opts => transport, }); + // eslint-disable-next-line deprecation/deprecation client.setupIntegrations = () => { integration.setupOnce( cb => { @@ -59,6 +60,7 @@ function makeClientWithHooks(): [NodeClient, Transport] { }), }); + // eslint-disable-next-line deprecation/deprecation client.setupIntegrations = () => { integration.setupOnce( cb => { diff --git a/packages/profiling-node/test/index.test.ts b/packages/profiling-node/test/index.test.ts index 782cde8fa9a4..bd7dc83a0727 100644 --- a/packages/profiling-node/test/index.test.ts +++ b/packages/profiling-node/test/index.test.ts @@ -36,6 +36,7 @@ function makeClientWithoutHooks(): [NodeClient, MockTransport] { integrations: [integration], transport: () => transport, }); + // eslint-disable-next-line deprecation/deprecation client.setupIntegrations = () => { integration.setupOnce( cb => { From 216f4692be133567c42f69392a6d2727bb1f21d9 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 12:36:35 -0500 Subject: [PATCH 026/240] test node action @3 --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 897a184a40a6..5088f038c9e9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1253,11 +1253,11 @@ jobs: run: apk add --no-cache build-base python3 g++ make curl - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - uses: actions/checkout@v4 + uses: actions/checkout@v3 with: ref: ${{ env.HEAD_COMMIT }} - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} From 484e4324f9f24dfaf91a4195bd1604f0d43fb9f4 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 12:53:58 -0500 Subject: [PATCH 027/240] deprecate .finish --- .github/workflows/build.yml | 2 +- packages/profiling-node/src/hubextensions.ts | 2 ++ .../profiling-node/test/hubextensions.hub.test.ts | 13 +++++++++++++ packages/profiling-node/test/index.test.ts | 3 +++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5088f038c9e9..48b2d3d11d04 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1350,7 +1350,7 @@ jobs: - uses: actions/setup-node@v4 with: - node-version-file: 'package.json' + node-version: 20 - name: install dependencies run: | diff --git a/packages/profiling-node/src/hubextensions.ts b/packages/profiling-node/src/hubextensions.ts index 7f19471ce08d..0940aff0fde7 100644 --- a/packages/profiling-node/src/hubextensions.ts +++ b/packages/profiling-node/src/hubextensions.ts @@ -197,6 +197,7 @@ export function __PRIVATE__wrapStartTransactionWithProfiling(startTransaction: S }, maxProfileDurationMs); // We need to reference the original finish call to avoid creating an infinite loop + // eslint-disable-next-line deprecation/deprecation const originalFinish = transaction.finish.bind(transaction); // Wrap the transaction finish method to stop profiling and set the profile on the transaction. @@ -223,6 +224,7 @@ export function __PRIVATE__wrapStartTransactionWithProfiling(startTransaction: S return originalFinish(); } + // eslint-disable-next-line deprecation/deprecation transaction.finish = profilingWrappedTransactionFinish; return transaction; }; diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index d295829e8225..8593cab5a3a9 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -98,6 +98,7 @@ describe('hubextensions', () => { // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.getCurrentHub().startTransaction({ name: 'profile_hub' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(1000); @@ -132,6 +133,7 @@ describe('hubextensions', () => { // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.getCurrentHub().startTransaction({ name: 'profile_hub' }); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(1000); @@ -178,6 +180,7 @@ describe('hubextensions', () => { // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.getCurrentHub().startTransaction({ name: 'profile_hub', traceId: 'boop' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(1000); @@ -198,6 +201,7 @@ describe('hubextensions', () => { // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(1000); @@ -216,6 +220,7 @@ describe('hubextensions', () => { // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(1000); @@ -264,6 +269,7 @@ describe('hubextensions', () => { // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(1000); @@ -284,6 +290,7 @@ describe('hubextensions', () => { // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(1000); @@ -309,6 +316,7 @@ describe('hubextensions', () => { // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(1000); @@ -330,6 +338,7 @@ describe('hubextensions', () => { // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(1000); @@ -359,6 +368,7 @@ describe('hubextensions', () => { expect(stopProfilingSpy).toHaveBeenCalledTimes(1); expect((stopProfilingSpy.mock.calls[startProfilingSpy.mock.calls.length - 1]?.[0] as string).length).toBe(32); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); expect(stopProfilingSpy).toHaveBeenCalledTimes(1); }); @@ -373,7 +383,9 @@ describe('hubextensions', () => { // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.getCurrentHub().startTransaction({ name: 'txn' }); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); expect(stopProfilingSpy).toHaveBeenCalledTimes(1); }); @@ -416,6 +428,7 @@ describe('hubextensions', () => { // eslint-disable-next-line deprecation/deprecation const transaction = hub.startTransaction({ name: 'profile_hub' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(1000); diff --git a/packages/profiling-node/test/index.test.ts b/packages/profiling-node/test/index.test.ts index bd7dc83a0727..159473fab425 100644 --- a/packages/profiling-node/test/index.test.ts +++ b/packages/profiling-node/test/index.test.ts @@ -86,6 +86,7 @@ describe('Sentry - Profiling', () => { // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.startTransaction({ name: 'title' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(500); @@ -140,7 +141,9 @@ describe('Sentry - Profiling', () => { // eslint-disable-next-line deprecation/deprecation const transaction = Sentry.startTransaction({ name: 'title' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); + // eslint-disable-next-line deprecation/deprecation transaction.finish(); await Sentry.flush(500); From a585b1811d05194131a4ca5d3f7c36d48b3f04af Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 12:57:43 -0500 Subject: [PATCH 028/240] deprecate .finish and mirror latest version --- packages/profiling-node/package.json | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 99c81190f410..b8e3901aed7d 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -1,11 +1,11 @@ { "name": "@sentry/profiling-node", "version": "1.3.3", - "description": "Sampling based nodejs profiler.", - "repository": { - "type": "git", - "url": "https://github.com/getsentry/profiling-node.git" - }, + "description": "Official Sentry SDK for Node.js Profiling", + "repository": "git://github.com/getsentry/sentry-javascript.git", + "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/profiling-node", + "author": "Sentry", + "license": "MIT", "main": "lib/index.js", "types": "lib/types/index.d.ts", "bin": { @@ -71,8 +71,6 @@ 7 ] }, - "author": "jonas.badalic@sentry.io", - "license": "MIT", "peerDependencies": { "@sentry/node": "^7.44.1" }, From a8166422caa3d8bd320328fcb102e874cc8974fb Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 12:57:47 -0500 Subject: [PATCH 029/240] deprecate .finish and mirror latest version --- packages/profiling-node/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index b8e3901aed7d..317d3a59f1e5 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -1,6 +1,6 @@ { "name": "@sentry/profiling-node", - "version": "1.3.3", + "version": "1.3.5", "description": "Official Sentry SDK for Node.js Profiling", "repository": "git://github.com/getsentry/sentry-javascript.git", "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/profiling-node", From 856bbfdd2dc20958ebe0d1fecdde619db8f039cc Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:00:37 -0500 Subject: [PATCH 030/240] run node tests first while I test --- .github/workflows/build.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 48b2d3d11d04..5eecce069755 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -431,9 +431,10 @@ jobs: job_profiling_node_unit_tests: name: Profiling Node Unit Tests - needs: [job_get_metadata, job_build] + needs: [job_get_metadata] + # needs: [job_get_metadata, job_build] runs-on: ubuntu-latest - timeout-minutes: 5 + timeout-minutes: 10 steps: - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) uses: actions/checkout@v4 @@ -442,7 +443,7 @@ jobs: - uses: actions/setup-node@v4 with: node-version: 20 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 - name: install dependencies run: | cd packages/profiling-node @@ -1253,15 +1254,15 @@ jobs: run: apk add --no-cache build-base python3 g++ make curl - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ env.HEAD_COMMIT }} - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 name: Setup python - name: Install dependencies From b90c21a6a1041e8937375a5ebe89aa0c02961a31 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:09:21 -0500 Subject: [PATCH 031/240] try running through lerna --- .github/workflows/build.yml | 4 +--- package.json | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5eecce069755..9147b80872c3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -449,9 +449,7 @@ jobs: cd packages/profiling-node yarn install --frozen-lockfile - name: configure node-gyp - run: | - cd packages/profiling-node - yarn build:bindings:configure + run: yarn build:bindings:configure - name: build lib and bindings run: | cd packages/profiling-node diff --git a/package.json b/package.json index a168d9aa65d1..9e3ccfa1c762 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "build:dev": "lerna run build:types,build:transpile", "build:dev:filter": "lerna run build:dev --include-filtered-dependencies --include-filtered-dependents --scope", "build:transpile": "lerna run build:transpile", + "build:bindings:configure": "lerna run build:bindings:configure", "build:types": "lerna run build:types", "build:watch": "lerna run build:watch", "build:dev:watch": "lerna run build:dev:watch", From 428315a383f1f69ce61cf94bd05be69a590ef734 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:15:42 -0500 Subject: [PATCH 032/240] test node 18 --- .github/workflows/build.yml | 6 ++++-- package.json | 1 - 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9147b80872c3..9d7b4ed82b51 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -442,14 +442,16 @@ jobs: ref: ${{ env.HEAD_COMMIT }} - uses: actions/setup-node@v4 with: - node-version: 20 + node-version: 18 - uses: actions/setup-python@v5 - name: install dependencies run: | cd packages/profiling-node yarn install --frozen-lockfile - name: configure node-gyp - run: yarn build:bindings:configure + run: | + cd packages/profiling-node + yarn build:bindings:configure - name: build lib and bindings run: | cd packages/profiling-node diff --git a/package.json b/package.json index 9e3ccfa1c762..a168d9aa65d1 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,6 @@ "build:dev": "lerna run build:types,build:transpile", "build:dev:filter": "lerna run build:dev --include-filtered-dependencies --include-filtered-dependents --scope", "build:transpile": "lerna run build:transpile", - "build:bindings:configure": "lerna run build:bindings:configure", "build:types": "lerna run build:types", "build:watch": "lerna run build:watch", "build:dev:watch": "lerna run build:dev:watch", From 1780e8ea107bf9e7b3504e0c860b07f86d651606 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:18:29 -0500 Subject: [PATCH 033/240] test ignore scripts --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9d7b4ed82b51..35cd7d5f0215 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -447,7 +447,7 @@ jobs: - name: install dependencies run: | cd packages/profiling-node - yarn install --frozen-lockfile + yarn install --ignore-scripts --frozen-lockfile - name: configure node-gyp run: | cd packages/profiling-node From 9111d353d1c4d53dc699aa06221ee5e1a8145f6a Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:24:40 -0500 Subject: [PATCH 034/240] test https call --- packages/profiling-node/test.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 packages/profiling-node/test.js diff --git a/packages/profiling-node/test.js b/packages/profiling-node/test.js new file mode 100644 index 000000000000..4aa5dc538534 --- /dev/null +++ b/packages/profiling-node/test.js @@ -0,0 +1,12 @@ +const fetch = require('node-fetch'); + +(async () => { + try { + const response = await fetch('https://github.com/'); + const body = await response.text(); + + console.log(body); + } catch (error) { + console.log(error) + } +})() From 2d7918583f317af8706c58fa4ee97fef44ee92d4 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:25:13 -0500 Subject: [PATCH 035/240] test https call --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 35cd7d5f0215..afd92cd977ac 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -448,6 +448,10 @@ jobs: run: | cd packages/profiling-node yarn install --ignore-scripts --frozen-lockfile + - name: test https + run: | + cd packages/profiling-node + node test.js - name: configure node-gyp run: | cd packages/profiling-node From c8ca221bf87c84c1d444a68d172b3b95836d56ae Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:30:21 -0500 Subject: [PATCH 036/240] more random tests --- .github/workflows/build.yml | 7 ++++--- packages/profiling-node/package.json | 3 ++- packages/profiling-node/test.js | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index afd92cd977ac..b809fa6dc488 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -431,12 +431,13 @@ jobs: job_profiling_node_unit_tests: name: Profiling Node Unit Tests - needs: [job_get_metadata] + # needs: [job_get_metadata] # needs: [job_get_metadata, job_build] runs-on: ubuntu-latest timeout-minutes: 10 steps: - - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + # - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + - name: Check out current commit uses: actions/checkout@v4 with: ref: ${{ env.HEAD_COMMIT }} @@ -451,7 +452,7 @@ jobs: - name: test https run: | cd packages/profiling-node - node test.js + yarn test:https - name: configure node-gyp run: | cd packages/profiling-node diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 317d3a59f1e5..8f2e65c1ee0a 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -56,7 +56,8 @@ "test:rollup:build": "rollup --config ./examples/rollup.config.js", "test:rollup:run": "BUNDLER=rollup node ./examples/dist/rollup/index.js", "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", - "test": "cross-env SENTRY_PROFILER_BINARY_DIR=./lib jest --config jest.config.js" + "test": "cross-env SENTRY_PROFILER_BINARY_DIR=./lib jest --config jest.config.js", + "test:https": "node ./test.js" }, "keywords": [ "profiling", diff --git a/packages/profiling-node/test.js b/packages/profiling-node/test.js index 4aa5dc538534..0aef28175ffa 100644 --- a/packages/profiling-node/test.js +++ b/packages/profiling-node/test.js @@ -2,7 +2,7 @@ const fetch = require('node-fetch'); (async () => { try { - const response = await fetch('https://github.com/'); + const response = await fetch('https://nodejs.org/download/release/v18.19.0/node-v18.19.0-headers.tar.gz'); const body = await response.text(); console.log(body); From 63516fb505dca0f6f9e75f1adb70cd70358a4fe3 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:32:34 -0500 Subject: [PATCH 037/240] add verbose logging --- packages/profiling-node/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 8f2e65c1ee0a..e9f715c33c22 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -39,8 +39,8 @@ "build": "npm run build:bindings && npm run build:lib", "build:lib": "npm run build:types && node ./esbuild.js", "build:types": "tsc -p ./tsconfig.types.json", - "build:bindings:configure": "node-gyp configure", - "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64", + "build:bindings:configure": "node-gyp configure --verbose", + "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64 --verbose", "build:bindings": "node-gyp build && node scripts/copy-target.js", "build:bindings:arm64": "node-gyp build --arch=arm64 && node scripts/copy-target.js", "build:dev": "yarn clean && yarn build:bindings:configure && yarn build", From a96c53a4be7c8d388f1d31bd1764ef9d9ee055f8 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:38:56 -0500 Subject: [PATCH 038/240] test npm? --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b809fa6dc488..322e5b606816 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -456,7 +456,7 @@ jobs: - name: configure node-gyp run: | cd packages/profiling-node - yarn build:bindings:configure + npm build:bindings:configure - name: build lib and bindings run: | cd packages/profiling-node From dfebfb8ef509b7b98f8ded7566b6afd7efdd472b Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:47:28 -0500 Subject: [PATCH 039/240] separate gha run --- .github/workflows/build-profiling.yml | 57 +++++++++++++++++++++++++++ .github/workflows/build.yml | 2 +- packages/profiling-node/package.json | 1 - packages/profiling-node/test.js | 12 ------ 4 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 .github/workflows/build-profiling.yml delete mode 100644 packages/profiling-node/test.js diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml new file mode 100644 index 000000000000..5cac645c42f6 --- /dev/null +++ b/.github/workflows/build-profiling.yml @@ -0,0 +1,57 @@ + +name: 'Build & Test' +on: + push: + branches: + - develop + - master + - release/** + pull_request: + workflow_dispatch: + inputs: + commit: + description: If the commit you want to test isn't the head of a branch, provide its SHA here + required: false + schedule: + # Run every day at midnight (without cache) + - cron: '0 0 * * *' + +env: + HEAD_COMMIT: ${{ github.event.inputs.commit || github.sha }} + +jobs: + job_profiling_node_unit_tests: + name: Profiling Node Unit Tests + # needs: [job_get_metadata] + # needs: [job_get_metadata, job_build] + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Check out current commit + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + - uses: actions/setup-node@v4 + with: + node-version: 18 + - uses: actions/setup-python@v5 + - name: install dependencies + run: | + cd packages/profiling-node + yarn install --ignore-scripts --frozen-lockfile + - name: test https + run: | + cd packages/profiling-node + yarn test:https + - name: configure node-gyp + run: | + cd packages/profiling-node + npm build:bindings:configure + - name: build lib and bindings + run: | + cd packages/profiling-node + yarn build + - name: unit test + run: | + cd packages/profiling-node + yarn test diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 322e5b606816..66fb3df963fd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -431,7 +431,7 @@ jobs: job_profiling_node_unit_tests: name: Profiling Node Unit Tests - # needs: [job_get_metadata] + needs: [job_get_metadata] # needs: [job_get_metadata, job_build] runs-on: ubuntu-latest timeout-minutes: 10 diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index e9f715c33c22..4e5cf6baad92 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -57,7 +57,6 @@ "test:rollup:run": "BUNDLER=rollup node ./examples/dist/rollup/index.js", "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", "test": "cross-env SENTRY_PROFILER_BINARY_DIR=./lib jest --config jest.config.js", - "test:https": "node ./test.js" }, "keywords": [ "profiling", diff --git a/packages/profiling-node/test.js b/packages/profiling-node/test.js deleted file mode 100644 index 0aef28175ffa..000000000000 --- a/packages/profiling-node/test.js +++ /dev/null @@ -1,12 +0,0 @@ -const fetch = require('node-fetch'); - -(async () => { - try { - const response = await fetch('https://nodejs.org/download/release/v18.19.0/node-v18.19.0-headers.tar.gz'); - const body = await response.text(); - - console.log(body); - } catch (error) { - console.log(error) - } -})() From e9c946098cea5e63ece19df87174cb30cad52c44 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:50:25 -0500 Subject: [PATCH 040/240] separate gha run --- .github/workflows/build-profiling.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index 5cac645c42f6..c40daa29e88d 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -20,7 +20,7 @@ env: HEAD_COMMIT: ${{ github.event.inputs.commit || github.sha }} jobs: - job_profiling_node_unit_tests: + profiling_node_separate: name: Profiling Node Unit Tests # needs: [job_get_metadata] # needs: [job_get_metadata, job_build] From 62280722fc656fa4bdbf9714c358b481deea292c Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:54:17 -0500 Subject: [PATCH 041/240] rename ci --- .github/workflows/build-profiling.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index c40daa29e88d..32e2d36c79e9 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -1,5 +1,5 @@ -name: 'Build & Test' +name: 'Build & Test Profiling Node' on: push: branches: From 55ca8ad98c2a9c85e247c3a283a2e14f32ee0582 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:56:22 -0500 Subject: [PATCH 042/240] fix typo --- packages/profiling-node/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 4e5cf6baad92..187c6ea3e73d 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -56,7 +56,7 @@ "test:rollup:build": "rollup --config ./examples/rollup.config.js", "test:rollup:run": "BUNDLER=rollup node ./examples/dist/rollup/index.js", "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", - "test": "cross-env SENTRY_PROFILER_BINARY_DIR=./lib jest --config jest.config.js", + "test": "cross-env SENTRY_PROFILER_BINARY_DIR=./lib jest --config jest.config.js" }, "keywords": [ "profiling", From 823d60e4987528b297bdcf37c545d23b61995295 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 13:59:52 -0500 Subject: [PATCH 043/240] remove https test file --- .github/workflows/build-profiling.yml | 4 ---- .github/workflows/build.yml | 4 ---- 2 files changed, 8 deletions(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index 32e2d36c79e9..32e664709df2 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -39,10 +39,6 @@ jobs: run: | cd packages/profiling-node yarn install --ignore-scripts --frozen-lockfile - - name: test https - run: | - cd packages/profiling-node - yarn test:https - name: configure node-gyp run: | cd packages/profiling-node diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 66fb3df963fd..4381a35c73c1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -449,10 +449,6 @@ jobs: run: | cd packages/profiling-node yarn install --ignore-scripts --frozen-lockfile - - name: test https - run: | - cd packages/profiling-node - yarn test:https - name: configure node-gyp run: | cd packages/profiling-node From a8c7e2b0a705670663686d50b03e62e6b7f4b248 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 14:04:18 -0500 Subject: [PATCH 044/240] try npm --- .github/workflows/build-profiling.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index 32e664709df2..7b7380295356 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -42,7 +42,7 @@ jobs: - name: configure node-gyp run: | cd packages/profiling-node - npm build:bindings:configure + npm run build:bindings:configure - name: build lib and bindings run: | cd packages/profiling-node From 9db2ea6d0bcf2457c7713f7ced09ad89dba0a1f9 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 14:21:01 -0500 Subject: [PATCH 045/240] test node-gyp 9.4.1 --- packages/profiling-node/package.json | 4 +- yarn.lock | 169 +++------------------------ 2 files changed, 21 insertions(+), 152 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 187c6ea3e73d..1b422a5d1a8c 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -84,12 +84,12 @@ "@sentry/node": "^7.87.0", "@sentry/types": "^7.87.0", "@sentry/utils": "^7.87.0", - "@types/node-abi": "^3.0.0", "@types/node": "16.18.70", + "@types/node-abi": "^3.0.0", "clang-format": "^1.8.0", "cross-env": "^7.0.3", "esbuild": "^0.17.18", - "node-gyp": "^10.0.1", + "node-gyp": "^9.4.1", "typescript": "^4.9.5" } } diff --git a/yarn.lock b/yarn.lock index 6400f6da2327..04280725db46 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4412,17 +4412,6 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@npmcli/agent@^2.0.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/agent/-/agent-2.2.0.tgz#e81f00fdb2a670750ff7731bbefb47ecbf0ccf44" - integrity sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q== - 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.1" - "@npmcli/fs@^1.0.0": version "1.1.1" resolved "https://registry.yarnpkg.com/@npmcli/fs/-/fs-1.1.1.tgz#72f719fe935e687c56a4faecf3c03d06ba593257" @@ -7831,11 +7820,6 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= -abbrev@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-2.0.0.tgz#cf59829b8b4f03f89dda2771cb7f3653828c89bf" - integrity sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ== - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -7940,7 +7924,7 @@ adjust-sourcemap-loader@^4.0.0: loader-utils "^2.0.0" regex-parser "^2.2.11" -agent-base@4, agent-base@5, agent-base@6, agent-base@^4.3.0, agent-base@^6.0.2, agent-base@^7.0.2, agent-base@^7.1.0, agent-base@~4.2.1: +agent-base@4, agent-base@5, agent-base@6, agent-base@^4.3.0, agent-base@^6.0.2, agent-base@~4.2.1: version "5.1.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c" integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g== @@ -10937,24 +10921,6 @@ cacache@^17.0.0: tar "^6.1.11" unique-filename "^3.0.0" -cacache@^18.0.0: - version "18.0.2" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-18.0.2.tgz#fd527ea0f03a603be5c0da5805635f8eef00c60c" - integrity sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw== - 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" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -16841,17 +16807,6 @@ glob@^10.2.2: minipass "^5.0.0 || ^6.0.2" path-scurry "^1.10.0" -glob@^10.3.10: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - glob@^10.3.4: version "10.3.4" resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.4.tgz#c85c9c7ab98669102b6defda76d35c5b1ef9766f" @@ -17901,14 +17856,6 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" -http-proxy-agent@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz#e9096c5afd071a3fce56e6252bb321583c124673" - integrity sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - http-proxy-middleware@0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" @@ -17976,14 +17923,6 @@ https-proxy-agent@^4.0.0: agent-base "5" debug "4" -https-proxy-agent@^7.0.1: - version "7.0.2" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz#e2645b846b90e96c6e6f347fb5b2e41f1590b09b" - integrity sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA== - dependencies: - agent-base "^7.0.2" - debug "4" - https@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https/-/https-1.0.0.tgz#3c37c7ae1a8eeb966904a2ad1e975a194b7ed3a4" @@ -19055,11 +18994,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -isexe@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d" - integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ== - isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" @@ -19200,15 +19134,6 @@ jackspeak@^2.0.3: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - jake@^10.8.5: version "10.8.5" resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.5.tgz#f2183d2c59382cb274226034543b9c03b8164c46" @@ -21133,11 +21058,6 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lru-cache@^10.0.1: - version "10.1.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.1.0.tgz#2098d41c2dc56500e6c88584aa656c84de7d0484" - integrity sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag== - lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -21334,23 +21254,6 @@ make-fetch-happen@^11.0.0, make-fetch-happen@^11.0.1, make-fetch-happen@^11.1.1: socks-proxy-agent "^7.0.0" ssri "^10.0.0" -make-fetch-happen@^13.0.0: - version "13.0.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz#705d6f6cbd7faecb8eac2432f551e49475bfedf0" - integrity sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A== - 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" - promise-retry "^2.0.1" - ssri "^10.0.0" - make-fetch-happen@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" @@ -22343,13 +22246,6 @@ minipass-collect@^1.0.2: dependencies: minipass "^3.0.0" -minipass-collect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-2.0.1.tgz#1621bc77e12258a12c60d34e2276ec5c20680863" - integrity sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw== - dependencies: - minipass "^7.0.3" - minipass-fetch@^1.3.0, minipass-fetch@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz#d75e0091daac1b0ffd7e9d41629faff7d0c1f1b6" @@ -22452,11 +22348,6 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.3.tgz#05ea638da44e475037ed94d1c7efcc76a25e1974" integrity sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg== -minipass@^7.0.2, minipass@^7.0.3: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" @@ -23238,22 +23129,6 @@ node-gyp-build@^4.3.0: resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.5.0.tgz#7a64eefa0b21112f89f58379da128ac177f20e40" integrity sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg== -node-gyp@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-10.0.1.tgz#205514fc19e5830fa991e4a689f9e81af377a966" - integrity sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg== - 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 "^3.0.0" - semver "^7.3.5" - tar "^6.1.2" - which "^4.0.0" - node-gyp@^8.2.0: version "8.4.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-8.4.1.tgz#3d49308fc31f768180957d6b5746845fbd429937" @@ -23286,6 +23161,23 @@ node-gyp@^9.0.0: tar "^6.1.2" which "^2.0.2" +node-gyp@^9.4.1: + version "9.4.1" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.4.1.tgz#8a1023e0d6766ecb52764cc3a734b36ff275e185" + integrity sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ== + dependencies: + env-paths "^2.2.0" + exponential-backoff "^3.1.1" + glob "^7.1.4" + graceful-fs "^4.2.6" + make-fetch-happen "^10.0.3" + nopt "^6.0.0" + npmlog "^6.0.0" + rimraf "^3.0.2" + semver "^7.3.5" + tar "^6.1.2" + which "^2.0.2" + node-html-parser@1.4.9: version "1.4.9" resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-1.4.9.tgz#3c8f6cac46479fae5800725edb532e9ae8fd816c" @@ -23420,13 +23312,6 @@ nopt@^6.0.0: dependencies: abbrev "^1.0.0" -nopt@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-7.2.0.tgz#067378c68116f602f552876194fd11f1292503d7" - integrity sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA== - dependencies: - abbrev "^2.0.0" - nopt@~1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" @@ -28999,16 +28884,7 @@ socks-proxy-agent@^7.0.0: debug "^4.3.3" socks "^2.6.2" -socks-proxy-agent@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-8.0.2.tgz#5acbd7be7baf18c46a3f293a840109a430a640ad" - integrity sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g== - dependencies: - agent-base "^7.0.2" - debug "^4.3.4" - socks "^2.7.1" - -socks@^2.6.2, socks@^2.7.1: +socks@^2.6.2: version "2.7.1" resolved "https://registry.yarnpkg.com/socks/-/socks-2.7.1.tgz#d8e651247178fde79c0663043e07240196857d55" integrity sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ== @@ -32662,13 +32538,6 @@ which@^3.0.0: dependencies: isexe "^2.0.0" -which@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a" - integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg== - dependencies: - isexe "^3.1.1" - why-is-node-running@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.2.2.tgz#4185b2b4699117819e7154594271e7e344c9973e" From fa851ddd270a1b938afffdfd4816f033c27bda1c Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 14:30:32 -0500 Subject: [PATCH 046/240] bump --- packages/profiling-node/package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 1b422a5d1a8c..20c4b0f1d5bd 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -76,14 +76,14 @@ }, "dependencies": { "detect-libc": "^2.0.2", - "node-abi": "^3.52.0" + "node-abi": "^3.52.0", + "@sentry/core": "7.93.0", + "@sentry/hub": "7.93.0", + "@sentry/node": "7.93.0", + "@sentry/types": "7.93.0", + "@sentry/utils": "7.93.0" }, "devDependencies": { - "@sentry/core": "^7.86.0", - "@sentry/hub": "^7.87.0", - "@sentry/node": "^7.87.0", - "@sentry/types": "^7.87.0", - "@sentry/utils": "^7.87.0", "@types/node": "16.18.70", "@types/node-abi": "^3.0.0", "clang-format": "^1.8.0", From bf5fa67008251ff2566bf1cc69e1cbad82bfe5a1 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 14:52:27 -0500 Subject: [PATCH 047/240] test dir --- packages/profiling-node/package.json | 34 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 20c4b0f1d5bd..3365f8575285 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -29,34 +29,34 @@ ], "scripts": { "install": "node scripts/check-build.js", - "clean": "rm -rf ./build && rm -rf ./lib", + "clean": "rm -rf build && rm -rf lib", "lint": "yarn lint:eslint && yarn lint:clang", "lint:eslint": "eslint . --format stylish", - "lint:clang": "node ./clang-format.js", + "lint:clang": "node clang-format.js", "fix": "eslint . --format stylish --fix", "lint:fix": "npm run fix:eslint && npm run fix:clang", - "lint:fix:clang": "node ./clang-format.js --fix", + "lint:fix:clang": "node clang-format.js --fix", "build": "npm run build:bindings && npm run build:lib", - "build:lib": "npm run build:types && node ./esbuild.js", - "build:types": "tsc -p ./tsconfig.types.json", + "build:lib": "npm run build:types && node esbuild.js", + "build:types": "tsc -p tsconfig.types.json", "build:bindings:configure": "node-gyp configure --verbose", "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64 --verbose", "build:bindings": "node-gyp build && node scripts/copy-target.js", "build:bindings:arm64": "node-gyp build --arch=arm64 && node scripts/copy-target.js", "build:dev": "yarn clean && yarn build:bindings:configure && yarn build", - "test:watch": "cross-env SENTRY_PROFILER_BINARY_DIR=./build jest --watch", + "test:watch": "cross-env SENTRY_PROFILER_BINARY_DIR=build jest --watch", "test:bundle": "node test-binaries.esbuild.js", "test:setup:bundle": "(npm link && cd examples && npm install && npm link @sentry/profiling-node)", - "test:esbuild:build": "node ./examples/esbuild.js", - "test:esbuild:run": "BUNDLER=esbuild node ./examples/dist/esbuild/index.js", + "test:esbuild:build": "node examples/esbuild.js", + "test:esbuild:run": "BUNDLER=esbuild node examples/dist/esbuild/index.js", "test:esbuild": "yarn test:esbuild:build && yarn test:esbuild:run", - "test:webpack:build": "webpack --config ./examples/webpack.config.js", - "test:webpack:run": "BUNDLER=webpack node ./examples/dist/webpack/index.js", + "test:webpack:build": "webpack --config examples/webpack.config.js", + "test:webpack:run": "BUNDLER=webpack node examples/dist/webpack/index.js", "test:webpack": "yarn test:webpack:build && yarn test:webpack:run", - "test:rollup:build": "rollup --config ./examples/rollup.config.js", - "test:rollup:run": "BUNDLER=rollup node ./examples/dist/rollup/index.js", + "test:rollup:build": "rollup --config examples/rollup.config.js", + "test:rollup:run": "BUNDLER=rollup node examples/dist/rollup/index.js", "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", - "test": "cross-env SENTRY_PROFILER_BINARY_DIR=./lib jest --config jest.config.js" + "test": "cross-env SENTRY_PROFILER_BINARY_DIR=lib jest --config jest.config.js" }, "keywords": [ "profiling", @@ -76,14 +76,14 @@ }, "dependencies": { "detect-libc": "^2.0.2", - "node-abi": "^3.52.0", + "node-abi": "^3.52.0" + }, + "devDependencies": { "@sentry/core": "7.93.0", "@sentry/hub": "7.93.0", "@sentry/node": "7.93.0", "@sentry/types": "7.93.0", - "@sentry/utils": "7.93.0" - }, - "devDependencies": { + "@sentry/utils": "7.93.0", "@types/node": "16.18.70", "@types/node-abi": "^3.0.0", "clang-format": "^1.8.0", From 9ea9c6613bd643eb6943436c7c1192a4b39d06b7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 14:58:39 -0500 Subject: [PATCH 048/240] run only build:transpile --- .github/workflows/build-profiling.yml | 2 +- packages/profiling-node/package.json | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index 7b7380295356..2b3c1f5d9f7d 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -46,7 +46,7 @@ jobs: - name: build lib and bindings run: | cd packages/profiling-node - yarn build + yarn build:transpile - name: unit test run: | cd packages/profiling-node diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 3365f8575285..10b2da73dc64 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -34,10 +34,11 @@ "lint:eslint": "eslint . --format stylish", "lint:clang": "node clang-format.js", "fix": "eslint . --format stylish --fix", - "lint:fix": "npm run fix:eslint && npm run fix:clang", + "lint:fix": "yarn fix:eslint && yarn fix:clang", "lint:fix:clang": "node clang-format.js --fix", - "build": "npm run build:bindings && npm run build:lib", - "build:lib": "npm run build:types && node esbuild.js", + "build": "yarn build:bindings && yarn build:lib", + "build:lib": "yarn build:types && npm run build:transpile", + "build:transpile": "node esbuild.js", "build:types": "tsc -p tsconfig.types.json", "build:bindings:configure": "node-gyp configure --verbose", "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64 --verbose", From eb0ff8fb98ae514c698474baaa2186e639404bae Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 15:03:17 -0500 Subject: [PATCH 049/240] run only build:transpile --- .github/workflows/build-profiling.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index 2b3c1f5d9f7d..da3e22c76bbc 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -42,7 +42,7 @@ jobs: - name: configure node-gyp run: | cd packages/profiling-node - npm run build:bindings:configure + yarn build:bindings:configure - name: build lib and bindings run: | cd packages/profiling-node From c9599edab2826ee288e77addbf1eae2f53e0dedd Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 15:14:55 -0500 Subject: [PATCH 050/240] test with lerna run --- .github/workflows/build-profiling.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index da3e22c76bbc..33805f3c72c3 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -44,9 +44,7 @@ jobs: cd packages/profiling-node yarn build:bindings:configure - name: build lib and bindings - run: | - cd packages/profiling-node - yarn build:transpile + run: yarn lerna run build:transpile --scope=@sentry/profiling-node --include-dependencies - name: unit test run: | cd packages/profiling-node From 4449034204c2f1163fa8d3a68c877bdd40411a4a Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 15:23:11 -0500 Subject: [PATCH 051/240] test with lerna run --- .github/workflows/build-profiling.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index 33805f3c72c3..c6ffea83a56b 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -35,17 +35,17 @@ jobs: with: node-version: 18 - uses: actions/setup-python@v5 - - name: install dependencies + - name: Install dependencies run: | cd packages/profiling-node yarn install --ignore-scripts --frozen-lockfile - - name: configure node-gyp + - name: Configure node-gyp run: | cd packages/profiling-node yarn build:bindings:configure - - name: build lib and bindings - run: yarn lerna run build:transpile --scope=@sentry/profiling-node --include-dependencies - - name: unit test + - name: Build Dependencies + run: yarn build + - name: Unit Test run: | cd packages/profiling-node yarn test From 36b11635ad082879e4c0f14192325ba5cd1045b7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 15:32:27 -0500 Subject: [PATCH 052/240] casing in job names --- .github/workflows/build.yml | 56 ++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 26 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4381a35c73c1..4d590feda4c9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -441,23 +441,24 @@ jobs: uses: actions/checkout@v4 with: ref: ${{ env.HEAD_COMMIT }} - - uses: actions/setup-node@v4 + - name: Setup Node + uses: actions/setup-node@v4 with: node-version: 18 - uses: actions/setup-python@v5 - - name: install dependencies + - name: Install Dependencies run: | cd packages/profiling-node yarn install --ignore-scripts --frozen-lockfile - - name: configure node-gyp + - name: Configure node-gyp run: | cd packages/profiling-node - npm build:bindings:configure - - name: build lib and bindings + yarn build:bindings:configure + - name: Build Lib and Bindings run: | cd packages/profiling-node yarn build - - name: unit test + - name: Unit Tests run: | cd packages/profiling-node yarn test @@ -1250,7 +1251,7 @@ jobs: node: 20 arch: x64 steps: - - name: setup (alpine) + - name: Setup (alpine) if: contains(matrix.container, 'alpine') run: apk add --no-cache build-base python3 g++ make curl @@ -1259,44 +1260,45 @@ jobs: with: ref: ${{ env.HEAD_COMMIT }} - - uses: actions/setup-node@v4 + - name: Setup Node + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} - - uses: actions/setup-python@v5 - name: Setup python + - name: Setup python + uses: actions/setup-python@v5 - - name: Install dependencies + - name: Install Dependencies run: | cd packages/profiling-node yarn install --ignore-scripts --frozen-lockfile --ignore-engines # configure build test copy x64 - - name: Configure gyp + - name: Configure node-gyp if: matrix.arch != 'arm64' run: | cd packages/profiling-node yarn build:bindings:configure - - name: Build bindings + - name: Build Bindings if: matrix.arch != 'arm64' run: | cd packages/profiling-node yarn build:bindings - - name: setup (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) + - name: Setup (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | sudo apt-get update sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu - - name: "Configure gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + - name: "Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' run: | cd packages/profiling-node yarn build:bindings:configure:arm64 - - name: Setup musl cross compiler + - name: Setup Musl if: contains(matrix.container, 'alpine') run: | cd packages/profiling-node @@ -1304,7 +1306,7 @@ jobs: tar -xzvf aarch64-linux-musl-cross.tgz $(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc --version - - name: "Build bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + - name: "Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" if: matrix.arch == 'arm64' && contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | cd packages/profiling-node @@ -1312,7 +1314,7 @@ jobs: CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ BUILD_ARCH=arm64 yarn build:bindings - - name: "Build bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + - name: "Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | cd packages/profiling-node @@ -1320,19 +1322,19 @@ jobs: CXX=aarch64-linux-gnu-g++ \ BUILD_ARCH=arm64 yarn build:bindings:arm64 - - name: "Configure gyp (arm64, darwin)" + - name: "Configure node-gyp (arm64, darwin)" if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | cd packages/profiling-node yarn build:bindings:configure:arm64 - - name: "Build bindings (arm64, darwin)" + - name: "Build Bindings (arm64, darwin)" if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | cd packages/profiling-node BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 - - name: Archive binary + - name: Archive Binary uses: actions/upload-artifact@v4.0.0 with: name: profiling-node-binaries-${{ github.sha }} @@ -1350,26 +1352,28 @@ jobs: with: ref: ${{ env.HEAD_COMMIT }} - - uses: actions/setup-node@v4 + - name: "Setup Node" + uses: actions/setup-node@v4 with: node-version: 20 - - name: install dependencies + - name: Install Dependencies run: | cd packages/profiling-node yarn install --frozen-lockfile - - name: Build lib + - name: Build TS files run: | cd packages/profiling-node yarn build:lib - - uses: actions/download-artifact@v4.0.0 + - name: Extract Built Binaries + uses: actions/download-artifact@v4.0.0 with: name: profiling-node-binaries-${{ github.sha }} path: packages/profiling-node/lib/ - - name: pack profiling node + - name: Pack Profiling Node run: | cd packages/profiling-node yarn pack From 77231a2c2f5a6e1e38f760fa37f8e23a48e80ab4 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 15:41:57 -0500 Subject: [PATCH 053/240] global test --- .github/workflows/build-profiling.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index c6ffea83a56b..b665b74e6833 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -46,6 +46,4 @@ jobs: - name: Build Dependencies run: yarn build - name: Unit Test - run: | - cd packages/profiling-node - yarn test + run: lerna run test --scope @sentry/profiling-node From 41a91ef551e42ad4875370ea1fd2e71e8d909ead Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 15:42:30 -0500 Subject: [PATCH 054/240] global test --- .github/workflows/build-profiling.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index b665b74e6833..e7d2abed68d1 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -46,4 +46,4 @@ jobs: - name: Build Dependencies run: yarn build - name: Unit Test - run: lerna run test --scope @sentry/profiling-node + run: yarn lerna run test --scope @sentry/profiling-node From bc727c0a1555e7c0dc4fa482147bdcf7f3fb46c0 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 12 Jan 2024 15:48:00 -0500 Subject: [PATCH 055/240] mirror node config --- packages/profiling-node/package.json | 30 ++++++++++++---------- packages/profiling-node/tsconfig.json | 1 + packages/profiling-node/tsconfig.test.json | 2 +- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 10b2da73dc64..1b3cf26b17be 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -14,6 +14,9 @@ "engines": { "node": ">=8.0.0" }, + "publishConfig": { + "access": "public" + }, "files": [ "lib", "bindings", @@ -59,19 +62,6 @@ "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", "test": "cross-env SENTRY_PROFILER_BINARY_DIR=lib jest --config jest.config.js" }, - "keywords": [ - "profiling", - "monitoring", - "apm", - "cpu", - "node", - "performance" - ], - "binary": { - "napi_versions": [ - 7 - ] - }, "peerDependencies": { "@sentry/node": "^7.44.1" }, @@ -92,5 +82,19 @@ "esbuild": "^0.17.18", "node-gyp": "^9.4.1", "typescript": "^4.9.5" + }, + "volta": { + "extends": "../../package.json" + }, + "sideEffects": false, + "nx": { + "targets": { + "build:transpile": { + "dependsOn": [ + "^build:transpile", + "^build:types" + ] + } + } } } diff --git a/packages/profiling-node/tsconfig.json b/packages/profiling-node/tsconfig.json index 127000b03063..edb8751a5f4f 100644 --- a/packages/profiling-node/tsconfig.json +++ b/packages/profiling-node/tsconfig.json @@ -2,6 +2,7 @@ "extends": "../../tsconfig.json", "compilerOptions": { "module": "CommonJS", + "lib": ["es6"], "outDir": "lib", "types": ["node"] }, diff --git a/packages/profiling-node/tsconfig.test.json b/packages/profiling-node/tsconfig.test.json index 87f6afa06b86..c748913ff51e 100644 --- a/packages/profiling-node/tsconfig.test.json +++ b/packages/profiling-node/tsconfig.test.json @@ -5,7 +5,7 @@ "compilerOptions": { // should include all types from `./tsconfig.json` plus types for all test frameworks used - "types": ["node", "jest"] + "types": ["jest", "node"] // other package-specific, test-specific options } From 74cb15ad23df26e422070f2c8e2fdc45a3906f77 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 09:36:11 -0500 Subject: [PATCH 056/240] eslintignore and ignore deprecations --- packages/profiling-node/.eslintignore | 4 ++++ .../profiling-node/test/hubextensions.hub.test.ts | 13 +++++++++++++ packages/profiling-node/test/index.test.ts | 8 ++++++++ 3 files changed, 25 insertions(+) create mode 100644 packages/profiling-node/.eslintignore diff --git a/packages/profiling-node/.eslintignore b/packages/profiling-node/.eslintignore new file mode 100644 index 000000000000..0deb19641d74 --- /dev/null +++ b/packages/profiling-node/.eslintignore @@ -0,0 +1,4 @@ +node_modules/ +build/ +lib/ +coverage/ diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index 8593cab5a3a9..76d5c8a64aec 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -91,6 +91,7 @@ describe('hubextensions', () => { it('pulls environment from sdk init', async () => { const [client, transport] = makeClientWithoutHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); const transportSpy = jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); @@ -110,6 +111,7 @@ describe('hubextensions', () => { const [client, transport] = makeClientWithoutHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); jest.spyOn(CpuProfilerBindings, 'stopProfiling').mockImplementation(() => { @@ -151,6 +153,7 @@ describe('hubextensions', () => { const [client, transport] = makeClientWithoutHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); jest.spyOn(CpuProfilerBindings, 'stopProfiling').mockImplementation(() => { @@ -191,6 +194,7 @@ describe('hubextensions', () => { it('calls profiler when transaction is started/stopped', async () => { const [client, transport] = makeClientWithHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); @@ -213,6 +217,7 @@ describe('hubextensions', () => { it('sends profile in the same envelope as transaction', async () => { const [client, transport] = makeClientWithHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); const transportSpy = jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); @@ -233,6 +238,7 @@ describe('hubextensions', () => { it('does not crash if transaction has no profile context or it is invalid', async () => { const [client] = makeClientWithHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); // @ts-expect-error transaction is partial @@ -257,6 +263,7 @@ describe('hubextensions', () => { it('if transaction was profiled, but profiler returned null', async () => { const [client, transport] = makeClientWithHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); jest.spyOn(CpuProfilerBindings, 'stopProfiling').mockReturnValue(null); @@ -282,6 +289,7 @@ describe('hubextensions', () => { it('emits preprocessEvent for profile', async () => { const [client] = makeClientWithHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); const onPreprocessEvent = jest.fn(); @@ -308,6 +316,7 @@ describe('hubextensions', () => { it('calls profiler when transaction is started/stopped', async () => { const [client] = makeClientWithoutHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); const startProfilingSpy = jest.spyOn(CpuProfilerBindings, 'startProfiling'); @@ -328,6 +337,7 @@ describe('hubextensions', () => { it('sends profile in separate envelope', async () => { const [client, transport] = makeClientWithoutHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); const transportSpy = jest.spyOn(transport, 'send').mockImplementation(() => { @@ -358,6 +368,7 @@ describe('hubextensions', () => { const [client] = makeClientWithoutHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); // eslint-disable-next-line deprecation/deprecation @@ -379,6 +390,7 @@ describe('hubextensions', () => { const [client] = makeClientWithoutHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); // eslint-disable-next-line deprecation/deprecation @@ -421,6 +433,7 @@ describe('hubextensions', () => { const [client, transport] = makeClientWithHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); const transportSpy = jest.spyOn(transport, 'send').mockReturnValue(Promise.resolve()); diff --git a/packages/profiling-node/test/index.test.ts b/packages/profiling-node/test/index.test.ts index 159473fab425..fa6de56905f4 100644 --- a/packages/profiling-node/test/index.test.ts +++ b/packages/profiling-node/test/index.test.ts @@ -81,6 +81,7 @@ describe('Sentry - Profiling', () => { it('profiles a transaction', async () => { const [client, transport] = makeClientWithoutHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); // eslint-disable-next-line deprecation/deprecation @@ -96,6 +97,7 @@ describe('Sentry - Profiling', () => { it('can profile overlapping transactions', async () => { const [client, transport] = makeClientWithoutHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); // eslint-disable-next-line deprecation/deprecation @@ -104,7 +106,9 @@ describe('Sentry - Profiling', () => { const t2 = Sentry.startTransaction({ name: 'inner' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation t2.finish(); + // eslint-disable-next-line deprecation/deprecation t1.finish(); await Sentry.flush(500); @@ -118,6 +122,7 @@ describe('Sentry - Profiling', () => { it('does not discard overlapping transaction with same title', async () => { const [client, transport] = makeClientWithoutHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); // eslint-disable-next-line deprecation/deprecation @@ -125,7 +130,9 @@ describe('Sentry - Profiling', () => { // eslint-disable-next-line deprecation/deprecation const t2 = Sentry.startTransaction({ name: 'same-title' }); await wait(500); + // eslint-disable-next-line deprecation/deprecation t2.finish(); + // eslint-disable-next-line deprecation/deprecation t1.finish(); await Sentry.flush(500); @@ -136,6 +143,7 @@ describe('Sentry - Profiling', () => { it('does not crash if finish is called multiple times', async () => { const [client, transport] = makeClientWithoutHooks(); const hub = Sentry.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); // eslint-disable-next-line deprecation/deprecation From 1ce20bf9e536c77fb6d574ff577579dfc9fa4619 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 09:38:27 -0500 Subject: [PATCH 057/240] biome ignore --- biome.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/biome.json b/biome.json index 3fc89f8a7cd3..c18c0720b6d1 100644 --- a/biome.json +++ b/biome.json @@ -64,7 +64,8 @@ ".next/**", ".svelte-kit/**", ".angular/**", - "angular.json" + "angular.json", + "**/profiling-node/lib/**" ] }, "javascript": { From c031f53562f09ce9d37e5cb69fac533cb58ce120 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 09:46:16 -0500 Subject: [PATCH 058/240] test build --- .github/workflows/build-profiling.yml | 4 +--- .github/workflows/build.yml | 12 +++--------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index e7d2abed68d1..e53b1b8cc9df 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -36,9 +36,7 @@ jobs: node-version: 18 - uses: actions/setup-python@v5 - name: Install dependencies - run: | - cd packages/profiling-node - yarn install --ignore-scripts --frozen-lockfile + run: yarn install --ignore-scripts --frozen-lockfile - name: Configure node-gyp run: | cd packages/profiling-node diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4d590feda4c9..9c843d64021f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -447,21 +447,15 @@ jobs: node-version: 18 - uses: actions/setup-python@v5 - name: Install Dependencies - run: | - cd packages/profiling-node - yarn install --ignore-scripts --frozen-lockfile + run: yarn install --ignore-scripts --frozen-lockfile - name: Configure node-gyp run: | cd packages/profiling-node yarn build:bindings:configure - name: Build Lib and Bindings - run: | - cd packages/profiling-node - yarn build + run: yarn build - name: Unit Tests - run: | - cd packages/profiling-node - yarn test + run: yarn lerna run test --scope @sentry/profiling-node job_bun_unit_tests: name: Bun Unit Tests From 13893596bdb88ac8d72d7c74a162b0d759f24b3a Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 10:01:13 -0500 Subject: [PATCH 059/240] test build --- packages/profiling-node/jest.config.js | 21 +++------------------ packages/profiling-node/tsconfig.test.json | 4 ++-- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/packages/profiling-node/jest.config.js b/packages/profiling-node/jest.config.js index 7622b57f6b04..3d6d19702077 100644 --- a/packages/profiling-node/jest.config.js +++ b/packages/profiling-node/jest.config.js @@ -1,20 +1,5 @@ +const baseConfig = require('../../jest/jest.config.js'); + module.exports = { - verbose: true, - forceExit: true, - collectCoverage: true, - testMatch: ['**/*.test.ts'], - testPathIgnorePatterns: ['benchmarks/'], - resetMocks: true, - restoreMocks: true, - silent: false, - transform: { - // '^.+\\.[tj]sx?$' to process js/ts with `ts-jest` - // '^.+\\.m?[tj]sx?$' to process js/ts/mjs/mts with `ts-jest` - '^.+\\.tsx?$': [ - 'ts-jest', - { - tsconfig: 'tsconfig.test.json', - }, - ], - }, + ...baseConfig }; diff --git a/packages/profiling-node/tsconfig.test.json b/packages/profiling-node/tsconfig.test.json index c748913ff51e..52333183eb70 100644 --- a/packages/profiling-node/tsconfig.test.json +++ b/packages/profiling-node/tsconfig.test.json @@ -1,11 +1,11 @@ { "extends": "./tsconfig.json", - "include": ["test/**/*"], + "include": ["test/**/*", "src/**/*.d.ts"], "compilerOptions": { // should include all types from `./tsconfig.json` plus types for all test frameworks used - "types": ["jest", "node"] + "types": ["node", "jest"] // other package-specific, test-specific options } From f79d000daff556bb0ab7fa123743dcf856efa43e Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 10:08:24 -0500 Subject: [PATCH 060/240] rollback to v3 upload artifacts --- .github/workflows/build.yml | 8 ++++++-- packages/profiling-node/jest.config.js | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9c843d64021f..65136ef35044 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1329,7 +1329,9 @@ jobs: BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 - name: Archive Binary - uses: actions/upload-artifact@v4.0.0 + # @TODO: v4 breaks convenient merging of same name artifacts + # https://github.com/actions/upload-artifact/issues/478 + uses: actions/upload-artifact@v3 with: name: profiling-node-binaries-${{ github.sha }} path: | @@ -1362,7 +1364,9 @@ jobs: yarn build:lib - name: Extract Built Binaries - uses: actions/download-artifact@v4.0.0 + # @TODO: v4 breaks convenient merging of same name artifacts + # https://github.com/actions/upload-artifact/issues/478 + uses: actions/download-artifact@v3 with: name: profiling-node-binaries-${{ github.sha }} path: packages/profiling-node/lib/ diff --git a/packages/profiling-node/jest.config.js b/packages/profiling-node/jest.config.js index 3d6d19702077..b0efb5b8be4c 100644 --- a/packages/profiling-node/jest.config.js +++ b/packages/profiling-node/jest.config.js @@ -1,5 +1,7 @@ const baseConfig = require('../../jest/jest.config.js'); +console.log('baseConfig', baseConfig); module.exports = { - ...baseConfig + ...baseConfig, + testEnvironment: 'node', }; From be8f83fb0834f438db09c5ae99fe8565aa6fd82f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 10:20:56 -0500 Subject: [PATCH 061/240] fix type err --- packages/profiling-node/test/hubextensions.hub.test.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index 76d5c8a64aec..f85c63ecad9a 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -139,7 +139,8 @@ describe('hubextensions', () => { transaction.finish(); await Sentry.flush(1000); - expect(logSpy.mock?.[logSpy.mock.calls.length - 1]?.[0]).toBe( + + expect(logSpy.mock?.calls[logSpy.mock.calls.length - 1]?.[0]).toBe( '[Profiling] Discarding profile because it contains less than 2 samples', ); @@ -211,7 +212,7 @@ describe('hubextensions', () => { await Sentry.flush(1000); expect(startProfilingSpy).toHaveBeenCalledTimes(1); - expect((stopProfilingSpy.mock[stopProfilingSpy.mock.calls.length - 1]?.[0] as string).length).toBe(32); + expect((stopProfilingSpy.mock.calls[stopProfilingSpy.mock.calls.length - 1]?.[0] as string).length).toBe(32); }); it('sends profile in the same envelope as transaction', async () => { @@ -331,7 +332,7 @@ describe('hubextensions', () => { await Sentry.flush(1000); expect(startProfilingSpy).toHaveBeenCalledTimes(1); - expect((stopProfilingSpy.mock[startProfilingSpy.mock.calls.length - 1]?.[0] as string).length).toBe(32); + expect((stopProfilingSpy.mock.calls[startProfilingSpy.mock.calls.length - 1]?.[0] as string).length).toBe(32); }); it('sends profile in separate envelope', async () => { From 71bf9dfa97eb653be2e5bda455b2ae821561041f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 10:28:57 -0500 Subject: [PATCH 062/240] fix os import --- packages/profiling-node/jest.config.js | 1 - packages/profiling-node/src/utils.ts | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/profiling-node/jest.config.js b/packages/profiling-node/jest.config.js index b0efb5b8be4c..89bda645921b 100644 --- a/packages/profiling-node/jest.config.js +++ b/packages/profiling-node/jest.config.js @@ -1,6 +1,5 @@ const baseConfig = require('../../jest/jest.config.js'); -console.log('baseConfig', baseConfig); module.exports = { ...baseConfig, testEnvironment: 'node', diff --git a/packages/profiling-node/src/utils.ts b/packages/profiling-node/src/utils.ts index 703e037147f7..19061de21e26 100644 --- a/packages/profiling-node/src/utils.ts +++ b/packages/profiling-node/src/utils.ts @@ -1,5 +1,5 @@ /* eslint-disable max-lines */ -import os from 'os'; +import * as os from 'node:os'; import type { Context, DsnComponents, @@ -40,7 +40,7 @@ const PLATFORM = os.platform(); const RELEASE = os.release(); const VERSION = os.version(); const TYPE = os.type(); -const MODEL = machine(); +const MODEL = machine; const ARCH = os.arch(); /** From 72b59373cdac35b962190509a55afbd3983d0423 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 10:38:18 -0500 Subject: [PATCH 063/240] fix tests --- packages/profiling-node/src/integration.ts | 2 ++ packages/profiling-node/test/hubextensions.hub.test.ts | 3 ++- packages/profiling-node/test/integration.test.ts | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/profiling-node/src/integration.ts b/packages/profiling-node/src/integration.ts index 0d9466f05f06..033ff29652f0 100644 --- a/packages/profiling-node/src/integration.ts +++ b/packages/profiling-node/src/integration.ts @@ -203,8 +203,10 @@ export class ProfilingIntegration implements Integration { // If either of them is not available, we remove the profile from the transaction event. // and forward it to the next event processor. const hub = this.getCurrentHub(); + // eslint-disable-next-line deprecation/deprecation const client = hub.getClient(); + if (!client) { if (isDebugBuild()) { logger.log( diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index f85c63ecad9a..9d12a2901328 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -78,13 +78,14 @@ const wait = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)); describe('hubextensions', () => { beforeEach(() => { - jest.clearAllMocks(); jest.useRealTimers(); // We will mock the carrier as if it has been initialized by the SDK, else everything is short circuited getMainCarrier().__SENTRY__ = {}; GLOBAL_OBJ._sentryDebugIds = undefined as any; }); afterEach(() => { + jest.clearAllMocks(); + jest.restoreAllMocks(); delete getMainCarrier().__SENTRY__; }); diff --git a/packages/profiling-node/test/integration.test.ts b/packages/profiling-node/test/integration.test.ts index f26718474e6f..edb248e93a56 100644 --- a/packages/profiling-node/test/integration.test.ts +++ b/packages/profiling-node/test/integration.test.ts @@ -39,6 +39,9 @@ function makeProfiledEvent(): ProfiledEvent { } describe('ProfilingIntegration', () => { + afterEach(() => { + jest.clearAllMocks(); + }) it('has a name', () => { expect(new ProfilingIntegration().name).toBe('ProfilingIntegration'); }); From f196bb11214519610a3d6a30a6fbbb274cb601bb Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 10:52:14 -0500 Subject: [PATCH 064/240] run lint fix --- packages/profiling-node/test/integration.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/profiling-node/test/integration.test.ts b/packages/profiling-node/test/integration.test.ts index edb248e93a56..8f336600fa84 100644 --- a/packages/profiling-node/test/integration.test.ts +++ b/packages/profiling-node/test/integration.test.ts @@ -41,7 +41,7 @@ function makeProfiledEvent(): ProfiledEvent { describe('ProfilingIntegration', () => { afterEach(() => { jest.clearAllMocks(); - }) + }); it('has a name', () => { expect(new ProfilingIntegration().name).toBe('ProfilingIntegration'); }); From 45f073424d247fd55488cba020fd34f98659bfc6 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 10:55:01 -0500 Subject: [PATCH 065/240] show whats in the build --- .github/workflows/build-profiling.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index e53b1b8cc9df..0d375d8db443 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -43,5 +43,7 @@ jobs: yarn build:bindings:configure - name: Build Dependencies run: yarn build + - name: List bindings + run: ls -l packages/profiling-node/lib - name: Unit Test run: yarn lerna run test --scope @sentry/profiling-node From cd523d2269aad4c04bee2a07d131ca901fd3fcf6 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 11:36:30 -0500 Subject: [PATCH 066/240] show whats in the build --- .github/workflows/build-profiling.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index 0d375d8db443..399f1130d0c8 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -37,11 +37,9 @@ jobs: - uses: actions/setup-python@v5 - name: Install dependencies run: yarn install --ignore-scripts --frozen-lockfile - - name: Configure node-gyp - run: | - cd packages/profiling-node - yarn build:bindings:configure - - name: Build Dependencies + - name: Build Configure node-gyp + run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node + - name: Build run: yarn build - name: List bindings run: ls -l packages/profiling-node/lib From 1db9cbca0baa6f62eb6f586bdff08b1be184d58c Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 11:45:11 -0500 Subject: [PATCH 067/240] test build --- .github/workflows/build.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 65136ef35044..95ac18340ff3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -448,11 +448,9 @@ jobs: - uses: actions/setup-python@v5 - name: Install Dependencies run: yarn install --ignore-scripts --frozen-lockfile - - name: Configure node-gyp - run: | - cd packages/profiling-node - yarn build:bindings:configure - - name: Build Lib and Bindings + - name: Build Configure node-gyp + run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node + - name: Build run: yarn build - name: Unit Tests run: yarn lerna run test --scope @sentry/profiling-node From 2fa8644c989e00949178639481602607d522ecb2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 11:51:38 -0500 Subject: [PATCH 068/240] run everything through lerna run --- .github/workflows/build.yml | 45 ++++++++++--------------------------- 1 file changed, 12 insertions(+), 33 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 95ac18340ff3..ea0bf6104a51 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1261,22 +1261,16 @@ jobs: uses: actions/setup-python@v5 - name: Install Dependencies - run: | - cd packages/profiling-node - yarn install --ignore-scripts --frozen-lockfile --ignore-engines + run: yarn install --ignore-scripts --frozen-lockfile --ignore-engines # configure build test copy x64 - name: Configure node-gyp if: matrix.arch != 'arm64' - run: | - cd packages/profiling-node - yarn build:bindings:configure + run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node - name: Build Bindings if: matrix.arch != 'arm64' - run: | - cd packages/profiling-node - yarn build:bindings + run: yarn lerna run build:bindings --scope @sentry/profiling-node - name: Setup (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' @@ -1286,45 +1280,36 @@ jobs: - name: "Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' - run: | - cd packages/profiling-node - yarn build:bindings:configure:arm64 + run: yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node - name: Setup Musl if: contains(matrix.container, 'alpine') run: | - cd packages/profiling-node curl -OL https://musl.cc/aarch64-linux-musl-cross.tgz tar -xzvf aarch64-linux-musl-cross.tgz $(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc --version - name: "Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" if: matrix.arch == 'arm64' && contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' - run: | - cd packages/profiling-node + run: CC=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc \ CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ - BUILD_ARCH=arm64 yarn build:bindings + BUILD_ARCH=arm64 yarn lerna run build:bindings --scope @sentry/profiling-node - name: "Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | - cd packages/profiling-node CC=aarch64-linux-gnu-gcc \ CXX=aarch64-linux-gnu-g++ \ - BUILD_ARCH=arm64 yarn build:bindings:arm64 + BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node - name: "Configure node-gyp (arm64, darwin)" if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' - run: | - cd packages/profiling-node - yarn build:bindings:configure:arm64 + run: yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node - name: "Build Bindings (arm64, darwin)" if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' - run: | - cd packages/profiling-node - BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 + run: BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node - name: Archive Binary # @TODO: v4 breaks convenient merging of same name artifacts @@ -1352,14 +1337,10 @@ jobs: node-version: 20 - name: Install Dependencies - run: | - cd packages/profiling-node - yarn install --frozen-lockfile + run: yarn install --frozen-lockfile - name: Build TS files - run: | - cd packages/profiling-node - yarn build:lib + run: yarn lerna run build:lib --scope @sentry/profiling-node - name: Extract Built Binaries # @TODO: v4 breaks convenient merging of same name artifacts @@ -1370,6 +1351,4 @@ jobs: path: packages/profiling-node/lib/ - name: Pack Profiling Node - run: | - cd packages/profiling-node - yarn pack + run: yarn lerna run pack --scope @sentry/profiling-node From bcfdf194f6fc83eb638b62d3319dfbe561649222 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 11:53:04 -0500 Subject: [PATCH 069/240] scope build to profiling and deps --- .github/workflows/build-profiling.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index 399f1130d0c8..bd34ac21e7d7 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -40,7 +40,7 @@ jobs: - name: Build Configure node-gyp run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node - name: Build - run: yarn build + run: yarn lerna run build --scope @sentry/profiling-node --include-dependencies - name: List bindings run: ls -l packages/profiling-node/lib - name: Unit Test From 8dc2b7ec2dea6113864b9b291985804ca81c244d Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 11:57:40 -0500 Subject: [PATCH 070/240] --include dependencies only works for the first level dep --- .github/workflows/build-profiling.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml index bd34ac21e7d7..399f1130d0c8 100644 --- a/.github/workflows/build-profiling.yml +++ b/.github/workflows/build-profiling.yml @@ -40,7 +40,7 @@ jobs: - name: Build Configure node-gyp run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node - name: Build - run: yarn lerna run build --scope @sentry/profiling-node --include-dependencies + run: yarn build - name: List bindings run: ls -l packages/profiling-node/lib - name: Unit Test From c9342a3361ac02afe97ca3027aea56513ee590e1 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 12:10:59 -0500 Subject: [PATCH 071/240] change build --- packages/profiling-node/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 1b3cf26b17be..c51ceda23b0a 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -39,9 +39,9 @@ "fix": "eslint . --format stylish --fix", "lint:fix": "yarn fix:eslint && yarn fix:clang", "lint:fix:clang": "node clang-format.js --fix", - "build": "yarn build:bindings && yarn build:lib", - "build:lib": "yarn build:types && npm run build:transpile", - "build:transpile": "node esbuild.js", + "build": "yarn build:types && yarn build:lib && yarn build:bindings", + "build:lib": "node esbuild.js", + "build:transpile": "yarn build:bindings && yarn build:lib", "build:types": "tsc -p tsconfig.types.json", "build:bindings:configure": "node-gyp configure --verbose", "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64 --verbose", From 0780bbc5502c2c247c3b81f0368cd6262903320e Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 12:19:33 -0500 Subject: [PATCH 072/240] run configure --- packages/profiling-node/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index c51ceda23b0a..bf49f9c8ad6d 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -39,7 +39,7 @@ "fix": "eslint . --format stylish --fix", "lint:fix": "yarn fix:eslint && yarn fix:clang", "lint:fix:clang": "node clang-format.js --fix", - "build": "yarn build:types && yarn build:lib && yarn build:bindings", + "build": "yarn build:types && yarn build:lib && yarn build:bindings:configure && yarn build:bindings", "build:lib": "node esbuild.js", "build:transpile": "yarn build:bindings && yarn build:lib", "build:types": "tsc -p tsconfig.types.json", From e8a377f51c9d0707c067bb430ed460512d4177ea Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 12:28:29 -0500 Subject: [PATCH 073/240] change build:lib --- packages/profiling-node/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index bf49f9c8ad6d..2ea1e5b4852a 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -39,8 +39,8 @@ "fix": "eslint . --format stylish --fix", "lint:fix": "yarn fix:eslint && yarn fix:clang", "lint:fix:clang": "node clang-format.js --fix", - "build": "yarn build:types && yarn build:lib && yarn build:bindings:configure && yarn build:bindings", - "build:lib": "node esbuild.js", + "build": "yarn build:lib && yarn build:bindings:configure && yarn build:bindings", + "build:lib": "yarn build:types && node esbuild.js", "build:transpile": "yarn build:bindings && yarn build:lib", "build:types": "tsc -p tsconfig.types.json", "build:bindings:configure": "node-gyp configure --verbose", From 0c944b6a01302ef6a419994ff64ff05c88fa8f73 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 12:38:47 -0500 Subject: [PATCH 074/240] run test on compile bindings --- .github/workflows/build.yml | 43 +++++++++---------------------------- 1 file changed, 10 insertions(+), 33 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ea0bf6104a51..9715902323fa 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -429,32 +429,6 @@ jobs: - name: Compute test coverage uses: codecov/codecov-action@v4 - job_profiling_node_unit_tests: - name: Profiling Node Unit Tests - needs: [job_get_metadata] - # needs: [job_get_metadata, job_build] - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - # - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - - name: Check out current commit - uses: actions/checkout@v4 - with: - ref: ${{ env.HEAD_COMMIT }} - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: actions/setup-python@v5 - - name: Install Dependencies - run: yarn install --ignore-scripts --frozen-lockfile - - name: Build Configure node-gyp - run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node - - name: Build - run: yarn build - - name: Unit Tests - run: yarn lerna run test --scope @sentry/profiling-node - job_bun_unit_tests: name: Bun Unit Tests needs: [job_get_metadata, job_build] @@ -1150,7 +1124,7 @@ jobs: name: ${{ steps.process.outputs.artifactName }} path: ${{ steps.process.outputs.artifactPath }} job_compile_bindings_profiling_node: - name: Compile Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} + name: Compile & Test Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} needs: [job_get_metadata, job_build] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} @@ -1278,7 +1252,7 @@ jobs: sudo apt-get update sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu - - name: "Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' run: yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node @@ -1289,28 +1263,31 @@ jobs: tar -xzvf aarch64-linux-musl-cross.tgz $(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc --version - - name: "Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: CC=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc \ CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ BUILD_ARCH=arm64 yarn lerna run build:bindings --scope @sentry/profiling-node - - name: "Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }})" + - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | CC=aarch64-linux-gnu-gcc \ CXX=aarch64-linux-gnu-g++ \ BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node - - name: "Configure node-gyp (arm64, darwin)" + - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node - - name: "Build Bindings (arm64, darwin)" + - name: Build Bindings (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node + - name: Test Bindings + run: yarn lerna run test --scope @sentry/profiling-node + - name: Archive Binary # @TODO: v4 breaks convenient merging of same name artifacts # https://github.com/actions/upload-artifact/issues/478 @@ -1331,7 +1308,7 @@ jobs: with: ref: ${{ env.HEAD_COMMIT }} - - name: "Setup Node" + - name: Setup Node uses: actions/setup-node@v4 with: node-version: 20 From 68bf8a48145485bb9fc229f8e4752513982f5d41 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 12:46:44 -0500 Subject: [PATCH 075/240] run configure --- packages/profiling-node/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 2ea1e5b4852a..5d5d996ff88d 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -41,7 +41,7 @@ "lint:fix:clang": "node clang-format.js --fix", "build": "yarn build:lib && yarn build:bindings:configure && yarn build:bindings", "build:lib": "yarn build:types && node esbuild.js", - "build:transpile": "yarn build:bindings && yarn build:lib", + "build:transpile": "yarn build:configure && yarn build:bindings && yarn build:lib", "build:types": "tsc -p tsconfig.types.json", "build:bindings:configure": "node-gyp configure --verbose", "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64 --verbose", From 046f03a0bdadbbaa75a32782a2e5d72cd74cad26 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 12:50:20 -0500 Subject: [PATCH 076/240] remove peer dep --- packages/profiling-node/package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 5d5d996ff88d..c807f68a8ffa 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -62,9 +62,6 @@ "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", "test": "cross-env SENTRY_PROFILER_BINARY_DIR=lib jest --config jest.config.js" }, - "peerDependencies": { - "@sentry/node": "^7.44.1" - }, "dependencies": { "detect-libc": "^2.0.2", "node-abi": "^3.52.0" From 4e58fd7937ca63fb2454dc4c62c624dd346b452e Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 12:56:42 -0500 Subject: [PATCH 077/240] correct cmd --- packages/profiling-node/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index c807f68a8ffa..4beea65aa653 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -41,7 +41,7 @@ "lint:fix:clang": "node clang-format.js --fix", "build": "yarn build:lib && yarn build:bindings:configure && yarn build:bindings", "build:lib": "yarn build:types && node esbuild.js", - "build:transpile": "yarn build:configure && yarn build:bindings && yarn build:lib", + "build:transpile": "yarn build:bindings:configure && yarn build:bindings && yarn build:lib", "build:types": "tsc -p tsconfig.types.json", "build:bindings:configure": "node-gyp configure --verbose", "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64 --verbose", From 1d82a4cd1e16025a9fcb6f7805f8f29a6703a396 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 13:35:45 -0500 Subject: [PATCH 078/240] correct workflow --- .github/workflows/build-profiling.yml | 47 --------------------------- .github/workflows/build.yml | 35 ++++++++++++++++++-- 2 files changed, 33 insertions(+), 49 deletions(-) delete mode 100644 .github/workflows/build-profiling.yml diff --git a/.github/workflows/build-profiling.yml b/.github/workflows/build-profiling.yml deleted file mode 100644 index 399f1130d0c8..000000000000 --- a/.github/workflows/build-profiling.yml +++ /dev/null @@ -1,47 +0,0 @@ - -name: 'Build & Test Profiling Node' -on: - push: - branches: - - develop - - master - - release/** - pull_request: - workflow_dispatch: - inputs: - commit: - description: If the commit you want to test isn't the head of a branch, provide its SHA here - required: false - schedule: - # Run every day at midnight (without cache) - - cron: '0 0 * * *' - -env: - HEAD_COMMIT: ${{ github.event.inputs.commit || github.sha }} - -jobs: - profiling_node_separate: - name: Profiling Node Unit Tests - # needs: [job_get_metadata] - # needs: [job_get_metadata, job_build] - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - name: Check out current commit - uses: actions/checkout@v4 - with: - ref: ${{ env.HEAD_COMMIT }} - - uses: actions/setup-node@v4 - with: - node-version: 18 - - uses: actions/setup-python@v5 - - name: Install dependencies - run: yarn install --ignore-scripts --frozen-lockfile - - name: Build Configure node-gyp - run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node - - name: Build - run: yarn build - - name: List bindings - run: ls -l packages/profiling-node/lib - - name: Unit Test - run: yarn lerna run test --scope @sentry/profiling-node diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9715902323fa..910f2b195a27 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -373,7 +373,7 @@ jobs: job_artifacts: name: Upload Artifacts - needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] + needs: [job_get_metadata, job_build, job_build_profiling_node] runs-on: ubuntu-20.04 # Build artifacts are only needed for releasing workflow. if: needs.job_get_metadata.outputs.is_release == 'true' @@ -521,6 +521,31 @@ jobs: - name: Compute test coverage uses: codecov/codecov-action@v4 + job_profiling_node_unit_tests: + name: Profiling Node Unit Tests + needs: [job_get_metadata, job_build] + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Check out current commit + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + - uses: actions/setup-node@v4 + with: + node-version: 20 + - uses: actions/setup-python@v5 + - name: Install dependencies + run: yarn install --ignore-scripts --frozen-lockfile + - name: Build Configure node-gyp + run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node + - name: Build + run: yarn build + - name: List bindings + run: ls -l packages/profiling-node/lib + - name: Unit Test + run: yarn lerna run test --scope @sentry/profiling-node + job_nextjs_integration_test: name: Nextjs (Node ${{ matrix.node }}) Tests needs: [job_get_metadata, job_build] @@ -1057,11 +1082,13 @@ jobs: needs: [ job_build, + job_build_profiling_node, job_browser_build_tests, job_browser_unit_tests, job_bun_unit_tests, job_deno_unit_tests, job_node_unit_tests, + job_profiling_node_unit_tests, job_nextjs_integration_test, job_node_integration_tests, job_browser_playwright_tests, @@ -1123,6 +1150,7 @@ jobs: with: name: ${{ steps.process.outputs.artifactName }} path: ${{ steps.process.outputs.artifactPath }} + job_compile_bindings_profiling_node: name: Compile & Test Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} needs: [job_get_metadata, job_build] @@ -1237,6 +1265,9 @@ jobs: - name: Install Dependencies run: yarn install --ignore-scripts --frozen-lockfile --ignore-engines + - name: Build dependencies + run: yarn build + # configure build test copy x64 - name: Configure node-gyp if: matrix.arch != 'arm64' @@ -1297,7 +1328,7 @@ jobs: path: | ${{ github.workspace }}/packages/profiling-node/lib/*.node - job_pack_profiling_node: + job_build_profiling_node: name: Extract Binaries and Pack Profiling Node runs-on: ubuntu-latest needs: [job_get_metadata, job_compile_bindings_profiling_node] From 0e670b9ed4e914a1b48a883b042c8718c75b8e04 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 13:57:19 -0500 Subject: [PATCH 079/240] use dep cache --- .github/workflows/build.yml | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 910f2b195a27..9d80f0ed7eb4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -535,8 +535,10 @@ jobs: with: node-version: 20 - uses: actions/setup-python@v5 - - name: Install dependencies - run: yarn install --ignore-scripts --frozen-lockfile + - name: Restore caches + uses: ./.github/actions/restore-cache + env: + DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - name: Build Configure node-gyp run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node - name: Build @@ -1262,11 +1264,13 @@ jobs: - name: Setup python uses: actions/setup-python@v5 - - name: Install Dependencies - run: yarn install --ignore-scripts --frozen-lockfile --ignore-engines + - name: Restore caches + uses: ./.github/actions/restore-cache + env: + DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - name: Build dependencies - run: yarn build + run: yarn build --scope @sentry/profiling-node # configure build test copy x64 - name: Configure node-gyp @@ -1331,7 +1335,7 @@ jobs: job_build_profiling_node: name: Extract Binaries and Pack Profiling Node runs-on: ubuntu-latest - needs: [job_get_metadata, job_compile_bindings_profiling_node] + needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] timeout-minutes: 5 steps: - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) @@ -1344,8 +1348,10 @@ jobs: with: node-version: 20 - - name: Install Dependencies - run: yarn install --frozen-lockfile + - name: Restore caches + uses: ./.github/actions/restore-cache + env: + DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - name: Build TS files run: yarn lerna run build:lib --scope @sentry/profiling-node From e9246add60088137a409585689ae6637f5a905c7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 14:02:32 -0500 Subject: [PATCH 080/240] use dep cache --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9d80f0ed7eb4..ab1043f8cfa3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -542,7 +542,7 @@ jobs: - name: Build Configure node-gyp run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node - name: Build - run: yarn build + run: yarn build --scope @sentry/profiling-node - name: List bindings run: ls -l packages/profiling-node/lib - name: Unit Test From e452825a760260570bcde216d1132f321ce923d6 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 14:03:14 -0500 Subject: [PATCH 081/240] remove build as it should be cached --- .github/workflows/build.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ab1043f8cfa3..7c6b861f15d5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -541,10 +541,6 @@ jobs: DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - name: Build Configure node-gyp run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node - - name: Build - run: yarn build --scope @sentry/profiling-node - - name: List bindings - run: ls -l packages/profiling-node/lib - name: Unit Test run: yarn lerna run test --scope @sentry/profiling-node From 978a63b6ecbc42cfba3f78bfc93230fa14dddf65 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 14:08:53 -0500 Subject: [PATCH 082/240] remove build as it should be cached --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7c6b861f15d5..c7534236387f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -541,6 +541,8 @@ jobs: DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - name: Build Configure node-gyp run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node + - name: Build Bindings for Current Environment + run: yarn build --scope @sentry/profiling-node - name: Unit Test run: yarn lerna run test --scope @sentry/profiling-node From 40f2afb220ab08420ad5f38694e3359b2acf5b6f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 14:22:38 -0500 Subject: [PATCH 083/240] remove cache and build separately --- .github/workflows/build.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c7534236387f..9a67fc7f7873 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1262,13 +1262,13 @@ jobs: - name: Setup python uses: actions/setup-python@v5 - - name: Restore caches - uses: ./.github/actions/restore-cache - env: - DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} + - name: Build dependencies + run: yarn install --frozen-lockfile --ignore-scripts --ignore-engines - name: Build dependencies - run: yarn build --scope @sentry/profiling-node + # We'll ignore @sentry/profiling-node so that we can configure node-gyp + # for the target env that we want to build binaries for. + run: yarn build --ignore @sentry/profiling-node # configure build test copy x64 - name: Configure node-gyp From f26a3a8eed1fa718fa5993e71f3ec900ae4cd81c Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 14:35:44 -0500 Subject: [PATCH 084/240] ignore astro and feedback --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9a67fc7f7873..872f781256d4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1268,7 +1268,7 @@ jobs: - name: Build dependencies # We'll ignore @sentry/profiling-node so that we can configure node-gyp # for the target env that we want to build binaries for. - run: yarn build --ignore @sentry/profiling-node + run: yarn build --ignore @sentry/profiling-node --ignore @sentry/astro --ignore @sentry-internal/feedback # configure build test copy x64 - name: Configure node-gyp From 5a6cbebc0b444b79a0db69b6c0f63bfb5ad7f034 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 14:39:20 -0500 Subject: [PATCH 085/240] skip build of some pkgs --- .github/workflows/build.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 872f781256d4..59f2e491fa24 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1268,7 +1268,10 @@ jobs: - name: Build dependencies # We'll ignore @sentry/profiling-node so that we can configure node-gyp # for the target env that we want to build binaries for. - run: yarn build --ignore @sentry/profiling-node --ignore @sentry/astro --ignore @sentry-internal/feedback + run: + yarn build \ + --ignore @sentry/{angular,angular-ivy,astro,browser,deno,bun,react,remix,replay,svelte,sveltekit,vue,wasm} \ + --ignore @sentry-internal/{feedback} # configure build test copy x64 - name: Configure node-gyp From a2c07d4159c86a5efdc6d2c05ad9b043f29a9bde Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 14:57:02 -0500 Subject: [PATCH 086/240] ingore --- .github/workflows/build.yml | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 59f2e491fa24..f6ccb85f8b44 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1269,9 +1269,25 @@ jobs: # We'll ignore @sentry/profiling-node so that we can configure node-gyp # for the target env that we want to build binaries for. run: - yarn build \ - --ignore @sentry/{angular,angular-ivy,astro,browser,deno,bun,react,remix,replay,svelte,sveltekit,vue,wasm} \ - --ignore @sentry-internal/{feedback} + yarn lerna run build \ + --ignore @sentry/angular \ + --ignore @sentry/angular-ivy \ + --ignore @sentry/astro \ + --ignore @sentry/browser \ + --ignore @sentry/deno \ + --ignore @sentry/bun \ + --ignore @sentry/opentelemetry \ + --ignore @sentry/react \ + --ignore @sentry/remix \ + --ignore @sentry/replay \ + --ignore @sentry/svelte \ + --ignore @sentry/sveltekit \ + --ignore @sentry/vue \ + --ignore @sentry/wasm \ + --ignore @sentry-internal/feedback \ + --ignore @sentry-internal/integration-shims \ + --ignore @sentry-internal/replay-worker \ + --ignore @sentry-internal/node-integration-tests # configure build test copy x64 - name: Configure node-gyp @@ -1282,7 +1298,7 @@ jobs: if: matrix.arch != 'arm64' run: yarn lerna run build:bindings --scope @sentry/profiling-node - - name: Setup (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) + - name: Setup (arm64| ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | sudo apt-get update From 497058210fc2124a878c23dd904081e868d9b473 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 15:12:40 -0500 Subject: [PATCH 087/240] fix typo --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f6ccb85f8b44..12a4d0eb3afb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1268,7 +1268,7 @@ jobs: - name: Build dependencies # We'll ignore @sentry/profiling-node so that we can configure node-gyp # for the target env that we want to build binaries for. - run: + run: | yarn lerna run build \ --ignore @sentry/angular \ --ignore @sentry/angular-ivy \ From 65bdb588af97e649ac04b99bddbd357371c9067f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 15:55:14 -0500 Subject: [PATCH 088/240] build integration shims --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 12a4d0eb3afb..1f11d4d19536 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1277,6 +1277,7 @@ jobs: --ignore @sentry/deno \ --ignore @sentry/bun \ --ignore @sentry/opentelemetry \ + --ignore @sentry/vercel-edge \ --ignore @sentry/react \ --ignore @sentry/remix \ --ignore @sentry/replay \ @@ -1285,7 +1286,6 @@ jobs: --ignore @sentry/vue \ --ignore @sentry/wasm \ --ignore @sentry-internal/feedback \ - --ignore @sentry-internal/integration-shims \ --ignore @sentry-internal/replay-worker \ --ignore @sentry-internal/node-integration-tests From 33db0d7f1ff19e8ac47154bc9f415a94e0ec6e9a Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 16:45:08 -0500 Subject: [PATCH 089/240] build everything --- .github/workflows/build.yml | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1f11d4d19536..89f0b75bfb47 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1268,26 +1268,7 @@ jobs: - name: Build dependencies # We'll ignore @sentry/profiling-node so that we can configure node-gyp # for the target env that we want to build binaries for. - run: | - yarn lerna run build \ - --ignore @sentry/angular \ - --ignore @sentry/angular-ivy \ - --ignore @sentry/astro \ - --ignore @sentry/browser \ - --ignore @sentry/deno \ - --ignore @sentry/bun \ - --ignore @sentry/opentelemetry \ - --ignore @sentry/vercel-edge \ - --ignore @sentry/react \ - --ignore @sentry/remix \ - --ignore @sentry/replay \ - --ignore @sentry/svelte \ - --ignore @sentry/sveltekit \ - --ignore @sentry/vue \ - --ignore @sentry/wasm \ - --ignore @sentry-internal/feedback \ - --ignore @sentry-internal/replay-worker \ - --ignore @sentry-internal/node-integration-tests + run: yarn lerna run build --ignore @sentry/profiling-node # configure build test copy x64 - name: Configure node-gyp From 892a9333eaa427bff952f1264c5691fff5834305 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 16:53:08 -0500 Subject: [PATCH 090/240] build everything --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 89f0b75bfb47..7a1c1c69d63b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -522,7 +522,7 @@ jobs: uses: codecov/codecov-action@v4 job_profiling_node_unit_tests: - name: Profiling Node Unit Tests + name: Node Profiling Unit Tests needs: [job_get_metadata, job_build] runs-on: ubuntu-latest timeout-minutes: 10 @@ -1262,13 +1262,13 @@ jobs: - name: Setup python uses: actions/setup-python@v5 - - name: Build dependencies + - name: Install dependencies run: yarn install --frozen-lockfile --ignore-scripts --ignore-engines - name: Build dependencies # We'll ignore @sentry/profiling-node so that we can configure node-gyp # for the target env that we want to build binaries for. - run: yarn lerna run build --ignore @sentry/profiling-node + run: yarn build --ignore @sentry/profiling-node # configure build test copy x64 - name: Configure node-gyp From 68b1f334092b89d12cae71a4f5009c8c1a49587e Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 16:59:05 -0500 Subject: [PATCH 091/240] build w/o ignore and clean --- .github/workflows/build.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7a1c1c69d63b..38a9e0c69ba5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1268,7 +1268,10 @@ jobs: - name: Build dependencies # We'll ignore @sentry/profiling-node so that we can configure node-gyp # for the target env that we want to build binaries for. - run: yarn build --ignore @sentry/profiling-node + run: yarn build + + - name: Clean profiling-node node-gyp + run: yarn lerna run clean --scope @sentry/profiling-node # configure build test copy x64 - name: Configure node-gyp @@ -1364,3 +1367,9 @@ jobs: - name: Pack Profiling Node run: yarn lerna run pack --scope @sentry/profiling-node + + # job_e2e_profiling_node: + # name: "E2E Profiling Node Tests" + # runs-on: ubuntu-latest + # needs: [job_get_metadata, job_build_profiling_node] + # timeout-minutes: 10 From c0fd52567ba8eeb6f2278d8e93486c9c977b6c9c Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 16:59:54 -0500 Subject: [PATCH 092/240] add comment --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 38a9e0c69ba5..4d298d4cb1db 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1270,6 +1270,8 @@ jobs: # for the target env that we want to build binaries for. run: yarn build + # Run clean after build because yarn build --ignore @sentry/profiling-node + # will fail with a cryptic message on missing types? - name: Clean profiling-node node-gyp run: yarn lerna run clean --scope @sentry/profiling-node From 1344c0334bba5cc2b0932018f1e3b597bee9e26b Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 17:04:26 -0500 Subject: [PATCH 093/240] run compile sooner while I test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4d298d4cb1db..62e7b8919e75 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1153,7 +1153,7 @@ jobs: job_compile_bindings_profiling_node: name: Compile & Test Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} - needs: [job_get_metadata, job_build] + needs: [job_get_metadata] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} timeout-minutes: 10 From 06898f01ce5c1b330c0323f1a60ba3dcad7710e0 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 17:09:32 -0500 Subject: [PATCH 094/240] try ignore again --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 62e7b8919e75..bc238a3a4a8c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1268,7 +1268,7 @@ jobs: - name: Build dependencies # We'll ignore @sentry/profiling-node so that we can configure node-gyp # for the target env that we want to build binaries for. - run: yarn build + run: yarn build --ignore @sentry-internal/feedback --ignore @sentry/astro --ignore @sentry/profiling-node # Run clean after build because yarn build --ignore @sentry/profiling-node # will fail with a cryptic message on missing types? From 4df84cdecf39fa867ddc9cc2e1fcf86280c2faea Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 17:24:16 -0500 Subject: [PATCH 095/240] try ignore again --- .github/workflows/build.yml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bc238a3a4a8c..efcc5d965ec4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -127,6 +127,7 @@ jobs: - *shared - 'packages/node/**' - 'packages/node-experimental/**' + - 'packages/profiling-node/**' - 'dev-packages/node-integration-tests/**' deno: - *shared @@ -1262,19 +1263,6 @@ jobs: - name: Setup python uses: actions/setup-python@v5 - - name: Install dependencies - run: yarn install --frozen-lockfile --ignore-scripts --ignore-engines - - - name: Build dependencies - # We'll ignore @sentry/profiling-node so that we can configure node-gyp - # for the target env that we want to build binaries for. - run: yarn build --ignore @sentry-internal/feedback --ignore @sentry/astro --ignore @sentry/profiling-node - - # Run clean after build because yarn build --ignore @sentry/profiling-node - # will fail with a cryptic message on missing types? - - name: Clean profiling-node node-gyp - run: yarn lerna run clean --scope @sentry/profiling-node - # configure build test copy x64 - name: Configure node-gyp if: matrix.arch != 'arm64' From 027aea34e3b6c4387722303ac9ee766ac5d70ccf Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 17:29:55 -0500 Subject: [PATCH 096/240] try install --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index efcc5d965ec4..64dc7d34815a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1263,6 +1263,9 @@ jobs: - name: Setup python uses: actions/setup-python@v5 + - name: Install dependencies + run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts + # configure build test copy x64 - name: Configure node-gyp if: matrix.arch != 'arm64' From 2e3a7d89ab51da2038b333f2116d918130a0b885 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 17:31:38 -0500 Subject: [PATCH 097/240] test installing git --- .github/workflows/build.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 64dc7d34815a..81e4aba7292f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1266,6 +1266,18 @@ jobs: - name: Install dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts + - name: Install git + run: | + + if [[ "$OSTYPE" == "linux-gnu"* ]]; then + sudo apt-get update + sudo apt-get install -y git + elif [[ "$OSTYPE" == "darwin"* ]]; then + brew install git + elif [[ "$OSTYPE" == "win32" ]]; then + choco install git + fi + # configure build test copy x64 - name: Configure node-gyp if: matrix.arch != 'arm64' From ad178a85317aca1df584596281820c9f55c5e1c5 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 17:36:05 -0500 Subject: [PATCH 098/240] try pulling from build cache --- .github/workflows/build.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 81e4aba7292f..2c47662df76b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1154,7 +1154,7 @@ jobs: job_compile_bindings_profiling_node: name: Compile & Test Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} - needs: [job_get_metadata] + needs: [job_get_metadata, job_install_deps] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} timeout-minutes: 10 @@ -1277,6 +1277,12 @@ jobs: elif [[ "$OSTYPE" == "win32" ]]; then choco install git fi + - name: Restore build cache + uses: actions/cache/restore@v3 + with: + key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} + path: ${{ env.CACHED_BUILD_PATHS }} + # configure build test copy x64 - name: Configure node-gyp From 9442291cdaf2630fb69bac7ec07cf199195e49b8 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 17:44:43 -0500 Subject: [PATCH 099/240] test w/o git again --- .github/workflows/build.yml | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2c47662df76b..a8ffef6c037a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1266,17 +1266,19 @@ jobs: - name: Install dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts - - name: Install git - run: | - - if [[ "$OSTYPE" == "linux-gnu"* ]]; then - sudo apt-get update - sudo apt-get install -y git - elif [[ "$OSTYPE" == "darwin"* ]]; then - brew install git - elif [[ "$OSTYPE" == "win32" ]]; then - choco install git - fi + # - name: Install git cli + # run: | + # if [[ "$OSTYPE" == "linux-gnu"* ]]; then + # sudo apt-get update + # sudo apt-get install -y git + # elif [[ "$OSTYPE" == "darwin"* ]]; then + # brew install git + # elif [[ "$OSTYPE" == "win32" ]]; then + # choco install git + # else + # echo "Unknown OS" + # exit 1 + # fi - name: Restore build cache uses: actions/cache/restore@v3 with: From 80ae528f9ce73aaa929d43400da4c68105452352 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 17:49:50 -0500 Subject: [PATCH 100/240] test dep cache restore --- .github/workflows/build.yml | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a8ffef6c037a..8400ee64a330 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1263,28 +1263,12 @@ jobs: - name: Setup python uses: actions/setup-python@v5 - - name: Install dependencies - run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts - - # - name: Install git cli - # run: | - # if [[ "$OSTYPE" == "linux-gnu"* ]]; then - # sudo apt-get update - # sudo apt-get install -y git - # elif [[ "$OSTYPE" == "darwin"* ]]; then - # brew install git - # elif [[ "$OSTYPE" == "win32" ]]; then - # choco install git - # else - # echo "Unknown OS" - # exit 1 - # fi - - name: Restore build cache + - name: Restore dependency cache uses: actions/cache/restore@v3 with: + path: ${{ env.CACHED_DEPENDENCY_PATHS }} key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} - path: ${{ env.CACHED_BUILD_PATHS }} - + fail-on-cache-miss: true # configure build test copy x64 - name: Configure node-gyp From 90c7a3463978b2636ff9e2d38591c06017936d4c Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 17:51:50 -0500 Subject: [PATCH 101/240] test build cache restore --- .github/workflows/build.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8400ee64a330..796da37f2450 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1154,7 +1154,7 @@ jobs: job_compile_bindings_profiling_node: name: Compile & Test Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} - needs: [job_get_metadata, job_install_deps] + needs: [job_get_metadata, job_build] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} timeout-minutes: 10 @@ -1270,6 +1270,13 @@ jobs: key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} fail-on-cache-miss: true + - name: Restore build cache + uses: actions/cache/restore@v3 + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ needs.job_install_deps.outputs.build_cache_key }} + fail-on-cache-miss: true + # configure build test copy x64 - name: Configure node-gyp if: matrix.arch != 'arm64' From 7e448ceeecdc1b077358623e23a24e8507c57f0b Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 18:03:36 -0500 Subject: [PATCH 102/240] test build cache restore --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 796da37f2450..58383e9721b6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1154,7 +1154,7 @@ jobs: job_compile_bindings_profiling_node: name: Compile & Test Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} - needs: [job_get_metadata, job_build] + needs: [job_get_metadata, job_install_deps, job_build] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} timeout-minutes: 10 @@ -1274,7 +1274,7 @@ jobs: uses: actions/cache/restore@v3 with: path: ${{ env.CACHED_BUILD_PATHS }} - key: ${{ needs.job_install_deps.outputs.build_cache_key }} + key: ${{ env.BUILD_CACHE_KEY }} fail-on-cache-miss: true # configure build test copy x64 From aa9527dfa29c156de4eaa9dd7cdf845eeb4dad59 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 18:08:10 -0500 Subject: [PATCH 103/240] just install deps --- .github/workflows/build.yml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 58383e9721b6..97ffe6f312b2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1263,12 +1263,15 @@ jobs: - name: Setup python uses: actions/setup-python@v5 - - name: Restore dependency cache - uses: actions/cache/restore@v3 - with: - path: ${{ env.CACHED_DEPENDENCY_PATHS }} - key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} - fail-on-cache-miss: true + - name: Install Dependencies + run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts + + # - name: Restore dependency cache + # uses: actions/cache/restore@v3 + # with: + # path: ${{ env.CACHED_DEPENDENCY_PATHS }} + # key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} + # fail-on-cache-miss: true - name: Restore build cache uses: actions/cache/restore@v3 From b4e276389fd0c7f64c82eb54f6567f4970d1450e Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 18:11:52 -0500 Subject: [PATCH 104/240] test w/o lerna --- .github/workflows/build.yml | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 97ffe6f312b2..dc5389fc468e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1283,11 +1283,11 @@ jobs: # configure build test copy x64 - name: Configure node-gyp if: matrix.arch != 'arm64' - run: yarn lerna run build:bindings:configure --scope @sentry/profiling-node + run: cd packages/profiling-node && yarn build:bindings:configure --scope @sentry/profiling-node - name: Build Bindings if: matrix.arch != 'arm64' - run: yarn lerna run build:bindings --scope @sentry/profiling-node + run: cd packages/profiling-node && yarn build:bindings --scope @sentry/profiling-node - name: Setup (arm64| ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' @@ -1297,7 +1297,7 @@ jobs: - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' - run: yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node + run: cd packages/profiling-node && yarn build:bindings:configure:arm64 --scope @sentry/profiling-node - name: Setup Musl if: contains(matrix.container, 'alpine') @@ -1309,27 +1309,29 @@ jobs: - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: + cd packages/profiling-node && CC=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc \ CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ - BUILD_ARCH=arm64 yarn lerna run build:bindings --scope @sentry/profiling-node + BUILD_ARCH=arm64 yarn build:bindings --scope @sentry/profiling-node - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | + cd packages/profiling-node && CC=aarch64-linux-gnu-gcc \ CXX=aarch64-linux-gnu-g++ \ - BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node + BUILD_ARCH=arm64 yarn build:bindings:arm64 --scope @sentry/profiling-node - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' - run: yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node + run: cd packages/profiling-node && yarn build:bindings:configure:arm64 --scope @sentry/profiling-node - name: Build Bindings (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' - run: BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node + run: cd packages/profiling-node && BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 --scope @sentry/profiling-node - name: Test Bindings - run: yarn lerna run test --scope @sentry/profiling-node + run: cd packages/profiling-node && yarn test --scope @sentry/profiling-node - name: Archive Binary # @TODO: v4 breaks convenient merging of same name artifacts From 0757a4a3ae2b79b2cc6ed233e5c68bce0682ba2a Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 18:20:04 -0500 Subject: [PATCH 105/240] sep cmd --- .github/workflows/build.yml | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dc5389fc468e..ef7dcfa82215 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1283,11 +1283,15 @@ jobs: # configure build test copy x64 - name: Configure node-gyp if: matrix.arch != 'arm64' - run: cd packages/profiling-node && yarn build:bindings:configure --scope @sentry/profiling-node + run: | + cd packages/profiling-node + yarn build:bindings:configure --scope @sentry/profiling-node - name: Build Bindings if: matrix.arch != 'arm64' - run: cd packages/profiling-node && yarn build:bindings --scope @sentry/profiling-node + run: | + cd packages/profiling-node + yarn build:bindings --scope @sentry/profiling-node - name: Setup (arm64| ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' @@ -1297,7 +1301,9 @@ jobs: - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' - run: cd packages/profiling-node && yarn build:bindings:configure:arm64 --scope @sentry/profiling-node + run: | + cd packages/profiling-node + yarn build:bindings:configure:arm64 --scope @sentry/profiling-node - name: Setup Musl if: contains(matrix.container, 'alpine') @@ -1308,8 +1314,8 @@ jobs: - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' - run: - cd packages/profiling-node && + run: | + cd packages/profiling-node CC=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc \ CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ BUILD_ARCH=arm64 yarn build:bindings --scope @sentry/profiling-node @@ -1317,21 +1323,27 @@ jobs: - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | - cd packages/profiling-node && + cd packages/profiling-node CC=aarch64-linux-gnu-gcc \ CXX=aarch64-linux-gnu-g++ \ BUILD_ARCH=arm64 yarn build:bindings:arm64 --scope @sentry/profiling-node - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' - run: cd packages/profiling-node && yarn build:bindings:configure:arm64 --scope @sentry/profiling-node + run: | + cd packages/profiling-node + yarn build:bindings:configure:arm64 --scope @sentry/profiling-node - name: Build Bindings (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' - run: cd packages/profiling-node && BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 --scope @sentry/profiling-node + run: | + cd packages/profiling-node + BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 --scope @sentry/profiling-node - name: Test Bindings - run: cd packages/profiling-node && yarn test --scope @sentry/profiling-node + run: | + cd packages/profiling-node + yarn test --scope @sentry/profiling-node - name: Archive Binary # @TODO: v4 breaks convenient merging of same name artifacts From 1af9dd8d801153211244a226594073ba59d209b7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 18:57:09 -0500 Subject: [PATCH 106/240] remove scope --- packages/profiling-node/binding.gyp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/profiling-node/binding.gyp b/packages/profiling-node/binding.gyp index aeabfaf8914b..fd2322db4e94 100644 --- a/packages/profiling-node/binding.gyp +++ b/packages/profiling-node/binding.gyp @@ -7,4 +7,4 @@ "cflags": ["-Wno-cast-function-type"] }, ] -} \ No newline at end of file +} From 6f810696d0b0b647a40a607c63578fcd44d0d3bc Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 18:57:21 -0500 Subject: [PATCH 107/240] remove scope --- .github/workflows/build.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ef7dcfa82215..d9a20209d746 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1285,13 +1285,13 @@ jobs: if: matrix.arch != 'arm64' run: | cd packages/profiling-node - yarn build:bindings:configure --scope @sentry/profiling-node + yarn build:bindings:configure - name: Build Bindings if: matrix.arch != 'arm64' run: | cd packages/profiling-node - yarn build:bindings --scope @sentry/profiling-node + yarn build:bindings - name: Setup (arm64| ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' @@ -1303,7 +1303,7 @@ jobs: if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' run: | cd packages/profiling-node - yarn build:bindings:configure:arm64 --scope @sentry/profiling-node + yarn build:bindings:configure:arm64 - name: Setup Musl if: contains(matrix.container, 'alpine') @@ -1318,7 +1318,7 @@ jobs: cd packages/profiling-node CC=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc \ CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ - BUILD_ARCH=arm64 yarn build:bindings --scope @sentry/profiling-node + BUILD_ARCH=arm64 yarn build:bindings - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' @@ -1326,24 +1326,24 @@ jobs: cd packages/profiling-node CC=aarch64-linux-gnu-gcc \ CXX=aarch64-linux-gnu-g++ \ - BUILD_ARCH=arm64 yarn build:bindings:arm64 --scope @sentry/profiling-node + BUILD_ARCH=arm64 yarn build:bindings:arm64 - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | cd packages/profiling-node - yarn build:bindings:configure:arm64 --scope @sentry/profiling-node + yarn build:bindings:configure:arm64 - name: Build Bindings (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | cd packages/profiling-node - BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 --scope @sentry/profiling-node + BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 - name: Test Bindings run: | cd packages/profiling-node - yarn test --scope @sentry/profiling-node + yarn test - name: Archive Binary # @TODO: v4 breaks convenient merging of same name artifacts From 9be298fd4ea037271f2518c64a3a3da180517f13 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 19:06:29 -0500 Subject: [PATCH 108/240] run test through lerna --- .github/workflows/build.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d9a20209d746..39de24179f34 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1340,10 +1340,8 @@ jobs: cd packages/profiling-node BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 - - name: Test Bindings - run: | - cd packages/profiling-node - yarn test + - name: Unit Test + run: yarn lerna run test --scope @sentry/profiling-node - name: Archive Binary # @TODO: v4 breaks convenient merging of same name artifacts From 64a016b963e77db038aedc786c4338324172347f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 19:36:50 -0500 Subject: [PATCH 109/240] fix import --- .github/workflows/build.yml | 16 +++------------- packages/profiling-node/package.json | 5 ++++- packages/profiling-node/rollup.npm.config.mjs | 13 +++++++++++++ packages/profiling-node/src/utils.ts | 2 +- 4 files changed, 21 insertions(+), 15 deletions(-) create mode 100644 packages/profiling-node/rollup.npm.config.mjs diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 39de24179f34..f9ba882c534b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1266,19 +1266,8 @@ jobs: - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts - # - name: Restore dependency cache - # uses: actions/cache/restore@v3 - # with: - # path: ${{ env.CACHED_DEPENDENCY_PATHS }} - # key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} - # fail-on-cache-miss: true - - - name: Restore build cache - uses: actions/cache/restore@v3 - with: - path: ${{ env.CACHED_BUILD_PATHS }} - key: ${{ env.BUILD_CACHE_KEY }} - fail-on-cache-miss: true + - name: Build + run: yarn build --ignore @sentry/profiling-npde # configure build test copy x64 - name: Configure node-gyp @@ -1341,6 +1330,7 @@ jobs: BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 - name: Unit Test + if: matrix.arch != 'arm64' run: yarn lerna run test --scope @sentry/profiling-node - name: Archive Binary diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 4beea65aa653..33d906502d1a 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -40,14 +40,17 @@ "lint:fix": "yarn fix:eslint && yarn fix:clang", "lint:fix:clang": "node clang-format.js --fix", "build": "yarn build:lib && yarn build:bindings:configure && yarn build:bindings", - "build:lib": "yarn build:types && node esbuild.js", + "build:lib": "yarn build:types && rollup -c rollup.npm.config.mjs", "build:transpile": "yarn build:bindings:configure && yarn build:bindings && yarn build:lib", "build:types": "tsc -p tsconfig.types.json", + "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:bindings:configure": "node-gyp configure --verbose", "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64 --verbose", "build:bindings": "node-gyp build && node scripts/copy-target.js", "build:bindings:arm64": "node-gyp build --arch=arm64 && node scripts/copy-target.js", "build:dev": "yarn clean && yarn build:bindings:configure && yarn build", + "build:transpile:watch": "rollup -c rollup.npm.config.mjs --watch", + "build:watch": "run-p build:transpile:watch build:types:watch", "test:watch": "cross-env SENTRY_PROFILER_BINARY_DIR=build jest --watch", "test:bundle": "node test-binaries.esbuild.js", "test:setup:bundle": "(npm link && cd examples && npm install && npm link @sentry/profiling-node)", diff --git a/packages/profiling-node/rollup.npm.config.mjs b/packages/profiling-node/rollup.npm.config.mjs new file mode 100644 index 000000000000..16ddc2e32654 --- /dev/null +++ b/packages/profiling-node/rollup.npm.config.mjs @@ -0,0 +1,13 @@ +import { makeBaseNPMConfig, makeNPMConfigVariants } from '@sentry-internal/rollup-utils'; + +const configs = makeNPMConfigVariants(makeBaseNPMConfig()); +const cjsConfig = configs.find(config => config.format === 'cjs'); + +if(!cjsConfig) { + throw new Error('CJS config is required for profiling-node.'); +} + +export default { + ...cjsConfig, +} + diff --git a/packages/profiling-node/src/utils.ts b/packages/profiling-node/src/utils.ts index 19061de21e26..4b5ce704123e 100644 --- a/packages/profiling-node/src/utils.ts +++ b/packages/profiling-node/src/utils.ts @@ -1,5 +1,5 @@ /* eslint-disable max-lines */ -import * as os from 'node:os'; +import * as os from 'os'; import type { Context, DsnComponents, From da2bfd2531fec7054af495743946d9ef299dad5b Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 19:43:16 -0500 Subject: [PATCH 110/240] fix import --- dev-packages/rollup-utils/plugins/bundlePlugins.mjs | 5 ++++- packages/profiling-node/rollup.npm.config.mjs | 5 ++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dev-packages/rollup-utils/plugins/bundlePlugins.mjs b/dev-packages/rollup-utils/plugins/bundlePlugins.mjs index b0a1c806ef98..beab8ccdc999 100644 --- a/dev-packages/rollup-utils/plugins/bundlePlugins.mjs +++ b/dev-packages/rollup-utils/plugins/bundlePlugins.mjs @@ -12,6 +12,7 @@ import * as childProcess from 'child_process'; import * as fs from 'fs'; import * as path from 'path'; import { fileURLToPath } from 'url'; +import * as process from 'process'; import commonjs from '@rollup/plugin-commonjs'; import { nodeResolve } from '@rollup/plugin-node-resolve'; @@ -28,7 +29,9 @@ import { terser } from 'rollup-plugin-terser'; * @returns An instance of the `rollup-plugin-license` plugin */ export function makeLicensePlugin(title) { - const commitHash = childProcess.execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim(); + const commitHash = + process.env.LICENSE_COMMIT_HASH || + childProcess.execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim(); const plugin = license({ banner: { diff --git a/packages/profiling-node/rollup.npm.config.mjs b/packages/profiling-node/rollup.npm.config.mjs index 16ddc2e32654..f0fc4a603a04 100644 --- a/packages/profiling-node/rollup.npm.config.mjs +++ b/packages/profiling-node/rollup.npm.config.mjs @@ -3,11 +3,10 @@ import { makeBaseNPMConfig, makeNPMConfigVariants } from '@sentry-internal/rollu const configs = makeNPMConfigVariants(makeBaseNPMConfig()); const cjsConfig = configs.find(config => config.format === 'cjs'); -if(!cjsConfig) { +if (!cjsConfig) { throw new Error('CJS config is required for profiling-node.'); } export default { ...cjsConfig, -} - +}; From 9fb77d426771ff6562f9aa02ee7955c175001fd3 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 19:46:36 -0500 Subject: [PATCH 111/240] bypass license --- .github/workflows/build.yml | 2 +- packages/profiling-node/rollup.npm.config.mjs | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f9ba882c534b..34237bd56952 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1267,7 +1267,7 @@ jobs: run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts - name: Build - run: yarn build --ignore @sentry/profiling-npde + run: LICENSE_COMMIT_HASH=none yarn build --ignore @sentry/profiling-node # configure build test copy x64 - name: Configure node-gyp diff --git a/packages/profiling-node/rollup.npm.config.mjs b/packages/profiling-node/rollup.npm.config.mjs index f0fc4a603a04..f3bfd2950e96 100644 --- a/packages/profiling-node/rollup.npm.config.mjs +++ b/packages/profiling-node/rollup.npm.config.mjs @@ -7,6 +7,4 @@ if (!cjsConfig) { throw new Error('CJS config is required for profiling-node.'); } -export default { - ...cjsConfig, -}; +export default cjsConfig; From b5bab64265c69915e333784e0ccd2c6a064b173a Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 19:54:40 -0500 Subject: [PATCH 112/240] fix config find --- packages/profiling-node/rollup.npm.config.mjs | 4 ++-- packages/profiling-node/src/utils.ts | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/profiling-node/rollup.npm.config.mjs b/packages/profiling-node/rollup.npm.config.mjs index f3bfd2950e96..e507bf8d5719 100644 --- a/packages/profiling-node/rollup.npm.config.mjs +++ b/packages/profiling-node/rollup.npm.config.mjs @@ -1,10 +1,10 @@ import { makeBaseNPMConfig, makeNPMConfigVariants } from '@sentry-internal/rollup-utils'; const configs = makeNPMConfigVariants(makeBaseNPMConfig()); -const cjsConfig = configs.find(config => config.format === 'cjs'); +const cjsConfig = configs.find(config => config.output.format === 'cjs'); if (!cjsConfig) { throw new Error('CJS config is required for profiling-node.'); } -export default cjsConfig; +export default {...cjsConfig, target: 'node'}; diff --git a/packages/profiling-node/src/utils.ts b/packages/profiling-node/src/utils.ts index 4b5ce704123e..478792f2562d 100644 --- a/packages/profiling-node/src/utils.ts +++ b/packages/profiling-node/src/utils.ts @@ -38,6 +38,7 @@ const machine = typeof os.machine === 'function' ? os.machine() : os.arch(); // Machine properties (eval only once) const PLATFORM = os.platform(); const RELEASE = os.release(); +// @ts-expect-error version was const VERSION = os.version(); const TYPE = os.type(); const MODEL = machine; From 538d89ddef373081201370afbad2e7f8258f113a Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 19:58:59 -0500 Subject: [PATCH 113/240] just install git everywhere --- .github/workflows/build.yml | 14 +++++++++++++- .../rollup-utils/plugins/bundlePlugins.mjs | 4 +--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 34237bd56952..a49c8bdc66ac 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1266,8 +1266,20 @@ jobs: - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts + - name: Install git (linux) + if: contains(matrix.os, 'ubuntu') + run: sudo apt-get install -y git + + - name: Install git (macos) + if: contains(matrix.os, 'macos') + run: brew install git + + - name: Install git (windows) + if: contains(matrix.os, 'windows') + run: choco install git + - name: Build - run: LICENSE_COMMIT_HASH=none yarn build --ignore @sentry/profiling-node + run: arn build --ignore @sentry/profiling-npde # configure build test copy x64 - name: Configure node-gyp diff --git a/dev-packages/rollup-utils/plugins/bundlePlugins.mjs b/dev-packages/rollup-utils/plugins/bundlePlugins.mjs index beab8ccdc999..133ff16a7fe6 100644 --- a/dev-packages/rollup-utils/plugins/bundlePlugins.mjs +++ b/dev-packages/rollup-utils/plugins/bundlePlugins.mjs @@ -29,9 +29,7 @@ import { terser } from 'rollup-plugin-terser'; * @returns An instance of the `rollup-plugin-license` plugin */ export function makeLicensePlugin(title) { - const commitHash = - process.env.LICENSE_COMMIT_HASH || - childProcess.execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim(); + const commitHash = childProcess.execSync('git rev-parse --short HEAD', { encoding: 'utf-8' }).trim(); const plugin = license({ banner: { From 97564550f6f6c6750294bc3ebb88c84ce47bfbae Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 20:17:24 -0500 Subject: [PATCH 114/240] test --- packages/profiling-node/src/utils.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/profiling-node/src/utils.ts b/packages/profiling-node/src/utils.ts index 478792f2562d..f4320c80f1d9 100644 --- a/packages/profiling-node/src/utils.ts +++ b/packages/profiling-node/src/utils.ts @@ -1,5 +1,5 @@ /* eslint-disable max-lines */ -import * as os from 'os'; +import os from 'os'; import type { Context, DsnComponents, @@ -38,7 +38,6 @@ const machine = typeof os.machine === 'function' ? os.machine() : os.arch(); // Machine properties (eval only once) const PLATFORM = os.platform(); const RELEASE = os.release(); -// @ts-expect-error version was const VERSION = os.version(); const TYPE = os.type(); const MODEL = machine; From 88cdefd1c9b67c82a9616c88f0d1bc008f5f66b5 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 20:24:39 -0500 Subject: [PATCH 115/240] test --- .../rollup-utils/plugins/bundlePlugins.mjs | 1 - packages/profiling-node/README.md | 141 +++++---- packages/profiling-node/esbuild.js | 23 -- packages/profiling-node/package.json | 2 +- yarn.lock | 282 +++++++++--------- 5 files changed, 232 insertions(+), 217 deletions(-) delete mode 100644 packages/profiling-node/esbuild.js diff --git a/dev-packages/rollup-utils/plugins/bundlePlugins.mjs b/dev-packages/rollup-utils/plugins/bundlePlugins.mjs index 133ff16a7fe6..b0a1c806ef98 100644 --- a/dev-packages/rollup-utils/plugins/bundlePlugins.mjs +++ b/dev-packages/rollup-utils/plugins/bundlePlugins.mjs @@ -12,7 +12,6 @@ import * as childProcess from 'child_process'; import * as fs from 'fs'; import * as path from 'path'; import { fileURLToPath } from 'url'; -import * as process from 'process'; import commonjs from '@rollup/plugin-commonjs'; import { nodeResolve } from '@rollup/plugin-node-resolve'; diff --git a/packages/profiling-node/README.md b/packages/profiling-node/README.md index 7490109aeb28..e53c5d821925 100644 --- a/packages/profiling-node/README.md +++ b/packages/profiling-node/README.md @@ -12,7 +12,8 @@ ## Installation -Profiling works as an extension of tracing so you will need both @sentry/node and @sentry/profiling-node installed. The minimum required major version of @sentry/node that supports profiling is 7.x. +Profiling works as an extension of tracing so you will need both @sentry/node and @sentry/profiling-node installed. The +minimum required major version of @sentry/node that supports profiling is 7.x. ```bash # Using yarn @@ -25,11 +26,11 @@ npm install --save @sentry/node @sentry/profiling-node ## Usage ```javascript -import * as Sentry from "@sentry/node"; -import { ProfilingIntegration } from "@sentry/profiling-node"; +import * as Sentry from '@sentry/node'; +import { ProfilingIntegration } from '@sentry/profiling-node'; Sentry.init({ - dsn: "https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302", + dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', debug: true, tracesSampleRate: 1, profilesSampleRate: 1, // Set profiling sampling rate. @@ -37,10 +38,11 @@ Sentry.init({ }); ``` -Sentry SDK will now automatically profile all transactions, even the ones which may be started as a result of using an automatic instrumentation integration. +Sentry SDK will now automatically profile all transactions, even the ones which may be started as a result of using an +automatic instrumentation integration. ```javascript -const transaction = Sentry.startTransaction({ name: "some workflow" }); +const transaction = Sentry.startTransaction({ name: 'some workflow' }); // The code between startTransaction and transaction.finish will be profiled @@ -49,10 +51,12 @@ transaction.finish(); ### Building the package from source -Profiling uses native modules to interop with the v8 javascript engine which means that you may be required to build it from source. The libraries required to successfully build the package from source are often the same libraries that are already required to build any other package which uses native modules and if your codebase uses any of those modules, there is a fairly good chance this will work out of the box. The required packages are python, make and g++. +Profiling uses native modules to interop with the v8 javascript engine which means that you may be required to build it +from source. The libraries required to successfully build the package from source are often the same libraries that are +already required to build any other package which uses native modules and if your codebase uses any of those modules, +there is a fairly good chance this will work out of the box. The required packages are python, make and g++. -**Windows:** -If you are building on windows, you may need to install windows-build-tools +**Windows:** If you are building on windows, you may need to install windows-build-tools ```bash @@ -75,22 +79,30 @@ For a more detailed list, see our build.yml workflow. ### Bundling -If you are looking to squeeze some extra performance or improve cold start in your application (especially true for serverless environments where modules are often evaluates on a per request basis), then we recommend you look into bundling your code. Modern JS engines are much faster at parsing and compiling JS than following long module resolution chains and reading file contents from disk. Because @sentry/profiling-node is a package that uses native node modules, bundling it is slightly different than just bundling javascript. In other words, the bundler needs to recognize that a .node file is node native binding and move it to the correct location so that it can later be used. Failing to do so will result in a MODULE_NOT_FOUND error. +If you are looking to squeeze some extra performance or improve cold start in your application (especially true for +serverless environments where modules are often evaluates on a per request basis), then we recommend you look into +bundling your code. Modern JS engines are much faster at parsing and compiling JS than following long module resolution +chains and reading file contents from disk. Because @sentry/profiling-node is a package that uses native node modules, +bundling it is slightly different than just bundling javascript. In other words, the bundler needs to recognize that a +.node file is node native binding and move it to the correct location so that it can later be used. Failing to do so +will result in a MODULE_NOT_FOUND error. -The easiest way to make bundling work with @sentry/profiling-node and other modules which use native nodejs bindings is to mark the package as external - this will prevent the code from the package from being bundled, but it means that you will now need to rely on the package to be installed in your production environment. +The easiest way to make bundling work with @sentry/profiling-node and other modules which use native nodejs bindings is +to mark the package as external - this will prevent the code from the package from being bundled, but it means that you +will now need to rely on the package to be installed in your production environment. To mark the package as external, use the following configuration: [Next.js 13+](https://nextjs.org/docs/app/api-reference/next-config-js/serverComponentsExternalPackages) ```js -const { withSentryConfig } = require("@sentry/nextjs"); +const { withSentryConfig } = require('@sentry/nextjs'); /** @type {import('next').NextConfig} */ const nextConfig = { experimental: { // Add the "@sentry/profiling-node" to serverComponentsExternalPackages. - serverComponentsExternalPackages: ["@sentry/profiling-node"], + serverComponentsExternalPackages: ['@sentry/profiling-node'], }, }; @@ -150,15 +162,20 @@ custom: ```js ssr: { - external: ["@sentry/profiling-node"]; + external: ['@sentry/profiling-node']; } ``` -Marking the package as external is the simplest and most future proof way of ensuring it will work, however if you want to bundle it, it is possible to do so as well. Bundling has the benefit of improving your script startup time as all of the code is (usually) inside a single executable .js file, which saves time on module resolution. +Marking the package as external is the simplest and most future proof way of ensuring it will work, however if you want +to bundle it, it is possible to do so as well. Bundling has the benefit of improving your script startup time as all of +the code is (usually) inside a single executable .js file, which saves time on module resolution. -In general, when attempting to bundle .node native file extensions, you will need to tell your bundler how to treat these, as by default it does not know how to handle them. The required approach varies between build tools and you will need to find which one will work for you. +In general, when attempting to bundle .node native file extensions, you will need to tell your bundler how to treat +these, as by default it does not know how to handle them. The required approach varies between build tools and you will +need to find which one will work for you. -The result of bundling .node files correctly is that they are placed into your bundle output directory with their require paths updated to reflect their final location. +The result of bundling .node files correctly is that they are placed into your bundle output directory with their +require paths updated to reflect their final location. Example of bundling @sentry/profiling-node with esbuild and .copy loader @@ -171,12 +188,12 @@ Example of bundling @sentry/profiling-node with esbuild and .copy loader ```js // esbuild.serverless.js -const { sentryEsbuildPlugin } = require("@sentry/esbuild-plugin"); +const { sentryEsbuildPlugin } = require('@sentry/esbuild-plugin'); -require("esbuild").build({ - entryPoints: ["./index.js"], - outfile: "./dist", - platform: "node", +require('esbuild').build({ + entryPoints: ['./index.js'], + outfile: './dist', + platform: 'node', bundle: true, minify: true, sourcemap: true, @@ -184,59 +201,66 @@ require("esbuild").build({ // external: ["@sentry/profiling-node"], loader: { // ensures .node binaries are copied to ./dist - ".node": "copy", + '.node': 'copy', }, plugins: [ // See https://docs.sentry.io/platforms/javascript/sourcemaps/uploading/esbuild/ sentryEsbuildPlugin({ - project: "", - org: "", - authToken: "", - release: "", + project: '', + org: '', + authToken: '', + release: '', sourcemaps: { // Specify the directory containing build artifacts - assets: "./dist/**", + assets: './dist/**', }, }), ], }); ``` -Once you run `node esbuild.serverless.js` esbuild wil bundle and output the files to ./dist folder, but note that all of the binaries will be copied. This is wasteful as you will likely only need one of these libraries to be available during runtime. +Once you run `node esbuild.serverless.js` esbuild wil bundle and output the files to ./dist folder, but note that all of +the binaries will be copied. This is wasteful as you will likely only need one of these libraries to be available during +runtime. -To prune the other libraries, profiling-node ships with a small utility script that helps you prune unused binaries. -The script can be invoked via `sentry-prune-profiler-binaries`, use `--help` to see a list of available options or `--dry-run` if you want it to log the binaries that would have been deleted. +To prune the other libraries, profiling-node ships with a small utility script that helps you prune unused binaries. The +script can be invoked via `sentry-prune-profiler-binaries`, use `--help` to see a list of available options or +`--dry-run` if you want it to log the binaries that would have been deleted. Example of only preserving a binary to run node16 on linux x64 musl. ```bash -sentry-prune-profiler-binaries --target_dir_path=./dist/esbuild-serverless --target_platform=linux --target_node=16 --target_stdlib=musl --target_arch=x64 +sentry-prune-profiler-binaries --target_dir_path=./dist --target_platform=linux --target_node=16 --target_stdlib=musl --target_arch=x64 ``` Which will output something like ``` -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-darwin-x64-108-IFGH3SUR.node (90.41 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-darwin-x64-93-Q7KBVHSP.node (74.16 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-glibc-108-NXSISRTB.node (52.17 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-glibc-83-OEQT5HUK.node (52.08 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-glibc-93-IIXXW2PN.node (52.06 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-musl-108-DSILNYHA.node (48.46 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-musl-83-4CNOBNC3.node (48.37 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-arm64-musl-93-JA5PKNWQ.node (48.38 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-x64-glibc-108-NXSISRTB.node (52.17 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-x64-glibc-83-OEQT5HUK.node (52.08 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-x64-glibc-93-IIXXW2PN.node (52.06 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-x64-musl-108-CX7SL27U.node (51.50 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-linux-x64-musl-83-YD7ZQK2E.node (51.53 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-win32-x64-108-P7V3URQV.node (181.50 KiB) -Sentry: pruned ./dist/esbuild-serverless/sentry_cpu_profiler-win32-x64-93-3PKQDSGE.node (181.50 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-darwin-x64-108-IFGH3SUR.node (90.41 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-darwin-x64-93-Q7KBVHSP.node (74.16 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-linux-arm64-glibc-108-NXSISRTB.node (52.17 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-linux-arm64-glibc-83-OEQT5HUK.node (52.08 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-linux-arm64-glibc-93-IIXXW2PN.node (52.06 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-linux-arm64-musl-108-DSILNYHA.node (48.46 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-linux-arm64-musl-83-4CNOBNC3.node (48.37 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-linux-arm64-musl-93-JA5PKNWQ.node (48.38 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-linux-x64-glibc-108-NXSISRTB.node (52.17 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-linux-x64-glibc-83-OEQT5HUK.node (52.08 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-linux-x64-glibc-93-IIXXW2PN.node (52.06 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-linux-x64-musl-108-CX7SL27U.node (51.50 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-linux-x64-musl-83-YD7ZQK2E.node (51.53 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-win32-x64-108-P7V3URQV.node (181.50 KiB) +Sentry: pruned ./dist/sentry_cpu_profiler-win32-x64-93-3PKQDSGE.node (181.50 KiB) ✅ Sentry: pruned 15 binaries, saved 1.06 MiB in total. ``` ### Environment flags -The default mode of the v8 CpuProfiler is kEagerLoggin which enables the profiler even when no profiles are active - this is good because it makes calls to startProfiling fast at the tradeoff for constant CPU overhead. The behavior can be controlled via the `SENTRY_PROFILER_LOGGING_MODE` environment variable with values of `eager|lazy`. If you opt to use the lazy logging mode, calls to startProfiling may be slow (depending on environment and node version, it can be in the order of a few hundred ms). +The default mode of the v8 CpuProfiler is kEagerLoggin which enables the profiler even when no profiles are active - +this is good because it makes calls to startProfiling fast at the tradeoff for constant CPU overhead. The behavior can +be controlled via the `SENTRY_PROFILER_LOGGING_MODE` environment variable with values of `eager|lazy`. If you opt to use +the lazy logging mode, calls to startProfiling may be slow (depending on environment and node version, it can be in the +order of a few hundred ms). Example of starting a server with lazy logging mode. @@ -248,21 +272,30 @@ SENTRY_PROFILER_LOGGING_MODE=lazy node server.js ### Can the profiler leak PII to Sentry? -The profiler does not collect function arguments so leaking any PII is unlikely. We only collect a subset of the values which may identify the device and os that the profiler is running on (if you are already using tracing, it is likely that these values are already being collected by the SDK). +The profiler does not collect function arguments so leaking any PII is unlikely. We only collect a subset of the values +which may identify the device and os that the profiler is running on (if you are already using tracing, it is likely +that these values are already being collected by the SDK). -There is one way a profiler could leak pii information, but this is unlikely and would only happen for cases where you might be creating or naming functions which might contain pii information such as +There is one way a profiler could leak pii information, but this is unlikely and would only happen for cases where you +might be creating or naming functions which might contain pii information such as ```js -eval("function scriptFor${PII_DATA}...."); +eval('function scriptFor${PII_DATA}....'); ``` In that case it is possible that the function name may end up being reported to Sentry. ### Are worker threads supported? -No. All instances of the profiler are scoped per thread In practice, this means that starting a transaction on thread A and delegating work to thread B will only result in sample stacks being collected from thread A. That said, nothing should prevent you from starting a transaction on thread B concurrently which will result in two independant profiles being sent to the Sentry backend. We currently do not do any correlation between such transactions, but we would be open to exploring the possibilities. Please file an issue if you have suggestions or specific use-cases in mind. +No. All instances of the profiler are scoped per thread In practice, this means that starting a transaction on thread A +and delegating work to thread B will only result in sample stacks being collected from thread A. That said, nothing +should prevent you from starting a transaction on thread B concurrently which will result in two independant profiles +being sent to the Sentry backend. We currently do not do any correlation between such transactions, but we would be open +to exploring the possibilities. Please file an issue if you have suggestions or specific use-cases in mind. ### How much overhead will this profiler add? -The profiler uses the kEagerLogging option by default which trades off fast calls to startProfiling for a small amount of constant CPU overhead. -If you are using kEagerLogging then the tradeoff is reversed and there will be no CPU overhead while the profiler is not running, but calls to startProfiling could be slow (in our tests, this varies by environments and node versions, but could be in the order of a couple 100ms). +The profiler uses the kEagerLogging option by default which trades off fast calls to startProfiling for a small amount +of constant CPU overhead. If you are using kEagerLogging then the tradeoff is reversed and there will be no CPU overhead +while the profiler is not running, but calls to startProfiling could be slow (in our tests, this varies by environments +and node versions, but could be in the order of a couple 100ms). diff --git a/packages/profiling-node/esbuild.js b/packages/profiling-node/esbuild.js deleted file mode 100644 index bbfdaca4906f..000000000000 --- a/packages/profiling-node/esbuild.js +++ /dev/null @@ -1,23 +0,0 @@ -const esbuild = require('esbuild'); - -let missingBindingsPlugin = { - name: 'MissingBindings', - setup(build) { - build.onResolve({ filter: /\.node$/ }, args => ({ - path: args.path, - namespace: 'missing-bindings', - external: true, - })); - }, -}; - -esbuild.build({ - platform: 'node', - entryPoints: ['./src/index.ts'], - outfile: './lib/index.js', - format: 'cjs', - target: 'node16', - bundle: true, - tsconfig: './tsconfig.json', - plugins: [missingBindingsPlugin], -}); diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 33d906502d1a..8642fa08486d 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -79,8 +79,8 @@ "@types/node-abi": "^3.0.0", "clang-format": "^1.8.0", "cross-env": "^7.0.3", - "esbuild": "^0.17.18", "node-gyp": "^9.4.1", + "esbuild": "^0.19.11", "typescript": "^4.9.5" }, "volta": { diff --git a/yarn.lock b/yarn.lock index 04280725db46..4f3cf98e54ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2729,21 +2729,26 @@ broccoli-funnel "^3.0.5" ember-cli-babel "^7.26.11" +"@esbuild/aix-ppc64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" + integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== + "@esbuild/android-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== - "@esbuild/android-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== +"@esbuild/android-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" + integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== + "@esbuild/android-arm64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.4.tgz#74752a09301b8c6b9a415fbda9fb71406a62a7b7" @@ -2759,16 +2764,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== - "@esbuild/android-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== +"@esbuild/android-arm@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" + integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== + "@esbuild/android-arm@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.4.tgz#c27363e1e280e577d9b5c8fa7c7a3be2a8d79bf5" @@ -2784,16 +2789,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== - "@esbuild/android-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== +"@esbuild/android-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" + integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== + "@esbuild/android-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.4.tgz#6c9ee03d1488973d928618100048b75b147e0426" @@ -2809,16 +2814,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== - "@esbuild/darwin-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== +"@esbuild/darwin-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" + integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== + "@esbuild/darwin-arm64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.4.tgz#64e2ee945e5932cd49812caa80e8896e937e2f8b" @@ -2834,16 +2839,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== - "@esbuild/darwin-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== +"@esbuild/darwin-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" + integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== + "@esbuild/darwin-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.4.tgz#d8e26e1b965df284692e4d1263ba69a49b39ac7a" @@ -2859,16 +2864,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== - "@esbuild/freebsd-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== +"@esbuild/freebsd-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" + integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== + "@esbuild/freebsd-arm64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.4.tgz#29751a41b242e0a456d89713b228f1da4f45582f" @@ -2884,16 +2889,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== - "@esbuild/freebsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== +"@esbuild/freebsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" + integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== + "@esbuild/freebsd-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.4.tgz#873edc0f73e83a82432460ea59bf568c1e90b268" @@ -2909,16 +2914,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== - "@esbuild/linux-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== +"@esbuild/linux-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" + integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== + "@esbuild/linux-arm64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.4.tgz#659f2fa988d448dbf5010b5cc583be757cc1b914" @@ -2934,16 +2939,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== - "@esbuild/linux-arm@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== +"@esbuild/linux-arm@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" + integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== + "@esbuild/linux-arm@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.4.tgz#d5b13a7ec1f1c655ce05c8d319b3950797baee55" @@ -2959,16 +2964,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== - "@esbuild/linux-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== +"@esbuild/linux-ia32@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" + integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== + "@esbuild/linux-ia32@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.4.tgz#878cd8bf24c9847c77acdb5dd1b2ef6e4fa27a82" @@ -2984,16 +2989,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== - "@esbuild/linux-loong64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== +"@esbuild/linux-loong64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" + integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== + "@esbuild/linux-loong64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.4.tgz#df890499f6e566b7de3aa2361be6df2b8d5fa015" @@ -3009,16 +3014,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== - "@esbuild/linux-mips64el@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== +"@esbuild/linux-mips64el@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" + integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== + "@esbuild/linux-mips64el@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.4.tgz#76eae4e88d2ce9f4f1b457e93892e802851b6807" @@ -3034,16 +3039,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - "@esbuild/linux-ppc64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== +"@esbuild/linux-ppc64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" + integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== + "@esbuild/linux-ppc64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.4.tgz#c49032f4abbcfa3f747b543a106931fe3dce41ff" @@ -3059,16 +3064,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - "@esbuild/linux-riscv64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== +"@esbuild/linux-riscv64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" + integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== + "@esbuild/linux-riscv64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.4.tgz#0f815a090772138503ee0465a747e16865bf94b1" @@ -3084,16 +3089,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - "@esbuild/linux-s390x@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== +"@esbuild/linux-s390x@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" + integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== + "@esbuild/linux-s390x@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.4.tgz#8d2cca20cd4e7c311fde8701d9f1042664f8b92b" @@ -3109,16 +3114,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - "@esbuild/linux-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== +"@esbuild/linux-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" + integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== + "@esbuild/linux-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.4.tgz#f618bec2655de49bff91c588777e37b5e3169d4a" @@ -3134,16 +3139,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - "@esbuild/netbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== +"@esbuild/netbsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" + integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== + "@esbuild/netbsd-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.4.tgz#7889744ca4d60f1538d62382b95e90a49687cef2" @@ -3159,16 +3164,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - "@esbuild/openbsd-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== +"@esbuild/openbsd-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" + integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== + "@esbuild/openbsd-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.4.tgz#c3e436eb9271a423d2e8436fcb120e3fd90e2b01" @@ -3184,16 +3189,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - "@esbuild/sunos-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== +"@esbuild/sunos-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" + integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== + "@esbuild/sunos-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.4.tgz#f63f5841ba8c8c1a1c840d073afc99b53e8ce740" @@ -3209,16 +3214,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - "@esbuild/win32-arm64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== +"@esbuild/win32-arm64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" + integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== + "@esbuild/win32-arm64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.4.tgz#80be69cec92da4da7781cf7a8351b95cc5a236b0" @@ -3234,16 +3239,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - "@esbuild/win32-ia32@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== +"@esbuild/win32-ia32@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" + integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== + "@esbuild/win32-ia32@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.4.tgz#15dc0ed83d2794872b05d8edc4a358fecf97eb54" @@ -3259,16 +3264,16 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== - "@esbuild/win32-x64@0.18.20": version "0.18.20" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== +"@esbuild/win32-x64@0.19.11": + version "0.19.11" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" + integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== + "@esbuild/win32-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.4.tgz#d46a6e220a717f31f39ae80f49477cc3220be0f0" @@ -14752,34 +14757,6 @@ esbuild@^0.16.14, esbuild@^0.16.3: "@esbuild/win32-ia32" "0.16.17" "@esbuild/win32-x64" "0.16.17" -esbuild@^0.17.18: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== - optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" - esbuild@^0.18.10: version "0.18.20" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.18.20.tgz#4709f5a34801b43b799ab7d6d82f7284a9b7a7a6" @@ -14808,6 +14785,35 @@ esbuild@^0.18.10: "@esbuild/win32-ia32" "0.18.20" "@esbuild/win32-x64" "0.18.20" +esbuild@^0.19.11: + version "0.19.11" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" + integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== + optionalDependencies: + "@esbuild/aix-ppc64" "0.19.11" + "@esbuild/android-arm" "0.19.11" + "@esbuild/android-arm64" "0.19.11" + "@esbuild/android-x64" "0.19.11" + "@esbuild/darwin-arm64" "0.19.11" + "@esbuild/darwin-x64" "0.19.11" + "@esbuild/freebsd-arm64" "0.19.11" + "@esbuild/freebsd-x64" "0.19.11" + "@esbuild/linux-arm" "0.19.11" + "@esbuild/linux-arm64" "0.19.11" + "@esbuild/linux-ia32" "0.19.11" + "@esbuild/linux-loong64" "0.19.11" + "@esbuild/linux-mips64el" "0.19.11" + "@esbuild/linux-ppc64" "0.19.11" + "@esbuild/linux-riscv64" "0.19.11" + "@esbuild/linux-s390x" "0.19.11" + "@esbuild/linux-x64" "0.19.11" + "@esbuild/netbsd-x64" "0.19.11" + "@esbuild/openbsd-x64" "0.19.11" + "@esbuild/sunos-x64" "0.19.11" + "@esbuild/win32-arm64" "0.19.11" + "@esbuild/win32-ia32" "0.19.11" + "@esbuild/win32-x64" "0.19.11" + esbuild@^0.19.2: version "0.19.4" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.4.tgz#cdf5c4c684956d550bc3c6d0c01dac7fef6c75b1" From f9dc61f1c85f413bfd8deb4b680dc39119b09410 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 20:25:54 -0500 Subject: [PATCH 116/240] test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a49c8bdc66ac..3f13f2998942 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1154,7 +1154,7 @@ jobs: job_compile_bindings_profiling_node: name: Compile & Test Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} - needs: [job_get_metadata, job_install_deps, job_build] + needs: [job_get_metadata] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} timeout-minutes: 10 From af2e64fcd59b0057359ec5b910a72e8ea01e7543 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 20:29:17 -0500 Subject: [PATCH 117/240] test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3f13f2998942..d6e26587f8f4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1279,7 +1279,7 @@ jobs: run: choco install git - name: Build - run: arn build --ignore @sentry/profiling-npde + run: yarn build --ignore @sentry/profiling-npde # configure build test copy x64 - name: Configure node-gyp From e884ef7b38c3e9e10eb2e4756d34b9fd1478096b Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 20:33:03 -0500 Subject: [PATCH 118/240] test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d6e26587f8f4..2baf9708ae16 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1268,7 +1268,7 @@ jobs: - name: Install git (linux) if: contains(matrix.os, 'ubuntu') - run: sudo apt-get install -y git + run: apt-get install -y git - name: Install git (macos) if: contains(matrix.os, 'macos') From 4d5436b904762014a2a95ec0bfaaa972095a2d94 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 20:43:32 -0500 Subject: [PATCH 119/240] test --- .github/workflows/build.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2baf9708ae16..6d2db0ae8ed4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1248,7 +1248,7 @@ jobs: steps: - name: Setup (alpine) if: contains(matrix.container, 'alpine') - run: apk add --no-cache build-base python3 g++ make curl + run: apk add --no-cache build-base git python3 g++ make curl - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) uses: actions/checkout@v4 @@ -1266,10 +1266,6 @@ jobs: - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts - - name: Install git (linux) - if: contains(matrix.os, 'ubuntu') - run: apt-get install -y git - - name: Install git (macos) if: contains(matrix.os, 'macos') run: brew install git From fa210921246e05dd7044743f3b3ce01049f300d4 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 20:49:54 -0500 Subject: [PATCH 120/240] test --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6d2db0ae8ed4..5dbed840b270 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1266,6 +1266,10 @@ jobs: - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts + - name: Install git (ubuntu) + if: contains(matrix.os, 'ubuntu') + run: sudo apt-get install -y git-all + - name: Install git (macos) if: contains(matrix.os, 'macos') run: brew install git From 6432ae6f83e0d9724bf800c74d59e4ea66591f56 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 20:53:21 -0500 Subject: [PATCH 121/240] test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5dbed840b270..e4c033d0971d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1279,7 +1279,7 @@ jobs: run: choco install git - name: Build - run: yarn build --ignore @sentry/profiling-npde + run: yarn build --ignore @sentry/profiling-node --ignore @sentry/astro # configure build test copy x64 - name: Configure node-gyp From cac29cd7a438111c57c8369cbcbaedf2ff283cbb Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 20:57:18 -0500 Subject: [PATCH 122/240] test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e4c033d0971d..229ed11bd406 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1268,7 +1268,7 @@ jobs: - name: Install git (ubuntu) if: contains(matrix.os, 'ubuntu') - run: sudo apt-get install -y git-all + run: sudo apt-get install -y git - name: Install git (macos) if: contains(matrix.os, 'macos') From 55cfae6be45257f5c7bbacf3ce5443d300382016 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 20:58:05 -0500 Subject: [PATCH 123/240] test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 229ed11bd406..6a3c84e62c0e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1267,7 +1267,7 @@ jobs: run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts - name: Install git (ubuntu) - if: contains(matrix.os, 'ubuntu') + if: contains(matrix.os, 'ubuntu') && !contains(matrix.container, 'alpine') run: sudo apt-get install -y git - name: Install git (macos) From 7f112024f671c925b8adb969e7a5c24d53d78bdc Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 21:06:25 -0500 Subject: [PATCH 124/240] mark safe --- .github/workflows/build.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6a3c84e62c0e..00930400989b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1248,7 +1248,7 @@ jobs: steps: - name: Setup (alpine) if: contains(matrix.container, 'alpine') - run: apk add --no-cache build-base git python3 g++ make curl + run: apk add --no-cache build-base python3 g++ make curl - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) uses: actions/checkout@v4 @@ -1266,6 +1266,12 @@ jobs: - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts + - name: Install git (alpine) + if: contains(matrix.container, 'alpine') + run: | + apk add --no-cache git + git config --global --add safe.directory ${{ github.workspace }} + - name: Install git (ubuntu) if: contains(matrix.os, 'ubuntu') && !contains(matrix.container, 'alpine') run: sudo apt-get install -y git From a8c6c962c91d8409ca9d387fb4c653d918c8e0e3 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 21:12:55 -0500 Subject: [PATCH 125/240] mark safe --- .github/workflows/build.yml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 00930400989b..56375b108570 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1250,27 +1250,11 @@ jobs: if: contains(matrix.container, 'alpine') run: apk add --no-cache build-base python3 g++ make curl - - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - uses: actions/checkout@v4 - with: - ref: ${{ env.HEAD_COMMIT }} - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - - - name: Setup python - uses: actions/setup-python@v5 - - - name: Install Dependencies - run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts - - name: Install git (alpine) if: contains(matrix.container, 'alpine') run: | apk add --no-cache git - git config --global --add safe.directory ${{ github.workspace }} + git config --global --add safe.directory '*' - name: Install git (ubuntu) if: contains(matrix.os, 'ubuntu') && !contains(matrix.container, 'alpine') @@ -1284,6 +1268,22 @@ jobs: if: contains(matrix.os, 'windows') run: choco install git + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + + - name: Setup python + uses: actions/setup-python@v5 + + - name: Install Dependencies + run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts + - name: Build run: yarn build --ignore @sentry/profiling-node --ignore @sentry/astro From e8f90e24e1a85feec513aba2eeb89f8d13d60a90 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 21:23:30 -0500 Subject: [PATCH 126/240] add zip --- .github/workflows/build.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 56375b108570..431f3560e5f2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1250,23 +1250,23 @@ jobs: if: contains(matrix.container, 'alpine') run: apk add --no-cache build-base python3 g++ make curl - - name: Install git (alpine) + - name: Install tools (alpine) if: contains(matrix.container, 'alpine') run: | - apk add --no-cache git + apk add --no-cache git zip git config --global --add safe.directory '*' - - name: Install git (ubuntu) + - name: Install tools (ubuntu) if: contains(matrix.os, 'ubuntu') && !contains(matrix.container, 'alpine') - run: sudo apt-get install -y git + run: sudo apt-get install -y git zip - - name: Install git (macos) + - name: Install tools (macos) if: contains(matrix.os, 'macos') - run: brew install git + run: brew install git zip - - name: Install git (windows) + - name: Install tools (windows) if: contains(matrix.os, 'windows') - run: choco install git + run: choco install git zip - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) uses: actions/checkout@v4 From 8cd63d8c9b5cde6aa628279398b190c4d6926db6 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 21:24:48 -0500 Subject: [PATCH 127/240] skip serverless instead --- .github/workflows/build.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 431f3560e5f2..489d4bbe6c25 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1250,23 +1250,23 @@ jobs: if: contains(matrix.container, 'alpine') run: apk add --no-cache build-base python3 g++ make curl - - name: Install tools (alpine) + - name: Install git (alpine) if: contains(matrix.container, 'alpine') run: | - apk add --no-cache git zip + apk add --no-cache git git config --global --add safe.directory '*' - - name: Install tools (ubuntu) + - name: Install git (ubuntu) if: contains(matrix.os, 'ubuntu') && !contains(matrix.container, 'alpine') - run: sudo apt-get install -y git zip + run: sudo apt-get install -y git - - name: Install tools (macos) + - name: Install git (macos) if: contains(matrix.os, 'macos') - run: brew install git zip + run: brew install git - - name: Install tools (windows) + - name: Install git (windows) if: contains(matrix.os, 'windows') - run: choco install git zip + run: choco install git - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) uses: actions/checkout@v4 @@ -1285,7 +1285,7 @@ jobs: run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts - name: Build - run: yarn build --ignore @sentry/profiling-node --ignore @sentry/astro + run: yarn build --ignore @sentry/profiling-node --ignore @sentry/astro --ignore @sentry/serverless # configure build test copy x64 - name: Configure node-gyp From ea7704ccbdbd21ee1abc9cd9a78293f88930f22d Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 21:34:54 -0500 Subject: [PATCH 128/240] test --- packages/profiling-node/src/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/profiling-node/src/utils.ts b/packages/profiling-node/src/utils.ts index f4320c80f1d9..4b5ce704123e 100644 --- a/packages/profiling-node/src/utils.ts +++ b/packages/profiling-node/src/utils.ts @@ -1,5 +1,5 @@ /* eslint-disable max-lines */ -import os from 'os'; +import * as os from 'os'; import type { Context, DsnComponents, From 4cddd30ceb793adb88cabb387cee14c0db7ce2e4 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 21:51:14 -0500 Subject: [PATCH 129/240] test --- .github/workflows/build.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 489d4bbe6c25..c26356dee513 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1157,7 +1157,7 @@ jobs: needs: [job_get_metadata] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} - timeout-minutes: 10 + timeout-minutes: 20 strategy: fail-fast: false matrix: @@ -1285,7 +1285,12 @@ jobs: run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts - name: Build - run: yarn build --ignore @sentry/profiling-node --ignore @sentry/astro --ignore @sentry/serverless + run: | + yarn build \ + --ignore @sentry/profiling-node \ + --ignore @sentry/astro \ + --ignore @sentry/serverless \ + --ignore @sentry/browser # configure build test copy x64 - name: Configure node-gyp From 3d3d6ec6ad10027e5a5af3c2528b0bfcd9705d50 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 22:03:59 -0500 Subject: [PATCH 130/240] test --- .github/workflows/build.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c26356dee513..96e74adb3c80 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1286,11 +1286,7 @@ jobs: - name: Build run: | - yarn build \ - --ignore @sentry/profiling-node \ - --ignore @sentry/astro \ - --ignore @sentry/serverless \ - --ignore @sentry/browser + yarn build --ignore "@sentry/{profiling-node,astro,serverless,browser}" # configure build test copy x64 - name: Configure node-gyp From c8d70b80de757a67aad055970f697f62bac3836f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 22:12:04 -0500 Subject: [PATCH 131/240] test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 96e74adb3c80..bef9138faceb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1286,7 +1286,7 @@ jobs: - name: Build run: | - yarn build --ignore "@sentry/{profiling-node,astro,serverless,browser}" + yarn build --ignore @sentry/profiling-node --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser # configure build test copy x64 - name: Configure node-gyp From 13145d1f81a7d76ca549283180c82c0693b166dd Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 16 Jan 2024 22:36:49 -0500 Subject: [PATCH 132/240] test --- .github/workflows/build.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bef9138faceb..03e53737505c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1280,6 +1280,8 @@ jobs: - name: Setup python uses: actions/setup-python@v5 + with: + python-version: '3.10' - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts From 97c8f74111d6c171d894feda03add3fc2d7c1599 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 06:52:08 -0500 Subject: [PATCH 133/240] test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 03e53737505c..bd99c0ef6865 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1279,7 +1279,7 @@ jobs: node-version: ${{ matrix.node }} - name: Setup python - uses: actions/setup-python@v5 + uses: actions/setup-python@v4 with: python-version: '3.10' From f0d821d9468e2cf9df412879b1bc90624e570e86 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 07:15:12 -0500 Subject: [PATCH 134/240] test --- packages/profiling-node/rollup.npm.config.mjs | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/profiling-node/rollup.npm.config.mjs b/packages/profiling-node/rollup.npm.config.mjs index e507bf8d5719..87cef28c41ea 100644 --- a/packages/profiling-node/rollup.npm.config.mjs +++ b/packages/profiling-node/rollup.npm.config.mjs @@ -1,3 +1,6 @@ +import commonjs from '@rollup/plugin-commonjs'; +import resolve from '@rollup/plugin-node-resolve'; +import typescript from '@rollup/plugin-typescript'; import { makeBaseNPMConfig, makeNPMConfigVariants } from '@sentry-internal/rollup-utils'; const configs = makeNPMConfigVariants(makeBaseNPMConfig()); @@ -7,4 +10,12 @@ if (!cjsConfig) { throw new Error('CJS config is required for profiling-node.'); } -export default {...cjsConfig, target: 'node'}; +const config = { + ...cjsConfig, + input: 'src/index.ts', + output: { ...cjsConfig.output, dir: 'lib', format: 'cjs', preserveModules: false }, + plugins: [resolve(), commonjs(), typescript({ tsconfig: './tsconfig.json' })], +}; + + +export default config; From fdbafedd616c4b3da0f8ba8bddd5d8c9116890a2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 07:20:15 -0500 Subject: [PATCH 135/240] test --- packages/profiling-node/rollup.npm.config.mjs | 2 +- packages/profiling-node/tsconfig.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/profiling-node/rollup.npm.config.mjs b/packages/profiling-node/rollup.npm.config.mjs index 87cef28c41ea..cdf39d47735c 100644 --- a/packages/profiling-node/rollup.npm.config.mjs +++ b/packages/profiling-node/rollup.npm.config.mjs @@ -13,7 +13,7 @@ if (!cjsConfig) { const config = { ...cjsConfig, input: 'src/index.ts', - output: { ...cjsConfig.output, dir: 'lib', format: 'cjs', preserveModules: false }, + output: { ...cjsConfig.output, file: 'lib/index.js', format: 'cjs', dir: undefined, preserveModules: false }, plugins: [resolve(), commonjs(), typescript({ tsconfig: './tsconfig.json' })], }; diff --git a/packages/profiling-node/tsconfig.json b/packages/profiling-node/tsconfig.json index edb8751a5f4f..0c4404d8d70c 100644 --- a/packages/profiling-node/tsconfig.json +++ b/packages/profiling-node/tsconfig.json @@ -1,7 +1,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "module": "CommonJS", + "module": "esnext", "lib": ["es6"], "outDir": "lib", "types": ["node"] From 18a5baebd94cfe0eb504be08094de507da88d9ae Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 07:38:15 -0500 Subject: [PATCH 136/240] test --- .github/workflows/build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bd99c0ef6865..047eeed45f0f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1268,6 +1268,9 @@ jobs: if: contains(matrix.os, 'windows') run: choco install git + - name: Install yarn + run: npm i -g yarn + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) uses: actions/checkout@v4 with: From f97fe1116029b1df24af16434930d8cfda03aae2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 07:55:22 -0500 Subject: [PATCH 137/240] test --- packages/profiling-node/rollup.npm.config.mjs | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/profiling-node/rollup.npm.config.mjs b/packages/profiling-node/rollup.npm.config.mjs index cdf39d47735c..4c3a7cbd3995 100644 --- a/packages/profiling-node/rollup.npm.config.mjs +++ b/packages/profiling-node/rollup.npm.config.mjs @@ -17,5 +17,4 @@ const config = { plugins: [resolve(), commonjs(), typescript({ tsconfig: './tsconfig.json' })], }; - export default config; From 5d600428d509b50080eebc5a773ffd40c5ac3354 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 07:56:14 -0500 Subject: [PATCH 138/240] test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 047eeed45f0f..954c1d7102d2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1269,7 +1269,7 @@ jobs: run: choco install git - name: Install yarn - run: npm i -g yarn + run: npm i -g yarn --force - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) uses: actions/checkout@v4 From 72e4f16206b81cf7cd2a304e422a9e3fa32a157f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 08:37:13 -0500 Subject: [PATCH 139/240] test --- packages/profiling-node/src/utils.ts | 1 + .../profiling-node/test/hubextensions.hub.test.ts | 15 +++++++++++++++ packages/profiling-node/test/index.test.ts | 5 +++++ 3 files changed, 21 insertions(+) diff --git a/packages/profiling-node/src/utils.ts b/packages/profiling-node/src/utils.ts index 4b5ce704123e..add05caab05d 100644 --- a/packages/profiling-node/src/utils.ts +++ b/packages/profiling-node/src/utils.ts @@ -460,6 +460,7 @@ export function applyDebugMetadata(resource_paths: ReadonlyArray): Debug return []; } + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation const client = hub.getClient(); diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index 9d12a2901328..63a99884efcb 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -33,6 +33,7 @@ function makeClientWithoutHooks(): [NodeClient, Transport] { // @ts-expect-error __SENTRY__ is a private property getMainCarrier().__SENTRY__.globalEventProcessors = [cb]; }, + // eslint-disable-next-line deprecation/deprecation () => Sentry.getCurrentHub(), ); }; @@ -67,6 +68,7 @@ function makeClientWithHooks(): [NodeClient, Transport] { // @ts-expect-error __SENTRY__ is a private property getMainCarrier().__SENTRY__.globalEventProcessors = [cb]; }, + // eslint-disable-next-line deprecation/deprecation () => Sentry.getCurrentHub(), ); }; @@ -91,6 +93,7 @@ describe('hubextensions', () => { it('pulls environment from sdk init', async () => { const [client, transport] = makeClientWithoutHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -111,6 +114,7 @@ describe('hubextensions', () => { const logSpy = jest.spyOn(logger, 'log'); const [client, transport] = makeClientWithoutHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -154,6 +158,7 @@ describe('hubextensions', () => { const logSpy = jest.spyOn(logger, 'log'); const [client, transport] = makeClientWithoutHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -195,6 +200,7 @@ describe('hubextensions', () => { describe('with hooks', () => { it('calls profiler when transaction is started/stopped', async () => { const [client, transport] = makeClientWithHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -218,6 +224,7 @@ describe('hubextensions', () => { it('sends profile in the same envelope as transaction', async () => { const [client, transport] = makeClientWithHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -239,6 +246,7 @@ describe('hubextensions', () => { it('does not crash if transaction has no profile context or it is invalid', async () => { const [client] = makeClientWithHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -264,6 +272,7 @@ describe('hubextensions', () => { it('if transaction was profiled, but profiler returned null', async () => { const [client, transport] = makeClientWithHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -290,6 +299,7 @@ describe('hubextensions', () => { it('emits preprocessEvent for profile', async () => { const [client] = makeClientWithHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -317,6 +327,7 @@ describe('hubextensions', () => { describe('without hooks', () => { it('calls profiler when transaction is started/stopped', async () => { const [client] = makeClientWithoutHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -338,6 +349,7 @@ describe('hubextensions', () => { it('sends profile in separate envelope', async () => { const [client, transport] = makeClientWithoutHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -369,6 +381,7 @@ describe('hubextensions', () => { const stopProfilingSpy = jest.spyOn(CpuProfilerBindings, 'stopProfiling'); const [client] = makeClientWithoutHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -391,6 +404,7 @@ describe('hubextensions', () => { const stopProfilingSpy = jest.spyOn(CpuProfilerBindings, 'stopProfiling'); const [client] = makeClientWithoutHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -434,6 +448,7 @@ describe('hubextensions', () => { }); const [client, transport] = makeClientWithHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); diff --git a/packages/profiling-node/test/index.test.ts b/packages/profiling-node/test/index.test.ts index fa6de56905f4..0fa9ec20ed8b 100644 --- a/packages/profiling-node/test/index.test.ts +++ b/packages/profiling-node/test/index.test.ts @@ -43,6 +43,7 @@ function makeClientWithoutHooks(): [NodeClient, MockTransport] { // @ts-expect-error __SENTRY__ is private getMainCarrier().__SENTRY__.globalEventProcessors = [cb]; }, + // eslint-disable-next-line deprecation/deprecation () => Sentry.getCurrentHub(), ); }; @@ -80,6 +81,7 @@ describe('Sentry - Profiling', () => { describe('without hooks', () => { it('profiles a transaction', async () => { const [client, transport] = makeClientWithoutHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -96,6 +98,7 @@ describe('Sentry - Profiling', () => { it('can profile overlapping transactions', async () => { const [client, transport] = makeClientWithoutHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -121,6 +124,7 @@ describe('Sentry - Profiling', () => { it('does not discard overlapping transaction with same title', async () => { const [client, transport] = makeClientWithoutHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); @@ -142,6 +146,7 @@ describe('Sentry - Profiling', () => { it('does not crash if finish is called multiple times', async () => { const [client, transport] = makeClientWithoutHooks(); + // eslint-disable-next-line deprecation/deprecation const hub = Sentry.getCurrentHub(); // eslint-disable-next-line deprecation/deprecation hub.bindClient(client); From 423844da1e1c1009122584692096ece802fd3528 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 08:46:17 -0500 Subject: [PATCH 140/240] test --- .github/workflows/build.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 954c1d7102d2..5e1f867acc96 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1246,6 +1246,21 @@ jobs: node: 20 arch: x64 steps: + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + + - name: Setup python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Setup (alpine) if: contains(matrix.container, 'alpine') run: apk add --no-cache build-base python3 g++ make curl @@ -1271,21 +1286,6 @@ jobs: - name: Install yarn run: npm i -g yarn --force - - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - uses: actions/checkout@v4 - with: - ref: ${{ env.HEAD_COMMIT }} - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - - - name: Setup python - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts From 756a0314c473c945be9f7c496331df4a7d4b6c3c Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 08:53:52 -0500 Subject: [PATCH 141/240] test --- .github/workflows/build.yml | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5e1f867acc96..32863bf6dd2c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1246,6 +1246,24 @@ jobs: node: 20 arch: x64 steps: + - name: Install git (alpine) + if: contains(matrix.container, 'alpine') + run: | + apk add --no-cache git + git config --global --add safe.directory '*' + + - name: Install git (ubuntu) + if: contains(matrix.os, 'ubuntu') && !contains(matrix.container, 'alpine') + run: sudo apt-get install -y git + + - name: Install git (macos) + if: contains(matrix.os, 'macos') + run: brew install git + + - name: Install git (windows) + if: contains(matrix.os, 'windows') + run: choco install git + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) uses: actions/checkout@v4 with: @@ -1265,24 +1283,6 @@ jobs: if: contains(matrix.container, 'alpine') run: apk add --no-cache build-base python3 g++ make curl - - name: Install git (alpine) - if: contains(matrix.container, 'alpine') - run: | - apk add --no-cache git - git config --global --add safe.directory '*' - - - name: Install git (ubuntu) - if: contains(matrix.os, 'ubuntu') && !contains(matrix.container, 'alpine') - run: sudo apt-get install -y git - - - name: Install git (macos) - if: contains(matrix.os, 'macos') - run: brew install git - - - name: Install git (windows) - if: contains(matrix.os, 'windows') - run: choco install git - - name: Install yarn run: npm i -g yarn --force From c3a098249afe8f970e566fb51aaad9ce798cfdff Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 09:02:38 -0500 Subject: [PATCH 142/240] test --- packages/profiling-node/rollup.npm.config.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/profiling-node/rollup.npm.config.mjs b/packages/profiling-node/rollup.npm.config.mjs index 4c3a7cbd3995..61c390c20a08 100644 --- a/packages/profiling-node/rollup.npm.config.mjs +++ b/packages/profiling-node/rollup.npm.config.mjs @@ -1,7 +1,7 @@ import commonjs from '@rollup/plugin-commonjs'; import resolve from '@rollup/plugin-node-resolve'; import typescript from '@rollup/plugin-typescript'; -import { makeBaseNPMConfig, makeNPMConfigVariants } from '@sentry-internal/rollup-utils'; +import { makeBaseNPMConfig, makeNPMConfigVariants, plugins } from '@sentry-internal/rollup-utils'; const configs = makeNPMConfigVariants(makeBaseNPMConfig()); const cjsConfig = configs.find(config => config.output.format === 'cjs'); @@ -14,7 +14,7 @@ const config = { ...cjsConfig, input: 'src/index.ts', output: { ...cjsConfig.output, file: 'lib/index.js', format: 'cjs', dir: undefined, preserveModules: false }, - plugins: [resolve(), commonjs(), typescript({ tsconfig: './tsconfig.json' })], + plugins: [plugins.makeLicensePlugin('Sentry Node Profiling'), resolve(), commonjs(), typescript({ tsconfig: './tsconfig.json' })], }; export default config; From 51f6e61341889badd0356111ac6054fbfab6d8b7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 09:03:49 -0500 Subject: [PATCH 143/240] test --- .github/workflows/build.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 32863bf6dd2c..b8d3a31982d8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1274,11 +1274,6 @@ jobs: with: node-version: ${{ matrix.node }} - - name: Setup python - uses: actions/setup-python@v4 - with: - python-version: '3.10' - - name: Setup (alpine) if: contains(matrix.container, 'alpine') run: apk add --no-cache build-base python3 g++ make curl @@ -1286,6 +1281,11 @@ jobs: - name: Install yarn run: npm i -g yarn --force + - name: Setup python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts From 54bf7ee3963c87e8b0580a3cc17714b7525d36d9 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 09:12:27 -0500 Subject: [PATCH 144/240] test --- .github/workflows/build.yml | 22 +++++++------------ packages/profiling-node/rollup.npm.config.mjs | 7 +++++- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b8d3a31982d8..e7eb23e1536c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1283,6 +1283,7 @@ jobs: - name: Setup python uses: actions/setup-python@v4 + if: !contains(matrix.container, 'alpine') with: python-version: '3.10' @@ -1297,14 +1298,12 @@ jobs: - name: Configure node-gyp if: matrix.arch != 'arm64' run: | - cd packages/profiling-node - yarn build:bindings:configure + yarn lerna run build:bindings:configure --scope @sentry/profiling-node - name: Build Bindings if: matrix.arch != 'arm64' run: | - cd packages/profiling-node - yarn build:bindings + yarn lerna run build:bindings --scope @sentry/profiling-node - name: Setup (arm64| ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' @@ -1315,8 +1314,7 @@ jobs: - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' run: | - cd packages/profiling-node - yarn build:bindings:configure:arm64 + yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node - name: Setup Musl if: contains(matrix.container, 'alpine') @@ -1328,30 +1326,26 @@ jobs: - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | - cd packages/profiling-node CC=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc \ CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ - BUILD_ARCH=arm64 yarn build:bindings + BUILD_ARCH=arm64 yarn lerna run build:bindings --scope @sentry/profiling-node - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | - cd packages/profiling-node CC=aarch64-linux-gnu-gcc \ CXX=aarch64-linux-gnu-g++ \ - BUILD_ARCH=arm64 yarn build:bindings:arm64 + BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | - cd packages/profiling-node - yarn build:bindings:configure:arm64 + yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node - name: Build Bindings (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | - cd packages/profiling-node - BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn build:bindings:arm64 + BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node - name: Unit Test if: matrix.arch != 'arm64' diff --git a/packages/profiling-node/rollup.npm.config.mjs b/packages/profiling-node/rollup.npm.config.mjs index 61c390c20a08..51e812488bb1 100644 --- a/packages/profiling-node/rollup.npm.config.mjs +++ b/packages/profiling-node/rollup.npm.config.mjs @@ -14,7 +14,12 @@ const config = { ...cjsConfig, input: 'src/index.ts', output: { ...cjsConfig.output, file: 'lib/index.js', format: 'cjs', dir: undefined, preserveModules: false }, - plugins: [plugins.makeLicensePlugin('Sentry Node Profiling'), resolve(), commonjs(), typescript({ tsconfig: './tsconfig.json' })], + plugins: [ + plugins.makeLicensePlugin('Sentry Node Profiling'), + resolve(), + commonjs(), + typescript({ tsconfig: './tsconfig.json' }), + ], }; export default config; From 5ce436ed320d86ac25082986dfd4535f6457c65a Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 09:25:14 -0500 Subject: [PATCH 145/240] test --- .github/workflows/build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e7eb23e1536c..95340714e481 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1283,7 +1283,6 @@ jobs: - name: Setup python uses: actions/setup-python@v4 - if: !contains(matrix.container, 'alpine') with: python-version: '3.10' From a64bc4f70f18b4a54d8749aade1639cf49fb9161 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 09:37:32 -0500 Subject: [PATCH 146/240] skip integrations build --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 95340714e481..9148f61c0b89 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1291,7 +1291,7 @@ jobs: - name: Build run: | - yarn build --ignore @sentry/profiling-node --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser + yarn build --ignore @sentry/profiling-node --ignore @sentry/integrations --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser # configure build test copy x64 - name: Configure node-gyp From 323f95e7ea0ba0de79dd078797302dc016aac4a2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 09:48:07 -0500 Subject: [PATCH 147/240] test --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9148f61c0b89..6fefb6a654cf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1283,6 +1283,7 @@ jobs: - name: Setup python uses: actions/setup-python@v4 + if: ${{ !contains(matrix.container, 'alpine') }} with: python-version: '3.10' From ef9130dc1323f8bb389f7f328d34dc8ae193c2d3 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 09:52:12 -0500 Subject: [PATCH 148/240] test --- .github/workflows/build.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6fefb6a654cf..b79aeb41947e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1276,14 +1276,13 @@ jobs: - name: Setup (alpine) if: contains(matrix.container, 'alpine') - run: apk add --no-cache build-base python3 g++ make curl + run: apk add --no-cache build-base g++ make curl - name: Install yarn run: npm i -g yarn --force - name: Setup python uses: actions/setup-python@v4 - if: ${{ !contains(matrix.container, 'alpine') }} with: python-version: '3.10' From 16a024f24b67934f11dceae6ac84836a3e02330a Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 09:55:19 -0500 Subject: [PATCH 149/240] run configure earlier --- .github/workflows/build.yml | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b79aeb41947e..51374d338f89 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1289,16 +1289,28 @@ jobs: - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts - - name: Build - run: | - yarn build --ignore @sentry/profiling-node --ignore @sentry/integrations --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser - - # configure build test copy x64 + # configure node-gyp - name: Configure node-gyp if: matrix.arch != 'arm64' run: | yarn lerna run build:bindings:configure --scope @sentry/profiling-node + - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) + if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' + run: | + yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node + + - name: Configure node-gyp (arm64, darwin) + if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' + run: | + yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node + + # build monorepo + - name: Build + run: | + yarn build --ignore @sentry/profiling-node --ignore @sentry/integrations --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser + + # build bindings - name: Build Bindings if: matrix.arch != 'arm64' run: | @@ -1310,11 +1322,6 @@ jobs: sudo apt-get update sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu - - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) - if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' - run: | - yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node - - name: Setup Musl if: contains(matrix.container, 'alpine') run: | @@ -1336,11 +1343,6 @@ jobs: CXX=aarch64-linux-gnu-g++ \ BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node - - name: Configure node-gyp (arm64, darwin) - if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' - run: | - yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node - - name: Build Bindings (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | From 2e253afa5747696a771e23c5f7a489f0323c59b2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 10:02:24 -0500 Subject: [PATCH 150/240] test 3.11 --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 51374d338f89..b5dba0695f40 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1284,7 +1284,7 @@ jobs: - name: Setup python uses: actions/setup-python@v4 with: - python-version: '3.10' + python-version: '3.11' - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts @@ -1298,7 +1298,7 @@ jobs: - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' run: | - yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node + yarn lerna run build:bindings:configure:arm64 --scoApe @sentry/profiling-node - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' @@ -1306,7 +1306,7 @@ jobs: yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node # build monorepo - - name: Build + - name: Build Packages run: | yarn build --ignore @sentry/profiling-node --ignore @sentry/integrations --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser From 193544a4657c119162db0daf20d9674262e8d7e5 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 10:06:53 -0500 Subject: [PATCH 151/240] test w/o lerna --- .github/workflows/build.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b5dba0695f40..4b3525ac92f6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1293,17 +1293,20 @@ jobs: - name: Configure node-gyp if: matrix.arch != 'arm64' run: | - yarn lerna run build:bindings:configure --scope @sentry/profiling-node + cd packages/profiling-node + yarn build:bindings:configure --scope @sentry/profiling-node - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' run: | - yarn lerna run build:bindings:configure:arm64 --scoApe @sentry/profiling-node + cd packages/profiling-node + yarn build:bindings:configure:arm64 --scoApe @sentry/profiling-node - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | - yarn lerna run build:bindings:configure:arm64 --scope @sentry/profiling-node + cd packages/profiling-node + yarn build:bindings:configure:arm64 --scope @sentry/profiling-node # build monorepo - name: Build Packages From 80753b8c61f5031fad8b2b0bf817f9f7bb5091fb Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 10:07:34 -0500 Subject: [PATCH 152/240] fix scope cmd --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4b3525ac92f6..8cd46286c448 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1300,7 +1300,7 @@ jobs: if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' run: | cd packages/profiling-node - yarn build:bindings:configure:arm64 --scoApe @sentry/profiling-node + yarn build:bindings:configure:arm64 --scope @sentry/profiling-node - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' From 5f90802146b944a934486cd253f14c619e008dd7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 10:08:14 -0500 Subject: [PATCH 153/240] remove scope --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8cd46286c448..19282da8bcd9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1294,19 +1294,19 @@ jobs: if: matrix.arch != 'arm64' run: | cd packages/profiling-node - yarn build:bindings:configure --scope @sentry/profiling-node + yarn build:bindings:configure - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' run: | cd packages/profiling-node - yarn build:bindings:configure:arm64 --scope @sentry/profiling-node + yarn build:bindings:configure:arm64 - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | cd packages/profiling-node - yarn build:bindings:configure:arm64 --scope @sentry/profiling-node + yarn build:bindings:configure:arm64 # build monorepo - name: Build Packages From fa47d6ab5598567230c06c1706346b75a97d75f0 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 10:16:01 -0500 Subject: [PATCH 154/240] configure npm python path --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 19282da8bcd9..12b3ed5afb72 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1283,9 +1283,13 @@ jobs: - name: Setup python uses: actions/setup-python@v4 + id: python-setup with: python-version: '3.11' + - name: Set npm python path + run: npm config set python "${{ steps.python-setup.outputs.python-path }}" + - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts From 0080d20b4e3049f8ed538c00842189e6b2288199 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 10:25:04 -0500 Subject: [PATCH 155/240] configure npm python path --- .github/workflows/build.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 12b3ed5afb72..ca2910fb19dc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1288,7 +1288,12 @@ jobs: python-version: '3.11' - name: Set npm python path - run: npm config set python "${{ steps.python-setup.outputs.python-path }}" + if: ${{ !contains(matrix.os, 'windows') }} + run: export npm_config_python=${{ steps.python-setup.outputs.python-path }} + + - name: Set npm python path (Windows) + if: ${{ contains(matrix.os, 'windows') }} + run: set npm_config_python=${{ steps.python-setup.outputs.python-path }} - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts From 836ac9354bb8693b28bd411e9787cdab1877e8ea Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 10:31:22 -0500 Subject: [PATCH 156/240] specify path directly --- .github/workflows/build.yml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ca2910fb19dc..27d3b505b82d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1287,14 +1287,6 @@ jobs: with: python-version: '3.11' - - name: Set npm python path - if: ${{ !contains(matrix.os, 'windows') }} - run: export npm_config_python=${{ steps.python-setup.outputs.python-path }} - - - name: Set npm python path (Windows) - if: ${{ contains(matrix.os, 'windows') }} - run: set npm_config_python=${{ steps.python-setup.outputs.python-path }} - - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts @@ -1303,19 +1295,19 @@ jobs: if: matrix.arch != 'arm64' run: | cd packages/profiling-node - yarn build:bindings:configure + PYTHON=${{ steps.python-setup.outputs.python-path }} yarn build:bindings:configure - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' run: | cd packages/profiling-node - yarn build:bindings:configure:arm64 + PYTHON=${{ steps.python-setup.outputs.python-path }} yarn build:bindings:configure:arm64 - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | cd packages/profiling-node - yarn build:bindings:configure:arm64 + PYTHON=${{ steps.python-setup.outputs.python-path }} yarn build:bindings:configure:arm64 # build monorepo - name: Build Packages From ff91f4b3ae84a620e11912d63b3e42011cdeea3e Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 10:43:46 -0500 Subject: [PATCH 157/240] c/o first --- .github/workflows/build.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 27d3b505b82d..aaaa77271d1a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1246,6 +1246,11 @@ jobs: node: 20 arch: x64 steps: + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + - name: Install git (alpine) if: contains(matrix.container, 'alpine') run: | @@ -1264,11 +1269,6 @@ jobs: if: contains(matrix.os, 'windows') run: choco install git - - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - uses: actions/checkout@v4 - with: - ref: ${{ env.HEAD_COMMIT }} - - name: Setup Node uses: actions/setup-node@v4 with: From c7a56dd6cc72db7b627b42d90d75fab49f18cea2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 10:45:06 -0500 Subject: [PATCH 158/240] log python --- .github/workflows/build.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index aaaa77271d1a..e0715483a0f0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1287,6 +1287,11 @@ jobs: with: python-version: '3.11' + - name: Print which python + run: | + which python + echo "python: ${{ steps.python-setup.outputs.python-path }}" + - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts From 6ebe56d4b32c41a712acf598f45aa1a58a66d3e8 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 10:48:45 -0500 Subject: [PATCH 159/240] run one of each so I dont waste CI --- .github/workflows/build.yml | 88 ++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e0715483a0f0..73fb152c8f04 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1163,70 +1163,70 @@ jobs: matrix: include: # x64 glibc - - os: ubuntu-20.04 - node: 16 - - os: ubuntu-20.04 - node: 18 + # - os: ubuntu-20.04 + # node: 16 + # - os: ubuntu-20.04 + # node: 18 - os: ubuntu-20.04 node: 20 # x64 musl - - os: ubuntu-20.04 - container: node:16-alpine3.16 - node: 16 - - os: ubuntu-20.04 - container: node:18-alpine3.17 - node: 18 + # - os: ubuntu-20.04 + # container: node:16-alpine3.16 + # node: 16 + # - os: ubuntu-20.04 + # container: node:18-alpine3.17 + # node: 18 - os: ubuntu-20.04 container: node:20-alpine3.17 node: 20 # arm64 glibc - - os: ubuntu-20.04 - arch: arm64 - node: 16 - - os: ubuntu-20.04 - arch: arm64 - node: 18 + # - os: ubuntu-20.04 + # arch: arm64 + # node: 16 + # - os: ubuntu-20.04 + # arch: arm64 + # node: 18 - os: ubuntu-20.04 arch: arm64 node: 20 # arm64 musl - - os: ubuntu-20.04 - container: node:16-alpine3.16 - arch: arm64 - node: 16 - - os: ubuntu-20.04 - arch: arm64 - container: node:18-alpine3.17 - node: 18 + # - os: ubuntu-20.04 + # container: node:16-alpine3.16 + # arch: arm64 + # node: 16 + # - os: ubuntu-20.04 + # arch: arm64 + # container: node:18-alpine3.17 + # node: 18 - os: ubuntu-20.04 arch: arm64 container: node:20-alpine3.17 node: 20 # macos x64 - - os: macos-11 - node: 16 - arch: x64 - - os: macos-11 - node: 18 - arch: x64 + # - os: macos-11 + # node: 16 + # arch: x64 + # - os: macos-11 + # node: 18 + # arch: x64 - os: macos-11 node: 20 arch: x64 # macos arm64 - - os: macos-12 - arch: arm64 - node: 16 - target_platform: darwin + # - os: macos-12 + # arch: arm64 + # node: 16 + # target_platform: darwin - - os: macos-12 - arch: arm64 - node: 18 - target_platform: darwin + # - os: macos-12 + # arch: arm64 + # node: 18 + # target_platform: darwin - os: macos-12 arch: arm64 @@ -1234,13 +1234,13 @@ jobs: target_platform: darwin # windows x64 - - os: windows-2019 - node: 16 - arch: x64 + # - os: windows-2019 + # node: 16 + # arch: x64 - - os: windows-2019 - node: 18 - arch: x64 + # - os: windows-2019 + # node: 18 + # arch: x64 - os: windows-2019 node: 20 From 01a98c00694577ba3a22f85b3bf9b6294038c0eb Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 10:55:01 -0500 Subject: [PATCH 160/240] test --python --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 73fb152c8f04..487bb6a8f516 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1300,19 +1300,19 @@ jobs: if: matrix.arch != 'arm64' run: | cd packages/profiling-node - PYTHON=${{ steps.python-setup.outputs.python-path }} yarn build:bindings:configure + yarn build:bindings:configure --python=${{ steps.python-setup.outputs.python-path }} - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' run: | cd packages/profiling-node - PYTHON=${{ steps.python-setup.outputs.python-path }} yarn build:bindings:configure:arm64 + yarn build:bindings:configure:arm64 --python=${{ steps.python-setup.outputs.python-path }} - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | cd packages/profiling-node - PYTHON=${{ steps.python-setup.outputs.python-path }} yarn build:bindings:configure:arm64 + yarn build:bindings:configure:arm64 --python=${{ steps.python-setup.outputs.python-path }} # build monorepo - name: Build Packages From 2eac7b20083916036a3b2375fc6b8b1a67146dd0 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:08:28 -0500 Subject: [PATCH 161/240] test invoking python --- .github/workflows/build.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 487bb6a8f516..10946dbe0f7b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1269,11 +1269,6 @@ jobs: if: contains(matrix.os, 'windows') run: choco install git - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: ${{ matrix.node }} - - name: Setup (alpine) if: contains(matrix.container, 'alpine') run: apk add --no-cache build-base g++ make curl @@ -1287,11 +1282,21 @@ jobs: with: python-version: '3.11' + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + - name: Print which python run: | which python echo "python: ${{ steps.python-setup.outputs.python-path }}" + - name: Verify python cmd + run: | + ${{ steps.python-setup.outputs.python-path }} --version + ${{ steps.python-setup.outputs.python-path }} -c "import sys; print(sys.version_info)" + - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts From de921a5082e8335c12b4fbd4801c24c54b4c98dd Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:11:04 -0500 Subject: [PATCH 162/240] test invoking python --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 10946dbe0f7b..f5ecca721dfd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1294,6 +1294,7 @@ jobs: - name: Verify python cmd run: | + ls -la ${{ steps.python-setup.outputs.python-path }} ${{ steps.python-setup.outputs.python-path }} --version ${{ steps.python-setup.outputs.python-path }} -c "import sys; print(sys.version_info)" From ae05694447f1c7af48ea31981aaae792f3ab7fac Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:14:23 -0500 Subject: [PATCH 163/240] test apk and ln sf --- .github/workflows/build.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f5ecca721dfd..2ac78e8e7885 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1271,13 +1271,16 @@ jobs: - name: Setup (alpine) if: contains(matrix.container, 'alpine') - run: apk add --no-cache build-base g++ make curl + run: | + apk add --no-cache build-base g++ make curl python3 + ln -sf python3 /usr/bin/python - name: Install yarn run: npm i -g yarn --force - name: Setup python uses: actions/setup-python@v4 + if: ${{ !contains(matrix.container, 'alpine') }} id: python-setup with: python-version: '3.11' From 6129495004fe0257dd1336dcc4e28bba8f154fd2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:20:05 -0500 Subject: [PATCH 164/240] test apk and ln sf --- .github/workflows/build.yml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2ac78e8e7885..1eceacc53f16 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1290,16 +1290,11 @@ jobs: with: node-version: ${{ matrix.node }} - - name: Print which python - run: | - which python - echo "python: ${{ steps.python-setup.outputs.python-path }}" - - - name: Verify python cmd - run: | - ls -la ${{ steps.python-setup.outputs.python-path }} - ${{ steps.python-setup.outputs.python-path }} --version - ${{ steps.python-setup.outputs.python-path }} -c "import sys; print(sys.version_info)" + # - name: Test python cmd + # run: | + # which python + # echo "python: ${{ steps.python-setup.outputs.python-path }}" + # python -c "import sys; print(sys.version_info)" - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts From 5ac382082b6adebae13bb161c43900ebe6f67c51 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:30:31 -0500 Subject: [PATCH 165/240] test --- .github/workflows/build.yml | 32 ++++---------------------------- 1 file changed, 4 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1eceacc53f16..46d4c4d86702 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1251,28 +1251,10 @@ jobs: with: ref: ${{ env.HEAD_COMMIT }} - - name: Install git (alpine) - if: contains(matrix.container, 'alpine') - run: | - apk add --no-cache git - git config --global --add safe.directory '*' - - - name: Install git (ubuntu) - if: contains(matrix.os, 'ubuntu') && !contains(matrix.container, 'alpine') - run: sudo apt-get install -y git - - - name: Install git (macos) - if: contains(matrix.os, 'macos') - run: brew install git - - - name: Install git (windows) - if: contains(matrix.os, 'windows') - run: choco install git - - name: Setup (alpine) if: contains(matrix.container, 'alpine') run: | - apk add --no-cache build-base g++ make curl python3 + apk add --no-cache build-base git g++ make curl python3 ln -sf python3 /usr/bin/python - name: Install yarn @@ -1290,12 +1272,6 @@ jobs: with: node-version: ${{ matrix.node }} - # - name: Test python cmd - # run: | - # which python - # echo "python: ${{ steps.python-setup.outputs.python-path }}" - # python -c "import sys; print(sys.version_info)" - - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts @@ -1304,19 +1280,19 @@ jobs: if: matrix.arch != 'arm64' run: | cd packages/profiling-node - yarn build:bindings:configure --python=${{ steps.python-setup.outputs.python-path }} + yarn build:bindings:configure - name: Configure node-gyp (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && matrix.target_platform != 'darwin' run: | cd packages/profiling-node - yarn build:bindings:configure:arm64 --python=${{ steps.python-setup.outputs.python-path }} + yarn build:bindings:configure:arm64 - name: Configure node-gyp (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | cd packages/profiling-node - yarn build:bindings:configure:arm64 --python=${{ steps.python-setup.outputs.python-path }} + yarn build:bindings:configure:arm64 # build monorepo - name: Build Packages From 1951010f1810ca99bc9ff6b9b3ee6ae1a49dd8a9 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:35:43 -0500 Subject: [PATCH 166/240] test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 46d4c4d86702..2cf88370834d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1297,7 +1297,7 @@ jobs: # build monorepo - name: Build Packages run: | - yarn build --ignore @sentry/profiling-node --ignore @sentry/integrations --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser + yarn build --ignore @sentry/profiling-node --ignore --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser # build bindings - name: Build Bindings From 538a63d344fbddc0e936bd8e8a4c7ff7fe0451a5 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:39:44 -0500 Subject: [PATCH 167/240] test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2cf88370834d..ad7cdd802fe1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1297,7 +1297,7 @@ jobs: # build monorepo - name: Build Packages run: | - yarn build --ignore @sentry/profiling-node --ignore --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser + yarn build --ignore @sentry/profiling-node --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser # build bindings - name: Build Bindings From bf9cd5b379ffc053d8f371ffdeb28c01698e7f9d Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:48:12 -0500 Subject: [PATCH 168/240] skip build bc I'm tired --- .github/workflows/build.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ad7cdd802fe1..ae9760e40bd6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1294,11 +1294,6 @@ jobs: cd packages/profiling-node yarn build:bindings:configure:arm64 - # build monorepo - - name: Build Packages - run: | - yarn build --ignore @sentry/profiling-node --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser - # build bindings - name: Build Bindings if: matrix.arch != 'arm64' From 518098d8a1a23325193c28e3736bf017d67ac6c2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:49:44 -0500 Subject: [PATCH 169/240] skip test --- .github/workflows/build.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ae9760e40bd6..704a1e22f4a2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1294,6 +1294,11 @@ jobs: cd packages/profiling-node yarn build:bindings:configure:arm64 + # build monorepo + - name: Build Packages + run: | + yarn build --ignore @sentry/profiling-node --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser + # build bindings - name: Build Bindings if: matrix.arch != 'arm64' @@ -1332,10 +1337,6 @@ jobs: run: | BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node - - name: Unit Test - if: matrix.arch != 'arm64' - run: yarn lerna run test --scope @sentry/profiling-node - - name: Archive Binary # @TODO: v4 breaks convenient merging of same name artifacts # https://github.com/actions/upload-artifact/issues/478 From 3ea252d4f1b31e9a0cb31248339a0c6b1c5a1b62 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:53:32 -0500 Subject: [PATCH 170/240] skip build --- .github/workflows/build.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 704a1e22f4a2..3ecde4e82569 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1294,11 +1294,6 @@ jobs: cd packages/profiling-node yarn build:bindings:configure:arm64 - # build monorepo - - name: Build Packages - run: | - yarn build --ignore @sentry/profiling-node --ignore @sentry/astro --ignore @sentry/serverless --ignore @sentry/browser - # build bindings - name: Build Bindings if: matrix.arch != 'arm64' From 234c07da11fffb121fe35e5685e5e030c1e82d6d Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:56:53 -0500 Subject: [PATCH 171/240] skip build --- .github/workflows/build.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3ecde4e82569..4dfe09cdc979 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1246,17 +1246,17 @@ jobs: node: 20 arch: x64 steps: - - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - uses: actions/checkout@v4 - with: - ref: ${{ env.HEAD_COMMIT }} - - name: Setup (alpine) if: contains(matrix.container, 'alpine') run: | apk add --no-cache build-base git g++ make curl python3 ln -sf python3 /usr/bin/python + - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) + uses: actions/checkout@v4 + with: + ref: ${{ env.HEAD_COMMIT }} + - name: Install yarn run: npm i -g yarn --force From 30bcb66cfae0118fde69060136ba79e48b1a5a7e Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 11:59:05 -0500 Subject: [PATCH 172/240] test checkout v3 --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4dfe09cdc979..3b880b45f649 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1253,7 +1253,7 @@ jobs: ln -sf python3 /usr/bin/python - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - uses: actions/checkout@v4 + uses: actions/checkout@v3 with: ref: ${{ env.HEAD_COMMIT }} @@ -1268,7 +1268,7 @@ jobs: python-version: '3.11' - name: Setup Node - uses: actions/setup-node@v4 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node }} From cb731ab76f09f9ed6b05ac3a3afb566950d7e999 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 12:03:57 -0500 Subject: [PATCH 173/240] test build --- .github/workflows/build.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3b880b45f649..8742f6a2a983 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1294,6 +1294,9 @@ jobs: cd packages/profiling-node yarn build:bindings:configure:arm64 + - name: Build Monorepo + run: yarn build + # build bindings - name: Build Bindings if: matrix.arch != 'arm64' @@ -1332,6 +1335,11 @@ jobs: run: | BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node + - name: Test Bindings + if: matrix.arch != 'arm64' + run: | + yarn lerna run test:bindings --scope @sentry/profiling-node + - name: Archive Binary # @TODO: v4 breaks convenient merging of same name artifacts # https://github.com/actions/upload-artifact/issues/478 From fd05ab7b45b8e1eb214e64060ad91b7b1dedb9e6 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 12:10:28 -0500 Subject: [PATCH 174/240] test checkout v2 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8742f6a2a983..243b2fefe771 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1253,7 +1253,7 @@ jobs: ln -sf python3 /usr/bin/python - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - uses: actions/checkout@v3 + uses: actions/checkout@v2 with: ref: ${{ env.HEAD_COMMIT }} From 77977f88be502f479b3ad83508611f75262916b1 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 12:16:14 -0500 Subject: [PATCH 175/240] test checkout v2 --- .github/workflows/build.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 243b2fefe771..6cbb3e91b06f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1257,6 +1257,10 @@ jobs: with: ref: ${{ env.HEAD_COMMIT }} + - name: Configure safe directory + run: | + git config --global --add safe.directory "*" + - name: Install yarn run: npm i -g yarn --force From f4b1f27d162456f0ccad22b052191cb177ace5d7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 12:32:13 -0500 Subject: [PATCH 176/240] fix downlevel --- packages/profiling-node/package.json | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 8642fa08486d..6ab3e03b0fff 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -8,6 +8,13 @@ "license": "MIT", "main": "lib/index.js", "types": "lib/types/index.d.ts", + "typesVersions": { + "<4.9": { + "lib/types/index.d.ts": [ + "lib/types-ts3.8/index.d.ts" + ] + } + }, "bin": { "sentry-prune-profiler-binaries": "scripts/prune-profiler-binaries.js" }, @@ -42,7 +49,8 @@ "build": "yarn build:lib && yarn build:bindings:configure && yarn build:bindings", "build:lib": "yarn build:types && rollup -c rollup.npm.config.mjs", "build:transpile": "yarn build:bindings:configure && yarn build:bindings && yarn build:lib", - "build:types": "tsc -p tsconfig.types.json", + "build:types:downlevel": "yarn downlevel-dts lib/types lib/types-ts3.8 --to ts3.8", + "build:types": "tsc -p tsconfig.types.json && yarn build:types:downlevel", "build:types:watch": "tsc -p tsconfig.types.json --watch", "build:bindings:configure": "node-gyp configure --verbose", "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64 --verbose", From 89a1400de84bdc7e829d5144acd849aad57ee0df Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 12:43:02 -0500 Subject: [PATCH 177/240] ignore serverless --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6cbb3e91b06f..ba45a8ee9fe9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1299,7 +1299,7 @@ jobs: yarn build:bindings:configure:arm64 - name: Build Monorepo - run: yarn build + run: yarn build --ignore @sentry/serverless # build bindings - name: Build Bindings From 03341899718d9c3805d013a41c03ff010b439924 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 13:00:00 -0500 Subject: [PATCH 178/240] test --- .github/workflows/build.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ba45a8ee9fe9..b56c108bf444 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1325,19 +1325,23 @@ jobs: run: | CC=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc \ CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ - BUILD_ARCH=arm64 yarn lerna run build:bindings --scope @sentry/profiling-node + BUILD_ARCH=arm64 \ + yarn lerna run build:bindings --scope @sentry/profiling-node - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | CC=aarch64-linux-gnu-gcc \ CXX=aarch64-linux-gnu-g++ \ - BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node + BUILD_ARCH=arm64 \ + yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node - name: Build Bindings (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | - BUILD_PLATFORM=darwin BUILD_ARCH=arm64 yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node + BUILD_PLATFORM=darwin \ + BUILD_ARCH=arm64 \ + yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node - name: Test Bindings if: matrix.arch != 'arm64' From 0deb6a4a87cd1c414f1bb24fb84784341144c885 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 13:15:01 -0500 Subject: [PATCH 179/240] ignore browser --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b56c108bf444..78de9b683461 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1299,7 +1299,7 @@ jobs: yarn build:bindings:configure:arm64 - name: Build Monorepo - run: yarn build --ignore @sentry/serverless + run: yarn build --ignore @sentry/serverless --ignore @sentry/browser # build bindings - name: Build Bindings From e96ebaf2d708a6af9565467d7210ec4fd3d56851 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 13:28:09 -0500 Subject: [PATCH 180/240] setup before configure --- .github/workflows/build.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 78de9b683461..444d06a14192 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1279,6 +1279,19 @@ jobs: - name: Install Dependencies run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts + - name: Setup (arm64| ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) + if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' + run: | + sudo apt-get update + sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu + + - name: Setup Musl + if: contains(matrix.container, 'alpine') + run: | + curl -OL https://musl.cc/aarch64-linux-musl-cross.tgz + tar -xzvf aarch64-linux-musl-cross.tgz + $(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc --version + # configure node-gyp - name: Configure node-gyp if: matrix.arch != 'arm64' @@ -1307,19 +1320,6 @@ jobs: run: | yarn lerna run build:bindings --scope @sentry/profiling-node - - name: Setup (arm64| ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) - if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' - run: | - sudo apt-get update - sudo apt install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu - - - name: Setup Musl - if: contains(matrix.container, 'alpine') - run: | - curl -OL https://musl.cc/aarch64-linux-musl-cross.tgz - tar -xzvf aarch64-linux-musl-cross.tgz - $(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc --version - - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | From cfddf99037781d110eee72f2e16a06ca0fe8e63d Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 13:59:07 -0500 Subject: [PATCH 181/240] install cc in dir --- .github/workflows/build.yml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 444d06a14192..8d73a2f88133 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1288,6 +1288,7 @@ jobs: - name: Setup Musl if: contains(matrix.container, 'alpine') run: | + cd packages/profiling-node curl -OL https://musl.cc/aarch64-linux-musl-cross.tgz tar -xzvf aarch64-linux-musl-cross.tgz $(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc --version @@ -1323,25 +1324,28 @@ jobs: - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | + cd packages/profiling-node CC=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc \ CXX=$(pwd)/aarch64-linux-musl-cross/bin/aarch64-linux-musl-g++ \ BUILD_ARCH=arm64 \ - yarn lerna run build:bindings --scope @sentry/profiling-node + yarn build:bindings - name: Build Bindings (arm64, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) if: matrix.arch == 'arm64' && !contains(matrix.container, 'alpine') && matrix.target_platform != 'darwin' run: | + cd packages/profiling-node CC=aarch64-linux-gnu-gcc \ CXX=aarch64-linux-gnu-g++ \ BUILD_ARCH=arm64 \ - yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node + yarn build:bindings:arm64 - name: Build Bindings (arm64, darwin) if: matrix.arch == 'arm64' && matrix.target_platform == 'darwin' run: | + cd packages/profiling-node BUILD_PLATFORM=darwin \ BUILD_ARCH=arm64 \ - yarn lerna run build:bindings:arm64 --scope @sentry/profiling-node + yarn build:bindings:arm64 - name: Test Bindings if: matrix.arch != 'arm64' From 19680a7c03d4b71f4c901a824ee7dc79824b741c Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 14:37:23 -0500 Subject: [PATCH 182/240] test python 3.8.10 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8d73a2f88133..055a7dbb1261 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1269,7 +1269,7 @@ jobs: if: ${{ !contains(matrix.container, 'alpine') }} id: python-setup with: - python-version: '3.11' + python-version: '3.8.10' - name: Setup Node uses: actions/setup-node@v3 From f635d4c6950293a95277675371bbf5dbaa9ae0fe Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 14:39:12 -0500 Subject: [PATCH 183/240] remove verbose --- packages/profiling-node/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 6ab3e03b0fff..cd2489ceed9f 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -52,8 +52,8 @@ "build:types:downlevel": "yarn downlevel-dts lib/types lib/types-ts3.8 --to ts3.8", "build:types": "tsc -p tsconfig.types.json && yarn build:types:downlevel", "build:types:watch": "tsc -p tsconfig.types.json --watch", - "build:bindings:configure": "node-gyp configure --verbose", - "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64 --verbose", + "build:bindings:configure": "node-gyp configure", + "build:bindings:configure:arm64": "node-gyp configure --arch=arm64 --target_arch=arm64", "build:bindings": "node-gyp build && node scripts/copy-target.js", "build:bindings:arm64": "node-gyp build --arch=arm64 && node scripts/copy-target.js", "build:dev": "yarn clean && yarn build:bindings:configure && yarn build", From 3b3a96f76ed117ce788d4b914af95c7f72360b0d Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 14:45:08 -0500 Subject: [PATCH 184/240] move build repo lower --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 055a7dbb1261..95dd0481cb1c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1312,9 +1312,6 @@ jobs: cd packages/profiling-node yarn build:bindings:configure:arm64 - - name: Build Monorepo - run: yarn build --ignore @sentry/serverless --ignore @sentry/browser - # build bindings - name: Build Bindings if: matrix.arch != 'arm64' @@ -1347,6 +1344,9 @@ jobs: BUILD_ARCH=arm64 \ yarn build:bindings:arm64 + - name: Build Monorepo + run: yarn build --ignore @sentry/serverless --ignore @sentry/browser + - name: Test Bindings if: matrix.arch != 'arm64' run: | From c8bee3c28338b3ca209211cc45b09f6dfa1c1f10 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 14:49:29 -0500 Subject: [PATCH 185/240] pin yarn to v1 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 95dd0481cb1c..fafb028e09f4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1262,7 +1262,7 @@ jobs: git config --global --add safe.directory "*" - name: Install yarn - run: npm i -g yarn --force + run: npm i -g yarn@1.22.19 --force - name: Setup python uses: actions/setup-python@v4 From 906598eee95564ab37b8bba16fc8725825ca863a Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 14:55:43 -0500 Subject: [PATCH 186/240] add other images --- .github/workflows/build.yml | 96 ++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fafb028e09f4..07d67d6c93ba 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1162,71 +1162,71 @@ jobs: fail-fast: false matrix: include: - # x64 glibc - # - os: ubuntu-20.04 - # node: 16 - # - os: ubuntu-20.04 - # node: 18 + # x64 glibc + - os: ubuntu-20.04 + node: 16 + - os: ubuntu-20.04 + node: 18 - os: ubuntu-20.04 node: 20 - # x64 musl - # - os: ubuntu-20.04 - # container: node:16-alpine3.16 - # node: 16 - # - os: ubuntu-20.04 - # container: node:18-alpine3.17 - # node: 18 + # x64 musl + - os: ubuntu-20.04 + container: node:16-alpine3.16 + node: 16 + - os: ubuntu-20.04 + container: node:18-alpine3.17 + node: 18 - os: ubuntu-20.04 container: node:20-alpine3.17 node: 20 - # arm64 glibc - # - os: ubuntu-20.04 - # arch: arm64 - # node: 16 - # - os: ubuntu-20.04 - # arch: arm64 - # node: 18 + # arm64 glibc + - os: ubuntu-20.04 + arch: arm64 + node: 16 + - os: ubuntu-20.04 + arch: arm64 + node: 18 - os: ubuntu-20.04 arch: arm64 node: 20 - # arm64 musl - # - os: ubuntu-20.04 - # container: node:16-alpine3.16 - # arch: arm64 - # node: 16 - # - os: ubuntu-20.04 - # arch: arm64 - # container: node:18-alpine3.17 - # node: 18 + # arm64 musl + - os: ubuntu-20.04 + container: node:16-alpine3.16 + arch: arm64 + node: 16 + - os: ubuntu-20.04 + arch: arm64 + container: node:18-alpine3.17 + node: 18 - os: ubuntu-20.04 arch: arm64 container: node:20-alpine3.17 node: 20 # macos x64 - # - os: macos-11 - # node: 16 - # arch: x64 - # - os: macos-11 - # node: 18 - # arch: x64 + - os: macos-11 + node: 16 + arch: x64 + - os: macos-11 + node: 18 + arch: x64 - os: macos-11 node: 20 arch: x64 # macos arm64 - # - os: macos-12 - # arch: arm64 - # node: 16 - # target_platform: darwin + - os: macos-12 + arch: arm64 + node: 16 + target_platform: darwin - # - os: macos-12 - # arch: arm64 - # node: 18 - # target_platform: darwin + - os: macos-12 + arch: arm64 + node: 18 + target_platform: darwin - os: macos-12 arch: arm64 @@ -1234,13 +1234,13 @@ jobs: target_platform: darwin # windows x64 - # - os: windows-2019 - # node: 16 - # arch: x64 + - os: windows-2019 + node: 16 + arch: x64 - # - os: windows-2019 - # node: 18 - # arch: x64 + - os: windows-2019 + node: 18 + arch: x64 - os: windows-2019 node: 20 From fe86b26f3e1b76f75db61419f4a1352bfc3573eb Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 15:20:10 -0500 Subject: [PATCH 187/240] add other images --- packages/profiling-node/package.json | 7 +++---- packages/profiling-node/rollup.npm.config.mjs | 2 +- packages/profiling-node/scripts/binaries.js | 2 +- packages/profiling-node/scripts/copy-target.js | 4 ++-- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index cd2489ceed9f..24342f40895f 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -6,7 +6,7 @@ "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/profiling-node", "author": "Sentry", "license": "MIT", - "main": "lib/index.js", + "main": "lib/npm/index.js", "types": "lib/types/index.d.ts", "typesVersions": { "<4.9": { @@ -25,13 +25,11 @@ "access": "public" }, "files": [ - "lib", "bindings", "binding.gyp", "LICENSE", "README.md", "package.json", - "package-lock.json", "scripts/binaries.js", "scripts/check-build.js", "scripts/copy-target.js", @@ -59,6 +57,7 @@ "build:dev": "yarn clean && yarn build:bindings:configure && yarn build", "build:transpile:watch": "rollup -c rollup.npm.config.mjs --watch", "build:watch": "run-p build:transpile:watch build:types:watch", + "build:tarball": "ts-node ../../scripts/prepack.ts --bundles && npm pack ./build/npm", "test:watch": "cross-env SENTRY_PROFILER_BINARY_DIR=build jest --watch", "test:bundle": "node test-binaries.esbuild.js", "test:setup:bundle": "(npm link && cd examples && npm install && npm link @sentry/profiling-node)", @@ -71,7 +70,7 @@ "test:rollup:build": "rollup --config examples/rollup.config.js", "test:rollup:run": "BUNDLER=rollup node examples/dist/rollup/index.js", "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", - "test": "cross-env SENTRY_PROFILER_BINARY_DIR=lib jest --config jest.config.js" + "test": "cross-env SENTRY_PROFILER_BINARY_DIR=lib/npm jest --config jest.config.js" }, "dependencies": { "detect-libc": "^2.0.2", diff --git a/packages/profiling-node/rollup.npm.config.mjs b/packages/profiling-node/rollup.npm.config.mjs index 51e812488bb1..4419350ea876 100644 --- a/packages/profiling-node/rollup.npm.config.mjs +++ b/packages/profiling-node/rollup.npm.config.mjs @@ -13,7 +13,7 @@ if (!cjsConfig) { const config = { ...cjsConfig, input: 'src/index.ts', - output: { ...cjsConfig.output, file: 'lib/index.js', format: 'cjs', dir: undefined, preserveModules: false }, + output: { ...cjsConfig.output, file: 'lib/npm/index.js', format: 'cjs', dir: undefined, preserveModules: false }, plugins: [ plugins.makeLicensePlugin('Sentry Node Profiling'), resolve(), diff --git a/packages/profiling-node/scripts/binaries.js b/packages/profiling-node/scripts/binaries.js index eb0fc636d404..5536da0312f1 100644 --- a/packages/profiling-node/scripts/binaries.js +++ b/packages/profiling-node/scripts/binaries.js @@ -24,7 +24,7 @@ function getModuleName() { } const source = path.join(__dirname, '..', 'build', 'Release', 'sentry_cpu_profiler.node'); -const target = path.join(__dirname, '..', 'lib', getModuleName()); +const target = path.join(__dirname, '..', 'lib', 'npm', getModuleName()); module.exports.source = source; module.exports.target = target; diff --git a/packages/profiling-node/scripts/copy-target.js b/packages/profiling-node/scripts/copy-target.js index c713a8558169..7dc50914b390 100644 --- a/packages/profiling-node/scripts/copy-target.js +++ b/packages/profiling-node/scripts/copy-target.js @@ -3,14 +3,14 @@ const path = require('path'); const process = require('process'); const binaries = require('./binaries.js'); -const build = path.resolve(__dirname, '..', 'lib'); +const build = path.resolve(__dirname, '..', 'lib', 'npm'); if (!fs.existsSync(build)) { fs.mkdirSync(build); } const source = path.join(__dirname, '..', 'build', 'Release', 'sentry_cpu_profiler.node'); -const target = path.join(__dirname, '..', 'lib', binaries.getModuleName()); +const target = path.join(__dirname, '..', 'lib', 'npm', binaries.getModuleName()); if (!fs.existsSync(source)) { // eslint-disable-next-line no-console From cbebe8667473ddad79b1e4706eb6d277e16acdc3 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 15:22:24 -0500 Subject: [PATCH 188/240] add other images --- .github/workflows/build.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 07d67d6c93ba..aca48df66608 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -392,7 +392,8 @@ jobs: env: DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - name: Pack - run: yarn build:tarball + # Profiling tarball is built separately as we assemble the precompiled binaries + run: yarn build:tarball --ignore @sentry/profiling-node - name: Archive artifacts uses: actions/upload-artifact@v4.3.0 with: @@ -1359,7 +1360,7 @@ jobs: with: name: profiling-node-binaries-${{ github.sha }} path: | - ${{ github.workspace }}/packages/profiling-node/lib/*.node + ${{ github.workspace }}/packages/profiling-node/lib/npm/*.node job_build_profiling_node: name: Extract Binaries and Pack Profiling Node @@ -1391,7 +1392,7 @@ jobs: uses: actions/download-artifact@v3 with: name: profiling-node-binaries-${{ github.sha }} - path: packages/profiling-node/lib/ + path: packages/profiling-node/lib/npm/ - name: Pack Profiling Node run: yarn lerna run pack --scope @sentry/profiling-node From bc72c5dd571e53e7bda8614df7e2d2acb3a33d97 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 15:23:22 -0500 Subject: [PATCH 189/240] ignore astro --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index aca48df66608..4609fac00099 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1346,7 +1346,7 @@ jobs: yarn build:bindings:arm64 - name: Build Monorepo - run: yarn build --ignore @sentry/serverless --ignore @sentry/browser + run: yarn build --ignore @sentry/serverless --ignore @sentry/browser --ignore @sentry/astro - name: Test Bindings if: matrix.arch != 'arm64' From b6f68705da7e0c9def090b25da3eaa2a777079c8 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 15:29:27 -0500 Subject: [PATCH 190/240] output to lib --- packages/profiling-node/package.json | 4 ++-- packages/profiling-node/rollup.npm.config.mjs | 2 +- packages/profiling-node/scripts/binaries.js | 2 +- packages/profiling-node/scripts/copy-target.js | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 24342f40895f..3ab4be089417 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -6,7 +6,7 @@ "homepage": "https://github.com/getsentry/sentry-javascript/tree/master/packages/profiling-node", "author": "Sentry", "license": "MIT", - "main": "lib/npm/index.js", + "main": "lib/index.js", "types": "lib/types/index.d.ts", "typesVersions": { "<4.9": { @@ -70,7 +70,7 @@ "test:rollup:build": "rollup --config examples/rollup.config.js", "test:rollup:run": "BUNDLER=rollup node examples/dist/rollup/index.js", "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", - "test": "cross-env SENTRY_PROFILER_BINARY_DIR=lib/npm jest --config jest.config.js" + "test": "cross-env SENTRY_PROFILER_BINARY_DIR=lib jest --config jest.config.js" }, "dependencies": { "detect-libc": "^2.0.2", diff --git a/packages/profiling-node/rollup.npm.config.mjs b/packages/profiling-node/rollup.npm.config.mjs index 4419350ea876..51e812488bb1 100644 --- a/packages/profiling-node/rollup.npm.config.mjs +++ b/packages/profiling-node/rollup.npm.config.mjs @@ -13,7 +13,7 @@ if (!cjsConfig) { const config = { ...cjsConfig, input: 'src/index.ts', - output: { ...cjsConfig.output, file: 'lib/npm/index.js', format: 'cjs', dir: undefined, preserveModules: false }, + output: { ...cjsConfig.output, file: 'lib/index.js', format: 'cjs', dir: undefined, preserveModules: false }, plugins: [ plugins.makeLicensePlugin('Sentry Node Profiling'), resolve(), diff --git a/packages/profiling-node/scripts/binaries.js b/packages/profiling-node/scripts/binaries.js index 5536da0312f1..eb0fc636d404 100644 --- a/packages/profiling-node/scripts/binaries.js +++ b/packages/profiling-node/scripts/binaries.js @@ -24,7 +24,7 @@ function getModuleName() { } const source = path.join(__dirname, '..', 'build', 'Release', 'sentry_cpu_profiler.node'); -const target = path.join(__dirname, '..', 'lib', 'npm', getModuleName()); +const target = path.join(__dirname, '..', 'lib', getModuleName()); module.exports.source = source; module.exports.target = target; diff --git a/packages/profiling-node/scripts/copy-target.js b/packages/profiling-node/scripts/copy-target.js index 7dc50914b390..403d8bcd65d5 100644 --- a/packages/profiling-node/scripts/copy-target.js +++ b/packages/profiling-node/scripts/copy-target.js @@ -3,14 +3,14 @@ const path = require('path'); const process = require('process'); const binaries = require('./binaries.js'); -const build = path.resolve(__dirname, '..', 'lib', 'npm'); +const build = path.resolve(__dirname, '..', 'lib'); if (!fs.existsSync(build)) { - fs.mkdirSync(build); + fs.mkdirSync(build, {recursive: true}); } const source = path.join(__dirname, '..', 'build', 'Release', 'sentry_cpu_profiler.node'); -const target = path.join(__dirname, '..', 'lib', 'npm', binaries.getModuleName()); +const target = path.join(__dirname, '..', 'lib', binaries.getModuleName()); if (!fs.existsSync(source)) { // eslint-disable-next-line no-console From 5162269aaa5a214b94275dfc07588fadb837c30b Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 15:34:44 -0500 Subject: [PATCH 191/240] build tarball just runs pack --- packages/profiling-node/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 3ab4be089417..c35627aa0a40 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -57,7 +57,7 @@ "build:dev": "yarn clean && yarn build:bindings:configure && yarn build", "build:transpile:watch": "rollup -c rollup.npm.config.mjs --watch", "build:watch": "run-p build:transpile:watch build:types:watch", - "build:tarball": "ts-node ../../scripts/prepack.ts --bundles && npm pack ./build/npm", + "build:tarball": "npm pack ./lib", "test:watch": "cross-env SENTRY_PROFILER_BINARY_DIR=build jest --watch", "test:bundle": "node test-binaries.esbuild.js", "test:setup:bundle": "(npm link && cd examples && npm install && npm link @sentry/profiling-node)", From ef37642db5ae14aa8d8e2377b4cf1d2bbc56cb47 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 15:36:07 -0500 Subject: [PATCH 192/240] list binaries --- .github/workflows/build.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4609fac00099..e1b43273fe8b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1360,7 +1360,7 @@ jobs: with: name: profiling-node-binaries-${{ github.sha }} path: | - ${{ github.workspace }}/packages/profiling-node/lib/npm/*.node + ${{ github.workspace }}/packages/profiling-node/lib/*.node job_build_profiling_node: name: Extract Binaries and Pack Profiling Node @@ -1392,10 +1392,13 @@ jobs: uses: actions/download-artifact@v3 with: name: profiling-node-binaries-${{ github.sha }} - path: packages/profiling-node/lib/npm/ + path: packages/profiling-node/lib/ + + - name: List binaries + run: ls -la packages/profiling-node/lib/ - name: Pack Profiling Node - run: yarn lerna run pack --scope @sentry/profiling-node + run: yarn build:tarball --scope @sentry/profiling-node # job_e2e_profiling_node: # name: "E2E Profiling Node Tests" From 80a2d7e855581d6afbeb6d38363ba425a397a741 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 15:47:47 -0500 Subject: [PATCH 193/240] add simple e2e app --- .github/workflows/build.yml | 7 +---- .../node-profiling/.gitignore | 1 + .../test-applications/node-profiling/.npmrc | 2 ++ .../test-applications/node-profiling/build.js | 20 +++++++++++++ .../test-applications/node-profiling/index.js | 18 +++++++++++ .../node-profiling/package.json | 30 +++++++++++++++++++ 6 files changed, 72 insertions(+), 6 deletions(-) create mode 100644 dev-packages/e2e-tests/test-applications/node-profiling/.gitignore create mode 100644 dev-packages/e2e-tests/test-applications/node-profiling/.npmrc create mode 100644 dev-packages/e2e-tests/test-applications/node-profiling/build.js create mode 100644 dev-packages/e2e-tests/test-applications/node-profiling/index.js create mode 100644 dev-packages/e2e-tests/test-applications/node-profiling/package.json diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e1b43273fe8b..04491df9862b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -997,6 +997,7 @@ jobs: 'node-experimental-fastify-app', 'node-hapi-app', 'node-exports-test-app', + 'node-profiling' ] build-command: - false @@ -1399,9 +1400,3 @@ jobs: - name: Pack Profiling Node run: yarn build:tarball --scope @sentry/profiling-node - - # job_e2e_profiling_node: - # name: "E2E Profiling Node Tests" - # runs-on: ubuntu-latest - # needs: [job_get_metadata, job_build_profiling_node] - # timeout-minutes: 10 diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/.gitignore b/dev-packages/e2e-tests/test-applications/node-profiling/.gitignore new file mode 100644 index 000000000000..1521c8b7652b --- /dev/null +++ b/dev-packages/e2e-tests/test-applications/node-profiling/.gitignore @@ -0,0 +1 @@ +dist diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/.npmrc b/dev-packages/e2e-tests/test-applications/node-profiling/.npmrc new file mode 100644 index 000000000000..070f80f05092 --- /dev/null +++ b/dev-packages/e2e-tests/test-applications/node-profiling/.npmrc @@ -0,0 +1,2 @@ +@sentry:registry=http://127.0.0.1:4873 +@sentry-internal:registry=http://127.0.0.1:4873 diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/build.js b/dev-packages/e2e-tests/test-applications/node-profiling/build.js new file mode 100644 index 000000000000..0760c5424405 --- /dev/null +++ b/dev-packages/e2e-tests/test-applications/node-profiling/build.js @@ -0,0 +1,20 @@ +// Because bundlers can now predetermine a static set of binaries we need to ensure those binaries +// actually exists, else we risk a compile time error when bundling the package. This could happen +// if we added a new binary in cpu_profiler.ts, but forgot to prebuild binaries for it. Because CI +// only runs integration and unit tests, this change would be missed and could end up in a release. +// Therefor, once all binaries are precompiled in CI and tests pass, run esbuild with bundle:true +// which will copy all binaries to the outfile folder and throw if any of them are missing. +const esbuild = require('esbuild'); + +esbuild.build({ + platform: 'node', + entryPoints: ['./index.js'], + outfile: './dist/index.js', + target: 'esnext', + format: 'cjs', + bundle: true, + tsconfig: './tsconfig.json', + loader: { + '.node': 'copy', + }, +}); diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/index.js b/dev-packages/e2e-tests/test-applications/node-profiling/index.js new file mode 100644 index 000000000000..0218505d182f --- /dev/null +++ b/dev-packages/e2e-tests/test-applications/node-profiling/index.js @@ -0,0 +1,18 @@ +const Sentry = require('@sentry/node'); +const Profiling = require('./lib'); + +const wait = ms => new Promise(resolve => setTimeout(resolve, ms)); + +Sentry.init({ + dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', + integrations: [new Profiling.ProfilingIntegration()], + tracesSampleRate: 1.0, + profilesSampleRate: 1.0, +}); + +const txn = Sentry.startTransaction('Precompile test'); + +(async () => { + await wait(500); + txn.finish(); +})(); diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/package.json b/dev-packages/e2e-tests/test-applications/node-profiling/package.json new file mode 100644 index 000000000000..3d96da87cb07 --- /dev/null +++ b/dev-packages/e2e-tests/test-applications/node-profiling/package.json @@ -0,0 +1,30 @@ +{ + "name": "node-profiling", + "version": "1.0.0", + "private": true, + "scripts": { + "build": "node build.js", + "start": "node index.js", + "test": "node index.js && node build.js", + "clean": "npx rimraf node_modules", + "test:build": "npm run build", + "test:assert": "npm run test" + }, + "dependencies": { + "@sentry/integrations": "latest || *", + "@sentry/node": "latest || *", + "@sentry/tracing": "latest || *", + "@sentry/types": "latest || *", + "express": "4.18.2", + "@types/express": "4.17.17", + "@types/node": "18.15.1", + "typescript": "4.9.5" + }, + "devDependencies": { + "@playwright/test": "^1.27.1", + "ts-node": "10.9.1" + }, + "volta": { + "extends": "../../package.json" + } +} From 1c74cba718ff6770eef0a33e131daddab91ab4ed Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 16:06:13 -0500 Subject: [PATCH 194/240] skip build bundlegst --- .github/workflows/build.yml | 2 +- packages/profiling-node/scripts/copy-target.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 04491df9862b..2906a49fa9db 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1347,7 +1347,7 @@ jobs: yarn build:bindings:arm64 - name: Build Monorepo - run: yarn build --ignore @sentry/serverless --ignore @sentry/browser --ignore @sentry/astro + run: yarn lerna run build:transpile,build:types --ignore @sentry/serverless --ignore @sentry/browser --ignore @sentry/astro - name: Test Bindings if: matrix.arch != 'arm64' diff --git a/packages/profiling-node/scripts/copy-target.js b/packages/profiling-node/scripts/copy-target.js index 403d8bcd65d5..5b029ddde3d3 100644 --- a/packages/profiling-node/scripts/copy-target.js +++ b/packages/profiling-node/scripts/copy-target.js @@ -6,7 +6,7 @@ const binaries = require('./binaries.js'); const build = path.resolve(__dirname, '..', 'lib'); if (!fs.existsSync(build)) { - fs.mkdirSync(build, {recursive: true}); + fs.mkdirSync(build, { recursive: true }); } const source = path.join(__dirname, '..', 'build', 'Release', 'sentry_cpu_profiler.node'); From 943f14b16422ca82739e04d40310a0295603754e Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 16:06:26 -0500 Subject: [PATCH 195/240] try cache deps bc this is crazy --- .github/workflows/build.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2906a49fa9db..d7d1af92b77b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1156,7 +1156,7 @@ jobs: job_compile_bindings_profiling_node: name: Compile & Test Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} - needs: [job_get_metadata] + needs: [job_get_metadata, job_install_deps] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} timeout-minutes: 20 @@ -1259,6 +1259,13 @@ jobs: with: ref: ${{ env.HEAD_COMMIT }} + - name: Check dependency cache + uses: actions/cache/restore@v3 + with: + path: ${{ env.CACHED_DEPENDENCY_PATHS }} + key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} + fail-on-cache-miss: true + - name: Configure safe directory run: | git config --global --add safe.directory "*" From 4a4a3e3b915245349fb6ba63aacc477a498ac0e2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 16:19:00 -0500 Subject: [PATCH 196/240] os cache yolo --- .github/workflows/build.yml | 2 +- packages/profiling-node/package.json | 1 - yarn.lock | 144 --------------------------- 3 files changed, 1 insertion(+), 146 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d7d1af92b77b..ccd95f186d0b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1264,7 +1264,7 @@ jobs: with: path: ${{ env.CACHED_DEPENDENCY_PATHS }} key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} - fail-on-cache-miss: true + enableCrossOsArchive: true - name: Configure safe directory run: | diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index c35627aa0a40..905a947e0354 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -87,7 +87,6 @@ "clang-format": "^1.8.0", "cross-env": "^7.0.3", "node-gyp": "^9.4.1", - "esbuild": "^0.19.11", "typescript": "^4.9.5" }, "volta": { diff --git a/yarn.lock b/yarn.lock index 4f3cf98e54ca..d4af50d1f57e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2729,11 +2729,6 @@ broccoli-funnel "^3.0.5" ember-cli-babel "^7.26.11" -"@esbuild/aix-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz#2acd20be6d4f0458bc8c784103495ff24f13b1d3" - integrity sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g== - "@esbuild/android-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" @@ -2744,11 +2739,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz#984b4f9c8d0377443cc2dfcef266d02244593622" integrity sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ== -"@esbuild/android-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz#b45d000017385c9051a4f03e17078abb935be220" - integrity sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q== - "@esbuild/android-arm64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.4.tgz#74752a09301b8c6b9a415fbda9fb71406a62a7b7" @@ -2769,11 +2759,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.18.20.tgz#fedb265bc3a589c84cc11f810804f234947c3682" integrity sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw== -"@esbuild/android-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.11.tgz#f46f55414e1c3614ac682b29977792131238164c" - integrity sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw== - "@esbuild/android-arm@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.4.tgz#c27363e1e280e577d9b5c8fa7c7a3be2a8d79bf5" @@ -2794,11 +2779,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.18.20.tgz#35cf419c4cfc8babe8893d296cd990e9e9f756f2" integrity sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg== -"@esbuild/android-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.11.tgz#bfc01e91740b82011ef503c48f548950824922b2" - integrity sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg== - "@esbuild/android-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.4.tgz#6c9ee03d1488973d928618100048b75b147e0426" @@ -2819,11 +2799,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz#08172cbeccf95fbc383399a7f39cfbddaeb0d7c1" integrity sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA== -"@esbuild/darwin-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz#533fb7f5a08c37121d82c66198263dcc1bed29bf" - integrity sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ== - "@esbuild/darwin-arm64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.4.tgz#64e2ee945e5932cd49812caa80e8896e937e2f8b" @@ -2844,11 +2819,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz#d70d5790d8bf475556b67d0f8b7c5bdff053d85d" integrity sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ== -"@esbuild/darwin-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz#62f3819eff7e4ddc656b7c6815a31cf9a1e7d98e" - integrity sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g== - "@esbuild/darwin-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.4.tgz#d8e26e1b965df284692e4d1263ba69a49b39ac7a" @@ -2869,11 +2839,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz#98755cd12707f93f210e2494d6a4b51b96977f54" integrity sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw== -"@esbuild/freebsd-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz#d478b4195aa3ca44160272dab85ef8baf4175b4a" - integrity sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA== - "@esbuild/freebsd-arm64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.4.tgz#29751a41b242e0a456d89713b228f1da4f45582f" @@ -2894,11 +2859,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz#c1eb2bff03915f87c29cece4c1a7fa1f423b066e" integrity sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ== -"@esbuild/freebsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz#7bdcc1917409178257ca6a1a27fe06e797ec18a2" - integrity sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw== - "@esbuild/freebsd-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.4.tgz#873edc0f73e83a82432460ea59bf568c1e90b268" @@ -2919,11 +2879,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz#bad4238bd8f4fc25b5a021280c770ab5fc3a02a0" integrity sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA== -"@esbuild/linux-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz#58ad4ff11685fcc735d7ff4ca759ab18fcfe4545" - integrity sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg== - "@esbuild/linux-arm64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.4.tgz#659f2fa988d448dbf5010b5cc583be757cc1b914" @@ -2944,11 +2899,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz#3e617c61f33508a27150ee417543c8ab5acc73b0" integrity sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg== -"@esbuild/linux-arm@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz#ce82246d873b5534d34de1e5c1b33026f35e60e3" - integrity sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q== - "@esbuild/linux-arm@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.4.tgz#d5b13a7ec1f1c655ce05c8d319b3950797baee55" @@ -2969,11 +2919,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz#699391cccba9aee6019b7f9892eb99219f1570a7" integrity sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA== -"@esbuild/linux-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz#cbae1f313209affc74b80f4390c4c35c6ab83fa4" - integrity sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA== - "@esbuild/linux-ia32@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.4.tgz#878cd8bf24c9847c77acdb5dd1b2ef6e4fa27a82" @@ -2994,11 +2939,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz#e6fccb7aac178dd2ffb9860465ac89d7f23b977d" integrity sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg== -"@esbuild/linux-loong64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz#5f32aead1c3ec8f4cccdb7ed08b166224d4e9121" - integrity sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg== - "@esbuild/linux-loong64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.4.tgz#df890499f6e566b7de3aa2361be6df2b8d5fa015" @@ -3019,11 +2959,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz#eeff3a937de9c2310de30622a957ad1bd9183231" integrity sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ== -"@esbuild/linux-mips64el@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz#38eecf1cbb8c36a616261de858b3c10d03419af9" - integrity sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg== - "@esbuild/linux-mips64el@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.4.tgz#76eae4e88d2ce9f4f1b457e93892e802851b6807" @@ -3044,11 +2979,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz#2f7156bde20b01527993e6881435ad79ba9599fb" integrity sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA== -"@esbuild/linux-ppc64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz#9c5725a94e6ec15b93195e5a6afb821628afd912" - integrity sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA== - "@esbuild/linux-ppc64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.4.tgz#c49032f4abbcfa3f747b543a106931fe3dce41ff" @@ -3069,11 +2999,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz#6628389f210123d8b4743045af8caa7d4ddfc7a6" integrity sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A== -"@esbuild/linux-riscv64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz#2dc4486d474a2a62bbe5870522a9a600e2acb916" - integrity sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ== - "@esbuild/linux-riscv64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.4.tgz#0f815a090772138503ee0465a747e16865bf94b1" @@ -3094,11 +3019,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz#255e81fb289b101026131858ab99fba63dcf0071" integrity sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ== -"@esbuild/linux-s390x@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz#4ad8567df48f7dd4c71ec5b1753b6f37561a65a8" - integrity sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q== - "@esbuild/linux-s390x@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.4.tgz#8d2cca20cd4e7c311fde8701d9f1042664f8b92b" @@ -3119,11 +3039,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz#c7690b3417af318a9b6f96df3031a8865176d338" integrity sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w== -"@esbuild/linux-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz#b7390c4d5184f203ebe7ddaedf073df82a658766" - integrity sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA== - "@esbuild/linux-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.4.tgz#f618bec2655de49bff91c588777e37b5e3169d4a" @@ -3144,11 +3059,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz#30e8cd8a3dded63975e2df2438ca109601ebe0d1" integrity sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A== -"@esbuild/netbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz#d633c09492a1721377f3bccedb2d821b911e813d" - integrity sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ== - "@esbuild/netbsd-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.4.tgz#7889744ca4d60f1538d62382b95e90a49687cef2" @@ -3169,11 +3079,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz#7812af31b205055874c8082ea9cf9ab0da6217ae" integrity sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg== -"@esbuild/openbsd-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz#17388c76e2f01125bf831a68c03a7ffccb65d1a2" - integrity sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw== - "@esbuild/openbsd-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.4.tgz#c3e436eb9271a423d2e8436fcb120e3fd90e2b01" @@ -3194,11 +3099,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz#d5c275c3b4e73c9b0ecd38d1ca62c020f887ab9d" integrity sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ== -"@esbuild/sunos-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz#e320636f00bb9f4fdf3a80e548cb743370d41767" - integrity sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ== - "@esbuild/sunos-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.4.tgz#f63f5841ba8c8c1a1c840d073afc99b53e8ce740" @@ -3219,11 +3119,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz#73bc7f5a9f8a77805f357fab97f290d0e4820ac9" integrity sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg== -"@esbuild/win32-arm64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz#c778b45a496e90b6fc373e2a2bb072f1441fe0ee" - integrity sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ== - "@esbuild/win32-arm64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.4.tgz#80be69cec92da4da7781cf7a8351b95cc5a236b0" @@ -3244,11 +3139,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz#ec93cbf0ef1085cc12e71e0d661d20569ff42102" integrity sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g== -"@esbuild/win32-ia32@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz#481a65fee2e5cce74ec44823e6b09ecedcc5194c" - integrity sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg== - "@esbuild/win32-ia32@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.4.tgz#15dc0ed83d2794872b05d8edc4a358fecf97eb54" @@ -3269,11 +3159,6 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz#786c5f41f043b07afb1af37683d7c33668858f6d" integrity sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ== -"@esbuild/win32-x64@0.19.11": - version "0.19.11" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz#a5d300008960bb39677c46bf16f53ec70d8dee04" - integrity sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw== - "@esbuild/win32-x64@0.19.4": version "0.19.4" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.4.tgz#d46a6e220a717f31f39ae80f49477cc3220be0f0" @@ -14785,35 +14670,6 @@ esbuild@^0.18.10: "@esbuild/win32-ia32" "0.18.20" "@esbuild/win32-x64" "0.18.20" -esbuild@^0.19.11: - version "0.19.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.11.tgz#4a02dca031e768b5556606e1b468fe72e3325d96" - integrity sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA== - optionalDependencies: - "@esbuild/aix-ppc64" "0.19.11" - "@esbuild/android-arm" "0.19.11" - "@esbuild/android-arm64" "0.19.11" - "@esbuild/android-x64" "0.19.11" - "@esbuild/darwin-arm64" "0.19.11" - "@esbuild/darwin-x64" "0.19.11" - "@esbuild/freebsd-arm64" "0.19.11" - "@esbuild/freebsd-x64" "0.19.11" - "@esbuild/linux-arm" "0.19.11" - "@esbuild/linux-arm64" "0.19.11" - "@esbuild/linux-ia32" "0.19.11" - "@esbuild/linux-loong64" "0.19.11" - "@esbuild/linux-mips64el" "0.19.11" - "@esbuild/linux-ppc64" "0.19.11" - "@esbuild/linux-riscv64" "0.19.11" - "@esbuild/linux-s390x" "0.19.11" - "@esbuild/linux-x64" "0.19.11" - "@esbuild/netbsd-x64" "0.19.11" - "@esbuild/openbsd-x64" "0.19.11" - "@esbuild/sunos-x64" "0.19.11" - "@esbuild/win32-arm64" "0.19.11" - "@esbuild/win32-ia32" "0.19.11" - "@esbuild/win32-x64" "0.19.11" - esbuild@^0.19.2: version "0.19.4" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.19.4.tgz#cdf5c4c684956d550bc3c6d0c01dac7fef6c75b1" From af349502c30f9fb52253ab3e44503d4a6d667346 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 16:38:35 -0500 Subject: [PATCH 197/240] bump timeout --- .github/workflows/build.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ccd95f186d0b..147f8a41d803 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -945,7 +945,7 @@ jobs: # On develop branch, we want to _store_ the cache (so it can be used by other branches), but never _restore_ from it restore-keys: ${{ env.NX_CACHE_RESTORE_KEYS }} - name: Build tarballs - run: yarn build:tarball + run: yarn build:tarball --ignore @sentry/profiling-node - name: Stores tarballs in cache uses: actions/cache/save@v4 with: @@ -1236,15 +1236,15 @@ jobs: target_platform: darwin # windows x64 - - os: windows-2019 + - os: windows-2022 node: 16 arch: x64 - - os: windows-2019 + - os: windows-2022 node: 18 arch: x64 - - os: windows-2019 + - os: windows-2022 node: 20 arch: x64 steps: @@ -1271,7 +1271,9 @@ jobs: git config --global --add safe.directory "*" - name: Install yarn - run: npm i -g yarn@1.22.19 --force + run: | + npm i -g yarn@1.22.19 --force + yarn config set network-timeout 600000 -g - name: Setup python uses: actions/setup-python@v4 From b1128d0634fca400172305b038eb84bb7741fdc2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 16:49:39 -0500 Subject: [PATCH 198/240] test --- packages/profiling-node/examples/esbuild.mjs | 19 ------------- packages/profiling-node/examples/index.js | 25 ----------------- packages/profiling-node/examples/package.json | 14 ---------- .../profiling-node/examples/rollup.config.js | 28 ------------------- .../profiling-node/examples/webpack.config.js | 25 ----------------- packages/profiling-node/package.json | 10 ------- .../profiling-node/test-binaries.esbuild.js | 1 - 7 files changed, 122 deletions(-) delete mode 100644 packages/profiling-node/examples/esbuild.mjs delete mode 100644 packages/profiling-node/examples/index.js delete mode 100644 packages/profiling-node/examples/package.json delete mode 100644 packages/profiling-node/examples/rollup.config.js delete mode 100644 packages/profiling-node/examples/webpack.config.js diff --git a/packages/profiling-node/examples/esbuild.mjs b/packages/profiling-node/examples/esbuild.mjs deleted file mode 100644 index edb672633db4..000000000000 --- a/packages/profiling-node/examples/esbuild.mjs +++ /dev/null @@ -1,19 +0,0 @@ -import path from 'path'; -import esbuild from 'esbuild'; - -import { URL, fileURLToPath } from 'url'; - -const __dirname = fileURLToPath(new URL('.', import.meta.url)); - -esbuild.build({ - platform: 'node', - format: 'cjs', - target: 'node12', - entryPoints: [path.resolve(__dirname, './index.js')], - outdir: path.resolve(__dirname, './dist/esbuild'), - bundle: true, - loader: { - '.node': 'copy', - }, - tsconfig: path.resolve(__dirname, '../tsconfig.json'), -}); diff --git a/packages/profiling-node/examples/index.js b/packages/profiling-node/examples/index.js deleted file mode 100644 index 102ea5baeb0f..000000000000 --- a/packages/profiling-node/examples/index.js +++ /dev/null @@ -1,25 +0,0 @@ -const Sentry = require('@sentry/node'); -const profiling = require('@sentry/profiling-node'); - -Sentry.init({ - dsn: '', - integrations: [new profiling.ProfilingIntegration()], - tracesSampleRate: 1, - profilesSampleRate: 1, -}); - -const transaction = Sentry.startTransaction({ name: `${process.env['BUNDLER']}-application-build` }); - -function sleep(time) { - const stop = new Date().getTime(); - while (new Date().getTime() < stop + time) { - // block - } -} - -sleep(1000); -transaction.finish(); - -(async () => { - await Sentry.flush(); -})(); diff --git a/packages/profiling-node/examples/package.json b/packages/profiling-node/examples/package.json deleted file mode 100644 index e83a13ea2d04..000000000000 --- a/packages/profiling-node/examples/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "examples", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "@sentry/node": "^7.58.1" - } -} diff --git a/packages/profiling-node/examples/rollup.config.js b/packages/profiling-node/examples/rollup.config.js deleted file mode 100644 index 8b009d323fe0..000000000000 --- a/packages/profiling-node/examples/rollup.config.js +++ /dev/null @@ -1,28 +0,0 @@ -const rollupNativePlugin = require('rollup-plugin-natives'); -const path = require('path'); - -const commonjs = require('@rollup/plugin-commonjs'); -const { nodeResolve } = require('@rollup/plugin-node-resolve'); - -module.exports = { - input: path.resolve(__dirname, './index.js'), - output: { - format: 'cjs', - dir: path.resolve(__dirname, './dist/rollup'), - }, - plugins: [ - nodeResolve({ - extensions: ['.js', '.ts'], - }), - commonjs({ - strictRequires: true, - }), - rollupNativePlugin({ - // Where we want to physically put the extracted .node files - copyTo: path.resolve(__dirname, './dist/rollup'), - - // Path to the same folder, relative to the output bundle js - destDir: path.resolve(__dirname, './dist/rollup'), - }), - ], -}; diff --git a/packages/profiling-node/examples/webpack.config.js b/packages/profiling-node/examples/webpack.config.js deleted file mode 100644 index e3ed93c99b61..000000000000 --- a/packages/profiling-node/examples/webpack.config.js +++ /dev/null @@ -1,25 +0,0 @@ -const path = require('path'); - -module.exports = { - target: 'node', - entry: path.resolve(__dirname, './index.js'), - mode: 'production', - optimization: { - minimize: false, - }, - module: { - rules: [ - { - test: /\.node$/, - loader: 'file-loader', - }, - ], - }, - resolve: { - extensions: ['.tsx', '.ts', '.js'], - }, - output: { - filename: 'index.js', - path: path.resolve(__dirname, './dist/webpack'), - }, -}; diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 905a947e0354..6c67725794e9 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -60,16 +60,6 @@ "build:tarball": "npm pack ./lib", "test:watch": "cross-env SENTRY_PROFILER_BINARY_DIR=build jest --watch", "test:bundle": "node test-binaries.esbuild.js", - "test:setup:bundle": "(npm link && cd examples && npm install && npm link @sentry/profiling-node)", - "test:esbuild:build": "node examples/esbuild.js", - "test:esbuild:run": "BUNDLER=esbuild node examples/dist/esbuild/index.js", - "test:esbuild": "yarn test:esbuild:build && yarn test:esbuild:run", - "test:webpack:build": "webpack --config examples/webpack.config.js", - "test:webpack:run": "BUNDLER=webpack node examples/dist/webpack/index.js", - "test:webpack": "yarn test:webpack:build && yarn test:webpack:run", - "test:rollup:build": "rollup --config examples/rollup.config.js", - "test:rollup:run": "BUNDLER=rollup node examples/dist/rollup/index.js", - "test:rollup": "yarn test:rollup:build && yarn test:rollup:run", "test": "cross-env SENTRY_PROFILER_BINARY_DIR=lib jest --config jest.config.js" }, "dependencies": { diff --git a/packages/profiling-node/test-binaries.esbuild.js b/packages/profiling-node/test-binaries.esbuild.js index 8cdf545ff0d7..5f825efc623c 100644 --- a/packages/profiling-node/test-binaries.esbuild.js +++ b/packages/profiling-node/test-binaries.esbuild.js @@ -13,7 +13,6 @@ esbuild.build({ target: 'esnext', format: 'esm', bundle: true, - tsconfig: './tsconfig.json', loader: { '.node': 'copy', }, From ed7a3d29a61fbfbbcd2d652ccc6f7febdda83227 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 17:14:59 -0500 Subject: [PATCH 199/240] correct order dep --- .github/workflows/build.yml | 2 +- packages/profiling-node/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 147f8a41d803..5053159de7bf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -921,7 +921,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' - needs: [job_get_metadata, job_build] + needs: [job_get_metadata, job_build, job_build_profiling_node] runs-on: ubuntu-20.04-large-js timeout-minutes: 15 steps: diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 6c67725794e9..0e17431e7b62 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -57,7 +57,7 @@ "build:dev": "yarn clean && yarn build:bindings:configure && yarn build", "build:transpile:watch": "rollup -c rollup.npm.config.mjs --watch", "build:watch": "run-p build:transpile:watch build:types:watch", - "build:tarball": "npm pack ./lib", + "build:tarball": "npm pack", "test:watch": "cross-env SENTRY_PROFILER_BINARY_DIR=build jest --watch", "test:bundle": "node test-binaries.esbuild.js", "test": "cross-env SENTRY_PROFILER_BINARY_DIR=lib jest --config jest.config.js" From 6644b8f0cd896e438518d6f4d82ae2e73f6f0bc5 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 17:56:12 -0500 Subject: [PATCH 200/240] test --- dev-packages/e2e-tests/test-applications/node-profiling/build.js | 1 - 1 file changed, 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/build.js b/dev-packages/e2e-tests/test-applications/node-profiling/build.js index 0760c5424405..fa3c500e9261 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/build.js +++ b/dev-packages/e2e-tests/test-applications/node-profiling/build.js @@ -13,7 +13,6 @@ esbuild.build({ target: 'esnext', format: 'cjs', bundle: true, - tsconfig: './tsconfig.json', loader: { '.node': 'copy', }, From 7d50511ff33e8553383f9b79b1aecdf60dc484d3 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 20:21:11 -0500 Subject: [PATCH 201/240] downgrade esbuild --- .../test-applications/node-profiling/.npmrc | 4 +- .../node-profiling/{build.js => build.mjs} | 2 +- .../node-profiling/package.json | 13 +- .../node-profiling/yarn.lock | 916 ++++++++++++++++++ 4 files changed, 922 insertions(+), 13 deletions(-) rename dev-packages/e2e-tests/test-applications/node-profiling/{build.js => build.mjs} (95%) create mode 100644 dev-packages/e2e-tests/test-applications/node-profiling/yarn.lock diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/.npmrc b/dev-packages/e2e-tests/test-applications/node-profiling/.npmrc index 070f80f05092..949fbddc2343 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/.npmrc +++ b/dev-packages/e2e-tests/test-applications/node-profiling/.npmrc @@ -1,2 +1,2 @@ -@sentry:registry=http://127.0.0.1:4873 -@sentry-internal:registry=http://127.0.0.1:4873 +# @sentry:registry=http://127.0.0.1:4873 +# @sentry-internal:registry=http://127.0.0.1:4873 diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/build.js b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs similarity index 95% rename from dev-packages/e2e-tests/test-applications/node-profiling/build.js rename to dev-packages/e2e-tests/test-applications/node-profiling/build.mjs index fa3c500e9261..31533bb5104a 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/build.js +++ b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs @@ -4,7 +4,7 @@ // only runs integration and unit tests, this change would be missed and could end up in a release. // Therefor, once all binaries are precompiled in CI and tests pass, run esbuild with bundle:true // which will copy all binaries to the outfile folder and throw if any of them are missing. -const esbuild = require('esbuild'); +import esbuild from 'esbuild'; esbuild.build({ platform: 'node', diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/package.json b/dev-packages/e2e-tests/test-applications/node-profiling/package.json index 3d96da87cb07..ed1f1338e06e 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/package.json +++ b/dev-packages/e2e-tests/test-applications/node-profiling/package.json @@ -3,26 +3,19 @@ "version": "1.0.0", "private": true, "scripts": { - "build": "node build.js", + "build": "node build.mjs", "start": "node index.js", - "test": "node index.js && node build.js", + "test": "node index.js && node build.mjs", "clean": "npx rimraf node_modules", "test:build": "npm run build", "test:assert": "npm run test" }, "dependencies": { - "@sentry/integrations": "latest || *", "@sentry/node": "latest || *", - "@sentry/tracing": "latest || *", "@sentry/types": "latest || *", - "express": "4.18.2", - "@types/express": "4.17.17", - "@types/node": "18.15.1", - "typescript": "4.9.5" + "esbuild": "^0.17.18" }, "devDependencies": { - "@playwright/test": "^1.27.1", - "ts-node": "10.9.1" }, "volta": { "extends": "../../package.json" diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/yarn.lock b/dev-packages/e2e-tests/test-applications/node-profiling/yarn.lock new file mode 100644 index 000000000000..0476d85c7e9d --- /dev/null +++ b/dev-packages/e2e-tests/test-applications/node-profiling/yarn.lock @@ -0,0 +1,916 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@esbuild/android-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" + integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== + +"@esbuild/android-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" + integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== + +"@esbuild/android-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" + integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== + +"@esbuild/darwin-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" + integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== + +"@esbuild/darwin-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" + integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== + +"@esbuild/freebsd-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" + integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== + +"@esbuild/freebsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" + integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== + +"@esbuild/linux-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" + integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== + +"@esbuild/linux-arm@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" + integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== + +"@esbuild/linux-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" + integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== + +"@esbuild/linux-loong64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" + integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== + +"@esbuild/linux-mips64el@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" + integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== + +"@esbuild/linux-ppc64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" + integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== + +"@esbuild/linux-riscv64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" + integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== + +"@esbuild/linux-s390x@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" + integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== + +"@esbuild/linux-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" + integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== + +"@esbuild/netbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" + integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== + +"@esbuild/openbsd-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" + integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== + +"@esbuild/sunos-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" + integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== + +"@esbuild/win32-arm64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" + integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== + +"@esbuild/win32-ia32@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" + integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== + +"@esbuild/win32-x64@0.17.19": + version "0.17.19" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" + integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@playwright/test@^1.27.1": + version "1.41.0" + resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.41.0.tgz#b083e976295f1fe039c15d451c66554d7f37278c" + integrity sha512-Grvzj841THwtpBOrfiHOeYTJQxDRnKofMSzCiV8XeyLWu3o89qftQ4BCKfkziJhSUQRd0utKhrddtIsiraIwmw== + dependencies: + playwright "1.41.0" + +"@sentry-internal/tracing@7.93.0": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.93.0.tgz#8cee8b610695d828af75edd2929b64b7caf0385d" + integrity sha512-DjuhmQNywPp+8fxC9dvhGrqgsUb6wI/HQp25lS2Re7VxL1swCasvpkg8EOYP4iBniVQ86QK0uITkOIRc5tdY1w== + dependencies: + "@sentry/core" "7.93.0" + "@sentry/types" "7.93.0" + "@sentry/utils" "7.93.0" + +"@sentry/core@7.93.0": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.93.0.tgz#50a14bf305130dfef51810e4c97fcba4972a57ef" + integrity sha512-vZQSUiDn73n+yu2fEcH+Wpm4GbRmtxmnXnYCPgM6IjnXqkVm3awWAkzrheADblx3kmxrRiOlTXYHw9NTWs56fg== + dependencies: + "@sentry/types" "7.93.0" + "@sentry/utils" "7.93.0" + +"@sentry/integrations@latest || *": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.93.0.tgz#23ce18919e8b19f97b9b0fdf69d2ecaa6f1730ad" + integrity sha512-uGQ8+DiqUr6SbhdJJHyIqDJ6kHnFuSv8nZWtj2tJ1I8q8u8MX8t8Om6R/R4ap45gCkWg/zqZq7B+gQV6TYewjQ== + dependencies: + "@sentry/core" "7.93.0" + "@sentry/types" "7.93.0" + "@sentry/utils" "7.93.0" + localforage "^1.8.1" + +"@sentry/node@latest || *": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.93.0.tgz#7786d05d1e3e984207a866b07df1bf891355892e" + integrity sha512-nUXPCZQm5Y9Ipv7iWXLNp5dbuyi1VvbJ3RtlwD7utgsNkRYB4ixtKE9w2QU8DZZAjaEF6w2X94OkYH6C932FWw== + dependencies: + "@sentry-internal/tracing" "7.93.0" + "@sentry/core" "7.93.0" + "@sentry/types" "7.93.0" + "@sentry/utils" "7.93.0" + https-proxy-agent "^5.0.0" + +"@sentry/tracing@latest || *": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.93.0.tgz#9785773049ae645cd0ee5b471e83a4dc9a79229c" + integrity sha512-n4XbAQ7e098Jzv4ZvpXAsFgM+XFfjhKci18r7s3UfDMnrB4FTCwhHZoeiygO8PZhB944mEFbNXNFhHkb8nTDbA== + dependencies: + "@sentry-internal/tracing" "7.93.0" + +"@sentry/types@7.93.0", "@sentry/types@latest || *": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.93.0.tgz#d76d26259b40cd0688e1d634462fbff31476c1ec" + integrity sha512-UnzUccNakhFRA/esWBWP+0v7cjNg+RilFBQC03Mv9OEMaZaS29zSbcOGtRzuFOXXLBdbr44BWADqpz3VW0XaNw== + +"@sentry/utils@7.93.0": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.93.0.tgz#36225038661fe977baf01e4695ef84794d591e45" + integrity sha512-Iovj7tUnbgSkh/WrAaMrd5UuYjW7AzyzZlFDIUrwidsyIdUficjCG2OIxYzh76H6nYIx9SxewW0R54Q6XoB4uA== + dependencies: + "@sentry/types" "7.93.0" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.17.41" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" + integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@4.17.17": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/mime@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/node@*": + version "20.11.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.5.tgz#be10c622ca7fcaa3cf226cf80166abc31389d86e" + integrity sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w== + dependencies: + undici-types "~5.26.4" + +"@types/node@18.15.1": + version "18.15.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.1.tgz#41dc2bf78e8085a250d4670d95edb7fba621dd29" + integrity sha512-U2TWca8AeHSmbpi314QBESRk7oPjSZjDsR+c+H4ECC1l+kFgpZf8Ydhv3SJpPy51VyZHHqxlb6mTTqYNNRVAIw== + +"@types/qs@*": + version "6.9.11" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" + integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + dependencies: + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +esbuild@^0.17.18: + version "0.17.19" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" + integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== + optionalDependencies: + "@esbuild/android-arm" "0.17.19" + "@esbuild/android-arm64" "0.17.19" + "@esbuild/android-x64" "0.17.19" + "@esbuild/darwin-arm64" "0.17.19" + "@esbuild/darwin-x64" "0.17.19" + "@esbuild/freebsd-arm64" "0.17.19" + "@esbuild/freebsd-x64" "0.17.19" + "@esbuild/linux-arm" "0.17.19" + "@esbuild/linux-arm64" "0.17.19" + "@esbuild/linux-ia32" "0.17.19" + "@esbuild/linux-loong64" "0.17.19" + "@esbuild/linux-mips64el" "0.17.19" + "@esbuild/linux-ppc64" "0.17.19" + "@esbuild/linux-riscv64" "0.17.19" + "@esbuild/linux-s390x" "0.17.19" + "@esbuild/linux-x64" "0.17.19" + "@esbuild/netbsd-x64" "0.17.19" + "@esbuild/openbsd-x64" "0.17.19" + "@esbuild/sunos-x64" "0.17.19" + "@esbuild/win32-arm64" "0.17.19" + "@esbuild/win32-ia32" "0.17.19" + "@esbuild/win32-x64" "0.17.19" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +express@4.18.2: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fsevents@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + +inherits@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +lie@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" + integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw== + dependencies: + immediate "~3.0.5" + +localforage@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" + integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg== + dependencies: + lie "3.1.1" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +playwright-core@1.41.0: + version "1.41.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.41.0.tgz#dbda9c3948df28a8deae76cc90b424e47174f9d7" + integrity sha512-UGKASUhXmvqm2Lxa1fNr8sFwAtqjpgBRr9jQ7XBI8Rn5uFiEowGUGwrruUQsVPIom4bk7Lt+oLGpXobnXzrBIw== + +playwright@1.41.0: + version "1.41.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.41.0.tgz#77ab5f3a5fde479522167f74a5070e72ce884bff" + integrity sha512-XOsfl5ZtAik/T9oek4V0jAypNlaCNzuKOwVhqhgYT3os6kH34PzbRb74F0VWcLYa5WFdnmxl7qyAHBXvPv7lqQ== + dependencies: + playwright-core "1.41.0" + optionalDependencies: + fsevents "2.3.2" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +safe-buffer@5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +set-function-length@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" + integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== + dependencies: + define-data-property "^1.1.1" + function-bind "^1.1.2" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +ts-node@10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + 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" + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 73a166392ce3ef1f83b080580565c515e206571b Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 20:28:43 -0500 Subject: [PATCH 202/240] downgrade esbuild --- .../node-profiling/build.mjs | 6 +- .../node-profiling/package.json | 5 +- .../node-profiling/yarn.lock | 916 ------------------ 3 files changed, 4 insertions(+), 923 deletions(-) delete mode 100644 dev-packages/e2e-tests/test-applications/node-profiling/yarn.lock diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs index 31533bb5104a..1c009389e83d 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs +++ b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs @@ -9,11 +9,9 @@ import esbuild from 'esbuild'; esbuild.build({ platform: 'node', entryPoints: ['./index.js'], - outfile: './dist/index.js', + outdir: './dist', target: 'esnext', format: 'cjs', bundle: true, - loader: { - '.node': 'copy', - }, + loader: { '.node': 'copy' }, }); diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/package.json b/dev-packages/e2e-tests/test-applications/node-profiling/package.json index ed1f1338e06e..5df6b66dbb7f 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/package.json +++ b/dev-packages/e2e-tests/test-applications/node-profiling/package.json @@ -13,10 +13,9 @@ "dependencies": { "@sentry/node": "latest || *", "@sentry/types": "latest || *", - "esbuild": "^0.17.18" - }, - "devDependencies": { + "esbuild": "^0.19.11" }, + "devDependencies": {}, "volta": { "extends": "../../package.json" } diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/yarn.lock b/dev-packages/e2e-tests/test-applications/node-profiling/yarn.lock deleted file mode 100644 index 0476d85c7e9d..000000000000 --- a/dev-packages/e2e-tests/test-applications/node-profiling/yarn.lock +++ /dev/null @@ -1,916 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@esbuild/android-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz#bafb75234a5d3d1b690e7c2956a599345e84a2fd" - integrity sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA== - -"@esbuild/android-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.19.tgz#5898f7832c2298bc7d0ab53701c57beb74d78b4d" - integrity sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A== - -"@esbuild/android-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.19.tgz#658368ef92067866d95fb268719f98f363d13ae1" - integrity sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww== - -"@esbuild/darwin-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz#584c34c5991b95d4d48d333300b1a4e2ff7be276" - integrity sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg== - -"@esbuild/darwin-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz#7751d236dfe6ce136cce343dce69f52d76b7f6cb" - integrity sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw== - -"@esbuild/freebsd-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz#cacd171665dd1d500f45c167d50c6b7e539d5fd2" - integrity sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ== - -"@esbuild/freebsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz#0769456eee2a08b8d925d7c00b79e861cb3162e4" - integrity sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ== - -"@esbuild/linux-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz#38e162ecb723862c6be1c27d6389f48960b68edb" - integrity sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg== - -"@esbuild/linux-arm@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz#1a2cd399c50040184a805174a6d89097d9d1559a" - integrity sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA== - -"@esbuild/linux-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz#e28c25266b036ce1cabca3c30155222841dc035a" - integrity sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ== - -"@esbuild/linux-loong64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz#0f887b8bb3f90658d1a0117283e55dbd4c9dcf72" - integrity sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ== - -"@esbuild/linux-mips64el@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz#f5d2a0b8047ea9a5d9f592a178ea054053a70289" - integrity sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A== - -"@esbuild/linux-ppc64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz#876590e3acbd9fa7f57a2c7d86f83717dbbac8c7" - integrity sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg== - -"@esbuild/linux-riscv64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz#7f49373df463cd9f41dc34f9b2262d771688bf09" - integrity sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA== - -"@esbuild/linux-s390x@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz#e2afd1afcaf63afe2c7d9ceacd28ec57c77f8829" - integrity sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q== - -"@esbuild/linux-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz#8a0e9738b1635f0c53389e515ae83826dec22aa4" - integrity sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw== - -"@esbuild/netbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz#c29fb2453c6b7ddef9a35e2c18b37bda1ae5c462" - integrity sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q== - -"@esbuild/openbsd-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz#95e75a391403cb10297280d524d66ce04c920691" - integrity sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g== - -"@esbuild/sunos-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz#722eaf057b83c2575937d3ffe5aeb16540da7273" - integrity sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg== - -"@esbuild/win32-arm64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz#9aa9dc074399288bdcdd283443e9aeb6b9552b6f" - integrity sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag== - -"@esbuild/win32-ia32@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz#95ad43c62ad62485e210f6299c7b2571e48d2b03" - integrity sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw== - -"@esbuild/win32-x64@0.17.19": - version "0.17.19" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz#8cfaf2ff603e9aabb910e9c0558c26cf32744061" - integrity sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA== - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@playwright/test@^1.27.1": - version "1.41.0" - resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.41.0.tgz#b083e976295f1fe039c15d451c66554d7f37278c" - integrity sha512-Grvzj841THwtpBOrfiHOeYTJQxDRnKofMSzCiV8XeyLWu3o89qftQ4BCKfkziJhSUQRd0utKhrddtIsiraIwmw== - dependencies: - playwright "1.41.0" - -"@sentry-internal/tracing@7.93.0": - version "7.93.0" - resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.93.0.tgz#8cee8b610695d828af75edd2929b64b7caf0385d" - integrity sha512-DjuhmQNywPp+8fxC9dvhGrqgsUb6wI/HQp25lS2Re7VxL1swCasvpkg8EOYP4iBniVQ86QK0uITkOIRc5tdY1w== - dependencies: - "@sentry/core" "7.93.0" - "@sentry/types" "7.93.0" - "@sentry/utils" "7.93.0" - -"@sentry/core@7.93.0": - version "7.93.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.93.0.tgz#50a14bf305130dfef51810e4c97fcba4972a57ef" - integrity sha512-vZQSUiDn73n+yu2fEcH+Wpm4GbRmtxmnXnYCPgM6IjnXqkVm3awWAkzrheADblx3kmxrRiOlTXYHw9NTWs56fg== - dependencies: - "@sentry/types" "7.93.0" - "@sentry/utils" "7.93.0" - -"@sentry/integrations@latest || *": - version "7.93.0" - resolved "https://registry.yarnpkg.com/@sentry/integrations/-/integrations-7.93.0.tgz#23ce18919e8b19f97b9b0fdf69d2ecaa6f1730ad" - integrity sha512-uGQ8+DiqUr6SbhdJJHyIqDJ6kHnFuSv8nZWtj2tJ1I8q8u8MX8t8Om6R/R4ap45gCkWg/zqZq7B+gQV6TYewjQ== - dependencies: - "@sentry/core" "7.93.0" - "@sentry/types" "7.93.0" - "@sentry/utils" "7.93.0" - localforage "^1.8.1" - -"@sentry/node@latest || *": - version "7.93.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.93.0.tgz#7786d05d1e3e984207a866b07df1bf891355892e" - integrity sha512-nUXPCZQm5Y9Ipv7iWXLNp5dbuyi1VvbJ3RtlwD7utgsNkRYB4ixtKE9w2QU8DZZAjaEF6w2X94OkYH6C932FWw== - dependencies: - "@sentry-internal/tracing" "7.93.0" - "@sentry/core" "7.93.0" - "@sentry/types" "7.93.0" - "@sentry/utils" "7.93.0" - https-proxy-agent "^5.0.0" - -"@sentry/tracing@latest || *": - version "7.93.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.93.0.tgz#9785773049ae645cd0ee5b471e83a4dc9a79229c" - integrity sha512-n4XbAQ7e098Jzv4ZvpXAsFgM+XFfjhKci18r7s3UfDMnrB4FTCwhHZoeiygO8PZhB944mEFbNXNFhHkb8nTDbA== - dependencies: - "@sentry-internal/tracing" "7.93.0" - -"@sentry/types@7.93.0", "@sentry/types@latest || *": - version "7.93.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.93.0.tgz#d76d26259b40cd0688e1d634462fbff31476c1ec" - integrity sha512-UnzUccNakhFRA/esWBWP+0v7cjNg+RilFBQC03Mv9OEMaZaS29zSbcOGtRzuFOXXLBdbr44BWADqpz3VW0XaNw== - -"@sentry/utils@7.93.0": - version "7.93.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.93.0.tgz#36225038661fe977baf01e4695ef84794d591e45" - integrity sha512-Iovj7tUnbgSkh/WrAaMrd5UuYjW7AzyzZlFDIUrwidsyIdUficjCG2OIxYzh76H6nYIx9SxewW0R54Q6XoB4uA== - dependencies: - "@sentry/types" "7.93.0" - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/express-serve-static-core@^4.17.33": - version "4.17.41" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz#5077defa630c2e8d28aa9ffc2c01c157c305bef6" - integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@4.17.17": - version "4.17.17" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" - integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/mime@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/node@*": - version "20.11.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.5.tgz#be10c622ca7fcaa3cf226cf80166abc31389d86e" - integrity sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w== - dependencies: - undici-types "~5.26.4" - -"@types/node@18.15.1": - version "18.15.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.1.tgz#41dc2bf78e8085a250d4670d95edb7fba621dd29" - integrity sha512-U2TWca8AeHSmbpi314QBESRk7oPjSZjDsR+c+H4ECC1l+kFgpZf8Ydhv3SJpPy51VyZHHqxlb6mTTqYNNRVAIw== - -"@types/qs@*": - version "6.9.11" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.5" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-walk@^8.1.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" - integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== - -acorn@^8.4.1: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -esbuild@^0.17.18: - version "0.17.19" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.19.tgz#087a727e98299f0462a3d0bcdd9cd7ff100bd955" - integrity sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw== - optionalDependencies: - "@esbuild/android-arm" "0.17.19" - "@esbuild/android-arm64" "0.17.19" - "@esbuild/android-x64" "0.17.19" - "@esbuild/darwin-arm64" "0.17.19" - "@esbuild/darwin-x64" "0.17.19" - "@esbuild/freebsd-arm64" "0.17.19" - "@esbuild/freebsd-x64" "0.17.19" - "@esbuild/linux-arm" "0.17.19" - "@esbuild/linux-arm64" "0.17.19" - "@esbuild/linux-ia32" "0.17.19" - "@esbuild/linux-loong64" "0.17.19" - "@esbuild/linux-mips64el" "0.17.19" - "@esbuild/linux-ppc64" "0.17.19" - "@esbuild/linux-riscv64" "0.17.19" - "@esbuild/linux-s390x" "0.17.19" - "@esbuild/linux-x64" "0.17.19" - "@esbuild/netbsd-x64" "0.17.19" - "@esbuild/openbsd-x64" "0.17.19" - "@esbuild/sunos-x64" "0.17.19" - "@esbuild/win32-arm64" "0.17.19" - "@esbuild/win32-ia32" "0.17.19" - "@esbuild/win32-x64" "0.17.19" - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -express@4.18.2: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fsevents@2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - -inherits@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -lie@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.1.1.tgz#9a436b2cc7746ca59de7a41fa469b3efb76bd87e" - integrity sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw== - dependencies: - immediate "~3.0.5" - -localforage@^1.8.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/localforage/-/localforage-1.10.0.tgz#5c465dc5f62b2807c3a84c0c6a1b1b3212781dd4" - integrity sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg== - dependencies: - lie "3.1.1" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -object-inspect@^1.9.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -playwright-core@1.41.0: - version "1.41.0" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.41.0.tgz#dbda9c3948df28a8deae76cc90b424e47174f9d7" - integrity sha512-UGKASUhXmvqm2Lxa1fNr8sFwAtqjpgBRr9jQ7XBI8Rn5uFiEowGUGwrruUQsVPIom4bk7Lt+oLGpXobnXzrBIw== - -playwright@1.41.0: - version "1.41.0" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.41.0.tgz#77ab5f3a5fde479522167f74a5070e72ce884bff" - integrity sha512-XOsfl5ZtAik/T9oek4V0jAypNlaCNzuKOwVhqhgYT3os6kH34PzbRb74F0VWcLYa5WFdnmxl7qyAHBXvPv7lqQ== - dependencies: - playwright-core "1.41.0" - optionalDependencies: - fsevents "2.3.2" - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -safe-buffer@5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-function-length@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" - integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== - dependencies: - define-data-property "^1.1.1" - function-bind "^1.1.2" - get-intrinsic "^1.2.2" - gopd "^1.0.1" - has-property-descriptors "^1.0.1" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -ts-node@10.9.1: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== - 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" - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typescript@4.9.5: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 6e391bf6bc9ad12dcb77eaa8a3170a98aff933de Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 20:31:46 -0500 Subject: [PATCH 203/240] add profilig dep --- .../e2e-tests/test-applications/node-profiling/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/package.json b/dev-packages/e2e-tests/test-applications/node-profiling/package.json index 5df6b66dbb7f..4dab46254df7 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/package.json +++ b/dev-packages/e2e-tests/test-applications/node-profiling/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@sentry/node": "latest || *", - "@sentry/types": "latest || *", + "@sentry/profiling-node": "latest || *", "esbuild": "^0.19.11" }, "devDependencies": {}, From e1b8f473cc97a54cf0815fad096eb8e57add2ca2 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Wed, 17 Jan 2024 20:32:58 -0500 Subject: [PATCH 204/240] fix import --- .../e2e-tests/test-applications/node-profiling/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/index.js b/dev-packages/e2e-tests/test-applications/node-profiling/index.js index 0218505d182f..bd440f4f17be 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/index.js +++ b/dev-packages/e2e-tests/test-applications/node-profiling/index.js @@ -1,5 +1,5 @@ const Sentry = require('@sentry/node'); -const Profiling = require('./lib'); +const Profiling = require('@sentry/profiling-node'); const wait = ms => new Promise(resolve => setTimeout(resolve, ms)); From f6521402f5ae8dfd675053cb7048586c3e337824 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 08:35:21 -0500 Subject: [PATCH 205/240] comment out the loader --- .../e2e-tests/test-applications/node-profiling/build.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs index 1c009389e83d..d86b1e280495 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs +++ b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs @@ -13,5 +13,5 @@ esbuild.build({ target: 'esnext', format: 'cjs', bundle: true, - loader: { '.node': 'copy' }, + // loader: { '.node': 'copy' }, }); From 4d8a4c8c9b98725b9ebcc33a1bc591c51a979fff Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 08:57:14 -0500 Subject: [PATCH 206/240] actually run test --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5053159de7bf..cb547610f3eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1361,7 +1361,7 @@ jobs: - name: Test Bindings if: matrix.arch != 'arm64' run: | - yarn lerna run test:bindings --scope @sentry/profiling-node + yarn lerna run test --scope @sentry/profiling-node - name: Archive Binary # @TODO: v4 breaks convenient merging of same name artifacts From c3e385ae436b1d93cdc311b64f936aafc3f4a8ab Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 09:13:57 -0500 Subject: [PATCH 207/240] test --- .github/workflows/build.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cb547610f3eb..4c09e41e330d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -946,6 +946,18 @@ jobs: restore-keys: ${{ env.NX_CACHE_RESTORE_KEYS }} - name: Build tarballs run: yarn build:tarball --ignore @sentry/profiling-node + + - name: Restore profiling tarball + uses: actions/download-artifact@v3 + with: + name: profiling-node-tarball-${{ github.sha }} + path: packages/profiling-node + + - name: Log profiling tarball + run: | + ls -la packages/profiling-node + tar -t packages/profiling-node/profiling-node-tarball-${{ github.sha }} + - name: Stores tarballs in cache uses: actions/cache/save@v4 with: @@ -1039,6 +1051,12 @@ jobs: env: DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} + - name: Restore profiling tarball + uses: actions/cache/restore@v3 + with: + path: ${{ github.workspace }}/packages/profiling-node/*.tgz + key: ${{ env.BUILD_CACHE_TARBALL_KEY }} + - name: Restore tarball cache uses: actions/cache/restore@v4 with: @@ -1409,3 +1427,10 @@ jobs: - name: Pack Profiling Node run: yarn build:tarball --scope @sentry/profiling-node + + - name: Archive profiling artifacts + uses: actions/upload-artifact@v4.0.0 + with: + name: profiling-node-tarball-${{ github.sha }} + path: | + ${{ github.workspace }}/packages/profiling-node/*.tgz From 214015d98f40b2704c5373ff07893f000dadbb71 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 09:30:09 -0500 Subject: [PATCH 208/240] test build --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4c09e41e330d..7155665e45f0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1374,7 +1374,7 @@ jobs: yarn build:bindings:arm64 - name: Build Monorepo - run: yarn lerna run build:transpile,build:types --ignore @sentry/serverless --ignore @sentry/browser --ignore @sentry/astro + run: yarn build --ignore @sentry/serverless --ignore @sentry/browser --ignore @sentry/astro - name: Test Bindings if: matrix.arch != 'arm64' From f8f589ec7cc195efaf2e0677828483461e4de408 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 09:55:27 -0500 Subject: [PATCH 209/240] enable shell in spawn --- packages/integrations/scripts/buildBundles.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/integrations/scripts/buildBundles.ts b/packages/integrations/scripts/buildBundles.ts index b5eb77730d40..32c3e81d672b 100644 --- a/packages/integrations/scripts/buildBundles.ts +++ b/packages/integrations/scripts/buildBundles.ts @@ -17,6 +17,7 @@ function getIntegrations(): string[] { async function buildBundle(integration: string, jsVersion: string): Promise { return new Promise((resolve, reject) => { const child = spawn('yarn', ['--silent', 'rollup', '--config', 'rollup.bundle.config.mjs'], { + shell : true, env: { ...process.env, INTEGRATION_FILE: integration, JS_VERSION: jsVersion }, }); From 3809ec4c61ba8c0ee57b83368772d34d661cc91c Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 10:34:18 -0500 Subject: [PATCH 210/240] test --- packages/integrations/scripts/buildBundles.ts | 2 +- .../profiling-node/test/hubextensions.hub.test.ts | 12 +++++------- packages/profiling-node/test/index.test.ts | 5 ++--- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/packages/integrations/scripts/buildBundles.ts b/packages/integrations/scripts/buildBundles.ts index 32c3e81d672b..97730f10afe2 100644 --- a/packages/integrations/scripts/buildBundles.ts +++ b/packages/integrations/scripts/buildBundles.ts @@ -17,7 +17,7 @@ function getIntegrations(): string[] { async function buildBundle(integration: string, jsVersion: string): Promise { return new Promise((resolve, reject) => { const child = spawn('yarn', ['--silent', 'rollup', '--config', 'rollup.bundle.config.mjs'], { - shell : true, + shell: true, // required to run on Windows env: { ...process.env, INTEGRATION_FILE: integration, JS_VERSION: jsVersion }, }); diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index 63a99884efcb..48a4e7f2ce3d 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -1,14 +1,12 @@ import * as Sentry from '@sentry/node'; import { getMainCarrier } from '@sentry/core'; -import { NodeClient } from '@sentry/node'; import type { Transport } from '@sentry/types'; -import { createEnvelope, logger } from '@sentry/utils'; -import { GLOBAL_OBJ } from '@sentry/utils'; +import { createEnvelope, logger, GLOBAL_OBJ } from '@sentry/utils'; import { CpuProfilerBindings } from '../src/cpu_profiler'; import { ProfilingIntegration } from '../src/index'; -function makeClientWithoutHooks(): [NodeClient, Transport] { +function makeClientWithoutHooks(): [Sentry.NodeClient, Transport] { const integration = new ProfilingIntegration(); const transport = Sentry.makeNodeTransport({ url: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', @@ -16,7 +14,7 @@ function makeClientWithoutHooks(): [NodeClient, Transport] { return undefined; }, }); - const client = new NodeClient({ + const client = new Sentry.NodeClient({ stackParser: Sentry.defaultStackParser, tracesSampleRate: 1, profilesSampleRate: 1, @@ -42,9 +40,9 @@ function makeClientWithoutHooks(): [NodeClient, Transport] { return [client, transport]; } -function makeClientWithHooks(): [NodeClient, Transport] { +function makeClientWithHooks(): [Sentry.NodeClient, Transport] { const integration = new ProfilingIntegration(); - const client = new NodeClient({ + const client = new Sentry.NodeClient({ stackParser: Sentry.defaultStackParser, tracesSampleRate: 1, profilesSampleRate: 1, diff --git a/packages/profiling-node/test/index.test.ts b/packages/profiling-node/test/index.test.ts index 0fa9ec20ed8b..ab6aaebfb86a 100644 --- a/packages/profiling-node/test/index.test.ts +++ b/packages/profiling-node/test/index.test.ts @@ -2,7 +2,6 @@ import * as Sentry from '@sentry/node'; import type { Transport } from '@sentry/types'; import { getMainCarrier } from '@sentry/core'; -import { NodeClient } from '@sentry/node'; import { ProfilingIntegration } from '../src/index'; import type { Profile } from '../src/types'; @@ -23,10 +22,10 @@ function makeStaticTransport(): MockTransport { }; } -function makeClientWithoutHooks(): [NodeClient, MockTransport] { +function makeClientWithoutHooks(): [Sentry.NodeClient, MockTransport] { const integration = new ProfilingIntegration(); const transport = makeStaticTransport(); - const client = new NodeClient({ + const client = new Sentry.NodeClient({ stackParser: Sentry.defaultStackParser, tracesSampleRate: 1, profilesSampleRate: 1, From 71062d35684aca29e7fb3b62b8e01119e33633e6 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 10:49:39 -0500 Subject: [PATCH 211/240] better caching --- .github/workflows/build.yml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7155665e45f0..2bdbfd897d1e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1174,7 +1174,7 @@ jobs: job_compile_bindings_profiling_node: name: Compile & Test Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} - needs: [job_get_metadata, job_install_deps] + needs: [job_get_metadata, job_install_deps, job_build] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} timeout-minutes: 20 @@ -1277,13 +1277,22 @@ jobs: with: ref: ${{ env.HEAD_COMMIT }} - - name: Check dependency cache + - name: Restore dependency cache uses: actions/cache/restore@v3 + id: restore-dependencies with: path: ${{ env.CACHED_DEPENDENCY_PATHS }} key: ${{ needs.job_install_deps.outputs.dependency_cache_key }} enableCrossOsArchive: true + - name: Restore build cache + uses: actions/cache/restore@v3 + id: restore-build + with: + path: ${{ env.CACHED_BUILD_PATHS }} + key: ${{ needs.job_build.outputs.dependency_cache_key }} + enableCrossOsArchive: true + - name: Configure safe directory run: | git config --global --add safe.directory "*" @@ -1306,6 +1315,7 @@ jobs: node-version: ${{ matrix.node }} - name: Install Dependencies + if: steps.restore-dependencies.outputs.cache-hit != 'true' run: yarn install --frozen-lockfile --ignore-engines --ignore-scripts - name: Setup (arm64| ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }}) @@ -1374,6 +1384,7 @@ jobs: yarn build:bindings:arm64 - name: Build Monorepo + if: steps.restore-build.outputs.cache-hit != 'true' run: yarn build --ignore @sentry/serverless --ignore @sentry/browser --ignore @sentry/astro - name: Test Bindings From 1602dbca035db0c9f3e35c3e5f506d5d2c0d249d Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 10:52:44 -0500 Subject: [PATCH 212/240] lint fix --- packages/profiling-node/test/hubextensions.hub.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/profiling-node/test/hubextensions.hub.test.ts b/packages/profiling-node/test/hubextensions.hub.test.ts index 48a4e7f2ce3d..954f3300ffca 100644 --- a/packages/profiling-node/test/hubextensions.hub.test.ts +++ b/packages/profiling-node/test/hubextensions.hub.test.ts @@ -2,7 +2,7 @@ import * as Sentry from '@sentry/node'; import { getMainCarrier } from '@sentry/core'; import type { Transport } from '@sentry/types'; -import { createEnvelope, logger, GLOBAL_OBJ } from '@sentry/utils'; +import { GLOBAL_OBJ, createEnvelope, logger } from '@sentry/utils'; import { CpuProfilerBindings } from '../src/cpu_profiler'; import { ProfilingIntegration } from '../src/index'; From b2eca726f1d41284bb6ebd7ffbb26ceffdd04ea1 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 11:17:47 -0500 Subject: [PATCH 213/240] upload windows action so I can inspect it --- .github/workflows/build.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2bdbfd897d1e..1cd1c9ad4d14 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,6 +24,8 @@ concurrency: env: HEAD_COMMIT: ${{ github.event.inputs.commit || github.sha }} + # WARNING: this disables cross os caching as ~ and + # github.workspace evaluate to differents paths CACHED_DEPENDENCY_PATHS: | ${{ github.workspace }}/node_modules ${{ github.workspace }}/packages/*/node_modules @@ -1387,6 +1389,13 @@ jobs: if: steps.restore-build.outputs.cache-hit != 'true' run: yarn build --ignore @sentry/serverless --ignore @sentry/browser --ignore @sentry/astro + - name: Store file + uses: actions/upload-artifact@v2 + with: + name: windows-cjs-utils + path: | + ${{ github.workspace }}/packages/utils/build/cjs + - name: Test Bindings if: matrix.arch != 'arm64' run: | From dea201b5385063412d78d4560ad951079a1e3099 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 11:39:22 -0500 Subject: [PATCH 214/240] make polyfill use correct delimiters --- .github/workflows/build.yml | 2 ++ dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1cd1c9ad4d14..890d2193e93c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,6 +35,8 @@ env: # DEPENDENCY_CACHE_KEY: can't be set here because we don't have access to yarn.lock + # WARNING: this disables cross os caching as ~ and + # github.workspace evaluate to differents paths # packages/utils/cjs and packages/utils/esm: Symlinks to the folders inside of `build`, needed for tests CACHED_BUILD_PATHS: | ${{ github.workspace }}/dev-packages/*/build diff --git a/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs b/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs index 0acbb175ebf8..0b369e9c8c2b 100644 --- a/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs +++ b/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs @@ -42,7 +42,7 @@ export function makeExtractPolyfillsPlugin() { // The index.js file of the tuils package will include identifiers named after polyfills so we would inject the // polyfills, however that would override the exports so we should just skip that file. - const isUtilsPackage = process.cwd().endsWith('packages/utils'); + const isUtilsPackage = process.cwd().endsWith(`packages${path.delimiter}utils`); if (isUtilsPackage && sourceFile === 'index.js') { return null; } @@ -194,7 +194,7 @@ function createImportOrRequireNode(polyfillNodes, currentSourceFile, moduleForma // relative const isUtilsPackage = process.cwd().endsWith(path.join('packages', 'utils')); const importSource = literal( - isUtilsPackage ? `./${path.relative(path.dirname(currentSourceFile), 'buildPolyfills')}` : '@sentry/utils', + isUtilsPackage ? `.${path.delimiter}${path.relative(path.dirname(currentSourceFile), 'buildPolyfills')}` : '@sentry/utils', ); // This is the `x, y, z` of inside of `import { x, y, z }` or `var { x, y, z }` From 0edced30ee8895c4cba6c22b043f9b8399ff28a3 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 11:53:52 -0500 Subject: [PATCH 215/240] use separator dug --- dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs b/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs index 0b369e9c8c2b..f4454275535c 100644 --- a/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs +++ b/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs @@ -42,7 +42,7 @@ export function makeExtractPolyfillsPlugin() { // The index.js file of the tuils package will include identifiers named after polyfills so we would inject the // polyfills, however that would override the exports so we should just skip that file. - const isUtilsPackage = process.cwd().endsWith(`packages${path.delimiter}utils`); + const isUtilsPackage = process.cwd().endsWith(`packages${path.sep}utils`); if (isUtilsPackage && sourceFile === 'index.js') { return null; } @@ -194,7 +194,7 @@ function createImportOrRequireNode(polyfillNodes, currentSourceFile, moduleForma // relative const isUtilsPackage = process.cwd().endsWith(path.join('packages', 'utils')); const importSource = literal( - isUtilsPackage ? `.${path.delimiter}${path.relative(path.dirname(currentSourceFile), 'buildPolyfills')}` : '@sentry/utils', + isUtilsPackage ? `.${path.sep}${path.relative(path.dirname(currentSourceFile), 'buildPolyfills')}` : '@sentry/utils', ); // This is the `x, y, z` of inside of `import { x, y, z }` or `var { x, y, z }` From cbfb2f3e66e73b0d4e3095b65c2580e9b391d89b Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 12:14:12 -0500 Subject: [PATCH 216/240] fix lint --- dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs b/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs index f4454275535c..ca5ff99438fd 100644 --- a/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs +++ b/dev-packages/rollup-utils/plugins/extractPolyfillsPlugin.mjs @@ -194,7 +194,9 @@ function createImportOrRequireNode(polyfillNodes, currentSourceFile, moduleForma // relative const isUtilsPackage = process.cwd().endsWith(path.join('packages', 'utils')); const importSource = literal( - isUtilsPackage ? `.${path.sep}${path.relative(path.dirname(currentSourceFile), 'buildPolyfills')}` : '@sentry/utils', + isUtilsPackage + ? `.${path.sep}${path.relative(path.dirname(currentSourceFile), 'buildPolyfills')}` + : '@sentry/utils', ); // This is the `x, y, z` of inside of `import { x, y, z }` or `var { x, y, z }` From 0d93d4c8576f561a69e060fec5d8594d7a936628 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 12:18:16 -0500 Subject: [PATCH 217/240] bump timeout --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 890d2193e93c..a0461a0058fe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1181,7 +1181,7 @@ jobs: needs: [job_get_metadata, job_install_deps, job_build] runs-on: ${{ matrix.os }} container: ${{ matrix.container }} - timeout-minutes: 20 + timeout-minutes: 30 strategy: fail-fast: false matrix: From 2ceaaf605aa735826247db9be6c88211c58c190f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 12:59:26 -0500 Subject: [PATCH 218/240] bump timeout --- .github/workflows/build.yml | 9 +-------- packages/profiling-node/package.json | 1 + 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a0461a0058fe..55a95bdec723 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1391,13 +1391,6 @@ jobs: if: steps.restore-build.outputs.cache-hit != 'true' run: yarn build --ignore @sentry/serverless --ignore @sentry/browser --ignore @sentry/astro - - name: Store file - uses: actions/upload-artifact@v2 - with: - name: windows-cjs-utils - path: | - ${{ github.workspace }}/packages/utils/build/cjs - - name: Test Bindings if: matrix.arch != 'arm64' run: | @@ -1442,7 +1435,7 @@ jobs: uses: actions/download-artifact@v3 with: name: profiling-node-binaries-${{ github.sha }} - path: packages/profiling-node/lib/ + path: ${{ github.workspace }}/packages/profiling-node/lib/ - name: List binaries run: ls -la packages/profiling-node/lib/ diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 0e17431e7b62..62a6317c31c6 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -25,6 +25,7 @@ "access": "public" }, "files": [ + "lib", "bindings", "binding.gyp", "LICENSE", From 3c4ff14555fa517759dc28d1778757df5f48b20e Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 13:52:51 -0500 Subject: [PATCH 219/240] test --- .github/workflows/build.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 55a95bdec723..8f0551c98411 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -398,6 +398,13 @@ jobs: - name: Pack # Profiling tarball is built separately as we assemble the precompiled binaries run: yarn build:tarball --ignore @sentry/profiling-node + + - name: Restore profiling tarball + uses: actions/download-artifact@v3 + with: + name: profiling-node-tarball-${{ github.sha }} + path: packages/profiling-node + - name: Archive artifacts uses: actions/upload-artifact@v4.3.0 with: @@ -1407,7 +1414,7 @@ jobs: job_build_profiling_node: name: Extract Binaries and Pack Profiling Node - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] timeout-minutes: 5 steps: From 722dfa24de5c0f50833db045ef15ea1aa9462ee7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 14:38:40 -0500 Subject: [PATCH 220/240] upload artifact using v3 --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8f0551c98411..39d2a9fa833e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1451,7 +1451,7 @@ jobs: run: yarn build:tarball --scope @sentry/profiling-node - name: Archive profiling artifacts - uses: actions/upload-artifact@v4.0.0 + uses: actions/upload-artifact@v3 with: name: profiling-node-tarball-${{ github.sha }} path: | From e98840e915b14b29a2cf4c75626c6b958c6fd077 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 15:46:03 -0500 Subject: [PATCH 221/240] testgst --- .github/workflows/build.yml | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 39d2a9fa833e..bb73b0c74ba8 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -958,16 +958,24 @@ jobs: - name: Build tarballs run: yarn build:tarball --ignore @sentry/profiling-node - - name: Restore profiling tarball + - name: Build Profiling Node + run: yarn lerna run build:lib --scope @sentry/profiling-node + + - name: Extract Profiling Node Prebuilt Binaries + # @TODO: v4 breaks convenient merging of same name artifacts + # https://github.com/actions/upload-artifact/issues/478 uses: actions/download-artifact@v3 with: - name: profiling-node-tarball-${{ github.sha }} - path: packages/profiling-node + name: profiling-node-binaries-${{ github.sha }} + path: ${{ github.workspace }}/packages/profiling-node/lib/ - - name: Log profiling tarball + - name: Build Profiling tarball + run: yarn build:tarball --scope @sentry/profiling-node + + - name: Sanity check profiling run: | - ls -la packages/profiling-node - tar -t packages/profiling-node/profiling-node-tarball-${{ github.sha }} + ls -la ${{ github.workspace }}/packages/profiling-node + ls -la ${{ github.workspace }}/packages/profiling-node/lib - name: Stores tarballs in cache uses: actions/cache/save@v4 @@ -1433,16 +1441,7 @@ jobs: env: DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - - name: Build TS files - run: yarn lerna run build:lib --scope @sentry/profiling-node - - name: Extract Built Binaries - # @TODO: v4 breaks convenient merging of same name artifacts - # https://github.com/actions/upload-artifact/issues/478 - uses: actions/download-artifact@v3 - with: - name: profiling-node-binaries-${{ github.sha }} - path: ${{ github.workspace }}/packages/profiling-node/lib/ - name: List binaries run: ls -la packages/profiling-node/lib/ From f1b788340670afd3c6a3b904e3750ef0bf1e2bfe Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 15:46:13 -0500 Subject: [PATCH 222/240] remove build job as we can assemble at artifact build --- .github/workflows/build.yml | 42 +++---------------------------------- 1 file changed, 3 insertions(+), 39 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index bb73b0c74ba8..d82db5143005 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -378,7 +378,7 @@ jobs: job_artifacts: name: Upload Artifacts - needs: [job_get_metadata, job_build, job_build_profiling_node] + needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] runs-on: ubuntu-20.04 # Build artifacts are only needed for releasing workflow. if: needs.job_get_metadata.outputs.is_release == 'true' @@ -932,7 +932,7 @@ jobs: if: (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository) && github.actor != 'dependabot[bot]' - needs: [job_get_metadata, job_build, job_build_profiling_node] + needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] runs-on: ubuntu-20.04-large-js timeout-minutes: 15 steps: @@ -1122,7 +1122,7 @@ jobs: needs: [ job_build, - job_build_profiling_node, + job_compile_bindings_profiling_node, job_browser_build_tests, job_browser_unit_tests, job_bun_unit_tests, @@ -1419,39 +1419,3 @@ jobs: name: profiling-node-binaries-${{ github.sha }} path: | ${{ github.workspace }}/packages/profiling-node/lib/*.node - - job_build_profiling_node: - name: Extract Binaries and Pack Profiling Node - runs-on: ubuntu-20.04 - needs: [job_get_metadata, job_build, job_compile_bindings_profiling_node] - timeout-minutes: 5 - steps: - - name: Check out current commit (${{ needs.job_get_metadata.outputs.commit_label }}) - uses: actions/checkout@v4 - with: - ref: ${{ env.HEAD_COMMIT }} - - - name: Setup Node - uses: actions/setup-node@v4 - with: - node-version: 20 - - - name: Restore caches - uses: ./.github/actions/restore-cache - env: - DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - - - - - name: List binaries - run: ls -la packages/profiling-node/lib/ - - - name: Pack Profiling Node - run: yarn build:tarball --scope @sentry/profiling-node - - - name: Archive profiling artifacts - uses: actions/upload-artifact@v3 - with: - name: profiling-node-tarball-${{ github.sha }} - path: | - ${{ github.workspace }}/packages/profiling-node/*.tgz From fe5366f1dcb10d69f2b1d2e946270c49ecaff2a7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 18 Jan 2024 18:23:43 -0500 Subject: [PATCH 223/240] test rebuild --- .github/workflows/build.yml | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d82db5143005..755210838fad 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -395,7 +395,7 @@ jobs: uses: ./.github/actions/restore-cache env: DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - - name: Pack + - name: Profiling # Profiling tarball is built separately as we assemble the precompiled binaries run: yarn build:tarball --ignore @sentry/profiling-node @@ -958,6 +958,7 @@ jobs: - name: Build tarballs run: yarn build:tarball --ignore @sentry/profiling-node + # Rebuild profiling by compiling TS and pulling the precompiled binaries - name: Build Profiling Node run: yarn lerna run build:lib --scope @sentry/profiling-node @@ -971,11 +972,7 @@ jobs: - name: Build Profiling tarball run: yarn build:tarball --scope @sentry/profiling-node - - - name: Sanity check profiling - run: | - ls -la ${{ github.workspace }}/packages/profiling-node - ls -la ${{ github.workspace }}/packages/profiling-node/lib + # End rebuild profiling - name: Stores tarballs in cache uses: actions/cache/save@v4 @@ -1070,11 +1067,21 @@ jobs: env: DEPENDENCY_CACHE_KEY: ${{ needs.job_build.outputs.dependency_cache_key }} - - name: Restore profiling tarball - uses: actions/cache/restore@v3 + # Rebuild profiling by compiling TS and pulling the precompiled binaries + - name: Build Profiling Node + run: yarn lerna run build:lib --scope @sentry/profiling-node + + - name: Extract Profiling Node Prebuilt Binaries + # @TODO: v4 breaks convenient merging of same name artifacts + # https://github.com/actions/upload-artifact/issues/478 + uses: actions/download-artifact@v3 with: - path: ${{ github.workspace }}/packages/profiling-node/*.tgz - key: ${{ env.BUILD_CACHE_TARBALL_KEY }} + name: profiling-node-binaries-${{ github.sha }} + path: ${{ github.workspace }}/packages/profiling-node/lib/ + + - name: Build Profiling tarball + run: yarn build:tarball --scope @sentry/profiling-node + # End rebuild profiling - name: Restore tarball cache uses: actions/cache/restore@v4 From 66ed856367b7b244e56d3b9a4443483df7322080 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 19 Jan 2024 10:38:21 -0500 Subject: [PATCH 224/240] use DEBUG_BUILD --- packages/profiling-node/src/cpu_profiler.ts | 9 ++-- packages/profiling-node/src/debug-build.ts | 8 ++++ packages/profiling-node/src/env.ts | 17 -------- packages/profiling-node/src/hubextensions.ts | 45 ++++++-------------- packages/profiling-node/src/integration.ts | 26 ++++------- packages/profiling-node/src/utils.ts | 16 +++---- 6 files changed, 38 insertions(+), 83 deletions(-) create mode 100644 packages/profiling-node/src/debug-build.ts delete mode 100644 packages/profiling-node/src/env.ts diff --git a/packages/profiling-node/src/cpu_profiler.ts b/packages/profiling-node/src/cpu_profiler.ts index 26d1e99e6204..e4ee11fee6a4 100644 --- a/packages/profiling-node/src/cpu_profiler.ts +++ b/packages/profiling-node/src/cpu_profiler.ts @@ -6,7 +6,7 @@ import { env, versions } from 'process'; import { threadId } from 'worker_threads'; import { GLOBAL_OBJ, logger } from '@sentry/utils'; -import { isDebugBuild } from './env'; +import { DEBUG_BUILD } from './debug-build'; import type { PrivateV8CpuProfilerBindings, V8CpuProfilerBindings } from './types'; const stdlib = familySync(); @@ -134,9 +134,7 @@ const PrivateCpuProfilerBindings: PrivateV8CpuProfilerBindings = importCppBindin const CpuProfilerBindings: V8CpuProfilerBindings = { startProfiling(name: string) { if (!PrivateCpuProfilerBindings) { - if (isDebugBuild()) { - logger.log('[Profiling] Bindings not loaded, ignoring call to startProfiling.'); - } + DEBUG_BUILD && logger.log('[Profiling] Bindings not loaded, ignoring call to startProfiling.'); return; } @@ -144,9 +142,8 @@ const CpuProfilerBindings: V8CpuProfilerBindings = { }, stopProfiling(name: string) { if (!PrivateCpuProfilerBindings) { - if (isDebugBuild()) { + DEBUG_BUILD && logger.log('[Profiling] Bindings not loaded or profile was never started, ignoring call to stopProfiling.'); - } return null; } return PrivateCpuProfilerBindings.stopProfiling(name, threadId, !!GLOBAL_OBJ._sentryDebugIds); diff --git a/packages/profiling-node/src/debug-build.ts b/packages/profiling-node/src/debug-build.ts new file mode 100644 index 000000000000..60aa50940582 --- /dev/null +++ b/packages/profiling-node/src/debug-build.ts @@ -0,0 +1,8 @@ +declare const __DEBUG_BUILD__: boolean; + +/** + * This serves as a build time flag that will be true by default, but false in non-debug builds or if users replace `__SENTRY_DEBUG__` in their generated code. + * + * ATTENTION: This constant must never cross package boundaries (i.e. be exported) to guarantee that it can be used for tree shaking. + */ +export const DEBUG_BUILD = __DEBUG_BUILD__; diff --git a/packages/profiling-node/src/env.ts b/packages/profiling-node/src/env.ts deleted file mode 100644 index 71c7e1623fb8..000000000000 --- a/packages/profiling-node/src/env.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * This module exists for optimizations in the build process through rollup and terser. We define some global - * constants, which can be overridden during build. By guarding certain pieces of code with functions that return these - * constants, we can control whether or not they appear in the final bundle. (Any code guarded by a false condition will - * never run, and will hence be dropped during treeshaking.) The two primary uses for this are stripping out calls to - * `logger` and preventing node-related code from appearing in browser bundles. - */ -const __SENTRY_DEBUG__ = true; - -/** - * Figures out if we're building with debug functionality. - * - * @returns true if this is a debug build - */ -export function isDebugBuild(): boolean { - return __SENTRY_DEBUG__; -} diff --git a/packages/profiling-node/src/hubextensions.ts b/packages/profiling-node/src/hubextensions.ts index 0940aff0fde7..66a43d3fcb28 100644 --- a/packages/profiling-node/src/hubextensions.ts +++ b/packages/profiling-node/src/hubextensions.ts @@ -4,7 +4,7 @@ import type { CustomSamplingContext, Hub, Transaction, TransactionContext } from import { logger, uuid4 } from '@sentry/utils'; import { CpuProfilerBindings } from './cpu_profiler'; -import { isDebugBuild } from './env'; +import { DEBUG_BUILD } from './debug-build'; import { isValidSampleRate } from './utils'; export const MAX_PROFILE_DURATION_MS = 30 * 1000; @@ -34,17 +34,13 @@ export function maybeProfileTransaction( // Client and options are required for profiling if (!client) { - if (isDebugBuild()) { - logger.log('[Profiling] Profiling disabled, no client found.'); - } + DEBUG_BUILD && logger.log('[Profiling] Profiling disabled, no client found.'); return; } const options = client.getOptions(); if (!options) { - if (isDebugBuild()) { - logger.log('[Profiling] Profiling disabled, no options found.'); - } + DEBUG_BUILD && logger.log('[Profiling] Profiling disabled, no options found.'); return; } @@ -60,15 +56,13 @@ export function maybeProfileTransaction( // Since this is coming from the user (or from a function provided by the user), who knows what we might get. (The // only valid values are booleans or numbers between 0 and 1.) if (!isValidSampleRate(profilesSampleRate)) { - if (isDebugBuild()) { - logger.warn('[Profiling] Discarding profile because of invalid sample rate.'); - } + DEBUG_BUILD && logger.warn('[Profiling] Discarding profile because of invalid sample rate.'); return; } // if the function returned 0 (or false), or if `profileSampleRate` is 0, it's a sign the profile should be dropped if (!profilesSampleRate) { - if (isDebugBuild()) { + DEBUG_BUILD && logger.log( `[Profiling] Discarding profile because ${ typeof profilesSampler === 'function' @@ -76,7 +70,6 @@ export function maybeProfileTransaction( : 'a negative sampling decision was inherited or profileSampleRate is set to 0' }`, ); - } return; } @@ -85,22 +78,20 @@ export function maybeProfileTransaction( const sampled = profilesSampleRate === true ? true : Math.random() < profilesSampleRate; // Check if we should sample this profile if (!sampled) { - if (isDebugBuild()) { + DEBUG_BUILD && logger.log( `[Profiling] Discarding profile because it's not included in the random sample (sampling rate = ${Number( profilesSampleRate, )})`, ); - } return; } const profile_id = uuid4(); CpuProfilerBindings.startProfiling(profile_id); - if (isDebugBuild()) { + DEBUG_BUILD && // eslint-disable-next-line deprecation/deprecation logger.log(`[Profiling] started profiling transaction: ${transaction.name}`); - } // set transaction context - do this regardless if profiling fails down the line // so that we can still see the profile_id in the transaction context @@ -124,20 +115,18 @@ export function stopTransactionProfile( const profile = CpuProfilerBindings.stopProfiling(profile_id); - if (isDebugBuild()) { + DEBUG_BUILD && // eslint-disable-next-line deprecation/deprecation logger.log(`[Profiling] stopped profiling of transaction: ${transaction.name}`); - } // In case of an overlapping transaction, stopProfiling may return null and silently ignore the overlapping profile. if (!profile) { - if (isDebugBuild()) { + DEBUG_BUILD && logger.log( // eslint-disable-next-line deprecation/deprecation `[Profiling] profiler returned null profile for: ${transaction.name}`, 'this may indicate an overlapping transaction or a call to stopProfiling with a profile title that was never started', ); - } return null; } @@ -189,10 +178,10 @@ export function __PRIVATE__wrapStartTransactionWithProfiling(startTransaction: S // Enqueue a timeout to prevent profiles from running over max duration. let maxDurationTimeoutID: NodeJS.Timeout | void = global.setTimeout(() => { - if (isDebugBuild()) { + DEBUG_BUILD && // eslint-disable-next-line deprecation/deprecation logger.log('[Profiling] max profile duration elapsed, stopping profiling for:', transaction.name); - } + profile = stopTransactionProfile(transaction, profile_id); }, maxProfileDurationMs); @@ -238,23 +227,17 @@ export function __PRIVATE__wrapStartTransactionWithProfiling(startTransaction: S function _addProfilingExtensionMethods(): void { const carrier = getMainCarrier(); if (!carrier.__SENTRY__) { - if (isDebugBuild()) { - logger.log("[Profiling] Can't find main carrier, profiling won't work."); - } + DEBUG_BUILD && logger.log("[Profiling] Can't find main carrier, profiling won't work."); return; } carrier.__SENTRY__.extensions = carrier.__SENTRY__.extensions || {}; if (!carrier.__SENTRY__.extensions['startTransaction']) { - if (isDebugBuild()) { - logger.log('[Profiling] startTransaction does not exists, profiling will not work.'); - } + DEBUG_BUILD && logger.log('[Profiling] startTransaction does not exists, profiling will not work.'); return; } - if (isDebugBuild()) { - logger.log('[Profiling] startTransaction exists, patching it with profiling functionality...'); - } + DEBUG_BUILD && logger.log('[Profiling] startTransaction exists, patching it with profiling functionality...'); carrier.__SENTRY__.extensions['startTransaction'] = __PRIVATE__wrapStartTransactionWithProfiling( // This is patched by sentry/tracing, we are going to re-patch it... diff --git a/packages/profiling-node/src/integration.ts b/packages/profiling-node/src/integration.ts index 033ff29652f0..28bf24f0d784 100644 --- a/packages/profiling-node/src/integration.ts +++ b/packages/profiling-node/src/integration.ts @@ -3,7 +3,7 @@ import type { Event, EventProcessor, Hub, Integration, Transaction } from '@sent import { logger } from '@sentry/utils'; -import { isDebugBuild } from './env'; +import { DEBUG_BUILD } from './debug-build'; import { MAX_PROFILE_DURATION_MS, addProfilingExtensionMethods, @@ -78,10 +78,9 @@ export class ProfilingIntegration implements Integration { // Enqueue a timeout to prevent profiles from running over max duration. PROFILE_TIMEOUTS[profile_id] = global.setTimeout(() => { - if (isDebugBuild()) { + DEBUG_BUILD && // eslint-disable-next-line deprecation/deprecation logger.log('[Profiling] max profile duration elapsed, stopping profiling for:', transaction.name); - } const profile = stopTransactionProfile(transaction, profile_id); if (profile) { @@ -145,17 +144,13 @@ export class ProfilingIntegration implements Integration { // We need to find both a profile and a transaction event for the same profile_id. const profileIndex = PROFILE_QUEUE.findIndex(p => p.profile_id === profile_id); if (profileIndex === -1) { - if (isDebugBuild()) { - logger.log(`[Profiling] Could not retrieve profile for transaction: ${profile_id}`); - } + DEBUG_BUILD && logger.log(`[Profiling] Could not retrieve profile for transaction: ${profile_id}`); continue; } const cpuProfile = PROFILE_QUEUE[profileIndex]; if (!cpuProfile) { - if (isDebugBuild()) { - logger.log(`[Profiling] Could not retrieve profile for transaction: ${profile_id}`); - } + DEBUG_BUILD && logger.log(`[Profiling] Could not retrieve profile for transaction: ${profile_id}`); continue; } @@ -208,38 +203,33 @@ export class ProfilingIntegration implements Integration { const client = hub.getClient(); if (!client) { - if (isDebugBuild()) { + DEBUG_BUILD && logger.log( '[Profiling] getClient did not return a Client, removing profile from event and forwarding to next event processors.', ); - } return maybeRemoveProfileFromSdkMetadata(event); } const dsn = client.getDsn(); if (!dsn) { - if (isDebugBuild()) { + DEBUG_BUILD && logger.log( '[Profiling] getDsn did not return a Dsn, removing profile from event and forwarding to next event processors.', ); - } return maybeRemoveProfileFromSdkMetadata(event); } const transport = client.getTransport(); if (!transport) { - if (isDebugBuild()) { + DEBUG_BUILD && logger.log( '[Profiling] getTransport did not return a Transport, removing profile from event and forwarding to next event processors.', ); - } return maybeRemoveProfileFromSdkMetadata(event); } // If all required components are available, we construct a profiling event envelope and send it to Sentry. - if (isDebugBuild()) { - logger.log('[Profiling] Preparing envelope and sending a profiling event'); - } + DEBUG_BUILD && logger.log('[Profiling] Preparing envelope and sending a profiling event'); const envelope = createProfilingEventEnvelope(event, dsn); if (envelope) { diff --git a/packages/profiling-node/src/utils.ts b/packages/profiling-node/src/utils.ts index add05caab05d..1e34fbfd8974 100644 --- a/packages/profiling-node/src/utils.ts +++ b/packages/profiling-node/src/utils.ts @@ -20,7 +20,7 @@ import { isMainThread, threadId } from 'worker_threads'; import * as Sentry from '@sentry/node'; import { GLOBAL_OBJ, createEnvelope, dropUndefinedKeys, dsnToString, forEachEnvelopeItem, logger } from '@sentry/utils'; -import { isDebugBuild } from './env'; +import { DEBUG_BUILD } from './debug-build'; import type { Profile, ProfiledEvent, RawThreadCpuProfile, ThreadCpuProfile } from './types'; import type { DebugImage } from './types'; @@ -231,9 +231,7 @@ function createProfilePayload( // All profiles and transactions are rejected if this is the case and we want to // warn users that this is happening if they enable debug flag if (trace_id && trace_id.length !== 32) { - if (isDebugBuild()) { - logger.log(`[Profiling] Invalid traceId: ${trace_id} on profiled event`); - } + DEBUG_BUILD && logger.log(`[Profiling] Invalid traceId: ${trace_id} on profiled event`); } const enrichedThreadProfile = enrichWithThreadInformation(cpuProfile); @@ -346,13 +344,12 @@ export function maybeRemoveProfileFromSdkMetadata(event: Event | ProfiledEvent): export function isValidSampleRate(rate: unknown): boolean { // we need to check NaN explicitly because it's of type 'number' and therefore wouldn't get caught by this typecheck if ((typeof rate !== 'number' && typeof rate !== 'boolean') || (typeof rate === 'number' && isNaN(rate))) { - if (isDebugBuild()) { + DEBUG_BUILD && logger.warn( `[Profiling] Invalid sample rate. Sample rate must be a boolean or a number between 0 and 1. Got ${JSON.stringify( rate, )} of type ${JSON.stringify(typeof rate)}.`, ); - } return false; } @@ -363,9 +360,7 @@ export function isValidSampleRate(rate: unknown): boolean { // in case sampleRate is a boolean, it will get automatically cast to 1 if it's true and 0 if it's false if (rate < 0 || rate > 1) { - if (isDebugBuild()) { - logger.warn(`[Profiling] Invalid sample rate. Sample rate must be between 0 and 1. Got ${rate}.`); - } + DEBUG_BUILD && logger.warn(`[Profiling] Invalid sample rate. Sample rate must be between 0 and 1. Got ${rate}.`); return false; } return true; @@ -378,12 +373,11 @@ export function isValidSampleRate(rate: unknown): boolean { */ export function isValidProfile(profile: RawThreadCpuProfile): profile is RawThreadCpuProfile & { profile_id: string } { if (profile.samples.length <= 1) { - if (isDebugBuild()) { + DEBUG_BUILD && // Log a warning if the profile has less than 2 samples so users can know why // they are not seeing any profiling data and we cant avoid the back and forth // of asking them to provide us with a dump of the profile data. logger.log('[Profiling] Discarding profile because it contains less than 2 samples'); - } return false; } From 66b091e0de04470301dd7ad0eb874dd2d0d1db2a Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 19 Jan 2024 12:19:15 -0500 Subject: [PATCH 225/240] add node loader --- .../node-profiling/build.mjs | 2 +- .../profiling-node/test-binaries.entry.js | 19 ------------------- .../profiling-node/test-binaries.esbuild.js | 19 ------------------- 3 files changed, 1 insertion(+), 39 deletions(-) delete mode 100644 packages/profiling-node/test-binaries.entry.js delete mode 100644 packages/profiling-node/test-binaries.esbuild.js diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs index d86b1e280495..1c009389e83d 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs +++ b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs @@ -13,5 +13,5 @@ esbuild.build({ target: 'esnext', format: 'cjs', bundle: true, - // loader: { '.node': 'copy' }, + loader: { '.node': 'copy' }, }); diff --git a/packages/profiling-node/test-binaries.entry.js b/packages/profiling-node/test-binaries.entry.js deleted file mode 100644 index fd2f5c266fcd..000000000000 --- a/packages/profiling-node/test-binaries.entry.js +++ /dev/null @@ -1,19 +0,0 @@ -// See test-binaries.esbuild.js -const Sentry = require('@sentry/node'); -const Profiling = require('./lib'); - -const wait = ms => new Promise(resolve => setTimeout(resolve, ms)); - -Sentry.init({ - dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', - integrations: [new Profiling.ProfilingIntegration()], - tracesSampleRate: 1.0, - profilesSampleRate: 1.0, -}); - -const txn = Sentry.startTransaction('Precompile test'); - -(async () => { - await wait(500); - txn.finish(); -})(); diff --git a/packages/profiling-node/test-binaries.esbuild.js b/packages/profiling-node/test-binaries.esbuild.js deleted file mode 100644 index 5f825efc623c..000000000000 --- a/packages/profiling-node/test-binaries.esbuild.js +++ /dev/null @@ -1,19 +0,0 @@ -// Because bundlers can now predetermine a static set of binaries we need to ensure those binaries -// actually exists, else we risk a compile time error when bundling the package. This could happen -// if we added a new binary in cpu_profiler.ts, but forgot to prebuild binaries for it. Because CI -// only runs integration and unit tests, this change would be missed and could end up in a release. -// Therefor, once all binaries are precompiled in CI and tests pass, run esbuild with bundle:true -// which will copy all binaries to the outfile folder and throw if any of them are missing. -const esbuild = require('esbuild'); - -esbuild.build({ - platform: 'node', - entryPoints: ['./test-binaries.entry.js'], - outfile: './build-test/test-binaries.js', - target: 'esnext', - format: 'esm', - bundle: true, - loader: { - '.node': 'copy', - }, -}); From ef4cfbfa1adfa9afdf9fdbb79acfd7f55c98b4bc Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 19 Jan 2024 14:51:33 -0500 Subject: [PATCH 226/240] test esm --- .../e2e-tests/test-applications/node-profiling/build.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs index 1c009389e83d..4334793f3919 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs +++ b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs @@ -11,7 +11,7 @@ esbuild.build({ entryPoints: ['./index.js'], outdir: './dist', target: 'esnext', - format: 'cjs', + format: 'esm', bundle: true, loader: { '.node': 'copy' }, }); From bf724c3373a5217c2162c4f92383b0624179382d Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 19 Jan 2024 14:52:12 -0500 Subject: [PATCH 227/240] buildSync --- .../e2e-tests/test-applications/node-profiling/build.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs index 4334793f3919..cee97771b7ef 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs +++ b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs @@ -6,12 +6,12 @@ // which will copy all binaries to the outfile folder and throw if any of them are missing. import esbuild from 'esbuild'; -esbuild.build({ +esbuild.buildSync({ platform: 'node', entryPoints: ['./index.js'], outdir: './dist', target: 'esnext', - format: 'esm', + format: 'cjs', bundle: true, loader: { '.node': 'copy' }, }); From 8d1f7c9f687d56f702f25636c0e87c7a1325e90e Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 19 Jan 2024 15:53:51 -0500 Subject: [PATCH 228/240] attempt to install esbuild --- .github/workflows/build.yml | 5 +++++ .../e2e-tests/test-applications/node-profiling/package.json | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 755210838fad..f76a52bf9b42 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1081,6 +1081,11 @@ jobs: - name: Build Profiling tarball run: yarn build:tarball --scope @sentry/profiling-node + + - name: Install esbuild + if: ${{ matrix.test-application == 'node-profiling' }} + working-directory: dev-packages/e2e-tests/test-applications/${{ matrix.test-application }} + run: yarn add esbuild@0.19.11 # End rebuild profiling - name: Restore tarball cache diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/package.json b/dev-packages/e2e-tests/test-applications/node-profiling/package.json index 4dab46254df7..998db7919e69 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/package.json +++ b/dev-packages/e2e-tests/test-applications/node-profiling/package.json @@ -13,7 +13,6 @@ "dependencies": { "@sentry/node": "latest || *", "@sentry/profiling-node": "latest || *", - "esbuild": "^0.19.11" }, "devDependencies": {}, "volta": { From c39d18c4f0d721fafd7ff89e79a87dac8652eb92 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Sat, 20 Jan 2024 08:36:55 -0500 Subject: [PATCH 229/240] test --- .../e2e-tests/test-applications/node-profiling/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/package.json b/dev-packages/e2e-tests/test-applications/node-profiling/package.json index 998db7919e69..8d2bfff693eb 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/package.json +++ b/dev-packages/e2e-tests/test-applications/node-profiling/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@sentry/node": "latest || *", - "@sentry/profiling-node": "latest || *", + "@sentry/profiling-node": "latest || *" }, "devDependencies": {}, "volta": { From ce2dd4a8bf7a5b9c202196b4bd1bc4b358a98b7b Mon Sep 17 00:00:00 2001 From: JonasBa Date: Sat, 20 Jan 2024 08:37:52 -0500 Subject: [PATCH 230/240] test --- .../e2e-tests/test-applications/node-profiling/build.mjs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs index cee97771b7ef..4325d60a0434 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs +++ b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs @@ -6,6 +6,8 @@ // which will copy all binaries to the outfile folder and throw if any of them are missing. import esbuild from 'esbuild'; +console.log("Running build using esbuild version", esbuild.version) + esbuild.buildSync({ platform: 'node', entryPoints: ['./index.js'], From 09f76e4e47ad9d93daed352b1877b59299bcecc9 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Sat, 20 Jan 2024 15:59:36 -0500 Subject: [PATCH 231/240] lint --- .../e2e-tests/test-applications/node-profiling/build.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs index 4325d60a0434..cdf744355fe8 100644 --- a/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs +++ b/dev-packages/e2e-tests/test-applications/node-profiling/build.mjs @@ -6,7 +6,7 @@ // which will copy all binaries to the outfile folder and throw if any of them are missing. import esbuild from 'esbuild'; -console.log("Running build using esbuild version", esbuild.version) +console.log('Running build using esbuild version', esbuild.version); esbuild.buildSync({ platform: 'node', From 35525cb61e87028b763bb4f57bb6b222dbd76cbd Mon Sep 17 00:00:00 2001 From: JonasBa Date: Mon, 22 Jan 2024 08:44:18 -0500 Subject: [PATCH 232/240] fix repo link --- packages/profiling-node/CONTRIBUTING.md | 31 ++++++++++++++++++------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/packages/profiling-node/CONTRIBUTING.md b/packages/profiling-node/CONTRIBUTING.md index 3a9e06783fe0..67c0afb63bbf 100644 --- a/packages/profiling-node/CONTRIBUTING.md +++ b/packages/profiling-node/CONTRIBUTING.md @@ -6,7 +6,9 @@ # Contributing -We welcome suggested improvements and bug fixes to the `@sentry/*` family of packages, in the form of pull requests on [`GitHub`](https://github.com/getsentry/profiling-node). The guide below will help you get started, but if you have further questions, please feel free to reach out on [Discord](https://discord.gg/Ww9hbqr). +We welcome suggested improvements and bug fixes to the `@sentry/*` family of packages, in the form of pull requests on +[`GitHub`](https://github.com/getsentry/sentry-javascript). The guide below will help you get started, but if you have +further questions, please feel free to reach out on [Discord](https://discord.gg/Ww9hbqr). ## Setting up an Environment @@ -14,11 +16,14 @@ To run the test suite and our code linter, node.js and npm are required. [`npm and node` download](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) -Because the repository requires you to compile the c++ bindings via node-gyp, we may require you to install dependencies like Python and GCC. See [node-gyp](https://github.com/nodejs/node-gyp#on-unix) for a full list of those requirements depending on the OS that you are running. +Because the repository requires you to compile the c++ bindings via node-gyp, we may require you to install dependencies +like Python and GCC. See [node-gyp](https://github.com/nodejs/node-gyp#on-unix) for a full list of those requirements +depending on the OS that you are running. ## Building the package -Since we are using [`TypeScript`](https://www.typescriptlang.org/) and native node addons, you need to transpile the code to JavaScript and compile the c++ bindings in order to be able to run the addon. +Since we are using [`TypeScript`](https://www.typescriptlang.org/) and native node addons, you need to transpile the +code to JavaScript and compile the c++ bindings in order to be able to run the addon. - `yarn build` will compile the c++ bindings and ts files. - `yarn build:lib` will compile ts files @@ -26,7 +31,8 @@ Since we are using [`TypeScript`](https://www.typescriptlang.org/) and native no ## Tests -Tests are colocated with source files and should have a .test.ts suffix. The entire test suite can be ran using the `yarn test` command. +Tests are colocated with source files and should have a .test.ts suffix. The entire test suite can be ran using the +`yarn test` command. ## Linting @@ -37,12 +43,17 @@ Similar to building and testing, linting can be done via `yarn lint` command. When contributing to the codebase, please note: - Non-trivial PRs will not be accepted without tests (see above). -- We encourage you to open issues and discuss the change you want to make before opening PR's. This is especially true if you are considering adding new functionality. Remember that your requirements may differ from the direction that we want this SDK to take. +- We encourage you to open issues and discuss the change you want to make before opening PR's. This is especially true + if you are considering adding new functionality. Remember that your requirements may differ from the direction that we + want this SDK to take. - Please do not bump version numbers yourself. ## Benchmarks -The repository contains micro benchmarks. You can find all benchmarks at the benchmarks folder in project root directory. The benchmarks can either be ran directly through node via `node benchmarks/cpu/benchmark.profiler.js` or via `yarn benchmark` command. There are also individual yarn benchmark commands like `yarn benchmark:server` or `yarn benchmark:methods` which will only run individual benchmarks. +The repository contains micro benchmarks. You can find all benchmarks at the benchmarks folder in project root +directory. The benchmarks can either be ran directly through node via `node benchmarks/cpu/benchmark.profiler.js` or via +`yarn benchmark` command. There are also individual yarn benchmark commands like `yarn benchmark:server` or +`yarn benchmark:methods` which will only run individual benchmarks. Remember that these are micro benchmarks and that results will vary across different OS and architectures. @@ -51,7 +62,9 @@ Remember that these are micro benchmarks and that results will vary across diffe _These steps are only relevant to Sentry employees when preparing and publishing a new SDK release._ 1. Determine what version will be released (we use [semver](https://semver.org)). -2. Update [`CHANGELOG.md`](https://github.com/getsentry/profiling-node/edit/master/CHANGELOG.md) to add an entry for the next release number and a list of changes since the last release. (See details below.) -3. Run the [Prepare Release](https://github.com/getsentry/profiling-node/actions/workflows/release.yml) workflow. +2. Update [`CHANGELOG.md`](https://github.com/getsentry/sentry-javascript/edit/master/CHANGELOG.md) to add an entry for + the next release number and a list of changes since the last release. (See details below.) +3. Run the [Prepare Release](https://github.com/getsentry/sentry-javascript/actions/workflows/release.yml) workflow. 4. A new issue should appear in https://github.com/getsentry/publish/issues. -5. Ask a member of the [@getsentry/releases team](https://github.com/orgs/getsentry/teams/releases/members) to approve the release. +5. Ask a member of the [@getsentry/releases team](https://github.com/orgs/getsentry/teams/releases/members) to approve + the release. From ea7006af3c7835720b7d5470286ab90bd4144b1f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Mon, 22 Jan 2024 09:52:28 -0500 Subject: [PATCH 233/240] run only for changes --- .github/workflows/build.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f76a52bf9b42..81d6ad5d7258 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -133,6 +133,10 @@ jobs: - 'packages/node-experimental/**' - 'packages/profiling-node/**' - 'dev-packages/node-integration-tests/**' + profiling_node: + - *shared + - 'packages/node/**' + - 'packages/profiling-node/**' deno: - *shared - *browser @@ -150,6 +154,7 @@ jobs: changed_ember: ${{ steps.changed.outputs.ember }} changed_remix: ${{ steps.changed.outputs.remix }} changed_node: ${{ steps.changed.outputs.node }} + changed_profiling_node: ${{ steps.changed.outputs.profiling_node }} changed_deno: ${{ steps.changed.outputs.deno }} changed_browser: ${{ steps.changed.outputs.browser }} changed_browser_integration: ${{ steps.changed.outputs.browser_integration }} @@ -537,6 +542,7 @@ jobs: job_profiling_node_unit_tests: name: Node Profiling Unit Tests needs: [job_get_metadata, job_build] + if: needs.job_get_metadata.outputs.changed_profiling_node == 'true' || github.event_name != 'pull_request' runs-on: ubuntu-latest timeout-minutes: 10 steps: @@ -1416,7 +1422,7 @@ jobs: - name: Build Monorepo if: steps.restore-build.outputs.cache-hit != 'true' - run: yarn build --ignore @sentry/serverless --ignore @sentry/browser --ignore @sentry/astro + run: yarn build --scope @sentry/profiling-node - name: Test Bindings if: matrix.arch != 'arm64' From a47c44ab52a57eb15c307fd8e1b5743be73c6a52 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Mon, 22 Jan 2024 10:40:30 -0500 Subject: [PATCH 234/240] disable console.log in build scripts --- packages/profiling-node/scripts/check-build.js | 14 +++----------- packages/profiling-node/scripts/copy-target.js | 6 +++--- .../scripts/prune-profiler-binaries.js | 11 ++++------- 3 files changed, 10 insertions(+), 21 deletions(-) diff --git a/packages/profiling-node/scripts/check-build.js b/packages/profiling-node/scripts/check-build.js index 1e2ec31d2eb2..6892d90ba4b3 100644 --- a/packages/profiling-node/scripts/check-build.js +++ b/packages/profiling-node/scripts/check-build.js @@ -1,3 +1,6 @@ +// This is a build scripts, so some logging is desireable as it allows +// us to follow the code path that triggered the error. +/* eslint-disable no-console */ const fs = require('fs'); const child_process = require('child_process'); const binaries = require('./binaries.js'); @@ -7,7 +10,6 @@ function clean(err) { } function recompileFromSource() { - // eslint-disable-next-line no-console console.log('@sentry/profiling-node: Compiling from source...'); let spawn = child_process.spawnSync('npm', ['run', 'build:bindings:configure'], { stdio: ['inherit', 'inherit', 'pipe'], @@ -16,9 +18,7 @@ function recompileFromSource() { }); if (spawn.status !== 0) { - // eslint-disable-next-line no-console console.log('@sentry/profiling-node: Failed to configure gyp'); - // eslint-disable-next-line no-console console.log('@sentry/profiling-node:', clean(spawn.stderr)); return; } @@ -29,9 +29,7 @@ function recompileFromSource() { shell: true, }); if (spawn.status !== 0) { - // eslint-disable-next-line no-console console.log('@sentry/profiling-node: Failed to build bindings'); - // eslint-disable-next-line no-console console.log('@sentry/profiling-node:', clean(spawn.stderr)); return; } @@ -39,26 +37,20 @@ function recompileFromSource() { if (fs.existsSync(binaries.target)) { try { - // eslint-disable-next-line no-console console.log(`@sentry/profiling-node: Precompiled binary found, attempting to load ${binaries.target}`); require(binaries.target); - // eslint-disable-next-line no-console console.log('@sentry/profiling-node: Precompiled binary found, skipping build from source.'); } catch (e) { - // eslint-disable-next-line no-console console.log('@sentry/profiling-node: Precompiled binary found but failed loading'); - // eslint-disable-next-line no-console console.log('@sentry/profiling-node:', e); try { recompileFromSource(); } catch (e) { - // eslint-disable-next-line no-console console.log('@sentry/profiling-node: Failed to compile from source'); throw e; } } } else { - // eslint-disable-next-line no-console console.log('@sentry/profiling-node: No precompiled binary found'); recompileFromSource(); } diff --git a/packages/profiling-node/scripts/copy-target.js b/packages/profiling-node/scripts/copy-target.js index 5b029ddde3d3..ee3b75163724 100644 --- a/packages/profiling-node/scripts/copy-target.js +++ b/packages/profiling-node/scripts/copy-target.js @@ -1,3 +1,6 @@ +// This is a build scripts, so some logging is desireable as it allows +// us to follow the code path that triggered the error. +/* eslint-disable no-console */ const fs = require('fs'); const path = require('path'); const process = require('process'); @@ -13,15 +16,12 @@ const source = path.join(__dirname, '..', 'build', 'Release', 'sentry_cpu_profil const target = path.join(__dirname, '..', 'lib', binaries.getModuleName()); if (!fs.existsSync(source)) { - // eslint-disable-next-line no-console console.log('Source file does not exist:', source); process.exit(1); } else { if (fs.existsSync(target)) { - // eslint-disable-next-line no-console console.log('Target file already exists, overwriting it'); } - // eslint-disable-next-line no-console console.log('Renaming', source, 'to', target); fs.renameSync(source, target); } diff --git a/packages/profiling-node/scripts/prune-profiler-binaries.js b/packages/profiling-node/scripts/prune-profiler-binaries.js index 5e346b65f13c..925cedaee73a 100755 --- a/packages/profiling-node/scripts/prune-profiler-binaries.js +++ b/packages/profiling-node/scripts/prune-profiler-binaries.js @@ -1,4 +1,8 @@ #! /usr/bin/env node + +// This is a build scripts, so some logging is desireable as it allows +// us to follow the code path that triggered the error. +/* eslint-disable no-console */ const fs = require('fs'); let SOURCE_DIR, PLATFORM, ARCH, STDLIB, NODE, HELP; @@ -37,7 +41,6 @@ for (let i = 0; i < process.argv.length; i++) { } if (HELP) { - // eslint-disable-next-line no-console console.log( `\nSentry: Prune profiler binaries\n Usage: sentry-prune-profiler-binaries --target_dir_path=... --target_platform=... --target_arch=... --target_stdlib=...\n @@ -91,7 +94,6 @@ If you are unsure about the execution environment, you can opt to skip some valu } if (ARGV_ERRORS.length > 0) { - // eslint-disable-next-line no-console console.log(ARGV_ERRORS.join('\n')); process.exit(1); } @@ -150,18 +152,15 @@ async function prune(binaries) { removedBinariesCount++; if (process.argv.includes('--dry-run')) { - // eslint-disable-next-line no-console console.log(`Sentry: would have pruned ${binary} (${bytesToHumanReadable(stats.size)})`); continue; } - // eslint-disable-next-line no-console console.log(`Sentry: pruned ${binary} (${bytesToHumanReadable(stats.size)})`); fs.unlinkSync(binary); } if (removedBinariesCount === 0) { - // eslint-disable-next-line no-console console.log( '❌ Sentry: no binaries pruned, please make sure target argument values are valid or use --help for more information.', ); @@ -169,7 +168,6 @@ async function prune(binaries) { } if (process.argv.includes('--dry-run')) { - // eslint-disable-next-line no-console console.log( `✅ Sentry: would have pruned ${removedBinariesCount} ${ removedBinariesCount === 1 ? 'binary' : 'binaries' @@ -178,7 +176,6 @@ async function prune(binaries) { return; } - // eslint-disable-next-line no-console console.log( `✅ Sentry: pruned ${removedBinariesCount} ${ removedBinariesCount === 1 ? 'binary' : 'binaries' From 33b1d76db93430880341e46024214191828211b4 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Mon, 22 Jan 2024 10:45:46 -0500 Subject: [PATCH 235/240] add newline and .filter(boolean) --- packages/profiling-node/scripts/binaries.js | 4 ++-- packages/profiling-node/scripts/bump-version.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/profiling-node/scripts/binaries.js b/packages/profiling-node/scripts/binaries.js index eb0fc636d404..10c335662ef7 100644 --- a/packages/profiling-node/scripts/binaries.js +++ b/packages/profiling-node/scripts/binaries.js @@ -11,13 +11,13 @@ function getModuleName() { if (platform === 'darwin' && arch === 'arm64') { const identifier = [platform, 'arm64', abi.getAbi(process.versions.node, 'node')] - .filter(c => c !== undefined && c !== null) + .filter(Boolean) .join('-'); return `sentry_cpu_profiler-${identifier}.node`; } const identifier = [platform, arch, stdlib, abi.getAbi(process.versions.node, 'node')] - .filter(c => c !== undefined && c !== null) + .filter(Boolean) .join('-'); return `sentry_cpu_profiler-${identifier}.node`; diff --git a/packages/profiling-node/scripts/bump-version.sh b/packages/profiling-node/scripts/bump-version.sh index 234d58f5359b..6f9ff7430dd8 100755 --- a/packages/profiling-node/scripts/bump-version.sh +++ b/packages/profiling-node/scripts/bump-version.sh @@ -11,4 +11,4 @@ npm version "${NEW_VERSION}" echo "// This is an auto generated file. Do not edit this file directly. // The version is bumped by scripts/bump_version.sh -export const SDK_VERSION = '${NEW_VERSION}';" > src/sdk_version.ts \ No newline at end of file +export const SDK_VERSION = '${NEW_VERSION}';" > src/sdk_version.ts From 555e52f49a2f35e9de6389b30650eda2af29724f Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 23 Jan 2024 09:44:58 -0500 Subject: [PATCH 236/240] remove sentry hub --- packages/profiling-node/package.json | 1 - packages/profiling-node/scripts/binaries.js | 8 +-- .../profiling-node/scripts/bump-version.sh | 14 ------ packages/profiling-node/src/sdk_version.ts | 3 -- yarn.lock | 49 +++++++++++++++++++ 5 files changed, 51 insertions(+), 24 deletions(-) delete mode 100755 packages/profiling-node/scripts/bump-version.sh delete mode 100644 packages/profiling-node/src/sdk_version.ts diff --git a/packages/profiling-node/package.json b/packages/profiling-node/package.json index 62a6317c31c6..c72cc5c8ae6e 100644 --- a/packages/profiling-node/package.json +++ b/packages/profiling-node/package.json @@ -69,7 +69,6 @@ }, "devDependencies": { "@sentry/core": "7.93.0", - "@sentry/hub": "7.93.0", "@sentry/node": "7.93.0", "@sentry/types": "7.93.0", "@sentry/utils": "7.93.0", diff --git a/packages/profiling-node/scripts/binaries.js b/packages/profiling-node/scripts/binaries.js index 10c335662ef7..2c0c6be2642b 100644 --- a/packages/profiling-node/scripts/binaries.js +++ b/packages/profiling-node/scripts/binaries.js @@ -10,15 +10,11 @@ function getModuleName() { const arch = process.env['BUILD_ARCH'] || os.arch(); if (platform === 'darwin' && arch === 'arm64') { - const identifier = [platform, 'arm64', abi.getAbi(process.versions.node, 'node')] - .filter(Boolean) - .join('-'); + const identifier = [platform, 'arm64', abi.getAbi(process.versions.node, 'node')].filter(Boolean).join('-'); return `sentry_cpu_profiler-${identifier}.node`; } - const identifier = [platform, arch, stdlib, abi.getAbi(process.versions.node, 'node')] - .filter(Boolean) - .join('-'); + const identifier = [platform, arch, stdlib, abi.getAbi(process.versions.node, 'node')].filter(Boolean).join('-'); return `sentry_cpu_profiler-${identifier}.node`; } diff --git a/packages/profiling-node/scripts/bump-version.sh b/packages/profiling-node/scripts/bump-version.sh deleted file mode 100755 index 6f9ff7430dd8..000000000000 --- a/packages/profiling-node/scripts/bump-version.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -### Example of a version-bumping script for an NPM project. -### Located at: ./scripts/bump-version.sh -set -eux - -NEW_VERSION="${2}" - -# Do not tag and commit changes made by "npm version" -export npm_config_git_tag_version=false -npm version "${NEW_VERSION}" - -echo "// This is an auto generated file. Do not edit this file directly. -// The version is bumped by scripts/bump_version.sh -export const SDK_VERSION = '${NEW_VERSION}';" > src/sdk_version.ts diff --git a/packages/profiling-node/src/sdk_version.ts b/packages/profiling-node/src/sdk_version.ts deleted file mode 100644 index 116a57e251ff..000000000000 --- a/packages/profiling-node/src/sdk_version.ts +++ /dev/null @@ -1,3 +0,0 @@ -// This is an auto generated file. Do not edit this file directly. -// The version is bumped by scripts/bump_version.sh -export const SDK_VERSION = '1.3.3'; diff --git a/yarn.lock b/yarn.lock index d4af50d1f57e..de4af962b216 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5440,6 +5440,15 @@ fflate "^0.4.4" mitt "^3.0.0" +"@sentry-internal/tracing@7.93.0": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry-internal/tracing/-/tracing-7.93.0.tgz#8cee8b610695d828af75edd2929b64b7caf0385d" + integrity sha512-DjuhmQNywPp+8fxC9dvhGrqgsUb6wI/HQp25lS2Re7VxL1swCasvpkg8EOYP4iBniVQ86QK0uITkOIRc5tdY1w== + dependencies: + "@sentry/core" "7.93.0" + "@sentry/types" "7.93.0" + "@sentry/utils" "7.93.0" + "@sentry/bundler-plugin-core@0.6.1": version "0.6.1" resolved "https://registry.yarnpkg.com/@sentry/bundler-plugin-core/-/bundler-plugin-core-0.6.1.tgz#6c6a2ff3cdc98cd0ff1c30c59408cee9f067adf2" @@ -5534,6 +5543,46 @@ "@sentry/cli-win32-i686" "2.26.0" "@sentry/cli-win32-x64" "2.26.0" +"@sentry/core@7.93.0": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.93.0.tgz#50a14bf305130dfef51810e4c97fcba4972a57ef" + integrity sha512-vZQSUiDn73n+yu2fEcH+Wpm4GbRmtxmnXnYCPgM6IjnXqkVm3awWAkzrheADblx3kmxrRiOlTXYHw9NTWs56fg== + dependencies: + "@sentry/types" "7.93.0" + "@sentry/utils" "7.93.0" + +"@sentry/hub@7.93.0": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-7.93.0.tgz#3db26f74dc1269650fa9ec553f0837af5caa0d30" + integrity sha512-gfPyT3DFGYYM5d+CHiS0YJHkIJHa8MKSfl32RkCMA5KQr9RF0H+GR5LZCinQOWq43fpsncSLyuoMfBjgbMLN+w== + dependencies: + "@sentry/core" "7.93.0" + "@sentry/types" "7.93.0" + "@sentry/utils" "7.93.0" + +"@sentry/node@7.93.0": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-7.93.0.tgz#7786d05d1e3e984207a866b07df1bf891355892e" + integrity sha512-nUXPCZQm5Y9Ipv7iWXLNp5dbuyi1VvbJ3RtlwD7utgsNkRYB4ixtKE9w2QU8DZZAjaEF6w2X94OkYH6C932FWw== + dependencies: + "@sentry-internal/tracing" "7.93.0" + "@sentry/core" "7.93.0" + "@sentry/types" "7.93.0" + "@sentry/utils" "7.93.0" + https-proxy-agent "^5.0.0" + +"@sentry/types@7.93.0": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.93.0.tgz#d76d26259b40cd0688e1d634462fbff31476c1ec" + integrity sha512-UnzUccNakhFRA/esWBWP+0v7cjNg+RilFBQC03Mv9OEMaZaS29zSbcOGtRzuFOXXLBdbr44BWADqpz3VW0XaNw== + +"@sentry/utils@7.93.0": + version "7.93.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.93.0.tgz#36225038661fe977baf01e4695ef84794d591e45" + integrity sha512-Iovj7tUnbgSkh/WrAaMrd5UuYjW7AzyzZlFDIUrwidsyIdUficjCG2OIxYzh76H6nYIx9SxewW0R54Q6XoB4uA== + dependencies: + "@sentry/types" "7.93.0" + "@sentry/vite-plugin@^0.6.1": version "0.6.1" resolved "https://registry.yarnpkg.com/@sentry/vite-plugin/-/vite-plugin-0.6.1.tgz#31eb744e8d87b1528eed8d41433647727a62e7c0" From 2bbfe75e3ec7a1075b440d222a7a2d9600a1ff96 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 23 Jan 2024 10:28:03 -0500 Subject: [PATCH 237/240] remove workers, add changes entry --- .github/workflows/build.yml | 8 +++--- packages/profiling-node/CHANGES | 11 +++++--- packages/profiling-node/README.md | 8 +++--- packages/profiling-node/WORKERS.md | 42 ------------------------------ 4 files changed, 17 insertions(+), 52 deletions(-) delete mode 100644 packages/profiling-node/WORKERS.md diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 81d6ad5d7258..79fd14409d19 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1335,9 +1335,11 @@ jobs: git config --global --add safe.directory "*" - name: Install yarn - run: | - npm i -g yarn@1.22.19 --force - yarn config set network-timeout 600000 -g + run: npm i -g yarn@1.22.19 --force + + - name: Increase yarn network timeout on Windows + if: contains(matrix.os, 'windows') + run: yarn config set network-timeout 600000 -g - name: Setup python uses: actions/setup-python@v4 diff --git a/packages/profiling-node/CHANGES b/packages/profiling-node/CHANGES index 0ec4d67ec990..012426c29a2f 100644 --- a/packages/profiling-node/CHANGES +++ b/packages/profiling-node/CHANGES @@ -1,3 +1,8 @@ +## This is an old changelog. + +The profiling-node package has since been migrated to sentry-javascript monorepo. Any changes to this package made after +the migration are now tracked in the root CHANGELOG.md. + ## 1.3.3 ### Various fixes & improvements @@ -63,7 +68,7 @@ - deps(sentry): bump sentry deps (#203) by @sanjaytwisk - build(deps-dev): bump @babel/traverse from 7.22.20 to 7.23.2 (#202) by @dependabot -- feat(preprocessEvent): emit preprocessEvent for profiles (#198) by @JonasBa +- feat(preprocessEvent): emit preprocessEvent for profiles (#198) by @JonasBa - Update README.md to include Next.js 13+ bundling (#200) by @Negan1911 ## 1.2.1 @@ -109,7 +114,8 @@ - bindings: prebuild more binaries for node 20 (#177) by @JonasBa - build(deps): bump semver from 6.3.0 to 6.3.1 (#175) by @dependabot -- ref(profiling): change import so contextReplacementPlugin can ignore warning and attempt to provide darwin binaries (#176) by @JonasBa +- ref(profiling): change import so contextReplacementPlugin can ignore warning and attempt to provide darwin binaries + (#176) by @JonasBa ## 1.0.9 @@ -497,4 +503,3 @@ - fix(ci): run ci for release (#28) by @JonasBa - chore(craft): add bump version script (#26) by @JonasBa - chore(changelog): add changelog (#25) by @JonasBa - diff --git a/packages/profiling-node/README.md b/packages/profiling-node/README.md index e53c5d821925..82d7ea97b4c6 100644 --- a/packages/profiling-node/README.md +++ b/packages/profiling-node/README.md @@ -75,7 +75,7 @@ We currently ship prebuilt binaries for a few of the most common platforms and n - Linux x64 (glibc) - Windows x64 -For a more detailed list, see our build.yml workflow. +For a more detailed list, see job_compile_bindings_profiling_node job in our build.yml github action workflow. ### Bundling @@ -296,6 +296,6 @@ to exploring the possibilities. Please file an issue if you have suggestions or ### How much overhead will this profiler add? The profiler uses the kEagerLogging option by default which trades off fast calls to startProfiling for a small amount -of constant CPU overhead. If you are using kEagerLogging then the tradeoff is reversed and there will be no CPU overhead -while the profiler is not running, but calls to startProfiling could be slow (in our tests, this varies by environments -and node versions, but could be in the order of a couple 100ms). +of constant CPU overhead. If you are using kEagerLogging then the tradeoff is reversed and there will be a small CPU +overhead while the profiler is not running, but calls to startProfiling could be slow (in our tests, this varies by +environments and node versions, but could be in the order of a couple 100ms). diff --git a/packages/profiling-node/WORKERS.md b/packages/profiling-node/WORKERS.md deleted file mode 100644 index 5e03883d5439..000000000000 --- a/packages/profiling-node/WORKERS.md +++ /dev/null @@ -1,42 +0,0 @@ -# Profiling support for worker threads - -Profiling is supported in worker threads for node versions, however each thread is treated as a separate entity and cross thread profiler are currently not linked together in any way. If this is something that you would like us to support, please file a feature request describing your use-case. - -## Worker SDK setup - -Profiling worker threads requires the Sentry SDK to be initialized per thread. If you are cloning the Sentry hub and passing it to workers, you will have to change your approach and reinitialize the SDK in each thread. - -```ts -// cpuintense.worker.js -const Sentry = require("@sentry/node"); -const { parentPort } = require("node:worker_threads"); -const { ProfilingIntegration } = require("@sentry/profiler-node"); // this has a addExtensionMethods side effect - -Sentry.init({ - dsn: "https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302", - debug: true, - tracesSampleRate: 1, - profilesSampleRate: 1, - integrations: [new ProfilingIntegration()], -}); - -/** - * Synchronous worker example - */ -const transaction = Sentry.startTransaction({ name: "worker_profiling" }); -// The code between these two calls will be profiled. -transaction.finish(); - -/* - * Asynchronous worker example - */ -parentPort.on("message", () => { - const transaction = Sentry.startTransaction({ name: "worker_profiling" }); - // The code between these two calls will be profiled each time a message is received - transaction.finish(); -}); -``` - -## Questions, issues or feature requests? - -Please file an issue. From 69bc2e9976c199953e4be67f01aaeb9fc26ad9e3 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 23 Jan 2024 10:46:50 -0500 Subject: [PATCH 238/240] run compile only on release or if pkg changed --- .github/workflows/build.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 79fd14409d19..74ccf23dc669 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -542,7 +542,7 @@ jobs: job_profiling_node_unit_tests: name: Node Profiling Unit Tests needs: [job_get_metadata, job_build] - if: needs.job_get_metadata.outputs.changed_profiling_node == 'true' || github.event_name != 'pull_request' + if: needs.job_get_metadata.outputs.changed_node || needs.job_get_metadata.outputs.changed_profiling_node == 'true' || github.event_name != 'pull_request' runs-on: ubuntu-latest timeout-minutes: 10 steps: @@ -1212,6 +1212,12 @@ jobs: job_compile_bindings_profiling_node: name: Compile & Test Profiling Bindings (v${{ matrix.node }}) ${{ matrix.target_platform || matrix.os }}, ${{ matrix.node || matrix.container }}, ${{ matrix.arch || matrix.container }}, ${{ contains(matrix.container, 'alpine') && 'musl' || 'glibc' }} needs: [job_get_metadata, job_install_deps, job_build] + # Compiling bindings can be very slow (especially on windows), so only run precompile + # if profiling or profiling node package had changed or if we are on a release branch. + if: | + (needs.job_get_metadata.outputs.changed_profiling_node == 'true') || + (needs.job_get_metadata.outputs.is_release) || + (github.event_name != 'pull_request') runs-on: ${{ matrix.os }} container: ${{ matrix.container }} timeout-minutes: 30 From 0ba4761feb5030edfdafc47f5dc281a841e1ac0e Mon Sep 17 00:00:00 2001 From: JonasBa Date: Tue, 23 Jan 2024 11:12:37 -0500 Subject: [PATCH 239/240] remove contributing --- packages/profiling-node/CONTRIBUTING.md | 70 ------------------------- 1 file changed, 70 deletions(-) delete mode 100644 packages/profiling-node/CONTRIBUTING.md diff --git a/packages/profiling-node/CONTRIBUTING.md b/packages/profiling-node/CONTRIBUTING.md deleted file mode 100644 index 67c0afb63bbf..000000000000 --- a/packages/profiling-node/CONTRIBUTING.md +++ /dev/null @@ -1,70 +0,0 @@ -

- - Sentry - -

- -# Contributing - -We welcome suggested improvements and bug fixes to the `@sentry/*` family of packages, in the form of pull requests on -[`GitHub`](https://github.com/getsentry/sentry-javascript). The guide below will help you get started, but if you have -further questions, please feel free to reach out on [Discord](https://discord.gg/Ww9hbqr). - -## Setting up an Environment - -To run the test suite and our code linter, node.js and npm are required. - -[`npm and node` download](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) - -Because the repository requires you to compile the c++ bindings via node-gyp, we may require you to install dependencies -like Python and GCC. See [node-gyp](https://github.com/nodejs/node-gyp#on-unix) for a full list of those requirements -depending on the OS that you are running. - -## Building the package - -Since we are using [`TypeScript`](https://www.typescriptlang.org/) and native node addons, you need to transpile the -code to JavaScript and compile the c++ bindings in order to be able to run the addon. - -- `yarn build` will compile the c++ bindings and ts files. -- `yarn build:lib` will compile ts files -- `yarn build:bindings` will compile c++ bindings - -## Tests - -Tests are colocated with source files and should have a .test.ts suffix. The entire test suite can be ran using the -`yarn test` command. - -## Linting - -Similar to building and testing, linting can be done via `yarn lint` command. - -## Considerations Before Sending Your First PR - -When contributing to the codebase, please note: - -- Non-trivial PRs will not be accepted without tests (see above). -- We encourage you to open issues and discuss the change you want to make before opening PR's. This is especially true - if you are considering adding new functionality. Remember that your requirements may differ from the direction that we - want this SDK to take. -- Please do not bump version numbers yourself. - -## Benchmarks - -The repository contains micro benchmarks. You can find all benchmarks at the benchmarks folder in project root -directory. The benchmarks can either be ran directly through node via `node benchmarks/cpu/benchmark.profiler.js` or via -`yarn benchmark` command. There are also individual yarn benchmark commands like `yarn benchmark:server` or -`yarn benchmark:methods` which will only run individual benchmarks. - -Remember that these are micro benchmarks and that results will vary across different OS and architectures. - -## Publishing a Release - -_These steps are only relevant to Sentry employees when preparing and publishing a new SDK release._ - -1. Determine what version will be released (we use [semver](https://semver.org)). -2. Update [`CHANGELOG.md`](https://github.com/getsentry/sentry-javascript/edit/master/CHANGELOG.md) to add an entry for - the next release number and a list of changes since the last release. (See details below.) -3. Run the [Prepare Release](https://github.com/getsentry/sentry-javascript/actions/workflows/release.yml) workflow. -4. A new issue should appear in https://github.com/getsentry/publish/issues. -5. Ask a member of the [@getsentry/releases team](https://github.com/orgs/getsentry/teams/releases/members) to approve - the release. From 0df31259f5d14dd6e34dfdae33ed6842b08471d7 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Thu, 1 Feb 2024 14:57:24 -0500 Subject: [PATCH 240/240] add lint:clang --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index a168d9aa65d1..9ecacd34c252 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "changelog": "ts-node ./scripts/get-commit-list.ts", "link:yarn": "lerna exec yarn link", "lint": "run-s lint:lerna lint:biome lint:prettier", + "lint:clang": "lerna run lint:clang", "lint:lerna": "lerna run lint", "lint:biome": "biome check .", "lint:prettier": "prettier **/*.md *.md **/*.css --check",